Skip to content
Contracts for CoffeeScript
JavaScript CoffeeScript CSS Ruby
Pull request Compare This branch is 269 commits ahead, 1132 commits behind jashkenas:master.
Latest commit a3a9bf7 Aug 8, 2014 @disnet Update
Failed to load latest commit information.
contracts.js @ fee8a21
examples fixes #1699 Sep 18, 2011
test tracking lib May 1, 2013
.npmignore fixes issue #1490 ... jsl.conf is incorrectly npmignored. Jul 6, 2011
LICENSE Update Aug 8, 2014
Rakefile Updating rake task to pull version number and date. Nov 21, 2010
package.json bump version May 1, 2013
test.html is a dialect of CoffeeScript with contract support.

Contracts allow you to write powerful runtime assertions about your code. Like types but less painful, like assert but more useful.

square :: (Num) -> Num
square = (x) -> x * x

# throws a run-time error
square "a string"   

Documentation, usage, and more examples:

Note: I am no longer actively maintaining Check out contracts.js instead which has great inspired syntax thanks to sweet.js macros.

Quick start

Install via npm:

npm install -g

Use the compiler:

coffee -c --contracts /path/to/

An alternative to using the --contracts flag is setting this env variable:


If you are running in the browser then you'll need to load the contracts library (found in lib/contracts/contracts.js)

<script type="text/javascript" src="contracts.js"></script>

There is also experimental support for require.js. See here for an example.

If you are running in node.js then you'll need to install the contracts.js package

npm install contracts.js

Note that requires some pretty new features of JavaScript (Proxies in particular) so it currently only works on Firefox 4+, node.js 0.8.0+, and recent versions of Chrome (though you'll need to enable the experimental JavaScript flag in about:flags).

Change Log

  • 0.3.2 (September 5, 2012)
    • disabling contracts for arrays (see issue 54)
    • various bug fixes
  • 0.3.1 (July 15th, 2012)
    • support for stable node.js (v0.8.0+)
    • some bug fixes
  • 0.3.0 (March 15th, 2012)
    • change to dependent function contracts
    • various bug fixes: #27, #41, #33, #31,
    • various contracts.js bug fixes: #9, #8, #7, #6, #5, #4
    • experimental support for require.js (see here for example use)
    • based off CoffeeScript 1.3.1
  • 0.2.0 (January 4th, 2012)
    • removed .use(), now using Contracts.exports and Contracts.use
    • various bug fixes
    • based off CoffeeScript 1.2.0
  • 0.1.0 (August 29th, 2011)
    • initial release
    • based off CoffeeScript 1.1.2
Something went wrong with that request. Please try again.