# CT 4.4 Upgrade Guide

**❗ IMPORTANT**\
If you are upgrading from a version prior to Caplin Trader 4.x, read [CT 4.0 Upgrade Guide: Configuration](ct-4.0-upgrade-guide-configuration-changes.md) and [CT 4.0 Upgrade Guide: Code](ct4.0-upgrade-guide.md) first.

Caplin Trader 4.4 is the first version of Caplin Trader 4 to be released with all SDK modules written in CommonJS format. While NamespacedJS is still supported as a module format in Caplin Trader 4.4, the move to CommonJS as the format for all SDK modules has changed some aspects of the bundling process. This page outlines the compatibility implications this has for your code.

In order to take advantage of advances in JavaScript tooling, support for NamespacedJS will be dropped in the next major release of Caplin Trader following Caplin Trader 4.

For an introduction to the differences between NamespacedJS and CommonJS module formats, see [Module format](bladerunnerjs/bladerunnerjs-module-format.md).

## Compatibility notes

The conversion to CommonJS has the following implications for your code:

* All JavaScript patches under `js-patches` must be in CommonJS format.
* Namespaced references continue to be recognised within NamespacedJS modules.
* Namespaced references are no longer recognised within CommonJS modules. 
  * Use `require` to get a reference to a class. For example, to get a reference to the class `br.validation.ISODateValidator`, use `var ISODateValidator = require('br/validation/ISODateValidator')`
  * Caplin-bootstrap methods are now also available as method-specific modules. For example, to get a reference to the caplin-bootstrap method `notifyAfterClassLoad`, use `var notifyAfterClassLoad = require('caplin/notifyAfterClassLoad')`
* Use of `caplin.thirdparty('_thirdparty_library_name_')` should be replaced with `require('_thirdparty_library_name_')`. For example, to reference the library `sljs`, use `var sljs = require('sljs')`
* In applications without any NamespacedJS modules, class definitions for aliases are no longer implicitly bundled. To bundle the class-definition for an alias, use `require('alias!_logical_alias_')`. For example, to bundle the class definition for the alias `br.presenter-component`, use `require('alias!br.presenter-component')`. For more information on aliases, see [Inversion of Control using the AliasRegistry](http://bladerunnerjs.org/docs/concepts/ioc/) on the BladeRunnerJS website.
* There is a small chance that CommonJS code within your codebase may raise circular-dependency errors. For the reasons why these errors occur and for guidance on how to resolve the errors, see [BladeRunnerJS: CommonJS Compliance](https://github.com/BladeRunnerJS/brjs/wiki/BladeRunnerJS-CommonJs-Compliance) on the BladeRunnerJs website.

## Converting your code to CommonJS format

Support for NamespacedJS will be dropped in the next major release of Caplin Trader after Caplin Trader 4. To maintain a clean upgrade path to later releases of Caplin Trader, we recommend that you convert your code to CommonJS format. For more information on the conversion process, see [Migration path from NamespacedJS to CommonJS](bladerunnerjs/bladerunnerjs-module-format.md#migration).

---

**See also:**

* [CT 4.0 Upgrade Guide: Configuration](ct-4.0-upgrade-guide-configuration-changes.md)
* [CT 4.0 Upgrade Guide: Code](ct4.0-upgrade-guide.md)
* [BladeRunnerJS > Module Format](bladerunnerjs/bladerunnerjs-module-format.md)
