Jedi Academy
Star Wars Jedi Knight, in your browser
Released
Play Star Wars Jedi Knight: Jedi Academy in your browser. By Virtastic. Play now at jka.virtastic.app
A WebAssembly port of Raven Software’s original 2003 GPL source release, compiled with Emscripten. It runs entirely on your machine: the engine is WebAssembly, the game data is read from your own disk or from the free demo, and nothing is uploaded or streamed. Ghoul2 skeletal characters, the saber, and Force powers all work; the campaign runs end to end.
The port is deliberately conservative — games/jka/ is Raven’s pristine drop, and every browser
adaptation is a separate reviewable commit on top, so git diff <import> -- games/jka is the
port. No code is copied from OpenJK or iortcw. The engineering log, including theories that
turned out to be wrong, is in docs/WASM_ADAPTATIONS.md.
Playing
Open https://jka.virtastic.app in desktop Chrome, Chromium, Edge or Brave, then pick a route:
- Play the demo — the official free demo mission. Nothing to own, nothing to install.
- Bring your own copy — point the picker at the
GameData/basefolder of a legal install and select theassets*.pk3files (assets0,assets1,assets2,assets3). They are read straight from your disk; nothing is uploaded.
Saves and settings persist in the browser (IDBFS), independent of which data you loaded.
Windows tip: copy
GameDatasomewhere outsideProgram Filesfirst — browsers refuse to grant folder access inside protected system paths, and that is where Steam installs by default.
Single-player only. The multiplayer sources are part of the drop but are not built.
Quick start (Docker)
From a clean clone, with nothing but Docker installed:
docker build -t jka-web . # compiles the engine from source
docker run --rm -p 8080:80 jka-web # http://localhost:8080
or simply:
docker compose up # http://localhost:8080
The first build pulls the Emscripten toolchain image and compiles for a few minutes; after that
it is layer-cached. See SELF_HOSTING.md for serving it on a real server, and
for how to add the free demo pak so the demo route works on your own instance.
What’s in this repo
This repo is code only. No game data of any kind is committed.
| Path | What it is |
|---|---|
games/jka/ | Raven’s pristine GPL drop + the __EMSCRIPTEN__-guarded port commits |
shared/wasm-build/ | env.sh (the toolchain pin), the Emscripten platform layer, build scripts, CDP test harnesses |
shared/web/ | server.py — the COOP/COEP dev server, with HTTP-Range for pk3 streaming |
play/jka/ | index.html (the game page) and launcher.html. Built .js/.wasm are gitignored |
cloud/ | Optional Cloud Locker backend — OAuth sign-in plus S3 storage. Not required to play |
infra/ | nginx.conf (the serving contract) and the Terraform DNS reference |
ci/ | A reference Jenkins pipeline |
Not included (kept local)
Retail .pk3 archives, the demo pak, build-jka/, the generated jka.js/.wasm/qagame.wasm,
and node_modules/. The .gitignore and .dockerignore are written so game data cannot be
committed or baked into an image by accident.
Building
Emscripten 6.0.1, pinned in shared/wasm-build/env.sh — source it rather than hardcoding
flags. No -flto (it miscompiles the boot path). Single-threaded. Pure C++: no Rust, no
-pthread, so the toolchain is just emscripten/emsdk:6.0.1 with nothing added.
Browser support
Desktop Chrome / Chromium / Edge / Brave. The folder picker uses the File System Access API, which Firefox and Safari do not implement; mobile is out of scope.
License
jka-web is licensed under the GNU General Public License, version 2 — see
LICENSE and NOTICE.md.
GPLv2, not GPLv3. Raven’s drop grants version 2 and does not include the customary “or (at your option) any later version” clause for Raven’s own code, so the combined work cannot be relicensed forward.
- Engine code under
games/jka/— Copyright (C) 2003 Activision / Raven Software, released by the copyright holder under GPLv2. - The port — the Emscripten platform layer, build scripts, the browser shell under
play/, the test harnesses, and the optional cloud backend — is likewise GPLv2. - Bundled third-party components keep their own licenses; see
THIRD-PARTY-LICENSES.md, which also records which of them are actually compiled into the WebAssembly binary.
Game data and trademarks
STAR WARS and JEDI KNIGHT are trademarks of Lucasfilm Ltd. and/or its affiliates. Activision and Raven Software are trademarks of their respective owners. This project is not affiliated with, endorsed by, or sponsored by any of them; the names are used only to identify the software this is derived from.
No retail game data is included in, or distributed by, this repository. The retail archives are commercial content and are not redistributable — you must supply your own legally-obtained copy, or use the official free demo mission.
Community
- Discord — the fastest place for help, screenshots and news.
- YouTube (@Virtastic-Apps) — demos, build logs, and the other native-to-browser ports we work on.
- GitHub Discussions — longer-form questions and showcase threads.
Security issues: please follow SECURITY.md rather than opening a public issue.
Credits
Raven Software and Activision, for releasing the engine sources under the GPL in the first place.
WASM port © 2025–2026 Virtastic. Built with the Claude Agent SDK.
Screenshots



What it took
Raven Software's original 2003 GPL source, compiled from C++ to WebAssembly with Emscripten. Jedi Academy runs in your browser, on your own machine, starting with the free demo mission: no copy of the game needed.
- First visit downloads about 190 MB; after that your browser keeps it.
- The free demo mission: nothing to own, nothing to install
- Or your own copy of the game, read from your disk
- Saves and settings stay in your browser
Status and how to help
Released. Raven's 2003 GPL source, single-player: the whole campaign with Ghoul2 characters, saber and Force powers, or the free demo mission.
Known issues
Every known bug is in the open issues on GitHub, so nothing is hidden.
Help us test
Try it in Chrome, Edge or Brave on a computer. If something breaks, report a bug with what you did, your browser, and what you saw.
GPL 2.0 · Source · Contributing guide · Code of conduct · Get involved