Security

CheerpJ security model

CheerpJ is a distribution of OpenJDK in WebAssembly and JavaScript. It runs Java applications, applets and libraries inside the browser tab, with no local JVM, plug-in or service on the workstation and no access to the local disk.

This page covers enterprise deployments of CheerpJ: CheerpJ Core served from your own web server or CDN, and the Applet Runner and JNLP Runner extensions distributed or self-hosted by your IT department.

Java execution stays inside the browser

CheerpJ runs your Java client application, or the original JARs. The application’s backend is not changed. How CheerpJ works explains the runtime.

  1. 01 Served as static files

    The runtime comes from your web server over HTTPS, or is packaged in the extension; the application’s JARs always come from your servers. There is no server-side process, API or database.

  2. 02 Compiled in the page

    Bytecode is executed by the CheerpJ JVM, fully inside the browser. Java objects are ordinary JavaScript objects, garbage-collected by the browser.

  3. 03 One thread, shared

    Java threads take turns on the page’s own thread.

  4. 04 Inside the sandbox

    Same-origin policy, CORS and Content Security Policy apply. CheerpJ adds no privileges beyond those of a normal web page, apart from the extensions’ own permissions.

Nothing installed, nothing sent out

  • Nothing installed

    No installer, local service, admin rights, Java plug-in or IE mode on the workstation.

  • No outbound connections

    No licence server, analytics, logging or metering. Application data travels only between the browser and your servers.

  • Works air-gapped

    Nothing contacts Leaning Technologies or any third party, so CheerpJ runs on networks with no internet access.

  • No new ports

    Traffic uses the existing HTTPS path to your application. No inbound firewall rules are needed.

Licensing works without phoning home. There is no online licence check, and usage is never counted or reported. This holds for CheerpJ Core and the extensions alike: the licence is verified in the browser.

What Java code can reach on the workstation

Java code running on CheerpJ has no direct access to the underlying system. Everything it touches goes through the runtime and the browser.

Out of reach

  • Local disk. File I/O goes to a virtual file system: read-only files from your server, browser storage for that origin, and memory.
  • Processes. No operating-system process can be started. Runtime.exec is rejected, unless you supply a JavaScript function to run instead, under the same sandbox.
  • Native code. Pre-built binaries, such as .dll and .so files, cannot be loaded. Native methods run only when compiled to WebAssembly or implemented in JavaScript.

Through the browser

  • Files leave only as browser downloads and enter only as user uploads.
  • Sign-on. CheerpJ runs in the user’s existing browser session, so SSO, VPN and proxy settings apply as usual. It stores no credentials.
  • Clipboard. The clipboard stays inside the Java VM by default. The system clipboard needs the user’s permission, or a central policy.
  • Printing. Pages are rendered to images and passed to the browser’s print dialog. Server-side reports are unaffected.

Network traffic stays on your existing HTTPS path

Deployment Traffic
CheerpJ Core Browser to your web server or CDN over HTTPS: the page, the runtime files, the JARs and application traffic.
Browser extensions The runtime is packaged in the extension. Pages, JNLP files, JARs and application traffic go to your servers over HTTPS, as before.
Direct TCP (optional) Through a Tailscale tunnel: the browser sends the connection over HTTPS to a relay you host, which opens the TCP connection to the application server. The tunnel's control server is self-hosted too.
Leaning Technologies and third parties Not involved in any network traffic.

HTTP and HTTPS

  • Java connections go through the browser’s own networking
  • TLS, certificate checks, proxies and cookies are the browser’s, so your certificate store and browser policies apply
  • Same-origin policy and CORS apply
  • HTTP requests are upgraded to HTTPS on HTTPS pages

Raw sockets

  • Off by default
  • Possible only through a Tailscale (WireGuard) tunnel to a relay and control server you host
  • Enabled by an administrator with an auth key
  • Only needed by applications that open TCP connections, such as database drivers

Browser extensions under central control

The Applet Runner and JNLP Runner are Manifest V3 extensions for Chrome and Edge. Their distribution can be self-hosted.

  • Narrow permissions

    Access to websites is optional for both extensions, and policy can restrict it to your application’s hosts.

  • Managed by policy

    Group policy sets the runtime options, such as clipboard mode, the user-agent settings and the licence token.

  • Your own update URL

    Force-install the extensions from an internal update URL. The public store is not needed.

Endpoint-security controls

How CheerpJ affects the control areas that endpoint-security frameworks assess. The scope and outcome of an assessment remain with your assessor.

Control area With CheerpJ Stays with you
Security updates The out-of-support desktop JRE, Java Plug-in and JInitiator can be removed from every endpoint. CheerpJ is a set of versioned files on your server, updated centrally.Browser patching, and when to deploy a new CheerpJ release.
Secure configuration No installer, local service, admin rights, plug-in or IE mode. Extension permissions and website access can be locked down by policy.Browser and extension policy.
User access control Unchanged.Authentication and authorisation, in the application and your SSO.
Malware protection Java code runs inside the browser sandbox and cannot start processes or load native binaries.Endpoint protection, and the application's own code and dependencies.
Firewalls No new inbound ports, and no outbound internet access needed.Backend exposure, segmentation and firewall policy, including the Tailscale relay if you use one.

Updates on your schedule

How releases are built

  • The runtime, the OpenJDK class library and third-party native libraries are built from source in our own CI
  • Each release is a versioned, immutable artifact
  • Archives come with checksums to verify before deployment
  • Self-hosted deployments never update automatically: you choose when to test and deploy
  • Serve the application and CheerpJ over HTTPS only
  • Host CheerpJ Core or the CheerpJ extensions yourself: Core on your own web server or internal CDN, set up as in the server setup guide, and the extensions at an internal update URL
  • Force-install the extensions by group policy, with website access limited to your application’s hosts
  • Remove the desktop JRE, the Java Plug-in and IE mode once the rollout is done

Build with Java for the browser.