Compatibility

What runs with CheerpJ, what is supported, and which integration patterns need technical review.

CheerpJ is a full Java platform for the browser. It includes a Java Virtual Machine, a full build of OpenJDK and a system virtualisation layer, implemented in WebAssembly and JavaScript.

At a glance

A full Java platform running in the browser

Java versions

  • Java 8, 11, 17 and 21, Java 25 (preview)
  • A commitment to support future Java LTS releases
  • 100% of the Java language and bytecode, including reflection and other complex constructs that Java-to-JavaScript compilers do not support
  • A WebAssembly-based Java Virtual Machine with multi-tiered execution

Runtime

  • The OpenJDK class library itself, not a reimplementation
  • UI toolkits: Swing and AWT, with an integrated window manager
  • System integration, including the clipboard, file systems, networking and sockets, audio and printing
  • Threads, garbage collection and class loading handled by the runtime

Application types

  • Standalone Java applications
  • Java Applets
  • Java Web Start / JNLP
  • Oracle Forms and Oracle EBS applications

Enterprise validation

Proven in enterprise production

CheerpJ has been in production since 2017, and Fortune 500 companies and government agencies use it. More than a million people ran a CheerpJ application in the last 12 months, and its browser extensions have more than 170,000 users. See the organisations that use CheerpJ.

  • Oracle Forms and EBS

    Established in production for Oracle Forms and Oracle EBS frontends, in modern browsers and without desktop Java.

  • Java Web Start

    Established as the replacement for Java Web Start. Existing JNLP applications launch from the browser, with no desktop installs.

  • Java Applets

    Established as the replacement for the Java plug-in. Legacy applets run as standard web applications.

  • Validated in the wild

    More than a million CheerpJ sessions every month from our public CDN.

Java versions

Java versions supported by CheerpJ

CheerpJ supports Java 8, 11, 17 and 21, with Java 25 in preview. Each version ships with its own full build of OpenJDK, including its native JNI code compiled to WebAssembly, and you choose the version when you start CheerpJ.

Java version OpenJDK build CheerpJ Core CheerpJ extensions (Applet Runner and JNLP Runner)
Java 8 8u512Full support, and the defaultFull support
Java 11 11.0.33Full supportNot available
Java 17 17.0.21Full supportNot available
Java 21 21.0.13Full supportNot available
Java 25 25.0.5PreviewNot available

Java 6 and 7 are supported on the respective CheerpJ LTS versions, available on request. Support for specific OpenJDK runtime versions is available on request.

Why are CheerpJ extensions limited to Java 8?

Java 8 is the last long-term support release to include the Java plug-in and Java Web Start, so the applets and JNLP applications the extensions run were built for it. Keeping the extensions on Java 8 alone also keeps their package minimal in size.

Java 25 in preview

Java 25 is available as a preview in CheerpJ Core. Use it to test applications ahead of full support, by choosing the version when you start CheerpJ.

Runtime coverage

Java and runtime compatibility

CheerpJ executes Java applications at bytecode level without requiring source code changes. How CheerpJ works explains the runtime.

Language and bytecode

  • 100% of the Java language and bytecode
  • Reflection, proxy classes and dynamic constructs
  • Custom class loaders
  • Encrypted and obfuscated bytecode

Application packaging

  • JAR files
  • Java Applets
  • Java Web Start

Networking and files

  • HTTP and HTTPS
  • TCP and UDP through Tailscale or a custom networking backend
  • Browser-based and network-based virtual file systems
  • Local files through browser uploads and downloads

Desktop features

  • Clipboard, internal or shared with the system clipboard
  • Printing
  • Audio

Deployment model

Java, truly portable

The application stays what it is. Only its delivery moves to the browser and WebAssembly.

  • Codebase unchanged

    Existing Java application code remains unchanged.

  • Runtime in browser

    CheerpJ provides the Java runtime inside the browser.

  • Backend unchanged

    Backend services and databases remain unchanged.

  • Browser security model

    Standard browser security and access controls apply.

Deployment options include on-premises and controlled enterprise environments. The security page describes the model in detail.

Networking

How the application connects to the network

The application keeps using your existing services, networks and access controls, from the user’s browser.

Back-end services (HTTP)

A Java application running with CheerpJ keeps using its existing APIs and back-end services. Its requests are made from the user’s browser, so the browser’s security model and your network configuration apply. Services on a different domain from the page need to allow cross-origin requests from it.

Back-end services (TCP/UDP)

Browsers do not give web pages TCP or UDP connections. CheerpJ provides them through Tailscale, a VPN based on WireGuard that carries the traffic over WebSockets, and the Tailscale control server can be self-hosted on your own network.

Enterprise deployments can also connect a custom networking backend, for example to go through their own proxies or to use other transports such as WebSockets.

Authentication

When CheerpJ is self-hosted, the page that starts the application can sit behind your existing authentication, so users sign in through your normal access controls before it loads.

The runtime is delivered over HTTPS, and the application’s HTTP requests are made with the browser’s fetch, so both inherit the browser’s certificate handling: your organisation’s root certificates, client certificates and TLS policies apply, with no Java keystore to configure.

Hosting

CheerpJ Core and the CheerpJ extensions can be self-hosted, and in enterprise deployments they normally are. Both are static files, served from your own web server or CDN, so a deployment can be completely air-gapped, with no connection to any external network.

The server needs to support HTTP range requests, and production deployments should use HTTPS, with MIME types and caching configured where required.

Technical review

Integration patterns to assess before deployment

Some patterns may require an architectural review.

System-level integration

Direct process execution, local system services and OS-level hooks require adjustment.

Direct file access

Integration with the local file system through uploads and downloads works, but the browser sandbox prevents direct file access, so some workflows need re-architecting.

Direct hardware access

USB devices, serial ports, smart cards and proprietary hardware require web-compatible APIs.

JNI and native dependencies

Custom native libraries (DLLs and SOs) need to be replaced with a browser-compatible build.

Low-level networking

Non-HTTP protocols and raw sockets need a Tailscale network or another custom networking implementation.

Technical specification

Detailed compatibility

CheerpJ supports Java 8, 11, 17 and 21, with Java 25 in preview, both the language and the runtime. Each version runs on a full build of OpenJDK, not only the JRE subset. The following tables summarise its current compatibility status.

Java language and bytecode

Area Status Notes
Java language SupportedRuns any Java SE application without source changes
Language versions SupportedJava 8, 11, 17 and 21, with Java 25 in preview
Reflection SupportedWorks without rewrites
Proxy classes Supported
Dynamic constructs Supported
Custom class loaders Supported
Encrypted or obfuscated bytecode Supported

Build with Java for the browser.