The Problem

Retailers need a single‑code‑base eCommerce system that can be deployed on‑premise or in containers, supports multi‑store, multi‑language, and can be extended without rewriting core logic. Existing platforms often lock you into a monolith or require heavyweight infrastructure.

What This Does

Smartstore delivers a modular ASP.NET Core application that isolates features into modules (see dev-docs/compose/modules/). Core services live under src/Smartstore.Core/ (e.g., src/Smartstore.Core/Catalog/Attributes/Domain/ProductAttribute.cs). The solution files Smartstore.sln and Smartstore.Tools.sln tie together the core, web UI, and build tooling found in src/Smartstore.Build/.

Docker support is baked in: Dockerfile builds the runtime image, while docker-compose.yml, docker-compose.postgres.yml, and docker-compose.sqlserver.yml define database back‑ends. Build automation lives in build.sh/build.cmd and the Nuke scripts (src/Smartstore.Build/Smartstore.Build/.csproj). Documentation is extensive, with 127 markdown files under dev-docs/.

How To Use It

Setup

Clone and enter the repo git clone https://github.com/Smartstore/Smartstore.git cd Smartstore

Build the Docker image (Dockerfile uses .NET 7 SDK) docker build -t smartstore:latest .

Choose a DB stack (PostgreSQL example)

docker compose -f docker-compose.postgres.yml up -d

Alternatively, run locally with the .NET CLI: Restore NuGet packages and build the solution dotnet restore Smartstore.sln dotnet build Smartstore.sln -c Release

Configuration

Database connection strings are read from the appsettings.json hierarchy; override them with environment variables ConnectionStrings_Default (as used by the Docker compose files). The Dockerfile expects the ASPNETCOREENVIRONMENT variable to select Development or Production. Module registration is driven by XML files under src/Smartstore.ModuleBuilder/ and the Modules folder in the container’s /app/Modules path.

Running it

Start the web host inside the container docker run -p 5000:80 --env ASPNETCOREENVIRONMENT=Production smartstore:latest

Or, when using the CLI: dotnet run --project src/Smartstore.Web/Smartstore.Web.csproj

The entry point is the Program.cs generated by the ASP.NET Core Web project (not listed explicitly but implied by the solution structure).

Real‑World Use

A retailer can spin up a staging shop with a single command: docker compose -f docker-compose.postgres.yml up -d && \ docker run -p 5000:80 --env ASPNETCOREURLS=http://+:80 smartstore:latest

The shop is reachable at http://localhost:5000, and additional modules (e.g., a custom payment provider) can be dropped into the /app/Modules folder and registered via the admin UI without recompiling the core.

Code Health & Issues

Medium – Out‑of‑date version claim – README mentions “ASP.NET Core 9” while the repo targets .NET 7 (see Directory.Build.props). May mislead users. Low – Sparse test coverage – Only one test file detected; CI workflows (.github/workflows/.yml) exist but lack a solid test matrix. Low – Missing runtime secrets – No .env.example or secret‑management guidance; users must infer environment variable names from Docker compose files. Low – Limited front‑end assets – Vue.js and Sass are referenced in the README but the source tree contains few front‑end files, suggesting they are pulled at build time or reside in sub‑modules not present. None – License present – LICENSE file included, satisfying legal requirements. None – CI configured – GitHub Actions for publishing nightly/release builds are present (.github/workflows/publish-.yml).

Overall, the repository is well‑organized, with clear module documentation and Docker‑first deployment scripts. The main risk is the version mismatch and minimal automated testing.

The Bottom Line

Smartstore offers a solid, modular ASP.NET Core eCommerce foundation with ready‑made Docker deployment and extensive developer documentation. It is suitable for teams that need a customizable shop platform and are comfortable extending C# modules. Prospective adopters should verify the .NET version alignment and add their own test suite before production use.