How to start
This is written for a configuration developer: someone building their own business
application on the Kandra platform. You do not need — and by default won't have — a checkout
of the Kandra platform's own source. Your configuration is its own self-contained git repo,
consuming Kandra.* purely as NuGet packages.
Prerequisites
- .NET SDK matching
net10.0. - Access to the Kandra-Erp NuGet feed. Kandra's packages are published to a private GitHub
Packages feed, not nuget.org. You need a GitHub personal access token with
read:packagesscope, set as theGITHUB_PACKAGES_TOKENenvironment variable — ask whoever manages your organization's Kandra-Erp access to issue you one. Without it,dotnet restoreon a scaffolded configuration fails.
1. Install the scaffolding tools
dotnet new install Kandra.ConfigTemplate
Optionally, also install the interactive wizard (a friendlier front end over the same
template — it does no file manipulation of its own, it just prompts you and runs the
dotnet new kandra-config command below for you):
dotnet tool install --global Kandra.ConfigCreateTool
2. Scaffold your configuration
dotnet new kandra-config -n Acme --IncludeSqlite
or, with the wizard installed:
kandra-new-config
-n <Name>— your configuration's name. Every project in the scaffold is prefixed with it (Acme.Domain,Acme.Forms,Acme.WebApi, ...).--IncludeSqlite(defaulttrue),--IncludeSqlServer(defaultfalse),--IncludePostgres(defaultfalse) — pick one or more EF Core providers. Picking none prints a warning and skips the restore step instead of leaving you with a solution that won't compile.
This produces an empty, buildable, 11-project solution — the same project shape as
KandraWms (the platform team's own reference configuration), with every domain-specific
piece stripped out, referencing the Kandra platform purely via NuGet PackageReference.
There is no platform source anywhere in your new repo — see
Overall architecture for exactly
what that 11-project shape looks like.
3. Restore, build, run
cd Acme
dotnet restore
dotnet build Acme.slnx
dotnet run --project src/Acme.WebApi
It starts empty — no Dictionaries, Documents, Reports, Registers, or Data Processors yet — but it's fully runnable as scaffolded: you'll see a working login and an empty nav menu.
4. Add your first entity — use the shipped skills
Your scaffolded repo ships its own .claude/skills/ (one skill per entity kind:
create-dictionary, create-document, create-register, create-report,
create-data-processor, create-constant, plus create-handler, create-local-handler,
post-to-accounting, add-account-subconto-field, add-interface-node,
create-print-form, convert-dictionary-to-hierarchical) and its own CLAUDE.md, written
specifically for someone building on this scaffold — not the same file as the platform
team's own CLAUDE.md. If you're using Claude Code, prefer invoking these skills over
hand-rolling an entity's shape from scratch — that's the explicit guidance the scaffold
ships with, not just a suggestion from this site. The "Creating a..." guides in this section
give you the conceptual background each skill assumes; the skill itself does the mechanical
work in your repo.
Running tests
dotnet test Acme.slnx
One smoke test ships by default, proving the checked-in migrations apply cleanly against SQLite in-memory — see Testing.
Database migrations
See Database migrations — your scaffolded repo already ships the manifest
kandra-migrate needs, so that's the tool to reach for; raw dotnet ef per provider is the
fallback if the tool isn't installed in your setup yet.
Exploring the platform's own reference configuration (optional)
Everything above is self-contained — you never need the Kandra platform's own source to build a configuration. The skills' worked examples intentionally reuse real entity names from a previously-built configuration (each skill says so up front) rather than a fabricated generic example, specifically so you're looking at verified working code even without that access. If you want to go further and read the platform team's own reference configuration source directly, that means access to their internal monorepo — separate from the packages feed above, and something most configuration developers won't need.
Where to go next
- Overall architecture — how the pieces fit together before you start adding entities.
- Creating a dictionary — usually the first concrete thing you'll build.