# via yarn $ yarn global add decaffeinate # via npm $ npm install -g decaffeinate $ decaffeinate input.coffee input.coffee → input.js # convert all files in directory and subdirectories $ decaffeinate . input.coffee → input.js subfolder/input.coffee → subfolder/input.js
Alternatively, paste code into the online repl to immediately see the output.
Complete. The project is stable enough for production use, and has been used to convert hundreds of thousands (probably millions) of lines of production code. The conversion process has been extensively tested and there are few or no known correctness bugs, although no guarantees are made.
Here are some popular open source CoffeeScript projects and their current status when run through decaffeinate. Each project has a decaffeinate-specific fork that is re-created from the original repo once per day.
|Project||Lines of CoffeeScript||Conversion status||Test status|
To contribute to this list, send a pull request to the decaffeinate-examples project.
In addition, decaffeinate has been used on private codebases within various companies, such as Square, Benchling, Bugsnag, and DataFox.
Some blog posts on using decaffeinate:
If you run into crashes or correctness issues, or you have suggestions on how decaffeinate could be improved, feel free to file an issue on the issues page.
--use-cs2: Treat the input as CoffeeScript 2 code. CoffeeScript 2 has some small breaking changes and differences in behavior compared with CS1, so decaffeinate assumes CS1 by default and allows CS2 via this flag.
export. Note that this may result in incorrect import statements because decaffeinate does not know the export style used by the other file. To generate correct imports, use bulk-decaffeinate and enable the
--literate: Treat the input file as Literate CoffeeScript.
--disable-suggestion-comment: Do not include a comment with followup suggestions at the top of the output file.
--no-array-includes: Do not use
Array.prototype.includesin generated code.
--use-optional-chaining: Use the upcoming optional chaining syntax for operators like
?.[NOTE: this is disabled and has no effect].
--safe-import-function-identifiers: Comma-separated list of function names that may safely be in the
requiresection of the file. All other function calls will disqualify later
requires from being converted to
constfor most variables in output code.
--loose: Enable all
--loose-default-params: Convert CS default params to JS default params.
--loose-for-expressions: Do not wrap expression loop targets in
--loose-for-of: Do not wrap JS
for...ofloop targets in
--loose-includes: Do not wrap in
--loose-comparison-negation: Allow unsafe simplifications like
!(a > b)to
a <= b.
--loose-js-modules: Allow named exports when converting to JS modules.
--disable-babel-constructor-workaround: Never include the Babel/TypeScript workaround code to allow
--disallow-invalid-constructors: Give an error when constructors use
superor omit the
supercall in a subclass.
For more usage details, see the output of