JetBrains logo

.NET Days
Online 2025

Join us for a free two-day online event. Live sessions, Q&A, and recordings for all registrants.

October 8–9, 2025

  • 09:30–17:00 UTC

Get ready to learn and connect with speakers

Watch .NET Days from anywhere

Join .NET developers and community speakers for two days of demo-rich sessions and discussions. We’ll livestream on YouTube and Twitch, and you can catch anything you miss later.

Discover topics you care about

This year's agenda covers .NET Aspire, Blazor, and ASP.NET MVC, language features in C# and F#, cross-platform development, testing, telemetry and bringing AI into your apps and workflow. We'll also share how JetBrains is supporting .NET developers.

Ask questions during the live streams

Learn practical tips you can apply right away. Connect with speakers and deepen your .NET expertise. Our JetBrains hosts will run live Q&A and make sure your questions are addressed.

Speakers

Laila Bougria

Laila Bougria

Software Engineer at Particular Software, speaker, and knitting addict
Aaron Stannard

Aaron Stannard

Petabridge CEO, Akka.NET Founder, and .NET Contrarian, Petabridge
Stefano Tempesta

Ken Bonny

A software craftsman specialising in Microsoft technology.
Andrew Karpov

Steve Bilogan

Senior Engineer, Uno Platform
Cecil Philip

Mehdi Hadeli

Microsoft MVP | Software Architect | Open Source Developer
Roman Provazník

Poornima Nayar

.NET Developer, Microsoft MVP, Particular Software
Andrii Rublov

Jason Taylor

Solutions Architect | Software Engineer | Microsoft MVP
Konstantin Saltuk

Maarten Balliauw

.NET and web, Duende Software
Irina Scurtu

Scott Sauber

Director of Engineering, Lean TECHniques Inc
Daniel Ward

Johan Smarius

Microsoft MVP on .NET and DevOps, MCT, Coach/Trainer @ JMAC Software Solutions & Lead Microsoft Development Consultant @ Bergler, Bergler
Chris Woodruff

Steve Smith

Founder, NimblePros
Alexander Zeitler

Stathis Fylaktos

Co-Founder, CTO, Devworx

Stefan Pölz

Clean C# Coder – Test-driven .NET Developer

Supported by the .NET Foundation

Gravity

.NET Days Online is supported by the .NET Foundation, the independent nonprofit that sustains open-source .NET and community events. JetBrains is a proud sponsor of the .NET Foundation, helping strengthen the .NET ecosystem year-round.

Agenda

October 8, Wednesday

  • 11:30–12:15 CET/CEST
  • 05:30–06:15 EST/EDT
  • 02:30–03:15 PST/PDT

Keynote

Introductory and overview
Introductory and overview
Welcome & Opening Remarks

Welcome & Opening Remarks

Welcome & Opening Remarks

ReSharperReSharperF#Code analysisRefactoring
  • 12:15–13:15 CET/CEST
  • 06:15–07:15 EST/EDT
  • 03:15–04:15 PST/PDT

Effortless Distributed Systems with .NET Aspire

Intermediate
Jason Taylor

Distributed systems can be overwhelming - but with .NET Aspire, building them feels refreshingly simple. In this session, we’ll explore a multi-service, message-driven application and see how Aspire streamlines orchestration, configuration, and diagnostics across your system.

Along the way, I’ll show how easily you can plug in messaging, persistence, and observability without the usual wiring and complexity. Once it's running locally, we’ll set up CI/CD and deploy the whole thing to the cloud - with minimal effort.

Whether you're modernizing an existing solution or starting from scratch, you’ll walk away with practical ideas and a new appreciation for Aspire’s end-to-end developer experience.

Distributed systems can be overwhelming - but with .NET Aspire, building them feels refreshingly simple. In this session, we’ll explore a multi-service, message-driven application and see how Aspire streamlines orchestration, configuration, and diagnostics across your system.

Along the way, I’ll show how easily you can plug in messaging, persistence, and observability without the usual wiring and complexity. Once it's running locally, we’ll set up CI/CD and deploy the whole thing to the cloud - with minimal effort.

Whether you're modernizing an existing solution or starting from scratch, you’ll walk away with practical ideas and a new appreciation for Aspire’s end-to-end developer experience.

.NET AspireWeb development
  • 13:30–14:15 CET/CEST
  • 07:30–08:15 EST/EDT
  • 04:30–05:15 PST/PDT

Clean Architecture with ASP.NET Core

Intermediate
Steve Smith

ASP.NET was a bit behind the curve when it came to the MVC pattern. It was not until 2009 that Microsoft released the first version of ASP.NET MVC. This was a time when the MVC pattern was already well-established in the web development community.

ASP.NET was a bit behind the curve when it came to the MVC pattern. It was not until 2009 that Microsoft released the first version of ASP.NET MVC. This was a time when the MVC pattern was already well-established in the web development community.

ASP.NET MVCWeb developmentASP.NET MVCWeb developmentRider
  • 14:30–15:15 CET/CEST
  • 08:30–09:15 EST/EDT
  • 05:30–06:15 PST/PDT

#nullable enable - unlock the power of C# nullability

Introductory and overview
Gael Fraiteur

Get ready to bid farewell to the dreaded System.NullReferenceException and step into the wonderful world of C# nullability!

Get ready to bid farewell to the dreaded System.NullReferenceException and step into the wonderful world of C# nullability!

C#RiderReSharper
  • 15:30–16:30 CET/CEST
  • 09:30–10:30 EST/EDT
  • 06:30–07:30 PST/PDT

Choosing the Right Messaging Solution for Your Architecture

Intermediate
Poornima Nayar

Asynchronous messaging is becoming increasingly popular in the architecture of distributed systems. And why not, when you have the benefits of increased scalability, fault-tolerance, performance, and decoupling? From ordering your latest gadget to dealing with mission-critical, high-performance systems—messaging is gaining traction.

A message queue is the most critical infrastructure in distributed systems that use messaging. There are plenty of choices, ranging from databases to cloud solutions. But how do you decide what is the best fit for your organization and your system?

Join me as I discuss some of the most popular queuing systems—AWS SQS, RabbitMQ, and Azure Service Bus —along with their benefits, trade-offs, and gotchas, accompanied by code samples. By the end of this session, attendees will have a clear understanding of each system's strengths and weaknesses and will be equipped with the knowledge to make informed decisions on the best messaging solution for their specific application architecture.

Asynchronous messaging is becoming increasingly popular in the architecture of distributed systems. And why not, when you have the benefits of increased scalability, fault-tolerance, performance, and decoupling? From ordering your latest gadget to dealing with mission-critical, high-performance systems—messaging is gaining traction.

A message queue is the most critical infrastructure in distributed systems that use messaging. There are plenty of choices, ranging from databases to cloud solutions. But how do you decide what is the best fit for your organization and your system?

Join me as I discuss some of the most popular queuing systems—AWS SQS, RabbitMQ, and Azure Service Bus —along with their benefits, trade-offs, and gotchas, accompanied by code samples. By the end of this session, attendees will have a clear understanding of each system's strengths and weaknesses and will be equipped with the knowledge to make informed decisions on the best messaging solution for their specific application architecture.

AWSRabbitMQASP.NET CoreASP.NET CoreWeb developmentRider
  • 16:45–17:30 CET/CEST
  • 10:45–11:30 EST/EDT
  • 07:45–08:30 PST/PDT

.NET Apps Everywhere

Introductory and overview
Steve Bilogan

Developing cross-platform applications is complex. Some frameworks allow us to share the business logic and some go further and allow us to share the UI layer. But even then – working with device hardware requires developers familiar with each target platform to maintain it and can still lead to error-prone platform-specific code.

Uno Platform allows you to develop .NET apps from any dev environment, deploy to any platform, and use your choice of XAML or C# for the UI. You can create applications for Windows, macOS, iOS, Android, Linux, and WebAssembly using a single codebase. The framework is built on top of .NET and provides a set of tools and libraries that make it easy to build high-performance applications.

In this session, we will provide a brief overview of what Uno Platform is and how it works before we take a deep dive under the hood and see where the magic happens.

Developing cross-platform applications is complex. Some frameworks allow us to share the business logic and some go further and allow us to share the UI layer. But even then – working with device hardware requires developers familiar with each target platform to maintain it and can still lead to error-prone platform-specific code.

Uno Platform allows you to develop .NET apps from any dev environment, deploy to any platform, and use your choice of XAML or C# for the UI. You can create applications for Windows, macOS, iOS, Android, Linux, and WebAssembly using a single codebase. The framework is built on top of .NET and provides a set of tools and libraries that make it easy to build high-performance applications.

In this session, we will provide a brief overview of what Uno Platform is and how it works before we take a deep dive under the hood and see where the magic happens.

Uno PlatformXAMLC#WebAssemblyMobileDesktopWeb developmentRider
  • 17:45–18:45 CET/CEST
  • 11:45–12:45 EST/EDT
  • 08:45–09:45 PST/PDT

Test Driven Development with Blazor

Introductory and overview
Scott Sauber

Most people say you can’t do Test Driven Development (TDD) on the frontend. They’re wrong. In this session, we will first level set on what TDD is and how to do it. Then we’ll immediately start applying TDD to Blazor using bUnit and the latest additions to bUnit I helped contribute to make TDD a breeze. We will even talk about if you can (and should) write tests for your CSS. All along the way, we will do live coding demos so that you can see TDD in action. While the demos will be using Blazor, the concepts apply to any frontend framework even in other languages.

Most people say you can’t do Test Driven Development (TDD) on the frontend. They’re wrong. In this session, we will first level set on what TDD is and how to do it. Then we’ll immediately start applying TDD to Blazor using bUnit and the latest additions to bUnit I helped contribute to make TDD a breeze. We will even talk about if you can (and should) write tests for your CSS. All along the way, we will do live coding demos so that you can see TDD in action. While the demos will be using Blazor, the concepts apply to any frontend framework even in other languages.

TDDC#BlazorRider

October 9, Thursday

  • 11:30–12:30 CET/CEST
  • 05:30–06:30 EST/EDT
  • 02:30–03:30 PST/PDT

Change is inevitable: versioning event-driven systems

Advanced
Laila Bougria

Building an event-driven system is anything but trivial. However, once you make it past the sea of pub-sub vs. command-response debates and the service boundaries conundrum, you'll soon face the inevitable: change. The conversations that follow sound all too familiar... "Who's subscribed to this message?" "Do other services depend on this field in the payload?" "Why on earth is that thing in the payload?" "That service should never rely on this data!" And, of course, the obvious "Can't we -just- remove this?"

But are those the right questions to ask? As software developers, we aim to be agents of change, not chaos. To achieve this, we need to understand the impact of tweaking a message contract without breaking half of the system or forcing other teams beyond their deadlines. We should prioritize techniques that ensure compatibility while also considering how long that compatibility needs to be sustained. Oh, and let’s not forget that we’re supposed to solve this problem with zero downtime, as our users are spread across every time zone. In this session, we’ll discuss practical techniques and tooling that can enable the evolution of your event-driven system so that, next time a stakeholder approaches with a change request, your heart doesn't sink to the floor.

Building an event-driven system is anything but trivial. However, once you make it past the sea of pub-sub vs. command-response debates and the service boundaries conundrum, you'll soon face the inevitable: change. The conversations that follow sound all too familiar... "Who's subscribed to this message?" "Do other services depend on this field in the payload?" "Why on earth is that thing in the payload?" "That service should never rely on this data!" And, of course, the obvious "Can't we -just- remove this?"

But are those the right questions to ask? As software developers, we aim to be agents of change, not chaos. To achieve this, we need to understand the impact of tweaking a message contract without breaking half of the system or forcing other teams beyond their deadlines. We should prioritize techniques that ensure compatibility while also considering how long that compatibility needs to be sustained. Oh, and let’s not forget that we’re supposed to solve this problem with zero downtime, as our users are spread across every time zone. In this session, we’ll discuss practical techniques and tooling that can enable the evolution of your event-driven system so that, next time a stakeholder approaches with a change request, your heart doesn't sink to the floor.

Event DrivenDSLC#MessagingRider
  • 12:45–13:45 CET/CEST
  • 06:45–07:45 EST/EDT
  • 03:45–04:45 PST/PDT

Building Scalable GenAI Apps Using Semantic Kernel and .NET Aspire

Intermediate
Mehdi Hadeli

Generative AI is transforming the way we build modern applications—and with tools like Semantic Kernel and .NET Aspire, creating intelligent, cloud-native apps is now easier and more accessible than ever before.

In this session, we’ll walk through how to architect and build real-world GenAI applications using the power of the .NET ecosystem. You’ll see how .NET Aspire streamlines cloud-native development with features like automatic service discovery, built-in observability, and simplified deployment—while Semantic Kernel enables rich AI capabilities by integrating large language models (LLMs) into your application logic.

In this session, We’ll explore a hands-on, real-world GenAI app that brings together key AI capabilities like:

- Semantic Search

- Retrieval-Augmented Generation (RAG)

- Model Context Protocol (MCP)

- Vector embeddings with vector database integration

- Reasoning and planning

- Support for multiple LLM and providers

We’ll show how these capabilities come together in a scalable, modular architecture—powered by Aspire’s service orchestration and observability layer. You’ll learn how to manage and monitor your GenAI services in both development and production environments using Aspire’s built-in dashboard and integration with OpenTelemetry.

Whether you're new to Semantic Kernel or already experimenting with GenAI in .NET, this session will give you practical guidance, live code, and production-ready techniques for building intelligent applications that scale confidently across environments.

Generative AI is transforming the way we build modern applications—and with tools like Semantic Kernel and .NET Aspire, creating intelligent, cloud-native apps is now easier and more accessible than ever before.

In this session, we’ll walk through how to architect and build real-world GenAI applications using the power of the .NET ecosystem. You’ll see how .NET Aspire streamlines cloud-native development with features like automatic service discovery, built-in observability, and simplified deployment—while Semantic Kernel enables rich AI capabilities by integrating large language models (LLMs) into your application logic.

In this session, We’ll explore a hands-on, real-world GenAI app that brings together key AI capabilities like:

- Semantic Search

- Retrieval-Augmented Generation (RAG)

- Model Context Protocol (MCP)

- Vector embeddings with vector database integration

- Reasoning and planning

- Support for multiple LLM and providers

We’ll show how these capabilities come together in a scalable, modular architecture—powered by Aspire’s service orchestration and observability layer. You’ll learn how to manage and monitor your GenAI services in both development and production environments using Aspire’s built-in dashboard and integration with OpenTelemetry.

Whether you're new to Semantic Kernel or already experimenting with GenAI in .NET, this session will give you practical guidance, live code, and production-ready techniques for building intelligent applications that scale confidently across environments.

F#ReSharperRider.NET AspireGenAILLMMCPVector EmbeddingsSemantic Kernel
  • 14:00–15:00 CET/CEST
  • 08:00–09:00 EST/EDT
  • 05:00–06:00 PST/PDT

Functional programming in F#: Fad or Fabulous?

Intermediate
Ken Bonny

Have you been curious about functional programming, especially with the rise of these concepts in your favourite programming languages? Are you a bit scared of all those strange concepts that you'll have to learn? Good news, I too was overwhelmed by functional programming, but I've found that it's not as scary as it seems. Come find out if F# is worth your time and if functional programming is as fabulous as it seems.

Have you been curious about functional programming, especially with the rise of these concepts in your favourite programming languages? Are you a bit scared of all those strange concepts that you'll have to learn? Good news, I too was overwhelmed by functional programming, but I've found that it's not as scary as it seems. Come find out if F# is worth your time and if functional programming is as fabulous as it seems.

F#RiderFunctional
  • 15:15–15:45 CET/CEST
  • 09:15–09:45 EST/EDT
  • 06:15–06:45 PST/PDT

How We Found a 2 GB/Day Leak in 5 Minutes — dotMemory Meets Akka.NET

Intermediate
Aaron Stannard

Debugging memory leaks is more of an art than a science, but nevertheless it's an important facet of debugging complex applications.

We're the maintainers of Akka.NET - we maintain 100+ libraries that do various things are used by tens of thousands of active users running large-scale applications. Earlier this year, one of our users discovered a horrifying memory leak in one of our persistence plugins and was able to diagnose it using dotMemory.

We leveraged his hard work and, also using dotMemory and Rider, were able to track down the source and fix the bug. In this video we will re-use that bug and demonstrate how we regularly use dotMemory and Rider to solve performance and stability issues like memory leaks on the regular in Akka.NET.

Debugging memory leaks is more of an art than a science, but nevertheless it's an important facet of debugging complex applications.

We're the maintainers of Akka.NET - we maintain 100+ libraries that do various things are used by tens of thousands of active users running large-scale applications. Earlier this year, one of our users discovered a horrifying memory leak in one of our persistence plugins and was able to diagnose it using dotMemory.

We leveraged his hard work and, also using dotMemory and Rider, were able to track down the source and fix the bug. In this video we will re-use that bug and demonstrate how we regularly use dotMemory and Rider to solve performance and stability issues like memory leaks on the regular in Akka.NET.

ReSharperdotMemory
  • 16:00–17:00 CET/CEST
  • 10:00–11:00 EST/EDT
  • 07:00–08:00 PST/PDT

Everything you (don't) want to know about async and await in C#

Advanced
Stefan Pölz

C#'s Task-based async/await is a quite pervasive asynchronous programming model. Its beauty is encapsulated in syntactic succinctness to utilize hardware resources efficiently while maintaining sequential readability of the code.

The comprising language keywords, compiler features and framework types unlock immense semantic power:

- asynchronous operations and continuations

- error handling

- cooperative cancellation

- progress reporting

- asynchronous disposal

- asynchronous streams

and much more.

The apparent simplicity - in some cases - may conceal the root cause of performance bottlenecks or unexpected behavior. But by gaining a foundational understanding of the Async State Machine, which is the core driver of the control flow in asynchronous logic, developers can unveil potential issues with ease. An in-depth expertise of these implementation details enables authors to design reusable libraries and publish responsive applications.

In this code-heavy session, we will demystify the most prevalent aspects of C#'s async and await, as well as related .NET types.

C#'s Task-based async/await is a quite pervasive asynchronous programming model. Its beauty is encapsulated in syntactic succinctness to utilize hardware resources efficiently while maintaining sequential readability of the code.

The comprising language keywords, compiler features and framework types unlock immense semantic power:

- asynchronous operations and continuations

- error handling

- cooperative cancellation

- progress reporting

- asynchronous disposal

- asynchronous streams

and much more.

The apparent simplicity - in some cases - may conceal the root cause of performance bottlenecks or unexpected behavior. But by gaining a foundational understanding of the Async State Machine, which is the core driver of the control flow in asynchronous logic, developers can unveil potential issues with ease. An in-depth expertise of these implementation details enables authors to design reusable libraries and publish responsive applications.

In this code-heavy session, we will demystify the most prevalent aspects of C#'s async and await, as well as related .NET types.

C#AsyncRider
  • 17:15–17:45 CET/CEST
  • 11:15–11:45 EST/EDT
  • 08:15–08:45 PST/PDT

Conquering distributed cloud logging without breaking the bank: Your step-by-step guide

Intermediate
Stathis Fylaktos

Observability is crucial for every app even before it is deployed, and logging is the cornerstone of it. Despite its significance and the fact that so many apps run in the cloud, building an easy-to-read, distributed logging solution can pose some challenges, especially if you don’t want to pay a fortune to achieve it.

The scope of this talk is to present a step-by-step guide to how we can build an easily transferable, scalable logging system in AWS using open-source tools, without the cost of ready-made solutions that are offered in the cloud. This includes:

1. Deploying an OpenTelemetry collector instance, a Loki instance, and an instance of Grafana to AWS using ECS and Fargate,

2. Setting up EFS to be used with Loki to persist our logs,

3. Configuring a .Net API to use our newly-deployed logging system and then view these logs in Grafana,

4. Examining the cost and usability of our solution compared to AWS Cloudwatch with/without Opensearch

5. Short mention of the steps required to include tracing and metrics for a full observability suite

Observability is crucial for every app even before it is deployed, and logging is the cornerstone of it. Despite its significance and the fact that so many apps run in the cloud, building an easy-to-read, distributed logging solution can pose some challenges, especially if you don’t want to pay a fortune to achieve it.

The scope of this talk is to present a step-by-step guide to how we can build an easily transferable, scalable logging system in AWS using open-source tools, without the cost of ready-made solutions that are offered in the cloud. This includes:

1. Deploying an OpenTelemetry collector instance, a Loki instance, and an instance of Grafana to AWS using ECS and Fargate,

2. Setting up EFS to be used with Loki to persist our logs,

3. Configuring a .Net API to use our newly-deployed logging system and then view these logs in Grafana,

4. Examining the cost and usability of our solution compared to AWS Cloudwatch with/without Opensearch

5. Short mention of the steps required to include tracing and metrics for a full observability suite

TelemetryoTelAWSFargateOpensearchCloudwatchObservabilityDistributed AppsRider
  • 18:00–19:00 CET/CEST
  • 12:00–13:00 EST/EDT
  • 09:00–10:00 PST/PDT

Does GenAI mean the death of Test-driven Development (TDD)

Intermediate
Johan Smarius

Many developers use Gen AI a lot for creating code. Generating unit tests is quite popular. But there is also a thing called test-driven development. And the major benefit of adopting this approach is not 100% code coverage, but rather a clean design. But can these approaches be applied together? During this session, we will dive into applying the combination for writing a piece of software. So at the end of this talk, you can make an informed decision whether TDD is useless if you use GenAI. Do not expect a lot of slides. We will spend most of our time in Rider and AI Assistant.

Many developers use Gen AI a lot for creating code. Generating unit tests is quite popular. But there is also a thing called test-driven development. And the major benefit of adopting this approach is not 100% code coverage, but rather a clean design. But can these approaches be applied together? During this session, we will dive into applying the combination for writing a piece of software. So at the end of this talk, you can make an informed decision whether TDD is useless if you use GenAI. Do not expect a lot of slides. We will spend most of our time in Rider and AI Assistant.

GenAIUnit testingC#TDDRiderAI Assistant

Build faster with dotUltimate

The complete developer toolkit to cover all your needs for .NET and game development, supercharged with JetBrains AI Assistant.

FAQ

Is JetBrains .NET Day Online 2025 free?

Yes, JetBrains .NET Day Online 2025 is completely free to attend.

Do I have to attend all the sessions?

You can join the livestreams at any time. You are welcome to pick specific presentations or join us for all of them.

Can I ask questions during the event?

Yes! We encourage you to ask questions in the YouTube or Twitch chats during the presentations. We will try to answer your questions as we go along. Also, feel free to reach out to the speakers on their social media or through their blogs!

Will the sessions be recorded?

All of the sessions will be recorded and uploaded to YouTube so you can catch any you miss. While you’re waiting for the first session to begin, we invite you to check out the recordings from our previous events:

What do I need in order to join the sessions?

Register to receive reminders and updates about the sessions. We’ll send you links to the livestreams each day. You are welcome to tune in live or watch the talks later at your convenience.

Register for .NET Days Online 2025

By submitting this form, I agree to the Code of Conduct.

#JBDotNetDays on X