What is TeaVM?
TeaVM is an ahead-of-time translating compiler (transpiler) from Java bytecode to
JavaScript. Its close relative is well-known GWT.
The main difference is that TeaVM does not require to provide source code together with
compiled class files. Moreover, source code is not required to be Java.
For example, TeaVM successfully compiles Kotlin language.
Can I see TeaVM in action?
Sure, you can.
- TeaVM vs. GWT
performance comparison is based on a simple
JBox2D scene.
Real-time physics simulation is very time consuming, so you can see that TeaVM is really fast.
- Invaders, a demo game from
libGDX community. Compiled with help of
TeaVM libGDX backend, alternative to GWT backend.
- Play Geobot, a little physics-based puzzle game.
Thanks to joan789 for her great artwork!
- Play Minesweeper created by
Jaroslav Tulach.
This game is really cross-platform, since it is based on
DukeScript,
that runs Java HTML5 applications on different platforms.
- Async demo that shows how TeaVM can translate multithreaded
applications with syncrhonization primitives.
- GraphHopper demo. This application uses GraphHopper for
route planning and stores road graph inside IndexedDB. This gives an opportunity to calculate routes when your
device is offline.
- Kotlin demo. This simple application shows how
to run Kotlin in TeaVM. You can find the whole project
here.
Why should I use TeaVM?
If you like to write on Java, and you want to write code that runs in the browser,
you can use TeaVM.
TeaVM provides you with all features necessary to develop applications for the browser:
- per-method dependency analyser, that determines a set of methods that are really needed
to run your application, so TeaVM won't translate whole JAR files;
- fast JavaScript; for now it sometimes even faster,
than JavaScript, generated by GWT;
- Java class library emulation;
- integration with Maven and Eclipse;
- generation of source maps;
- debugger;
- interoperation with JavaScript libraries together with the set of predefined
browser interfaces.
How can I start to use TeaVM?
You can create a new TeaVM-flavoured Java web application, using a Maven archetype:
mvn -DarchetypeCatalog=local \
-DarchetypeGroupId=org.teavm \
-DarchetypeArtifactId=teavm-maven-webapp \
-DarchetypeVersion=0.3.0 \
archetype:generate
Now you can execute mvn clean package and get the generated war file.
Deploy this war in Tomcat or another servlet container, or simply unzip it and open
index.html.
It is much easier to develop TeaVM applications using Eclipse.
If you prefer Eclipse, please begin with
this tutorial.
How can I learn more about TeaVM?
Please, look at the project's wiki
on GitHub. It provides documentation about generally used parts of TeaVM.
If you are interested which parts of JDK you can use in TeaVM, read this
automatically generated report.
There are also some javadocs:
Finally, you can browse the source code
at GitHub. There are
few examples
that might help you to start using TeaVM.
Where to download TeaVM?
You don't need to download TeaVM, Maven does it for you. Just follow instruction
above to create a new Maven project.
If you prefer Eclipse to create your projects, install TeaVM plugin from the
TeaVM update site.
If you want to debug your TeaVM applications, running in Google Chrome, install
the TeaVM Chrome extension.
You can also clone the source code repository: https://github.com/konsoletyper/teavm.git.
Who uses TeaVM?
- GameComposer, a game authoring tool and
a game runtime environment, that has TeaVM-based backend for HTML5.
- CodeName One team is trying to use TeaVM to run application
in the browser. They have some success already.
How to receive feedback?
If you have questions, ask them by email: info@teavm.org.
You can also report an issue
on GitHub repository and discuss TeaVM in
TeaVM forum.
How can I help the project?
- create web applications using TeaVM and write about your good experience in media;
- report issues that you encounter during development;
- help to write documentation;
- contribute your code to TeaVM;
- write useful libraries that help to create browser applications in Java;
- port your existing projects to TeaVM;
- correct spelling in documentation;
- help to create a better design of this site;
- design a logo.
What's wrong with GWT?
You probably already use GWT to develop browser application in Java, but GWT has its own
disadvantages:
- GWT is slow. You often wait for minutes for GWT to compile sources. Also
GWT produces permutations, increasing overall compilation time.
- GWT requires source code together with special
.gwt.xml files.
- GWT is only limited to Java. If you like Scala or Kotlin, you can use their native
solutions to generate JavaScript from sources. However, these solutions won't work
with the existing Java code.
- GWT is not compatible with bytecode instrumentation tools.
- GWT is not friendly to Maven users.
There is gwt-maven-plugin,
but it is a third-party project, led by a third-party developer.
- GWT is hard to debug, since its Development Mode is deprecated. The alternative
way is to use SuperDevMode, but it is in fact only generation of source maps,
with all their limitations.
- GWT has only a limited support of JDK classes. For example, it does not include
full support of Unicode character classes or several parts of reflection API like
Class.isAssignableFrom(Class).
ZW5kZW5yYWhheXU5QGdtYWlsLmNvbQ==