Compiler - compiles code to a lower level code.

Example:

  • "Developer code" -> "Machine code"
  • PHP -> C
  • Java -> bytecode

Transpiler - compiles code to same level of code/abstraction.

Example:

  • "Developer code" -> "Another developer code or version"
  • JavaScript ES2015+ -> JavaScript ES5

Interpreter - interprets code, not really in the same class/league/context with the two above.

Example: php.exe

  • "Your PHP code/scripts inside index.php" -> "Results to html or just like pure index.html"

As is mentioned in this Wiki article, it is a type of compiler which translates source code from one programming language to another programming language. The source code might be in some language no longer used, or doesn't support latest hardware/software advancements, or as per programmer's convenience/favoritism.

A VB6 to VB.NET converter can be thought of as a Transpiler. I might think of COBOL to C# / C++ / Java tool as a transpiler.


It is often called 'transpiling', when you translate code with JS-preprocessors like CoffeeScript, TypeScript (you name it) to plain JavaScript. But it really isn't a JS exclusive thing. It applies to all kind of programming languages. Mostly it's just called compiling.

Transpiling is a specific term for taking source code written in one language and transforming into another language that has a similar level of abstraction.

According to https://www.stevefenton.co.uk/2012/11/compiling-vs-transpiling/

So in your case:

  • 'compile' JSX => JavaScript (and HTML), which I think matches the definition above.
  • Therefore it can be called 'transpiling'. Though calling it 'compiling' would also be ok.

Another example:

  • CoffeeScript / TypeScript / ...whatEverScript.. => JavaScript and vice versa.

I've been building such tools since the 1980s.

We called them "Source to source program transformation systems".

That term served fine, AFAICT, for about 45 years. The idea goes back far before that; see Val Schorre's Meta II Compiler-compiler work for a 1963 version of this idea.

Now we have this new term; I started see it a few years ago. It adds nothing, but it sounds mysterious and cool. This is how priests establish their worthiness; they invent new vocabulary for old ideas.


A source-to-source compiler translates between programming languages that operate at approximately the same level of abstraction, while a traditional compiler translates from a higher level programming language to a lower level programming language.

Source : Wikipedia

  • Compiler - translates source code from higher level language to lower level language.
    Example: C compilers (C to machine code), javac tool of JDK (java to byte code)
  • Transpiler - a type of compiler that translates between source codes at the same level of abstraction.
    Example: Babel (ES6+ to ES5) - which you can use to write ES6 code while still supporting older browsers like IE 11 and below.