An AMD-compatible build tool.

npm install cram
10 downloads in the last day
67 downloads in the last week
440 downloads in the last month


cujoJS resource assembler

See the docs/ folder for instructions and useful information.

New! gulp integration via gulp-cram by @bclozel!



npm install --save cram

To run cram from any folder:

npm install --global cram



Release notes


  • Fix module parsing code to stop prematurely detecting the end of an AMD define when there are regexp literals inside parentheses.
  • Only declare global define() during bundling to help isolate problems with UMD modules running under node (as with gulp and grunt).
  • Separate argument-parsing code from cramming code so logic to run as a module or as a command-line tool can be done more sanely.


  • Fix logic to detect whether cram is running as an npm task and ensure that the promise returned from the API only resolves once the bundle is created.
  • Stop appending to the cached AST data. It should be overwritten.


  • Add a minimal JavaScript API.
  • Correct regression: --exclude CLI option now works again.
  • Handle when factory args > dependent module ids when simplifying AMD defines. For instance, the curl/loader/cjsm11 cram plugin adds an extra arg now.


  • Stop failing when plugins output more than one define().


  • Fix compile bug that prevented use of css! plugin.
  • Start using when.js 2.x.
  • Fix configuration merging errors when inspecting both html and run.js.


  • Ensure that baseUrl and output are converted to absolute paths so node doesn't try to resolve them using node_modules logic.


  • Bug fix: plugins are now responsible for resolving url/filepath.
  • Bug fix: Normalize r-value require()s when using loaders, too.
  • Bug fix: Infer appRoot from run.js file, not just index.html. Improve logged messages a bit, too.
  • Bug fix: Excluded modules don't get compiled anymore. Force 'curl' and 'curl/_privileged' to be excluded in all cases.


  • AMD modules are now published to npm, so manually running bower is no longer necessary.
  • Failing to supply some AMD configuration properties no longer causes cram.js to throw. (Thanks Blaine!)


  • Lots of fixes to the code that groks html files.
  • Internal refactoring and reorganization


  • Use same logic as curl.js when assigning configuration to modules that may be loaded by a plugin or module loader.
  • Add a legacy loader example.
  • Stop detecting code such as goog.require('id') as a CommonJS-style require('id').


  • Improve support for i18n and CommonJS modules via curl.js 0.8
  • Improve module parsing (fixes some issues with lodash).
  • Parse literal RegExps better.
  • Include simple example apps.
  • Find build override json files without absolute paths.
  • Fix many other minor things.
npm loves you