# SimplCommerce: A .NET Modulith Ecommerce System You Can Actually Read

> SimplCommerce is an Apache-2.0 ecommerce system built as a modular monolith on ASP.NET Core and Entity Framework Core. It is aimed at .NET teams that want to own the whole stack rather than rent a SaaS storefront, and the trade-off is that you also own the upgrades.

**simplcommerce/SimplCommerce** — A simple, cross platform, modulith ecommerce system built on .NET

- Repository: https://github.com/simplcommerce/SimplCommerce
- Website: http://www.simplcommerce.com
- Stars: 4,415 · Forks: 1,670
- Language: C#
- License: Apache-2.0
- Published: 2026-09-23 · Updated: 2026-09-23 · Language: en
- Canonical page: https://hysenlabs.com/projects/simplcommerce-simplcommerce

## Who SimplCommerce Is Actually For

The README opens by calling the project "a simple, cross platform, modulith ecommerce system built on .NET Core". The word modulith is the whole pitch. You get one deployable web host, not a fleet of services, and inside it the storefront, admin, catalog, cart, orders and the rest live as separate modules. That structure matters to a specific kind of team: .NET developers who want a storefront they can open in Visual Studio 2022 and step through, rather than a plugin API bolted onto someone else's binary.

The repository layout backs this up. The top level holds SimplCommerce.sln, a src/ directory, a test/ directory, and separate Dockerfiles (Dockerfile and Dockerfile-sqlite). There are build scripts for both shells, simpl-build.sh and run-tests.sh, plus run-tests.ps1 for Windows. This is a codebase meant to be built and run by the person reading it, not consumed as a hosted service.

It is not for someone who wants a store running in an afternoon with no engineering involvement. The README's own instructions assume you have a database server, a .NET SDK, and the willingness to create a schema before the site will start. That is a reasonable assumption for a .NET shop and a poor one for a solo merchant.

## The Modulith Architecture and the MediatR Event Flow

The README lists the stack: ASP.NET Core, Entity Framework Core, ASP.NET Identity Core, Angular 1.6.3, and MediatR 7.0.0 for domain events. Two of those choices define how the code behaves.

Entity Framework Core means the data model is code-first. Migrations live in the web host and the README tells you to run Update-Database from the Package Manager Console with SimplCommerce.WebHost selected as the default project. The Dockerfile confirms this by running dotnet ef migrations add initialSchema and then dotnet ef migrations script -o dbscript.sql during the image build, so the container ships a SQL script rather than applying migrations at startup.

MediatR is the second piece. The README names it explicitly for domain events, which is the mechanism that keeps modules from calling each other directly. A module raises an event and handlers elsewhere react. The practical consequence is that adding behaviour to, say, order placement does not require editing the order module. The cost is that control flow becomes indirect: reading the code top to bottom will not show you everything that happens when an order is submitted, because the handlers are registered separately.

The front end is Angular 1.6.3. That version is old, and the README states it without apology. Anyone expecting a modern SPA toolchain should treat this as a known constraint rather than a discovery.

## Installing SimplCommerce with SQL Server on Windows

The README documents the Visual Studio path first. Prerequisites are SQL Server, Visual Studio 2022 and .NET 8. The connection string lives in appsettings.json inside src/SimplCommerce.WebHost, and the default targets a local SQL Server instance:

```json
{
  "DefaultConnection": "Server=.;Database=SimplCommerce;Trusted_Connection=True;TrustServerCertificate=true"
}
```

If you are on Visual Studio LocalDB instead, the README gives a replacement string. Note the doubled backslash before mssqllocaldb, which is how it appears in the README:

```json
{
  "DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=SimplCommerce;Trusted_Connection=True;TrustServerCertificate=true;MultipleActiveResultSets=true"
}
```

After that, build the whole solution, confirm SimplCommerce.WebHost is the startup project, and create the schema from the Package Manager Console:

```bash
Update-Database
```

The README says this action creates the database schema. It also notes you need a database named SimplCommerce to already exist, or you must change the Database name in the connection string to match your environment. That ordering trips people up: the migration creates tables, not the database itself. Press Control + F5 to run, and the back-office is at /Admin using admin@simplcommerce.com with password 1qazZAQ!.

## Running SimplCommerce on Mac or Linux with PostgreSQL

The second documented path swaps SQL Server for PostgreSQL. Prerequisites are PostgreSQL, the .NET Core SDK 8.0, and the EF Core tools, which the README installs globally:

```bash
dotnet tool install --global dotnet-ef
```

Update the connection string in appsettings.json in SimplCommerce.WebHost, then run the build script from the repository root. The README shows both forms:

```bash
sudo ./simpl-build.sh
```

For Ubuntu 18 it gives an alternative invocation, sudo bash simpl-build.sh. After the build finishes, navigate into the web host directory and start the app:

```bash
dotnet run
```

The README says to open http://localhost:49206 in the browser, and the back-office is again at /Admin with the same built-in account. If you prefer containers, the README offers a single command and labels it clearly: for testing purpose only.

```bash
docker run -p 5000:80 simplcommerce/ci-build
```

That qualifier matters. The Dockerfile in the repository is a multi-stage build that strips the SQL Server provider, rewrites Program.cs and ServiceCollectionExtensions.cs to use Npgsql, deletes the existing migrations, and regenerates them. It is a demonstration image, not a production deployment recipe.

## Where SimplCommerce Will Fight You

The clearest limitation is the release cadence. The most recent release listed is v1.0.0-rc from 2018-06-16, and before that 1.0-beta and v0.1-netcore1.1.2. There is no 1.0 final. The GitHub releases page therefore tells you nothing useful about what has changed recently. The last push to the default branch was on 2026-06-08, so work is happening, but it is not being published as tagged releases. If your organisation requires versioned artifacts and changelogs before adopting a dependency, this project does not currently provide them.

The Dockerfile reinforces the point about drift. It pins the .NET SDK and runtime images at 5.0 and installs dotnet-ef at version 5.0.0, while the README's manual instructions call for .NET 8 and Visual Studio 2022. Those are different targets maintained in the same repository. The container path is explicitly for testing, so the mismatch is defensible, but it means the Dockerfile is not a reliable statement of what the project supports.

The built-in admin credentials are published in the README and on the live demo. That is fine for a demo and unacceptable for anything reachable from the internet. The README does not document a forced password change flow, so securing that account is on you.

Finally, Angular 1.6.3 is end-of-life technology. The README does not describe a migration path away from it. If your team has standardized on a current front-end framework, you will be maintaining a legacy one alongside it.

## SimplCommerce vs nopCommerce and GrandNode

The comparison people search for is SimplCommerce against nopCommerce, and the difference is structural rather than a feature checklist.

nopCommerce is a mature, plugin-oriented platform with a long release history and a commercial ecosystem around it. Its extension model is the product: you add functionality through plugins against a published API, and you generally do not fork the core. SimplCommerce inverts that. The README's own contribution section asks for pull requests and issue reports, which tells you the intended way to change behaviour is to change the code. Modules live in the same solution you build.

That makes SimplCommerce easier to reason about for a small team that wants full control and harder to upgrade when the upstream project moves. With a plugin architecture you can often take a new core version and keep your extensions. With a modulith you are closer to maintaining a fork.

GrandNode is the other name that comes up. It is also .NET-based and open source, and the searches pair it with SimplCommerce for the same reason: both target developers who want a .NET commerce stack they host themselves. The choice between them comes down to which codebase your team can read faster, not to a feature matrix, and that is a judgement you can only make by cloning both.

## Licence, Maintenance and the Real Upgrade Cost

SimplCommerce is licensed under Apache-2.0, and the repository carries a License.txt at the top level. Apache-2.0 is a permissive licence that includes an explicit patent grant, which is generally friendlier to commercial adoption than a bare MIT licence. It does not obligate you to publish your modifications. This is a description of the licence text, not legal advice; if your organisation has a review process for open source dependencies, run it.

The maintenance picture is mixed and worth stating plainly. The last push to master was on 2026-06-08, so the repository is not abandoned. But the newest tagged release is v1.0.0-rc from 2018-06-16, and the project still describes itself as a release candidate. There is a roadmap on the wiki and documentation at docs.simplcommerce.com, both linked from the README, and neither is summarized in the README itself.

The upgrade cost follows from the modulith design. Because modules are compiled into the same solution, taking upstream changes means merging them into your modified tree. The README does not document a supported upgrade procedure, and there is no migration guide for moving between major versions. Budget for this as fork maintenance rather than dependency bumps. If that is not a cost your team can absorb, the architecture is working against you.

## Conclusion

Adopt SimplCommerce if you have a .NET team that wants to read and modify the storefront and admin code directly, and if you are comfortable running SQL Server or PostgreSQL yourself. Skip it if you need a vendor-backed support contract, a hosted control plane, or an upgrade path that does not involve your own engineers. Before committing, verify two things in your own checkout: that the migration chain still applies cleanly against your database, and that the admin account described in the README is changed before anything is exposed to the internet.

## FAQ

### What is SimplCommerce?

It is a cross-platform ecommerce system built on .NET, described in its README as a modulith, meaning the storefront, admin and business modules ship as one deployable web host rather than separate services. It uses ASP.NET Core, Entity Framework Core, ASP.NET Identity Core, Angular 1.6.3 and MediatR for domain events.

### How do I install SimplCommerce?

The README gives two paths. On Windows with Visual Studio 2022 and SQL Server, update the DefaultConnection string in src/SimplCommerce.WebHost/appsettings.json, build the solution, then run Update-Database from the Package Manager Console with SimplCommerce.WebHost as the default project. On Mac or Linux with PostgreSQL, install the .NET Core SDK 8.0 and dotnet-ef, update the connection string, run simpl-build.sh, then dotnet run from src/SimplCommerce.WebHost.

### How do I access the SimplCommerce admin panel?

The back-office is served at /Admin. The README lists the built-in account as admin@simplcommerce.com with password 1qazZAQ!, and the same credentials are published for the online demo. The README does not document a forced password change, so that account needs securing before any public deployment.

### Can I run SimplCommerce in Docker?

The README gives the command docker run -p 5000:80 simplcommerce/ci-build but labels it for testing purpose only. The repository Dockerfile pins .NET SDK and runtime images at 5.0 and rewrites the web host to use the Npgsql PostgreSQL provider, which differs from the .NET 8 instructions in the README for running locally.

## Sources

- [License: Apache-2.0](https://github.com/simplcommerce/SimplCommerce/blob/master/LICENSE)
- [Project website](http://www.simplcommerce.com)
- [README](https://github.com/simplcommerce/SimplCommerce/blob/master/README.md)
- [Releases](https://github.com/simplcommerce/SimplCommerce/releases)
- [simplcommerce/SimplCommerce on GitHub](https://github.com/simplcommerce/SimplCommerce)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/simplcommerce-simplcommerce
