List of languages that compile to JavaScript and many other transpilers
Table of contents
- CoffeeScript + Family & Friends
- JavaScript Extensions
- Ruby
- Python
- Erlang
- Elixir
- Perl
- Java/JVM
- Scala
- C#, F#, .NET related languages
- Lisp, Scheme
- OCaml
- Haskell
- Smalltalk
- C/C++
- Basic
- Pascal, Modula, Oberon
- Go
- Multitarget
- Tierless languages (produce both client & server)
- Visual programming tools
- SQL
- PHP
- Lua
- Prolog
- Others
- Tools for Compiler Writers
CoffeeScript + Family & Friends
Family (share genes with CoffeeScript)
Name | Description | Last commit |
---|---|---|
Coco | A CoffeeScript dialect that aims to be more radical and practical, also acts as a test bed for features that get imported in CoffeeScript. | 2014-09-28 |
LiveScript | A fork of Coco that is much more compatible with CoffeeScript, more functional, and with more features. | 2018-11-11 |
IcedCoffeeScript | A CoffeeScript dialect that adds support for await and defer keywords which simplify async control flow. |
2019-11-27 |
Parsec CoffeeScript | CS based on parser combinators. The project’s aim is to add static metaprogramming (i.e. macros + syntax extensibility) to Coffee Script (CS), similar to how Metalua adds such features to Lua. The resulting compiler, once merged with the official compiler, should be usable as a drop-in replacement for it. | 2015-11-18 |
Contracts.coffee | A dialect of CoffeeScript that adds built-in support for contracts. | 2014-08-08 |
Uberscript | A CoffeeScript fork that adds type annotations which are compiled to Google closure compiler type annotation comments. | 2013-09-16 |
ToffeeScript | A dialect of CoffeeScript that support Asynchronous Syntax and Regexp operator =~ | 2018-04-02 |
Caffeine | A dialect of CoffeeScript that supports packages and classes import, useful for browser applications | 2013-06-03 |
heap.coffee | A dialect of CoffeeScript that offers a C-like type system with manual memory management | 2012-05-13 |
EmberScript | Ember.js-infused CoffeeScript. | 2015-04-02 |
BlackCoffee | CoffeeScript with hygienic macros. See also #3171 | 2014-11-28 |
Storymatic | A dialect of CoffeeScript rewritten from scratch to support typed languages. | 2022-06-04 |
Friends (philosophically related)
Name | Description | Last commit |
---|---|---|
NodeScript | JavaScript without the Variable Declarations and Semicolons | 2017-11-01 |
Bizubee | The World’s Most Intense Programming Language! | 2017-02-08 |
Kaffeine | Enhanced Syntax for JavaScript. | 2012-08-21 |
Moescript | Indent-based language. The original repository at https://github.com/moescript/moescript is missing. The link is to a surviving fork. | 2012-04-14 |
pogoscript | Language that emphasises readability, handles async control flow nicely, is friendly to domain specific languages and compiles to regular JavaScript | 2015-08-11 |
LispyScript | A JavaScript with Lispy syntax and Macros. ○ | 2020-01-28 |
Hot Cocoa Lisp | A Lisp-like language that compiles to JavaScript. ○ | 2015-03-15 |
Sibilant | JavaScript with a lisp. ○ | 2017-12-20 |
ki | Clojure-like syntax, mori‘s immutable data structures in a few sweet.js macros. Can be intermixed with JavaScript. ○ | 2016-02-06 |
jisp | A JS-native and axiomatic Lisp that focuses on the core ideas of code-as-data, S-expressions, and macros, introducing as few new concepts as possible. ○ | 2015-03-20 |
Ham | Looks very similar to JavaScript at first, but offers (hopefully) many useful features | 2013-05-27 |
GorillaScript | Compile-to-JavaScript language designed to empower the user while attempting to prevent some common errors, offers Macros, optional Typing, and asynchronous syntax. | 2013-07-16 |
RedScript | Elixir-flavored JavaScript. | 2018-04-04 |
Daonode | Functional logic solver, compiler. | 2015-11-26 |
LiteScript | Literate, highly-readable, type annotated, imperative language that compiles to JavaScript. | 2018-06-22 |
ColaScript | Similar to Dart, CoffeeScript, Python and PHP | 2015-02-03 |
Taijilang | A customizable and extensible language with dynamic parser and meta language. | 2015-11-27 |
MoonScript | MoonScript is a dynamic scripting language that compiles into Lua. The syntax of MoonScript has been heavily inspired by the syntax of CoffeeScript. | 2020-02-02 |
Earl Grey | An extensible language with pattern matching, hygienic macros and a syntax similar to Python. | 2017-08-14 |
Khepri | Lightweight language that reworks Javascript’s syntax to be better for untyped functional-style programming. | 2015-05-16 |
Spider | Spider is a programming language that compiles to JavaScript (ES5 and ES6 targets). It takes the best ideas of Go, Swift, Python, C# and CoffeeScript. | 2017-10-21 |
CirruScript | Write JavaScript with indentations and polish notations, similar to S-Expression but with fewer parentheses. | 2020-01-28 |
TLC | Tag Line Commands is a inline macro language for calling+formatting javascript/coffeescript/livescript json output into HTML. | 2015-07-26 |
CokeScript | Inspired by Python and Ruby that integrates natively with the Virtual-DOM library | 2018-07-05 |
imba | Full-stack programming language for the Web that compiles to performant JavaScript | 2020-02-26 |
Cor | Straightforward language for the Web | 2016-12-11 |
Iode | A language inspired by Swift | 2016-03-28 |
FutureScript | A more radical, but more readable, different new language. | 2018-12-11 |
PearScript | Shorthanding JavaScript one more time. | 2016-01-28 |
RamdaScript | JavaScript in the Ramda way. | 2018-01-23 |
RoyalScript | A functional language that has loops, types, structs, and much more. | 2017-03-23 |
JavaScript Extensions
Security enforcing JavaScript
Name | Description |
---|---|
Caja | Compiles ES5/strict to ES3 and supports object-capabilities |
ADsafe | Client-side static verifier and API, making third party scripts safe. |
Jacaranda | Static verifier supporting object-capabilities. |
Dojo Secure | Framework for building secure mashups. |
Static typing
NOTE: Some of the projects listed below are also statically typed, such as mobl, GWT, JSIL, NS Basic, and Haxe.
Name | Description |
---|---|
Dart | C/Java-like syntax with optional typing by Google. |
TypeScript | Typed superset of JavaScript by Microsoft. |
TeJaS | From Brown PLT. Types for JavaScript (itself). |
asm.js | Subset of JavaScript that can be used as a low-level, efficient target language for compilers. Now included in Firefox. |
JavaScript++ | JavaScript superset with classes, type checking, among other features |
Mascara | [commercial] Enhances JavaScript with powerful features like classes, namespaces and type-checking. |
Roy | Tries to meld JavaScript semantics with some features common in static functional languages |
Elm | Type-safe functional language that compiles to HTML, CSS, and JavaScript. |
Swym | Statically typed, with type inference and generics |
Typecast.js | JavaScript platform for statically typed variables without a custom compiler. |
PureScript | A small, strongly typed programming language that compiles to JavaScript and C++, featuring extensible records and effects, and type classes. |
Flow | Static type checker for JavaScript, supports optional types and null checks by Facebook. |
ActionScript | With Apache Royale ASJS (formerly FlexJS) – Based on ECMAScript 4, ActionScript provides typing and can be compiled to JavaScript. |
ReScript | (Formerly BuckleScript) Compiles OCaml, and its syntax extension Reason, to readable JavaScript, enabling powerful static type-checking, among other features. ○ |
Synchronous to Asynchronous JavaScript Compilers (CPS)
Name | Description |
---|---|
Streamline.js | Uses underscore (_) to stand for callbacks. This fork preserves line numbers for debugging. |
mobl | The new language for programming the mobile web. |
StratifiedJS | JavaScript + structured concurrency. |
NarrativeJS | JavaScript extension with asynchronous futures and promises. |
jwacs | JavaScript With Advanced Continuation Support. |
Wind.js | Wind.js is an advanced library which enable us to control flow with plain JavaScript for asynchronous programming (and more) without additional pre-compiling steps. |
TameJS | Adds new keywords ‘await’ and ‘defer’ |
Continuation.js | A lightweight JIT compiler for simplifying asynchronous JavaScript programming with no runtime dependences. It supports both Node.js and browser-side JavaScript and is compatible with CoffeeScript (also TypeScript, and any other scripts compile to js). |
Kal | Makes asynchronous programming easy and clean by allowing functions to pause and wait for I/O, replacing an awkward callback syntax with a clean, simple syntax |
JSPipe | Provides JavaScript primitives to write async code without callbacks or chained functions. Inspired by Goroutines and Channels found in Go and in Clojure. For Web and NodeJS. ES5 and ES6. |
promiseLand | PromiseLand is a very promising Language. It includes ES5 strict mode, uses the * dereferencing operator to access promise results and introduces additional features designed to let you focus on your program logic. Such as dynamic typesafety, frame addressing, generic load and safe features. |
JavaScript Language Extensions
Name | Description |
---|---|
ContextJS | An implementation of Context-oriented Programming for JavaScript. |
Objective-J | Shares with JavaScript the same relationship that Objective-C has with the C programming language: that of being a strict, but small, superset. |
Mochiscript | Object-oriented JavaScript with syntactic sugar. Released as a Ruby gem. |
jangaroo | AS3 (ActionScript) to JavaScript. |
Flapjax | Event-driven, reactive evaluation. |
jLang | Adds object oriented syntax, namespaces, operators overriding |
Restrict Mode | |
TIScript | Gentle extension of JavaScript |
Six | Six is a language super-set of JavaScript that enables new syntactic features from the 6th edition of ECMAScript to be used, through a transpiler, in your scripts today. |
js– | JavaScript subset for interactive/visual programming. |
Latte JS | Superset of JavaScript (eventually ES6), with similar goals to CoffeeScript, but keeping JS syntax. |
JSX | A superset to add an XML-like syntax to represent HTML elements in React by Facebook |
oj | Objective-C inspired superset of JavaScript with a tiny runtime, built-in obfuscator, and experimental type checker (courtesy of Typescript). |
mfjs | Adds arbitrary side effects not already available in JavaScript. They may include but not limited to delimited continuations, asynchronous, logic, reactive, parallel, distributed and probabilistic programming. It doesn’t extend syntax so it may be used with any other language compiling to JavaScript. |
Ruby
Name | Description |
---|---|
Opal | Ruby to JavaScript compiler. |
HotRuby | Runs opcode, compiled by YARV on Ruby inside a web browser or in Flash. |
ColdRuby | Compiler of Ruby 1.9 MRI bytecode, and a runtime written in JavaScript to aid in execution of Ruby code. |
rb2js | Converts Ruby to JavaScript. |
RubyJS | A successor to rb2js |
Red | Writes like Ruby and runs like JavaScript |
Quby | Used for game coding site, open source. |
8ball | Ruby-to-JavaScript source-to-source transformer |
Ruby2JS | Minimal yet extensible Ruby to JavaScript conversion. |
ruby-parser.js | Original Ruby 2.0 parser ported to pure JavaScript, produces AST |
Python
Name | Description |
---|---|
Pyodide | CPython, the reference Python implementation, compiled to WASM. Also includes the Python scientific stack. |
PYXC-PJ | [CS friend] Python to JS. Can generate a (line/col)-number mappings file. (Dead. Last updated 8 years ago.) |
Pyjamas | Python to JS. |
Pyjaco | Python to JavaScript compiler with module support. |
Pyjs | Python to (readable) JS. |
Skulpt | Python. Client side. |
PyCow | Python to MooTools JS. |
PyvaScript | Python-like syntax to JavaScript. |
RapydScript | JavaScript with a Pythonic syntax. |
Bulbul | Python3 to JavaScript/ES6/ES7 compiler. Apparently the only Python-to-JS compiler intended to provide support for AngularJS, React, Aurelia and other modern JS libs. |
Brython | Browser Python. Embed Python 3 in |
PythonScript | Python-like compiled to JavaScript |
pythonscript | Python compiled to readable JavaScript using the AST. (proof of concept) |
Rusthon | Integrates several python to js methods into one project. |
PyPyJS | PyPy. Compiled into JavaScript using Emscripten. JIT-compiling to JavaScript at runtime. |
Batavia | Run Python bytecode in the browser |
Transcrypt | New Python 3.5 to JavaScript transpiler. Supports multiple inheritance, bound function assignment, selective operator overloading, highly readable JS output, sourcemaps, small downloads, fast execution using call memoizing. Integrated with closure compiler / minifier, optional static checker and fabric.js graphics lib for HTML5 canvas. |
pseudo-python | A restricted python to javascript/c#/go/ruby compiler |
JavaScripthon | Transpile Python3.5 to ES6 and to ES5 (with the help of BabelJS, but w/o the need for nodejs). Supports classes, generators, async functions. |
PScript | Python compiled to JavaScript. |
Erlang
Name | Description |
---|---|
Shen | First and yet smallest Erlang JavaScript Compiler based on Erlang AST. It allows you to translate Elixir, Joxa, Lol and Erlang programs to JavaScript with erlc. JavaScript/OTP subset. Has node npm package called erlang-shen-js. |
LuvvieScript | A browser-based dom-scripting language that is a strict sub-set of Erlang which is AST-to-AST transpiled to JavaScript (code) |
browserl | Erlang Emulator written in JavaScript |
Elixir
Name | Description |
---|---|
ElixirScript | Converts Elixir AST to JavaScript AST to JavaScript code. |
Perl
Name | Description |
---|---|
Perlito | Project to compile Perl 5/6 to JavaScript, Ruby, SBCL, and Go. |
p2js | Perl to JavaScript converter |
perl.js |
Java/JVM
Name | Description |
---|---|
GWT | Google Web Toolkit, compiles Java to JavaScript. |
Java2Script/SwingJS | Eclipse Java to JavaScript compiler plugin and JavaScript version of the Java 8 JVM for Java applets and applications, with over 2300+ Java8 OpenJDK classes, including gnu.jpdf, gov.nist.jama, java(applet, awt, beans, io, lang, math, net, nio, security, text, util), javax(imageio, net, print, sound, swing, xml), netscape(javascript), org(apache, json, unicode, xml), sun(applet, audio, awt, net, nio, reflect, security, swing, text, util), along with an extensive library of plaf (Plaform Look and Feel) for HTML5; tested successfully on over 400,000 lines of original working Java code in 2 major (150,000+ line) applications (Jmol and Jalview) 600+ applets and 1000+ web pages in multiple projects; nearly complete AWT and Swing implementations; actively developed (since 2012); requires minor Java-compatible code adjustment to handle multithreading and modal dialogs; extensive developer documentation and support; beta |
j2js | Java bytecode to JavaScript. |
Strongly-Typed JavaScript (STJS) | JavaScript code generator from Java source. It is built as a Maven plugin. |
BicaJVM | JavaScript implementation of JVM. |
Doppio | JVM interpreter on CoffeeScript. |
Processing.js | A Java-based visualization language that interprets to JavaScript. |
Kotlin | Statically typed programming language targeting the JVM and JavaScript. |
Ceylon | A modular static-typed JVM language compilable to JavaScript. |
GrooScript | A framework to convert Groovy code to JavaScript. |
node-jvm | Java virtual machine in pure node.js |
Bck2Brwsr | Run “browserified” Java Code in, well, the browser. |
QWT | QWT consists of a Java-to-JavaScript compiler, a prepared library of Qooxdoo componente (version 0.7.x) and some other tools. Similar to GWT |
TeaVM | An ahead-of-time transpiler that takes JVM bytecode and produces JavaScript. |
Dragome SDK | Compiles JVM bytecode to Javascript. |
JSweet | A Java to JavaScript transpiler built on top of TypeScript and giving access to hundreds of JavaScript libraries in Java. |
j2cl | Compiles Java to Javascript. |
Online-IDE | A java-like programming language with IDE for computer-science-education that runs inside any browser |
Scala
Name | Description |
---|---|
Scala.js | The official Scala to JavaScript compiler |
js-scala | JavaScript as an embedded DSL in Scala |
scalagwt | Enhanced GWT (accepts jribble as well as Java) plus Scala to jribble. |
JScala | Scala macro that produces JavaScript from Scala code. |
C#, F#, .NET related languages
Name | Description |
---|---|
jsc | [experimental] Recompile your .NET assembly to JavaScript, ActionScript, PHP or Java. |
JSIL | MSIL (.NET bytecode) to JavaScript |
Script# | Compiles C# to JS. |
CilJs | Translates CIL/MSIL (.NET bytecode) (C#) to JavaScript |
Prefix | Defunct |
Blade | Visual Studio add-on for converting C# to JavaScript |
SharpKit | C# to JavaScript Cross-Compiler |
Saltarelle | C# to JavaScript Compiler. Saltarelle is now part of Bridge.NET. |
FunScript | F# to JavaScript compiler with JQuery etc. mappings through a TypeScript type provider |
Pit | F# to JavaScript compiler |
WebSharper | Lets you compile F# to JS. |
NemerleWeb | Nemerle language compiled to JS. |
Blue Storm | F# to JavaScript (and some other languages). |
JScriptSuite | .NET to JavaScript compiler (cross browser API, client site controls and components). |
DotNetWebToolkit | Toolkit providing a .NET CIL to JavaScript transcoder and Visual Studio project/debugging integration |
Netjs | .NET to TypeScript and JavaScript compiler. It uses multiple stages to produce JavaScript for your web apps. |
WootzJs | C# to Javascript cross-compiler built on top of Microsoft Roslyn, which handles the complex process of converting your C# code into syntax trees with symbol information |
Bridge.NET | Open Source C#-to-JavaScript compiler using Microsoft Roslyn. Includes support for jQuery + many other frameworks. Developed and well supported by a professional team. Try online at Deck.NET. |
Fable | F# to JavaScript Compiler |
Lisp, Scheme
Clojure-like
Name | Description |
---|---|
ClojureScript | Clojure to JS, the official version. Supports the majority of Clojure including persistent datastructures. |
ClojureJS | Subset of Clojure to JS. |
Chlorinejs | A fork of ClojureJS with a port of clojure.core library. |
wisp | A homoiconic JavaScript dialect with Clojure syntax, S-expressions and macros. Aims to be rich subset of Clojure(Script) that seamlessly interops with both Clojure(Script) and JavaScript. ○ |
Scriptjure | Library for generating JavaScript from Clojure forms. |
ki | Clojure-like syntax, mori‘s immutable data structures in a few sweet.js macros. Can be intermixed with JavaScript. ○ |
Calcit-js | A JavaScript code generator sharing ClojureScript semantics, featured macros, immutable data, and prefix notations. However, it relies on indentation-based syntax from Cirru(Script). |
Scheme-like
Name | Description |
---|---|
BiwaScheme | Scheme(R6RS) in JavaScript |
Fargo | Scheme in JavaScript |
LIPS | Scheme (R7RS) in JavaScript |
Moby Scheme | A Scheme running in JS. |
nconc | Scheme interpreter in JavaScript with stack-friendly tail calls and full call/cc |
Scheje | A Little Scheme on Top of Clojure – compiles on Node.js and the Browser. |
scheme2js | Scheme to JavaScript. |
Spock | A Scheme to JavaScript compiler that uses Henry Baker’s Cheney-on-the-MTA compilation strategy |
Whalesong | Racket to JS compiler |
RacketScript | Lightweight Racket to JavaScript compiler. The generated code is ES6, which can be translated to ES5 using Babel or Traceur. |
urlang | A nanopass compiler accepting Racket-like syntax |
Other
Name | Description |
---|---|
eslisp | An S-expression syntax for ECMAScript/JavaScript, with Lisp-like hygienic macros that are just JS functions. Aims to be very close to JS, and highly experimental. |
EdgeLisp | A Lisp in the tradition of Common Lisp |
Parenscript | Subset of Common Lisp to JS. |
Ralph | Lisp-1 dialect that compiles to JavaScript, inspired by Dylan |
Oppo | A JavaScripter’s lisp. Inspired by JavaScript, Clojure and CoffeeScript. Compiler built using Jison. |
LispyScript | A JavaScript with Lispy syntax and Macros. ○ |
Outlet | A simple Lisp that supports CPS and in-browser stepping debugging, and other things. In development. |
Hot Cocoa Lisp | A Lisp-like language that compiles to JavaScript. ○ |
Sibilant | JavaScript with a lisp. ○ |
jisp | A JS-native and axiomatic Lisp that focuses on the core ideas of code-as-data, S-expressions, and macros, introducing as few new concepts as possible. ○ |
JSCL | A Lisp-to-Javascript compiler bootstrapped from Common Lisp |
Lux | Statically typed, functional Lisp with an ML-like module system |
OCaml
Name | Description |
---|---|
Ocamljs | OCaml to JS. |
O’Browser | OCaml bytecode interpreter in JS. |
Js_of_ocaml | OCaml bytecode to JS compiler. |
ReScript | (Formerly BuckleScript) Compiles OCaml, and its syntax extension Reason, to readable JavaScript. ○ |
Haskell
Name | Description |
---|---|
UHC | (Utrecht Haskell Compiler) backend converts UHC core to JavaScript, allowing the compiling of Haskell code to JS. |
ghcjs | Compile normal Haskell into JS |
jmacro | Quasi-Quoted JS that you can insert Haskell values into (there is also shakespeare-js for that purpose), but also supports a more Haskellish syntactic version of JavaScript. |
lambdascript | Compile a subset of Haskell into JS |
YHC | (York Haskell Compiler) backend, as above but with YHC core language. |
jshaskell | |
haste | |
fay | A proper subset of Haskell that compiles to JavaScript |
forml | A contemporary programming language intended to approximate the safety of Haskell and the expressiveness of Ruby. |
Smalltalk
Name | Description |
---|---|
Amber | Formerly known as Jtalk |
Clamato | A Smalltalk dialect that is designed to operate within the JavaScript runtime. |
Silver Smalltalk | [commercial?] Smalltalk in the browser. (Still active?) |
Lively Kernel | Smalltalk/squeak-like development environment in the browser. See also Avocado, built on top of it. |
Little Smallscript | Little Smalltalk to JavaScript translator. |
SqueakJS | Squeak VM in Javascript |
PharoJS | PharoJS is a Pharo to JavaScript compiler and infrastructure for remote test and debugging. The goal is to enable developing apps in Pharo while deploying them on top of a JavaScript engine. |
C/C++
Name | Description |
---|---|
Emscripten | LLVM to JavaScript compiler. LLVM is “an aggressive open-source compiler for C and C++,” as well as other languages. |
Cheerp | (formerly Duetto) “compiles C++ applications to binary code and JavaScript. Based and integrated into the LLVM/clang infrastructure” |
maja | Vala (gobject) to JavaScript |
Clue | C language compiler to different runtimes (Lua, JS, Perl 5, C, Java, CL). |
LLJS | Typed dialect of JavaScript that offers a C-like type system with manual memory management |
Mandreel | Can convert C++ and Objective-C applications based on OpenGL ES to JavaScript or Action Script 3 web application. |
Bonsai-C | Convert C co |