Skip to content
.NET 10 · Blazor · Aspire

Business apps without the boilerplate

Coworkee is a modular application framework: identity, permissions, an auth server, a Blazor shell, data tables, theming and an Aspire app host come as NuGet packages. Your app only holds its own domain.

MyApp

Your own app in three commands

The CLI creates the solution, starts the Aspire app host and helps with migrations, modules and updates.

  1. Install the CLIA global .NET tool. coworkee doctor checks the SDK, Docker and dotnet-ef.
    dotnet tool install -g Coworkee.Cli
  2. Create the appA solution with auth server, API, Blazor client, migrations, tests and app host on the NuGet packages.
    coworkee new Shop
  3. Run itStarts Postgres, Redis, Mailpit and every service through Aspire. The dashboard shows logs and traces.
    cd Shop && coworkee run
  4. All commands
Coworkee Studio Coworkee Studio Coworkee Studio Coworkee Studio

Prefer a UI? Coworkee Studio

coworkee ui installs and starts Coworkee Studio, the desktop app for the CLI (tool command coworkee-ui). A wizard walks through name, logo and theme, sign-in, modules, infrastructure and your entities, shows what each choice brings and costs, creates the app and runs it.

coworkee ui

For AI assistants

coworkee mcp starts an MCP server: Claude, Copilot and other assistants create apps, modules and migrations through the same commands.

coworkee mcp

A tour of the demo app

Everything in these pictures comes from the packages. The demo app only adds catalog, documents and orders.

Sign-in that slides

Sign-in that slides

The auth server ships sign-in, step-by-step registration, password reset and external logins. Three designs, switchable in the administration, in the colors of the default theme.

Read more
Tables that think along

Tables that think along

Drag a column to group, facets on top, column filters with counts, sums and averages in the footer, saved views and export.

Read more
100,000 orders in the browser

100,000 orders in the browser

A client entity loads the data once and answers every query locally after that. Compare runs the same queries on the server and in the browser.

Read more
Themes for everyone

Themes for everyone

Admins maintain themes and the default, every user picks a theme and color mode in their settings.

Read more
Forms from the model

Forms from the model

Settings and typed app configuration are edited with MudEx object edit, dialogs slide in from the side.

Read more

At a glance

Coworkee is a modular application framework for .NET 10. It gives a Blazor and ASP.NET Core application the parts every business app needs, so the app itself can stay about its domain: modules with dependencies, a request pipeline with validation, permissions and caching, EF Core with audit and outbox, an auth server with external sign-in, a Blazor shell with data tables and admin pages, and an Aspire app host that wires all of it.

What is in the box

Area You get
Modules CoworkeeModule with [DependsOn], one call AddCoworkee<TRoot>() per host
Requests IDispatcher with commands, queries, Result, FluentValidation, permission checks, caching, unit of work
Data CoworkeeDbContext with tenants, soft delete, field level audit trail, transactional outbox, realtime change events
HTTP Minimal API groups with problem details, application services with generated endpoints and Blazor clients, OData sets with facets for every entity, response filters
Identity Users, roles, groups, tenants, permission grants down to single resources, setup wizard or seed
Sign-in OpenIddict auth server, BFF for the Blazor client, Keycloak or any OpenID Connect provider as external login
Blazor MudBlazor shell with navigation, admin pages, data table with facets, client entities queried in the browser, theming, replaceable components
Services Settings, typed app configuration, mail templates, Hangfire jobs, blob storage, Elasticsearch, notifications, AI assistant with MCP
Hosting AddCoworkeeApp for Aspire: Postgres (or SQL Server, SQLite), Redis, Mailpit, Elasticsearch and Keycloak wired from the packages each service uses

A taste

Catalog module
[DependsOn(typeof(CoworkeeODataModule))]
public sealed class MyAppCatalogModule : CoworkeeModule, IWebModule
{
    public override void ConfigureServices(ModuleServiceContext context)
    {
        context.Services.AddMessagingFromAssembly(typeof(MyAppCatalogModule).Assembly);
        context.Services.AddSingleton<IModelContributor, CatalogModelContributor>();
        context.Services.AddSingleton<IPermissionDefinitionContributor, CatalogPermissionDefinitions>();
        context.Services.AddODataEntity<Product>("Products", CatalogPermissions.Products.View);
    }

    public void ConfigureApplication(WebApplication app) => app.MapProductEndpoints();
}
App host
var app = builder.AddCoworkeeApp("myapp", options => options.UseKeycloak());

app.AddMigrations<Projects.MyApp_Migrations>();
app.AddAuthServer<Projects.MyApp_Auth>();
app.AddApi<Projects.MyApp_Api>();
app.AddWeb<Projects.MyApp_Web>();

Where Coworkee comes from

Coworkee started as my own project template: a Blazor base template with everything a business app needs, copied into every new app. Every app then carried its own copy of identity, permissions, settings, audit and admin pages, and every improvement had to be carried over by hand. So I turned the template into this library: the shared parts are NuGet packages now, and an app only holds its own domain.

The demo app is the former template rebuilt on the packages, and Sharemee, a digital asset management system, is the second app built on them. The UI relies on MudBlazor and MudBlazor.Extensions; facets, response filters and code generation come from Nextended.

Questions, ideas or want to help?

Write to me or support the project. Coworkee stays free and open source.

Contact Support