Multi-threaded JavaScript on the JVM

Ringo is a JavaScript platform built on the JVM and optimized for server-side applications. It takes a non-dogmatic stance on things like I/O paradigms. Ringo ships with a large set of built-in modules and follows the CommonJS standard.

Ringo in a Nutshell

  • Performance
  • Stability
  • Flexibility
  • Security
  • Open Source
  • The TechEmpower benchmark measures the performance of various web frameworks. Ringo performs solid compared to other popular frameworks and profits from advanced JDBC drivers and the Java Class Library. The HotSpot JVM optimizes the generated bytecode at runtime.
  • Ringo is powered by the Mozilla Rhino JavaScript engine, which is embedded in Java 6 as the default Java scripting engine and powers thousands of applications. Ringo itself enhances Rhino to run multi-threaded code. Ringo's core modules are well tested and documented.
  • Applications can be deployed on nearly every JVM-based platform. Production-level Ringo applications run on large clustered servers, inside Linux containers, on cheap Raspberry Pi micro-computers, and on top of cloud platforms like Google App Engine.
  • Ringo allows you to apply the Java security model on JavaScript applications. Developers can provide own security policies and control which resources can be accessed by untrusted code. JavaScript applications can be locked into a sandbox to isolate them from the OS.
  • Ringo and all of its modules are released under the Apache 2 License and the code is hosted on Github. It’s possible to fork, modify and distribute it in source or binary form. If you have a very specific question, you can look up the according code and see the detailed implementation.

Creating a simple web application

Our aim is to provide an off-browser JavaScript platform that has the right mix of features and simplicity to be pleasant to work with and easy to deploy. The primary goal is to build a stable, high-performance runtime for server-side use. The following code is all you need to create a simple web app:

exports.app = function(req) {
    return {
        status: 200,
        headers: {"Content-Type": "text/plain"},
        body: ["Hello World!"]

if (require.main == module)

Simply save the code above as "server.js" and run it by executing ringo server.js. Like most Ringo apps, this app will automatically reload, picking up any changes you make without requiring a restart.

Command-line Scripting

A very useful feature is the integrated REPL (Read-Eval-Print-Loop). You can enter it by starting ringo without any arguments from the command-line. This brings up a Ringo environment which can be used for debugging, testing, or just playing around with the runtime. Since the deep Java integration, it's possible to write CLI tools in JavaScript accessing arbitrary Java libraries.

Integrated into the Java Ecosystem

But Ringo lets you do more than write web applications. It allows you to seamlessly use any Java standard class or external library simply by dropping it into the classpath. This makes it easy to integrate Ringo into existing Java environments and reusing existing Java code works without lots of effort or porting issues.

Get Started or the documentation page to learn more about Ringo!