An "OS for your browser" that breaks the browser language barrier (includes a plugin-free JVM).
TypeScript Java JavaScript
Latest commit e079917 Jul 4, 2016 @jvilk jvilk committed on GitHub Merge pull request #469 from UprootStaging/easyExceptions
thread.throwNewException() now uses the frame's class loader
Failed to load latest commit information.
classes SecureRandom implementation. May 21, 2016
console Reverting part of previous commit; it is not needed. May 21, 2016
docs Updated getting started contents links. Jun 21, 2016
src thread.throwNewException() now uses the frame's class loader Jun 30, 2016
tasks Use BrowserFS's version of path when resolving items within JAR files. Jun 1, 2016
typings Making benchmarks easy to run. May 20, 2016
vendor Fix/reimplement DoppioJVM's zip natives, which fixes the Dacapo test … Dec 1, 2015
.gitignore Basic infrastructure for example apps and in-repo documentation May 18, 2016
.npmignore Removing bower, updating npmignore, bumping version, adding NPM badge… May 25, 2016
.travis.yml (Travis) Forgot the -y in the apt-get command May 21, 2016
Gruntfile.js Adding debug print to debug Travis-CI. May 21, 2016
Grunttasks.ts Fixing dist task to copy includes to dist folder. May 23, 2016
LICENSE Upgrading to TS1.6, moving to TSD for DefinitelyTyped deps, using Loc… Oct 18, 2015 Removing bower, updating npmignore, bumping version, adding NPM badge… May 25, 2016
appveyor.yml Appveyor cache fix, remove doppio.jar from downloaded JDKs. May 21, 2016
install.js Migrate doppio.jar creation to this repository. May 20, 2016
jsconfig.json Miscellaneous cleanups and skeleton for the new UnixFileSystem class. Nov 3, 2015
package.json Removing bower, updating npmignore, bumping version, adding NPM badge… May 25, 2016
prepublish.js Fix to prepublish script, and release! Nov 6, 2015
tsconfig.json SecureRandom implementation. May 21, 2016
typings.json Switching to webpack and making build a bit smarter. May 18, 2016

doppio: A JVM in TypeScript v0.4.0

Join the chat at Build Status Build status npm version david-dm-status-badge david-dm-status-badge

doppio is a double shot of espresso. In this case it's also a JVM written in TypeScript and an active research project of the PLASMA group at the University of Massachusetts.

To try doppio now, head to the live demo page.

To learn more, read some documentation, or read our academic paper (alt. link w/ no paywall) published at PLDI 2014!

You can also get in touch via our mailing list or via the IRC channel #plasma-umass on Freenode.

Getting & Building the Code

Before attempting to build doppio, you must have the following installed:

  • Node v4.0 or higher
  • NPM package grunt-cli installed globally
    • npm install -g grunt-cli
  • Java 8 JDK

If you are on Windows, you will need the following installed:

  • Git (must be on your PATH)
  • Python (must be on your PATH)
  • A version of Visual Studio

Run the following commands to build doppio. Note that your first time building may take some time, as the build script will download the entire Java Class Library.

git clone
cd doppio
npm install
grunt release      # For browser integration.
grunt release-cli  # For command-line use.


Run the full test suite using node.js:

grunt test

Run the full test suite in a web browser:

grunt test-browser

Run a specific test by invoking the test runner manually:

node build/dev-cli/console/test_runner.js classes/test/Strings

Command-line Usage

Run doppio with node.js (after grunt release-cli):

./doppio classes.demo.Fib 7
./doppio -jar my_application.jar
./doppio -cp my/class/path SomeClass

Integrating Into Your Site

Check out our Developer Guide for information on how you can integrate doppio into your website!

You can also build and interact with a simple example application with:

grunt examples

The code is in docs/examples.