"As a backend dev I'm leaning more towards Blazor since I also use it for my day job."
This comment captures a common dilemma. Backend developers need to build UIs, and the options feel limiting: learn React (new language, new ecosystem) or use Blazor (familiar C#, but different patterns).
But for internal tools, there's a third option: Ivy.
Ivy is a C# framework designed specifically for backend developers building internal tools. No Razor syntax. No component lifecycle. Just C# patterns you already know.
The Backend Developer's UI Problem
Backend developers writing frontends hit friction everywhere:
React path:
- Learn JavaScript/TypeScript
- Learn React's paradigms (hooks, context, state management)
- Build an API layer to connect backend to frontend
- Maintain two codebases, two build systems, two deployment pipelines
Blazor path:
- C#, but with Razor syntax
- Component lifecycle methods (OnInitializedAsync, OnParametersSetAsync)
- StateHasChanged() ceremony
- Still feels like learning a frontend framework
Both paths pull you away from what you're good at: writing backend code.
Ivy's Backend-First Approach
Ivy keeps you in familiar territory:
public class EmployeeDashboard : ViewBase
{
public override object? Build()
{
var db = UseService<AppDbContext>(); // Your existing DbContext
var filter = UseState("Engineering");
return Layout.Vertical()
| filter.ToSelectInput(new Option<string>[] {
new("Engineering", "Engineering"),
new("Sales", "Sales"),
new("HR", "HR")
})
| db.Employees
.Where(e => e.Department == filter.Value)
.ToDataTable(e => e.Id)
.Header(e => e.Name, "Name")
.Header(e => e.Email, "Email")
.Header(e => e.Department, "Dept")
.Header(e => e.Salary, "Salary");
}
}
This looks like backend code because it is. You're querying your database directly in your UI layer. No API. No serialization. No separate frontend build.
Blazor vs React vs Ivy: What Actually Differs
| Aspect | React | Blazor | Ivy |
|---|---|---|---|
| Primary language | JavaScript | C# + Razor | Pure C# |
| State management | Hooks + Context | StateHasChanged | UseState (React-style hooks) |
| Database access | Via API | Via API or SignalR | Direct EF Core |
| Build pipeline | npm + webpack | dotnet build | dotnet build |
| Target use case | Any frontend | Any frontend | Internal tools |
Ivy isn't trying to replace React for consumer apps. It's specifically designed for internal tools where a backend developer needs to ship a UI.
The Internal Tools Sweet Spot
Ivy excels when you need:
- Admin dashboards — Query data, display tables, add actions
- CRUD interfaces — Create, read, update, delete from your database
- Reporting tools — Aggregate data, show charts, export reports
- Configuration UIs — Manage settings, feature flags, user permissions
These don't need React's flexibility or Blazor's component reusability. They need to ship fast and stay maintainable.
How Ivy Keeps Backend Developers in Their Comfort Zone
The biggest advantage: you never leave C#.
- Debugging happens in Visual Studio, not browser DevTools
- Your existing logging, monitoring, and error handling work
- Your DbContext, services, and business logic are directly accessible
- Deployment is
dotnet publish— nothing special
The Honest Trade-off
Ivy isn't for everything. If you need:
- Public-facing websites → Use whatever your frontend team knows
- Mobile apps → Not Ivy's domain
- Complex interactive UIs → React or Blazor may fit better
But for internal tools where a backend dev needs to ship quickly? The Blazor vs React debate becomes irrelevant.
There's a third option.
