Programming Languages for JVM

The list of JVM Languages on this page includes the main programming languages used to create software for the Java Virtual Machine (JVM). Originally, the JVM was created to support only the Java language. However, as it gained popularity, more languages were added or adapted to run on the platform.

JVM Languages

The following JVM programming languages were written specifically to run on the Java Virtual Machine. Many of them are implementations of existing languages, like Python or PHP, adjusted to work with the JVM, such as Jython (Python implementation) and Quercus (PHP implementation).

At the bottom of the article, we also list several Java converters that can take code from a language like C or Python and (ostensibly) translate it to Java code. While these converters meet with mixed reviews from users, they’re still worth a look.

Most Popular

Let’s start with the most popular programming languages for JVM. Those are Java (of course), Groovy, Clojure (a dialect of Functional Lisp), Scala, JRuby, Kotlin, Xtend, Ceylon, Fantom, and Jython. Some of the languages were developed expressly for JVM.

Clojure

Clojure is possibly the crowd favorite out of all the programming languages for the JVM. A Functional Lisp dialect, its immutability and simplicity make it a popular choice with developers. Working against it are confusing error messages , dynamic type, and radically different syntax.

Scala

Scala is a statically-typed JVM programming language that can use Java libraries. It uses immutable values and supports both imperative and functional paradigms, allowing users the freedom to choose. However, its complex grammar and robust system can intimidate some beginners.

Kotlin

Kotlin is a statically typed coding language for the Java Virtual Machine. Designed to address most of Java’s problems, with a type system designed to eliminate null references from our code. Because it runs on the JVM, this programming language is fully interoperable with Java. Like Scala, it can use existing Java libraries and frameworks.

Ceylon

Ceylon is a statically-typed, object oriented programming language for the JVM. Created by Red Hat, it has a more powerful type system than Java, but comes with familiar syntax. Despite its robust feature list , its small market share means a relatively small number of useful libraries.

Java

Java is of course the original JVM programming language. It gets a fair bit of its syntax from C++ and C, but it’s simpler to use and it uses object-oriented programming. Its consistent standards and commonality throughout the industry make it a solid choice for the JVM. However, some users complain it’s too verbose and has several confusing features.

Groovy

Apache Groovy is a popular programming language for the JVM with a large and developed ecosystem. The existence of several libraries and frameworks (most notably the Grails framework) make it a versatile choice for developers. Groovy is a dynamic and object oriented scripting language.

Xtend

Xtend offers close Java interoperability and rich tooling. This statically-typed JVM programming language compiles to Java code instead of bytecode. This is very helpful for beginners and debugging. Some developers complain of slow compilation issues with large classes.

Fantom

This object oriented programming language for the JVM differs from others of its kind by shunning the support of user-defined generics. It does however include three built-in classes that can be parameterized. The idea was to let programmers use generics while keeping the overall type system simple.

Implementations of Other Languages

The JVM programming languages below are all implementations of other popular languages, like Lisp, Ruby, Python, and PHP.

Lisp Implementations

There are several Lisp implementations as JVM programming languages. They are: Armed Bear Common Lisp, CL for Java, Scheme, and Clojure, (which we mentioned above).

Scheme

Scheme is one of the two main Lisp dialects. It’s a functional programming language with minimalist design and powerful language extension tools. While it doesn’t work directly with the JVM, several implementations of it do. These include:

  • BiglooJVM . This Scheme compiler delivers bytecode for the Java Virtual Machine straight from the Scheme programming language.

  • Kawa . This is an extension of the Scheme language that works with the Java Virtual Machine.

  • JScheme is an implementation of Scheme that interfaces with Java.

Armed Bear Common Lisp

This Common Lisp implementation programming language for the JVM has both an interpreter and a compiler, commonly called ABCL.

CLforJava

CLforJava is a Common Lisp implementation that runs on the JVM and attempts to give access to any Java Library without the need for a Foreign Function Interface. It appears to have been discontinued in recent years.

Clojure

We mentioned Clojure above in the “most popular” section, since it’s one of the most well-known Lisp implementations for the JVM.

Arden2ByteCode

Developed in 2010, Arden2ByteCode is an open source compiler created for Arden Syntax. It runs on JVM, translating Arden Syntax into Java bytcode.

JGNAT (Ada)

JGNAT was a free compiler for the Ada language. It was a version of the GNAT compiler that compiled Ada language to java bytecode. Originally part of a project for the U.S. military, JGNAT has since been defunded.

Micro Focus Visual COBOL

Visual Cobol by Micro Focus offers a full suite of tools to future-proof COBOL applications. One of these is a compiler that lets developers compile existing COBOL code directly to Java ByteCode for the Java Virtual Machine.

ColdFusion Markup Language (CFML) Implementations

ColdFusion Markup Language lets website developers make pages that contain variable information (graphics or text) that’s dynamically structured in response to user input and other variables. It has several implementations for the Java Virtual Machine, including Railo, Lucee, and Adoby ColdFusion.

  • Adobe ColdFusion is a rapid webapp development platform. The programming language runs on the Java Virtual Machine. In addition to a complete scripting language, it also includes an Integrated Development Environment (IDE).

  • Lucee . Lucee is a dynamic, lightweight scripting language that runs on the JVM. It enables rapid development of anything from very simple to highly sophisticated webapps. It was originally launched as a fork of Railo (below).

  • Railo is actually server software that implements the CFML scripting language. It runs on the JVM. Originally created as a competitor of Adobe ColdFusion, it switched to an open source model and is available on GitHub.

  • Open BlueDragon or simply OpenBD is not a programming language but is a Java CFML engine that interprets and processes CFML code. It’s entirely open source and free to all.

JavaScript Implementations

JavaScript is a lightweight and very popular programming language used widely in web pages. Despite its name, it’s not really related to the Java language. There are a few implementations of JavaScript that run on the Java Virtual Machine.

  • Nashorn is a JavaScript engine created by Oracle for the JVM. Nashorn was released as an open source solution in 2012 on the OpenJDK repository . It lets developers embed JavaScript in Java applications like the JVM. “Nashorn” is the German word for “Rhino,” another JS implementation for the JVM managed by Mozilla.

  • Rhino is Mozilla’s JS programming language for the JVM. Written in Java, it’s usually embedded in Java applications to give scripting to end users.

  • RingoJS is a multi-threaded JS implementation for the JVM, primarily for server-side applications. It uses advanced JDBC drivers, as well as the Java Class Library.

Java Grade Mercury

Java Grade Mercury is an implementation of Mercury. It’s a compiler that generates Java source code that can then be compiled to Java bytecode for the Java SE runtime environment. While not specifically written to work as a JVM programming language, it can perform this function, as Opturion developer Julien Fischer notes .

Component Pascal

The reason Component Pascal isn’t grouped with the JVM Pascal implementations below is that it isn’t one. Rather, it’s a variant of Oberon-2. It doesn’t let programmers define overloaded methods, but overloaded methods can be called from within the Component Pascal code.

Pascal Implementations

Pascal is a procedural programming language, commonly used to learn programming concepts. It’s very similar to C. Developed in the late 1960’s, it’s still in use today , especially in its newer versions, Delphi and Oxygene. It has several implementations for the Java Virtual Machine, including those in the list below.

  • MIDletPascal , specifically optimized for developing J2ME midlets, can translate Pascal source code into Java bytecode for the JVM.

  • Free Pascal is an open source compiler for both pascal and object pascal. It can target several processor architectures, including AMD64 and the Java Virtual Machine.

  • Oxygene was created as a new version of Pascal for the .NET environment and Visual Studio. It’s made up of a compiler, integration with the Visual Studio IDE, and some supporting libraries.

Quercus

Quercus is a Java implementation of PHP. Released as open source software by Caucho Technology, it comes with several PHP extensions and modules, such as JSON, PDO, and MySQL. It provides close integration of Java services and PHP scripts.

Rakudo Perl 6

Perl 6 by Rakudo is a compiler that targets both the Java Virtual Machine and MoarVM. It’s under active development, with the latest stable release on April 3, 2017. It’s an implementation of the Perl programming language, a high-level language used for developing webapps.

Prolog Implementations

Prolog is a high-level programming language first created to handle artificial intelligence applications. It lacks the wide application range of the LISP language. Still, it’s known as a powerful tool for solving questions about relationships .

  • TuProlog is a lightweight implementation of Prolog designed around a minimal core and dynamic configuration through the loading of libraries. It provides tight integration between Prolog and common object-oriented languages like Java, C#, and F#.

  • JIProlog is a pure Java Prolog interpreter that’s both open source and cross-platform. It provides elevated compliance with Prolog standards, and enhances Java by adding Prolog capabilities.

  • XProlog was developed to handle the needs of certain Java based Agents. It improves on WProlog by adding arithmetic, advanced syntax, and better memory management.

Renjin

Renjin is an interpreter for the R programming language, built on the JVM. It lets R code directly interact with several JVM data structures and libraries, without needing costly data transfer or inter-process communication.

Python Implementations

The Python programming language is an interpreted language. It emphasizes human readability, with whitespace rather than curly brackets. It generally requires fewer lines of code than other languages like C++ or Java.

  • Jython is an implementation of Python for the Java Virtual Machine. Its latest stable release was in mid 2015.

  • PyPy is a Python interpreter that an translate source code into machine code, C, or JVM bytecode.

  • ZipPy is a fast, lightweight implementation of Python 3 on the JVM. It uses the Java JIT compiler and is available on GitHub.

Ruby Implementations

Ruby is an open source, dynamic programming language that focuses on productivity and simplicity. Its elegant syntax makes it easy to read and write. Implementations for the JVM include Mirah and JRuby.

  • Mirah is a JVM programming language and implementation of Ruby that follows the principles of no runtime library, simple syntax, macros and metaprogramming, and no performance penalty.

  • JRuby is a fully-threaded, stable, high-performance implementation of Ruby for the Java Virtual Machine. It’s platform independent and provides an easy-to-install solution with simple migration.

NetRexx

NetRexx is an all purpose open source programming language for JVM inspired by both Java and the Rexx language. It’s designed to make programming “easy and fun again.”

Jabaco

Jabaco is a BASIC programming language developed for the Java Virtual Machine. The source code is similar with VB6, compiled to bytecode that is “similar” to the output from the Java programming language.

Jacl

The Jacl programming language is an implementation of Tcl, written in Java. It’s production ready, and stable enough for daily use. It produces Java bytecode usable with the JVM.

JBasic

JBasic is a BASIC language interpreter, entirely written in Java for both embedded use and command line use. It supports traditional GW-BASIC style syntax, and provides modern extensions. It can run run straight from a shell.

JVM Converters (Outside Programs that Create Java Code)

Aside from programming languages written specifically for the Java Virtual Machine or adapted from existing languages, there are several programs that convert external code into Java. These JVM converters don’t always get rave reviews (see this discussion on ResearchGate, this one on StackOverflow, and this one on Quora).

With that warning, here are some of the better code converters out there:

  • C2J . This converter translates programs written in C to Java for use with the JVM.

  • CS2J To convert C# to Java for the Java Virtual Machine or other applications, try the CS2J converter.

  • C++ to Java Converter . This on has a free edition that works on up to 1,000 lines at a time for folders and 100 lines at a time for code snippets. The full version costs $129.

  • P2J . This Python to Java converter consists of a source translator and a debugger and claims the ability to convert code with 75% accuracy for use with the JVM.

  • There’s no specific JavaScript to Java converters, mainly because, despite the names, these are two vastly different languages. For those needing to translate JS for use with the Java Virtual Machine, this GitHub repository shows an easy way to wrap JS objects to Java objects.

  • PHP and Java are very different languages. (See this discussion .) For a time, the P2J converter attempted to convert PHP to Java for use with the JVM. However, that project has been discontinued.

  • It’s possible to include Java code in a Perl program using Inline::Java (see this discussion ). To convert code directly for use with the Java Virtual Machine, there’s an experimental converter here .

Further Reading and Related Resources

In addition to the list of JVM languages shown here, see this GitHub repository, and also our growing list of programming language resources.