Skip to content

Full-Stack .NET: What the Stack Actually Looks Like

Most guides to full-stack .NET could be about any technology with the nouns swapped out. This one is specific, starting with the naming confusion that trips up almost everyone who arrives.

Share
Abstract visualisation of a single unified structure spanning several connected domains

Most guides to full-stack .NET development could be about any technology at all. Master the basics, choose a path, build a portfolio, network. Swap ".NET" for "Python" and nothing changes, which tells you the advice contains nothing about .NET.

So this is specific. What the platform actually consists of, which decisions are yours to make, what the stack does that others can't, and where it costs you.

Starting with the naming, because it's the first obstacle and almost everyone hits it.

The names, sorted out

Three terms get used interchangeably and mean different things:

.NET Framework is the original, Windows-only platform. Version 4.8.1 is still supported and still runs an enormous amount of production software, but it receives no new features. If you're starting something today, this is not it.

.NET Core was the cross-platform rewrite. Microsoft retired the name after version 3.1.

.NET, unqualified and followed by a number, is the unified platform that replaced both starting with .NET 5. This is what people mean by "modern .NET," and it's what you should learn.

The same confusion runs through the web framework. "ASP.NET" refers to the legacy Windows-only stack; "ASP.NET Core" is the modern cross-platform one. The word "Core" was dropped from the runtime and kept in the web framework, which is unfortunate and permanent.

Version cadence is at least predictable: a release every November, with even-numbered versions carrying three years of long-term support and odd-numbered ones two. .NET 10 arrived in November 2025 as the current LTS, supported through November 2028, with .NET 11 due in November 2026. Worth knowing that .NET 8 and .NET 9 both lose support in November 2026, so anything sitting on either needs a plan.

The back end

C# is the language, and it's genuinely good: statically typed, expressive, and unusually well served by tooling. It's also moving quickly, with a major language version alongside each runtime release. C# 14 landed with .NET 10.

ASP.NET Core is the web framework, and it's fast. You can define endpoints in two ways, and the choice matters more than the documentation suggests. Minimal APIs give you concise endpoint definitions with less ceremony, and they suit services and small APIs. Controllers give you more structure, and they suit larger applications where convention helps a team stay consistent. Neither is deprecated, and mixing them in one project is normal.

Entity Framework Core is the ORM, and it's one of the better ones: LINQ queries compile to SQL, migrations are first-class, and the tooling is honest about what it generates. The usual ORM caution applies, which I went into in the piece on server-side tools: use it, and know enough SQL to read what it produces. EF Core 10 added vector search with a native vector type, which matters if you're building anything retrieval-based.

Aspire is the newer piece, and the one most people haven't looked at. It orchestrates the local development experience, meaning your API, database, cache, and message broker all start together with service discovery wired up, and the same definitions inform deployment. It solves the problem Docker Compose solves, with more knowledge of what you're actually running.

The front end, which is the real decision

This is where full-stack .NET diverges from every other stack, and where you have a genuine choice.

Option one: a JavaScript front end. React, Angular, or Vue talking to an ASP.NET Core API over HTTP. This is the conventional arrangement; it's what most jobs use, and it means you're a full-stack developer in the ordinary sense: C# on the server, TypeScript in the browser, two languages, two ecosystems.

Option two: Blazor. C# in the browser, no JavaScript required. This is the distinctive option, and it's matured considerably. Blazor 10 cut the JavaScript bundle by 76%, and the render-mode model now lets you mix approaches within one application.

The render modes are the part worth understanding, because "should I use Blazor" is really "which render mode fits this screen":

Server runs your components on the server, and streams DOM updates over a SignalR connection. Fast initial load, tiny payload, and every interaction takes a round trip. Good for internal tools and anything on a reliable network; poor for high-latency connections or offline.

WebAssembly downloads a .NET runtime and runs everything client-side. Larger initial download, then no round trips. Good for genuinely interactive applications and anything needing offline capability.

Auto starts on the server for a fast first paint, then transitions to WebAssembly once the runtime has downloaded. Sensible default for public applications.

Hybrid embeds Blazor components in a MAUI application, sharing UI between web and native.

Blazor's honest limitation: the ecosystem is smaller. There's a Blazor component library for most things, but "most" is doing work in that sentence, and you'll occasionally reach for JavaScript interop. Choose it when your team is C#-heavy and the application is line-of-business, and choose a JavaScript framework when you need the ecosystem, or you're hiring front-end specialists.

Beyond the browser

MAUI builds native iOS, Android, macOS, and Windows applications from one C# codebase. .NET 10 focuses on quality and performance rather than new capability, which is the right priority given the framework's reputation. Be aware that Uno Platform and Avalonia exist as alternatives, and that people do move to them when MAUI's rough edges bite.

Blazor Hybrid shares components between a MAUI shell and a web application, which is the closest thing to write-once-run-anywhere that actually works.

The reason this section exists: one language covers your API, your web front end, your mobile app, and your desktop app. No other mainstream stack offers that, and it's the strongest argument for the platform.

Where the .NET jobs actually are

Worth being concrete, because it shapes whether this is the right investment.

.NET is dominant in enterprise: finance, insurance, healthcare, government, logistics, manufacturing, and the internal systems of large companies generally. Those employers are stable, pay reasonably, and hire consistently. They're also exactly the unfashionable employers I recommended targeting in the piece on junior full-stack roles, because competition per opening is a fraction of what it is at recognisable technology companies.

.NET is rarer in startups, which lean toward Node, Python, and Go, and rarer still in the JavaScript-first agency world.

So the honest summary: choosing .NET points you at established organisations doing serious work on systems that matter, and away from the startup track. Whether that's a feature depends entirely on what you want.

C# was named TIOBE's language of the year for 2025, which tells you the platform isn't fading, whatever the discourse suggests.

The costs

Ecosystem gravity toward Microsoft. Everything works better on Azure, with SQL Server, in Visual Studio. None of it is required, and .NET runs perfectly well on Linux against PostgreSQL, but the well-trodden path leads one direction, and you'll feel it when you leave.

Perception. .NET carries a reputation for being corporate and dull, formed when .NET Framework was Windows-only and slow. That reputation is roughly a decade out of date, and it persists anyway, which occasionally costs you in rooms where it shouldn't.

Documentation confusion. A search for almost any .NET question returns results spanning Framework, Core, and modern .NET, frequently without saying which. Make it a habit to check the date and version on anything you read.

Blazor's smaller ecosystem, covered above, is a real constraint and not a fatal one.

What to learn, in order

C# properly first: the type system, LINQ, async and await, and generics. Language depth transfers to everything else on this list and outlasts every framework on it.

Then ASP.NET Core, building an API with both minimal APIs and controllers so you understand the trade-off from experience.

Then EF Core and SQL together. Learn them alongside each other, reading the generated SQL as you go, because that's how you avoid shipping the N+1 problems an ORM makes easy.

Then one front-end approach, chosen deliberately. Blazor if you want the distinctive .NET path, React if you want the larger job market and the portable skill.

Then the operational layer: containers, CI, structured logging, and health checks. This is what separates someone who can write a .NET application from someone who can run one.

Notice that the front end comes fourth. That's deliberate, and it's the same ordering I argued for in the server-side tools piece: the framework matters less than what sits underneath it.

The short version

Modern .NET is not the .NET Framework, and confusing the two is the most common mistake newcomers make. Learn .NET 10, which is the current LTS.

The stack is C#, ASP.NET Core, and EF Core on the server, with a real choice on the client between a JavaScript framework and Blazor. Blazor is the differentiator: C# end-to-end, with render modes that let you tune the trade-off per screen.

The jobs are in enterprise rather than startups, which is a genuine advantage for anyone entering the market now, because that's where the competition is thinnest.

And what makes it worth choosing: one language, one toolchain, from a database query to a mobile app. The value of full-stack work sits at the boundaries between components, which I set out in what the label actually means, and .NET removes more of those boundaries than any other stack.