The nopCommerce Developer's Guide to Getting Started (2026)

Plugin development 13 min read September 18, 2026

The nopCommerce Developer's Guide to Getting Started (2026)

Your first week on a nopCommerce codebase, in order: the exact toolchain to install, a running store in one sitting, how to read the solution, the everyday build-and-test loop, and how to pick the extension point that keeps your change upgrade-safe.

BE
nopCommerce Development Team · Bangladesh Software Solution
Four-step workflow for starting nopCommerce development: install the .NET 9 SDK, open NopCommerce.sln, run the install wizard, and build a plugin into Nop.Web/Plugins

It's your first morning on a new project. The client runs a nopCommerce 4.80 store, the ticket says "show an estimated delivery note on every product page," it's due Friday, and the solution you just cloned has dozens of projects you've never seen. This nopCommerce developer guide is the path we walk every new engineer through at BSS, so that Friday is realistic rather than heroic.

nopCommerce itself is not hard. What slows people down is doing things in the wrong order: installing the wrong SDK, editing core files because that's where the code happened to be, or rebuilding the whole solution to test one plugin. Get the order right and the platform is pleasant to work in.

By the end of this guide you will have: a toolchain that matches your store's version, a local store running with sample data, a working mental map of the solution, a fast build-and-test loop for plugins, and a clear rule for choosing between a theme, a widget, a plugin and a service override.

If you're still deciding whether the platform suits your project at all, start with our beginner's overview of nopCommerce and come back here when you're ready to write code.

Match the Toolchain to the Store, Not to the Latest Release

The first question isn't "which IDE?" It's "which nopCommerce version is in production?" Every nopCommerce release targets one specific .NET version, and a mismatched SDK is the most common reason a fresh checkout refuses to build.

Ask the client, or check it yourself in the admin under System → System information. Then install the matching toolchain. According to nopCommerce's own technology and system requirements documentation, the pairings are:

nopCommerce version .NET you need IDE notes
4.90 .NET 9 SDK Visual Studio 2022 version 17.14 or above
4.80 .NET 9 SDK Visual Studio 2022, or VS Code with the C# extension
4.70 .NET 8 Older line: plan the upgrade conversation early
4.60 .NET 7 Out of Microsoft support; treat as upgrade work first

You can confirm what's already on your machine before installing anything:

# list every installed .NET SDK
dotnet --list-sdks

# show the SDK this folder will actually use
dotnet --version

For the database, nopCommerce supports SQL Server 2012 or above, MySQL 5.7 or above (from nopCommerce 4.30) and PostgreSQL 9.5 or above (from 4.40). For local work, pick the same engine the production store uses. A query that is fast on SQL Server can behave very differently on MySQL, and you want to find that out on your laptop, not on launch day.

Insider tip

If dotnet --version reports a newer SDK than the store targets, don't uninstall anything. Newer SDKs can build older target frameworks as long as the matching targeting pack is present. The failure you actually hit is the reverse: an SDK that is too old for the release you checked out.

Get to a Running Store in One Sitting

With the toolchain in place, the goal for day one is modest: a store running locally with sample data, so every later change has something to show up on.

Source package or GitHub clone?

Both give you the full solution. The source-code package is the simplest route to a known release. Cloning the repository gives you history and branches, which matters once you need to diff your version against a newer one. Branch choice and first-build failures are covered in depth in our guide to building nopCommerce from its GitHub source, so we won't repeat them here.

Run it and let the wizard do the setup

  • Open NopCommerce.sln and make sure Nop.Web is the startup project.
  • Press F5 (debugging) or Ctrl+F5 (without). The first launch lands on the installation page instead of the storefront.
  • Fill in the installer: admin email and password, the database connection (it can create the database if it doesn't exist), and the country used to preconfigure the store.
  • Tick "create sample data." In development you want real-looking products, categories and orders to click through. Skip it only on a store that will go live.

In our experience the whole install takes about a minute once the database connection is right. You'll land on the storefront homepage, and the admin area lives at /admin with the account you just created.

Know what the wizard wrote

The installer saves your connection details to App_Data/appsettings.json inside Nop.Web. That file is worth knowing early for two reasons. First, it never belongs in source control with real credentials in it. Second, it's how you start over: nopCommerce's documentation notes that removing the ConnectionStrings section (or deleting the file) sends the next launch back to the installer.

Next to it sits App_Data/plugins.json, which records which plugins are installed. Keep both when you move a local store between machines.

Read the Solution Like a Map, Not a Maze

Now that the store runs, open Solution Explorer. The number of projects looks intimidating, but they fall into just three groups, and only one of them is where your code normally goes.

Libraries: the core
Nop.Core, Nop.Data and Nop.Services hold the domain entities, data access and business logic. Read them constantly. Edit them almost never.
Presentation: the web app
Nop.Web is the storefront and hosts the Admin area; Nop.Web.Framework holds the shared MVC plumbing your plugins reference.
Plugins: your code
Every Nop.Plugin.* project is an isolated extension. The bundled ones are the best examples you'll find of how the platform expects to be extended.

A useful first exercise: pick one storefront page, such as the product details page, and trace it from the controller in Nop.Web down to the service that loads the product. Thirty minutes of that teaches more than a day of reading.

When you want the full picture of layers, dependency injection and how a request travels through them, our nopCommerce architecture guide is the natural next read. It goes deep on exactly the parts this section skims.

Read the core freely, extend it through plugins, and treat every edit to a core file as a future upgrade bill.

BSS Engineering

The Everyday Development Loop

Once you know where your code goes, the next thing that decides your speed is the loop: change, build, see the result. For plugin work it's shorter than most newcomers expect, because a plugin builds straight into the web app's folder.

The nopCommerce documentation's plugin template sets the build output like this in the plugin's .csproj:

<PropertyGroup>
  <TargetFramework>net9.0</TargetFramework>
  <OutputPath>$(SolutionDir)\Presentation\Nop.Web\Plugins\Misc.DeliveryNote</OutputPath>
  <OutDir>$(OutputPath)</OutDir>
</PropertyGroup>
<ItemGroup>
  <ProjectReference Include="$(SolutionDir)\Presentation\Nop.Web.Framework\Nop.Web.Framework.csproj" />
  <ClearPluginAssemblies Include="$(SolutionDir)\Build\ClearPluginAssemblies.proj" />
</ItemGroup>

That gives you a loop with four beats:

  • Build the plugin project, not the whole solution. Its output lands in Nop.Web/Plugins/<YourPlugin>.
  • Run or restart Nop.Web. Plugins are discovered at startup, which is why a newly built plugin doesn't appear in a store that's already running.
  • Install it once from Configuration → Local plugins in the admin. The change is recorded in plugins.json and applied on restart.
  • Iterate: after that, rebuild and restart. Set breakpoints in your plugin code exactly as you would in any ASP.NET Core app.

The ClearPluginAssemblies step in that template matters more than it looks. It strips DLLs that already ship with the web app out of your plugin folder, so you don't end up loading two copies of the same assembly.

Watch out

nopCommerce caches settings and entities aggressively. If you change data directly in the database and the storefront doesn't reflect it, that's the cache, not a bug in your code. Restart the app or clear the cache from the admin before you start debugging. Our caching guide explains which layer is holding the stale value.

Pick the Right Extension Point for the Job

This is the decision that matters most for a store's long-term health. Almost every change a client asks for fits one of a handful of extension points, and choosing the right one is the difference between a change that survives the next upgrade and one that has to be rebuilt.

Decision tree for choosing a nopCommerce extension point: settings for configuration-only changes, a theme for look and layout, a widget plugin to add UI to existing pages, a plugin for new behaviour, and a dependency-injection override to replace a core service
If the ticket says… Reach for Where it lives
"Turn on / change a behaviour" Admin settings, no code Configuration → Settings
"Make it look different" A theme Nop.Web/Themes, copied from the default theme and renamed in theme.json
"Show something extra on a page" A widget plugin Renders into a named widget zone, no view edits
"Add a new capability" A plugin (payment, shipping, tax, misc) Its own Nop.Plugin.* project
"Change how the core works" A service override via dependency injection Registered from your plugin; use sparingly

Back to Friday's ticket. "Show an estimated delivery note on every product page" is a textbook widget: a small plugin that renders into one of the product-page widget zones. No theme edits, no core edits, and it installs or uninstalls with a click. Our walkthrough on adding a widget to a nopCommerce plugin covers exactly that build, and the flagship plugin tutorial sets up the project around it.

For the other rows, the specialist guides are building a custom theme from scratch, writing a payment plugin, and, if the job is feeding data to another system, our practical walkthrough of nopCommerce's API options.

A Two-Week Onboarding Plan That Actually Sticks

Knowing the pieces is one thing; building fluency is another. This is the sequence we give new engineers. Each step produces something you can show, which is what keeps the learning from staying theoretical.

Your first two weeks on nopCommerce

  • Day 1: confirm the production version, install the matching .NET SDK, and get the store running locally with sample data.
  • Day 2: walk the admin as a store owner would. Create a product, place a test order, change a setting and find where it's stored.
  • Day 3: trace one storefront page from controller to service to database with the debugger attached.
  • Days 4–5: build an empty plugin, install it from Local plugins, then uninstall it cleanly. The lifecycle is the lesson.
  • Week 2, first half: turn that plugin into a widget that renders something real into a product-page widget zone.
  • Week 2, second half: add a settings page for your plugin, then read one bundled plugin end to end and note what it does differently from yours.
  • Before you ship anything: write down every file you changed outside your plugin. The ideal list is empty.

Mistakes That Cost New nopCommerce Developers a Week

Even with a good plan, a few traps catch almost everyone once. A common pattern we see when auditing inherited stores is that the problem was set up in the first month, long before anyone noticed it.

Editing core files
A quick fix in Nop.Services or a stock view works today and quietly turns the next upgrade into a merge project. Put the change in a plugin or a theme instead; our upgrade checklist shows what that saves you later.
Developing against the wrong version
Code written against the latest release can call APIs the client's store doesn't have. Develop on the version that's in production, and upgrade as its own deliberate project.
Pointing local code at a live database
One mistyped connection string and your test order is in the client's real order list. Use a restored copy with customer data scrubbed, never the production database.
Debugging the cache instead of the code
A change that "didn't work" is often a cached value that hasn't expired. Restart or clear the cache before assuming your logic is wrong.

Frequently Asked Questions

Which .NET version do I need for nopCommerce 4.80?
nopCommerce 4.80 and 4.90 both target .NET 9, so install the .NET 9 SDK for development. For 4.90, nopCommerce's requirements also call for Visual Studio 2022 version 17.14 or above. Older releases differ: 4.70 targets .NET 8 and 4.60 targets .NET 7.
Can I develop nopCommerce on macOS or Linux?
Yes. .NET is cross-platform, and nopCommerce's own developer documentation lists Visual Studio Code with the C# extension as a supported editor alongside Visual Studio. Because nopCommerce also supports MySQL and PostgreSQL, you aren't tied to SQL Server for local work, though matching the production database engine is still the safer choice.
Should I use the source package or clone nopCommerce from GitHub?
Either gives you the full solution. The source package is the quickest way to an exact release. A GitHub clone adds history and branches, which helps when you need to compare your version with a newer one before an upgrade. What matters most is that the version matches the store you're working on.
How do I run the nopCommerce installation wizard again?
Remove the ConnectionStrings section from App_Data/appsettings.json, or delete the file, and restart the application. The next launch opens the installation page again. Only do this on a local or throwaway copy, never on a live store.
Do I need to modify nopCommerce's source code to customise a store?
Rarely. Settings cover configuration changes, themes cover look and layout, widget plugins add UI to existing pages, plugins add new capabilities, and dependency-injection overrides can replace a core service from inside a plugin. Keeping core files untouched is what makes future upgrades straightforward.

Final Thoughts

Back to that first morning. With the toolchain matched to 4.80, a local store running on sample data, and the solution read as three groups instead of dozens of projects, Friday's ticket shrinks to its real size: one small widget plugin rendering a delivery note into the product page. It builds straight into the Plugins folder, installs from the admin, and leaves every core file exactly as nopCommerce shipped it, so the next upgrade doesn't even notice it.

That's the whole approach in one sentence: learn the core by reading it, change the store by extending it. From here, the flagship plugin tutorial is the best next step, and when a ticket outgrows the time you have, the BSS team is a message away.