Release Notes

Here you can view a list of all the changes for each release of nopCommerce.

Release Notes - nopCommerce 3.40 (July 17, 2014)

No major features have been introduced with this release as our development efforts were focused on performance optimization and fixing bugs. Performance and memory usage optimizations are really very significant. Please find more info below:

Highlight features and changes

  • Performance optimization. Really a lot of changes.
  • Added full support for in-store pickup. This way a customer should not enter shipping address during checkout. It can be enabled in admin area (shipping settings).
  • Dropped jQuery mobile version support. We already have responsive design available out of the box (since 3.30). Maintenance of both approaches is quite complete. It can also improve performance (less IO, output caching - to be done, etc). It'll simplify development and customization (only one view change instead of two, etc). Responsive design becomes much more popular today. It's just more user-friendly.


  • Added back picture uploading and file manager functionality to TinyMCE (was temporary removed in 3.30).
  • Country report added (includes number of orders and order totals).
  • Search engine optimization. Added an option indicating whether product META descriptions should be automatically generated (if not specified on the product details page) based on product short description.
  • Search engine optimization. Added more links to sitemap page.
  • Search engine optimization. "/sitemapseo" URL was renamed to "sitemap.xml".
  • Search engine optimization. Added support for Twitter and Open Graph tags (product details page).
  • Multi-store support for newsletter subscriptions.
  • Allow a store owner to set default currency for each language.
  • New "Read-only checkboxes" (list) attribute control type. This type will be ideal for building bundles that cannot be edited.
  • Add RTL (right-to-left) support for PDF documents.
  • Responsive design: added the ability to click anywhere in the mobile menu item to go to the category, and not just on the text.
  • Display responsive menu even without categories.
  • Search page. Allow customers to choose a view mode, page size, sort.
  • Allow a store owner to choose a page size on each admin page that has a grid.
  • Allow a store owner to specify "Admin comment" for shipments (for internal use).
  • Allow a store owner to decide whether newsletter checkbox should be ticked/unticked on the registration page. For example, in Germany it's mandatory to disable the newsletter by default during registration.
  • Shipments. Display warehouse name on appropriate pages - "add shipment", "shipment list", "shipment details" (admin area). This way a store owner can see where products are located before he adds them to a shipment. In case if he wants to create a shipment which should be shipped from one warehouse.
  • Order list page. Allow a store owner to filter orders by warehouse (load orders with products from a specified warehouse). This way a store owner will be able to easily find a list of products to be shipped from a certain warehouse.
  • Shipment list page. Allow a store owner to filter shipments by warehouse (load shipments with products from a specified warehouse). This way a store owner will be able to easily find a list of products to be shipped from a certain warehouse.
  • Product and checkout attributes. Allow a store owner to specify default values for textboxes.
  • Allow a store owner to search gift cards by recipient's name.
  • Added a setting indicating whether a store owner can see tracking info (events) on the shipment details page in admin area based on an entered tracking code. This shipping setting is disabled by default.
  • Allow a store owner to specify display order of products displayed on the home page.
  • Canada Post plugin now also allows customers to see tracking info with one click (on the Canada Post site).
  • Search engine optimization. Added "alt" attribute to the header logo.
  • Allow a store owner to see tracking info URL (link).
  • Disable guest redirection to the login page for "back in stock subscription".
  • Added "Starts with" grid filtering options to "locale resources" and "settings" pages.
  • "GetCurrentIpAddress" method. The X-Forwarded-For (XFF) HTTP header field is a de facto standard for identifying the originating IP address of a client connecting to a web server through an HTTP proxy or load balancer. But in some cases server use other HTTP header. in these cases an administrator can specify a custom Forwarded HTTP header (just add a "ForwardedHTTPheader" appconfig settings).
  • Better and faster GIF file processing. Version 3.30 had bad thumbnail quality for such files.
  • Added "ReplyTo" property to "QueuedEmail". Now we use it on the contacts page. When a user sends an email via the contact form, it is handy to populate the reply-to field with the user's email so a direct reply can be initiated.
  • Installation page. Automatically choose a language based on the current browser culture.
  • Moving away from outdated browserCaps.config file. Now we use to detect search engine crawlers and browser settings.
  • Checkout workflow. Made payment icons clickable (usability).
  • Search engine optimization. We should make 301 (permanent) redirection in LanguageSeoCodeAttribute, NopHttpsRequirementAttribute, and WwwRequirementAttribute.
  • Import from Excel issue fixed. We should not require apostrophe before numeric fields in Excel files.
  • Order details page. Order notes tab. More user-friendly file upload block.
  • TinyMCE editor. Allow store owners to specify font and font size.
  • Updated all third-party libraries to the latest version.
  • Allow customers to free search (min and max product prices set to 0). Previously "ProductLoadAllPaged" stored procedure ignored 0 parameters.
  • Renamed "Google Product Search" to "Google Shopping".
  • Made it more visible to registered account to link external authentication records.
  • Allow customers to detach external authentication records.
  • PayPal Standard plugin. Added "address override" setting. For people who already have PayPal accounts and whom you already prompted for a shipping address before they choose to pay with PayPal, you can use the entered address instead of the address the person has stored with PayPal.
  • Do not use "WWW prefix requirement" setting when running localhost.
  • Performance optimization. Set "runAllManagedModulesForAllRequests" to "false". We should not process static resources. If you're using IIS 7, then ensure that it has SP1 installed. Just a reminder that IIS application pool should be set to "Integrated".
  • EU cookie law 'learn more' link should not open in a new window.
  • Added "Application started" information log. It can understand when the application was started or restarted.
  • Google Shopping plugin. Include "additional_image_link" tag for additional images.
  • Registration page. Now clicking "read" privacy policy opens a pop-up window.
  • Added validation for some discount requirement rule plugins. Previously some inputs could break the application.
  • Performance optimization. Do not load "UrlRecord" for each page load of product, category, manufacturer, etc.
  • Performance optimization. Cache a value indicating whether a customer has some products in the shopping cart. If this property is set to false, then we do not need to load "ShoppingCartItems" navigation property for each page load.
  • Performance optimization. Cache a value indicating whether product has some product attributes. It reduces number of SQL request for product details page without attributes.
  • Performance optimization. Cache widget models. This way we do not load and instanciate widgets for each HTTP request.
  • Performance optimization. Added a setting indicating whether calculated product prices should be cached (disabled by default). Highly recommended to enable if acceptable.
  • Performance optimization. We should dispose DI/IoC scope once a schedule task is completed.
  • Performance optimization. Hundreds of extra redundant calls have been made in LocalizedRoute.
  • Performance optimization. Do not render widget view when model is empty.
  • Performance optimization. Less I/O when looking for views. There's no need to support ".vbhtml" extension.
  • Performance optimization. Added light version of "SearchProducts" method to load associated products - "GetAssociatedProducts".
  • Performance optimization. Faster price calculation logic. Some methods were invoked too many times.
  • Performance optimization. Register highly used action methods as routes.
  • Performance optimization. Memory leaks. We should dispose all used resources at the end of each HTTP request.
  • Performance optimization. There's no need to calculate tax rates for 0 values (attributes without price adjustments, old prices set to 0, etc).
  • Performance optimization. Cache home page categories and subcategories.
  • Performance optimization. Reordered the routes so the most used ones are on top.
  • Performance optimization. Cache static content for 24 hours.
  • Performance optimization for local development. We should not use bundling and minification functionality when debugging (anyway it won't work).
  • Performance optimization. Faster "products also purchased" report.
  • Performance optimization. Do not return views if we already know that there's nothing to display.
  • Performance optimization. Cache related products in the presentation layer.
  • Performance optimization. Do not load all "ActivityLogType" records for each request.
  • Performance optimization. We disable bundling out of the box because it requires a lot of server resources.
  • Performance optimization. Added a new "SupportPreviousNopcommerceVersions" setting (web.config file). Set the setting below to "false" if you did not upgrade from one of the previous versions. It can slightly improve performance.
  • Performance optimization. Added one more database index to [Product_SpecificationAttribute_Mapping] table.
  • Performance optimization. There's no need to enable MARS (Multiple Active Result Sets). It just adds additional overhead. NOTE for existing store owners. Open \App_Data\Settings.txt file and remove "MultipleActiveResultSets=True" from your connection string.
  • Performance optimization. Use "no tracking" to load settings and locale resources.
  • Performance optimization. We should not parse product attributes twice when a customer chooses new attributes.
  • Performance optimization. "Google Product Search" plugin. Load all product records using one SQL request when generating the feed (previous we number of requests were the same as number of products).
  • Performance optimization. Faster "Show the number of distinct products besides each category" setting
  • Developers. Now we do not embedded views for plugins. This way they can be editted without recompilation. Note that now all views (cshtml files) and web.config file should have "Build action" set to "Content" and "Copy to output directory" set to "Copy if newer". Previously we returned embedded view path. Now we return physical view paths (e.g. return View("~/Plugins/DiscountRules.HadSpentAmount/Views/DiscountRulesHadSpentAmount/Configure.cshtml")).
  • Performance optimization. Cache primary store currency in admin area.
  • Performance optimization. Faster application startup (do no search some types in third-party libraries).
  • Performance optimization. Removed very slow overriden "FileExists" method of the "ThemeableVirtualPathProviderViewEngine" class. Let's use the default implementation of "VirtualPathProviderViewEngine".
  • Re-ordered some settings on the catalog settings page (admin area). Move performance related settings to the top.
  • Developers. Now we filter shopping cart items in "LimitPerStore" extension method. This way we can simply (one line change) customize the solution to support shopping cart items shared between stores (multi-store configuration).
  • Developers. Now you should register your custom interfaces in DependencyRegistrar files using "InstancePerLifetimeScope" method (previously we used "InstancePerRequest" or "InstancePerHttpRequest" ones).
  • Developers. Now developers can access "additional data" in widgets. "PublicInfo" method of widgets supports optional "additionalData" parameter. For example, you can get current product ID when implementing a widget for product box ("productbox_add_info" widget zone). Also updated all widget zones with appropriate addional data.
  • Developers. Split CatalogController to two new ones - CatalogController and ProductController.
  • Developers. Moved commonly used code in CatalogController to separate methods.
  • Developers. Autofac. "InstancePerHttpRequest" method is obsolete. Use the new "InstancePerRequest" one.
  • Developers. Added two new widget zones - "productdetails_after_breadcrumb" and "searchbox_before_search_button".
  • Developers. Allow developers to override default CssRewriteUrlTransform for CSS minification.
  • Source code refactoring.


  • Facebook shop plugin did not work.
  • "Dynamic price calculation" issues fixed. It did not properly calculate final price when a discount was applied. It also did consider attribute combinations with overridden price specified. It is ignored currency formatting (e.g. comma on thousand separator). A new "Use AJAX to dynamically update prices" catalog settings added (disabled by default) indicating a way how prices are calculated on the produce details page when a customer changes product attributes. It also updates SKU, MPN, GTIN values overridden in attribute combinations. But note that this method can slightly affect performance.
  • If you had a product set up with "Manage inventory method" set to "Don't manage stock" and a product attribute value associated to some other product, then when the item is sold nopCommerce did not correctly adjust the stock level of the associated product.
  • We should not allow products to be added to the cart from catalog pages if it has some (optional) product attributes.
  • We should not allow searching when default text ("Search store") is entered in the header search box.
  • Product importing could duplicate pictures when importing the same file several times.
  • Export selected products or orders did not work when we have a large number of such entities to be exported (limitation of HTTP GET).
  • Search engine optimization. We should update page URL (search engine friendly name) when choosing a new language.
  • Google Shopping plugin. "Default Google category" dropdownlist was not properly filled.
  • MimeType was not properly determined when importing products with pictures.
  • FakeHttpRequest should override and return null for UserLanguages property. Otherwise, it schedule tasks won't work if the setting to automatically detect the user language is enabled.
  • "Resource already exists" error message were not properly displayed when editing locale resources. The same is about several other pages.
  • Topics with the same system name but limited to distinct stores did not properly work in multi-store environment.
  • Keep alive task should not create guest customer records.
  • Admin area. Price adjustment field was displayed twice for product attributes. Locale resource typo fixed.
  • Admin area. Queued email list (grid). Do not return email body. Otherwise, we can get the following error: "Error during serialization or deserialization using the JSON JavaScriptSerializer. The length of the string exceeds the value set on the maxJsonLength property".
  • Log list (grid). Do not return full error text. Otherwise, we can get the following error: "Error during serialization or deserialization using the JSON JavaScriptSerializer. The length of the string exceeds the value set on the maxJsonLength property".
  • When a store owner clicks "requeue" button on the queued email page, then he should be redirected to the new (requeued) queued email page
  • "Products Never Purchased" report. We should exclude grouped products from the report.
  • We should decode full product description when generating PDF catalog.
  • Shipping method appeared twice on the shipment details page.
  • "Google Product Search" plugin did not support "available for order" value for "availability" anymore.
Release Notes - nopCommerce 3.30 (April 3, 2014)
Release Notes - nopCommerce 3.20 (December 9, 2013)
Release Notes - nopCommerce 3.10 (July 30, 2013)
Release Notes - nopCommerce 3.00 (May 4, 2013)
Release Notes - nopCommerce 2.80 (January 5th, 2013)
Release Notes - nopCommerce 2.70 (November 29, 2012)
Release Notes - nopCommerce 2.65 (August 23, 2012)
Release Notes - nopCommerce 2.60 (July 1, 2012)
Release Notes - nopCommerce 2.50 (April 3, 2012)
Release Notes - nopCommerce 2.40 (February 1, 2012)
Release Notes - nopCommerce 2.30 (November 19, 2011)
Release Notes - nopCommerce 2.20 (October 11, 2011)
Release Notes - nopCommerce 2.10 (September 2, 2011)
Release Notes - nopCommerce 2.00 (August 1, 2011)
Release Notes - nopCommerce 1.90 (December 7, 2010)
Release Notes - nopCommerce 1.80 (August 30, 2010)
Release Notes - nopCommerce 1.70 (July 7, 2010)
Release Notes - nopCommerce 1.60 (June 1, 2010)
Release Notes - nopCommerce 1.50 (March 23, 2010)
Release Notes - nopCommerce 1.40 (December 6, 2009)
Release Notes - nopCommerce 1.30 (August 20, 2009)
Release Notes - nopCommerce 1.20 (June 16, 2009)
Release Notes - nopCommerce 1.11 (April 17, 2009)
Release Notes - nopCommerce 1.10 (February 3, 2009)
Release Notes - nopCommerce 1.05 (November 25, 2008)
Release Notes - nopCommerce 1.04 (November 16, 2008)
Release Notes - nopCommerce 1.03 (November 5, 2008)
Release Notes - nopCommerce 1.02 (November 1, 2008)
Release Notes - nopCommerce 1.01 (October 26, 2008)
Release Notes - nopCommerce 1.00 (October 23, 2008)
nopCommerce on facebook