SuiteCommerce
NetSuite Denali
2026-06-22

SuiteCommerce Advanced Denali: Complete Platform Re-Architecture

SCA Denali is a ground-up re-architecture that replaces the build toolchain (Gulp/Node), template engine (Handlebars over Underscore), CSS preprocessor (Sass over LESS), and frontend framework (Bootstrap 3). Existing implementations require full re-implementation — there is no incremental upgrade path.

Affects:SuiteCommerce AdvancedSuiteScript (SSP/Backend Models)SCA Bundles (90208, 90205, 90206)Content Delivery BundleProduct Merchandising BundleBackend Configuration (SspLibraries)

Overview

The Denali release is a complete re-architecture of the SuiteCommerce Advanced platform. Oracle is explicit: existing SCA implementations cannot be incrementally upgraded — migration requires a full re-implementation. Every layer of the stack has changed: build toolchain, templating engine, CSS preprocessor, frontend framework, module structure, backend model hierarchy, and configuration layout.

New Bundle IDs

All three SCA bundles ship under new IDs. Any automation or deployment scripts referencing the old bundle IDs must be updated:

  • SuiteCommerce Advanced Denali — Bundle ID 90208
  • Site Builder Extensions Denali — Bundle ID 90205
  • Site Builder Extensions Premium Denali — Bundle ID 90206

Build Toolchain: Node.js + Gulp.js

Development no longer requires editing files directly in the NetSuite File Cabinet. A local toolchain built on Node.js and Gulp.js compiles JavaScript, Sass, and templates locally before deploying to NetSuite. Gulp tasks from the SCA bundle handle compilation, concatenation, minification, and deployment.

Templating: Underscore.js → Handlebars.js

Front-end templates have been migrated from Underscore.js (.txt files) to Handlebars.js (.tpl files). Templates now live in a Templates/ folder inside each module directory. Handlebars uses double-curly-brace syntax ({{variable}}) for data binding and is logic-less by design. Underscore.js remains in the stack for non-templating utility use.

CSS: LESS → Sass

All stylesheets have been converted from LESS to Sass. Styles are organized in a three-tier hierarchy: Base styles (cross-application), template-specific styles, and application-specific styles. The Sass compiler runs locally via Gulp.

Frontend Framework: Bootstrap 2 → Bootstrap 3

The upgrade from Bootstrap 2.3.1 to Bootstrap 3.3.1 is a breaking change for any custom CSS or JS that relied on Bootstrap 2 class names, grid markup, or component APIs. All custom themes and layout overrides must be audited.

Module Architecture Overhaul

Modules are now versioned and self-contained. Each module directory holds its own JavaScript, templates, and Sass. Previously, templates and stylesheets lived in separate global directories. This enables module-by-module migration in future releases. To customize a module, copy its directory, rename with a new version, and package via Gulp.

Macros → Backbone Composite Views

All macros have been eliminated and replaced with Backbone Composite Views (views containing child views/subviews). Parameters formerly passed via macros are now properties on view context objects.

Backend Model Changes: SCModel Base Class

A new SCModel base class is introduced. All backend models must now extend SCModel and define a name attribute. Common functions for validation, authentication, and error handling are centralized in SC.Model.js.

Example pattern:

return SCModel.extend({ name: 'ProductList', ... })

Configuration File Restructure

  • The single shared front-end configuration file is replaced by a BaseConfiguration object (global attributes) plus per-application config files (Shopping, Checkout, My Account), each depending on the base.
  • Backend.Configuration.js has been renamed to Configuration.js and moved into the SspLibraries module.
  • The Facebook appId configuration has moved from Configuration.js to SC.Shopping.Configuration.js in the ShoppingApplication module. This must be reconfigured via module customization or a custom file override.

Filter by Site ID

Multi-site accounts can now filter My Account order display by site. Set filter_site in SspLibraries/SuiteScript/Configuration.js:

  • 'current' — orders from the current site only (plus unassigned)
  • 'all' — orders from all sites
  • [1,2,3] — orders from specific site IDs (array of integers)

ItemsKeyMapping Refactored to Module

The ItemsKeyMapping class, which maps Search API and Commerce API responses, is now a standalone module instead of being instantiated on the application object. This is a lazy-loading performance improvement — the class is only instantiated when a method requires it. Any custom code that referenced ItemsKeyMapping on the application object must add it as an AMD dependency.

Fieldset Name Parameter

Functions that retrieve/store item information (e.g., preloadItems) now accept an optional fieldset_name parameter. This lets backend services specify a fieldset directly rather than relying solely on site configuration. If omitted, behavior is unchanged (configuration-defined fieldsets are used).

Other Breaking Changes

  • Matrix Child Items field set: The isfulfillable field is now required. It is no longer required for the Details field set.
  • ItemDetails module removed from Checkout: Only the ItemDetails model is included; the Router and full module definition are excluded.
  • Multi-currency: Supported for Shopping and Checkout only. Not supported in My Account.
  • Content Delivery and Product Merchandising bundles: Must be upgraded to the latest version — old versions are incompatible with Denali.
  • Translation files: Updated language JS files were noted as "coming soon" at the time of release and may not be comprehensive.

Third-Party Library Versions

Key version bumps (prior → Denali):

  • jQuery: 1.10.2 → 1.11.1
  • Backbone: 1.0.0 → 1.1.2
  • Bootstrap: 2.3.1 → 3.3.1
  • Underscore: 1.6.0 → 1.7.0
  • Handlebars: new2.0.0
  • RequireJS: 2.1.1 → 2.1.15
  • Jasmine: 1.2.0 → 2.1.3
  • Font Awesome: new4.3.0

What to Do

  1. Plan a re-implementation, not an upgrade. Oracle explicitly states there is no incremental migration path. Budget accordingly.
  2. Set up the local dev environment — install Node.js and Gulp.js, then configure the Gulp tasks from the SCA bundle.
  3. Rewrite all custom templates from Underscore.js (.txt) to Handlebars (.tpl) syntax.
  4. Convert all custom LESS stylesheets to Sass and restructure according to the new Base/Template/Application hierarchy.
  5. Audit all custom CSS and JS for Bootstrap 3 compatibility. Bootstrap 2 class names and grid markup will break.
  6. Refactor all macros into Backbone Composite Views.
  7. Update all backend models to extend SCModel and define a name attribute.
  8. Update AMD dependencies for any custom code that used ItemsKeyMapping from the application object — it is now a standalone module.
  9. Move Facebook appId configuration to SC.Shopping.Configuration.js.
  10. Add isfulfillable to your Matrix Child Items field set.
  11. Upgrade Content Delivery and Product Merchandising bundles to Denali-compatible versions.
  12. Update Jasmine tests — the jump from 1.2 to 2.1.3 includes breaking API changes (e.g., runs()/waitsFor() removed).
  13. Verify translation/language files are current after Oracle publishes the updated language JS files.