The Altirra Atari emulator, in your browser, with multiplayer.
Pick a game from the Curated Library below to boot it instantly, drop into a live Online session, or hit Start Atari Emulator to load your own software. New here? See Learn more for what AltirraSDL is and how netplay works.
Want to run Altirra natively? Download the emulator for your device →
Online Games
Curated Software Library
Learn more
What is AltirraSDL?
AltirraSDL is an unofficial SDL3 port of Altirra, Avery Lee's cycle-accurate Atari 800/800XL/130XE/5200 emulator. The original is Windows-native; this fork replaces the Win32 UI with SDL3 + Dear ImGui so it runs on Linux, macOS, Android, and — as you're seeing right now — in any modern browser via WebAssembly.
This port adds netplay multiplayer over WebSockets, a touch-friendly Gaming Mode for phones, an in-browser File Manager, and a self-hostable lobby server. The emulation engine, hardware research, firmware reimplementation, and debugger are all Avery Lee's work — everything that makes Altirra extraordinary is his. Both projects are open source under the GNU GPL v2 or later.
This is not an official Altirra release. It is not affiliated with, endorsed by, or supported by Avery Lee. For the official build and full feature documentation, visit virtualdub.org/altirra.html.
The game runs too slow / too fast — what do I do?
Too slow. Altirra is a cycle-accurate emulator — it simulates the Atari on a per-clock-cycle basis to keep memory access timing between ANTIC, the 6502 CPU, GTIA and POKEY exact. That precision is the reason almost every commercial title and demoscene production runs correctly, but it costs CPU time. Avery Lee notes this directly in the official Altirra FAQ: emulating a 1.79 MHz Atari realistically needs a roughly 1 GHz host CPU. In the browser, WebAssembly adds another ~2× overhead on top of native, so the practical floor is closer to a modern desktop or a recent phone. The native standalone build (download AltirraSDL or the original Altirra) is noticeably faster than the WASM version on the same machine — if performance is critical, that's the first thing to try.
If you have to stay in the browser, these toggles claw back the most frames:
- Turn off CRT simulation. In
Configure System → Display, disable scanlines, bloom, distortion and the screen mask. The CRT shader is the single most expensive thing the emulator does. - Use a simple display filter. Same page — pick Point or Bilinear instead of Sharp Bilinear.
- Avoid fullscreen if it makes things worse. On some browsers fullscreen renders at the screen's native resolution, multiplying shader cost. Windowed mode at a smaller size is often smoother.
- Performance preset. In Gaming Mode (phones / fullscreen UI) the Settings → Display → Preset picker has an Efficient profile that disables all of the above in one click.
Too fast. Almost always a PAL / NTSC mismatch. PAL machines run the video timing at ~50 Hz; NTSC at ~60 Hz — that's a ~17 % speed difference, very audible on music (a Polish tracker tune you remember at the right tempo will sound frantic on NTSC) and visible on scroll speed. If you grew up with a PAL Atari and the emulator picked NTSC (or vice versa), the game isn't broken; it's running on the "wrong" machine.
To switch:
- Inside the emulator:
System → Video Standard → PAL(orNTSC). In Gaming Mode the same toggle lives on the page bar at the top. - From the library: each title boots with the standard the original was authored for — European releases as PAL, US releases as NTSC. If a Library card boots the wrong way for you, switch once after launch and the choice sticks for that session.
A cold reset (System → Cold Reset) after
changing the standard ensures the title re-detects the
new timing — most do this automatically, but a few read
it only at boot.
About the per-title default: a fair number of Atari classics shipped both sides of the Atlantic — sometimes by the same publisher, sometimes via a regional licensee, occasionally with subtly different code. The library's PAL/NTSC default is our best guess at which version you most likely played growing up: UK/European-published titles boot as PAL, US titles as NTSC, and dual-released ones are pinned to the version with the larger contemporary print run. If you remember a game running differently — say, you played the US edition of a UK-published title or vice versa — switch the standard once after launch and that choice persists for the rest of the session. We're not trying to dictate the "correct" region; we're just picking a sensible starting point so most people don't have to touch the setting at all.
How to join a game
- Find an open session in the list above (state shows waiting).
- Click Join → on the row.
- First time only: a 26 KB Atari ROM bundle downloads (Atari OS + BASIC). This is a one-time setup; subsequent joins are instant.
- Enter a nickname so the host can see who's asking.
- The host gets a "Player wants to join" prompt — once they accept, you're in.
If the host marked the session private, you'll be asked for an entry code first.
Default controls (configurable in
Configure System → Input):
arrow keys = joystick, Space = fire,
F2–F4 = Atari Option/Select/Start,
Esc = menu. On phones and tablets, the on-screen
joypad appears automatically in Gaming Mode.
How to host a game
The fastest path is the Curated Software Library below — find a title with a Play Together button, click it, and the emulator boots and publishes the session automatically. No manual steps.
To host your own software:
- Click Start Atari Emulator → above.
- Load a game: drag-and-drop a
.atr,.xex,.cas, or.carfile onto the page, or use the File → Open menu. - From the menu, choose Online Play → Host this game. Set a session name and a max-player count. Optionally set a private entry code.
- The lobby publishes your session — it shows up in the list above within ~10 seconds, and the emulator displays a shareable join URL you can paste to a friend.
- When a joiner asks to connect, accept the prompt. Multiple joiners can connect to the same session up to your max.
You can also host from the desktop or Android build of AltirraSDL — same lobby, same protocol, same join URLs.
About the Curated Software Library
A hand-picked collection of Atari 8-bit titles spanning three tabs: Classic (1980s commercial releases), Modern (homebrew + recent ports), and Demoscene (productions from pouet.net, ranked by community votes). Click Play Solo on any card to boot directly in your browser — the emulator fetches each disk on demand, so the first launch of a multi-disk title takes a moment but everything is cached afterwards.
Selected titles also show a Play Together button (highlighted green): clicking it boots the game and immediately publishes a netplay session so a friend can join via the Online list.
Classic and Modern titles launch on 130XE / 320 KB RAM with PAL or NTSC selected per-title. Demoscene titles launch on 130XE / 1088 KB (PAL) — a safe superset that covers both 130XE-targeted demos and 1MB-extension productions.
Want the Classic + Modern library on disk for offline use? The Start Atari Emulator button's first-run wizard offers a one-shot download (≈9 MB) that installs the pack into your browser's persistent storage. Demoscene entries stream from the lobby on click only — they aren't part of the offline pack.
Why isn't my favourite game (or demo) in the library?
The library is curated on purpose rather than exhaustive. The Atari 8-bit catalogue runs to thousands of titles, and a "list everything" approach buries the gems under shovelware. We aim for a best-of-the-best shortlist that someone discovering the platform today can enjoy without first becoming an archaeologist.
How titles get in:
- Classic & Modern games are picked from the top of community consensus on Atarimania — high user ratings combined with sustained download counts. We then filter for titles that aged well: solid gameplay, readable controls, and fun that doesn't require nostalgia goggles.
- Demoscene productions come from pouet.net, ranked by thumb-up count — the demos the scene itself voted for.
If your favourite isn't here, it isn't a verdict on the title — curation is necessarily a narrow window. Two paths to play it anyway:
- Upload it to your browser's local storage: click Start Atari Emulator, then drag-and-drop the file onto the page (or use File → Open). It persists across sessions on this device.
- Host it for friends: the same upload flow feeds Online Play → Host this game, so anything you can run, you can publish. The lobby happily advertises whatever you host — the curation only governs the library list, not what you can play together.
Suggestions for additions are welcome via the GitHub issues tracker — please link the Atarimania or pouet.net entry so the rating can be checked at a glance.
Why can't I "Play Together" on every two-player game?
The green Play Together button is reserved for titles that work over netplay without explanation or workaround. Plenty of two-player games existed on the Atari, but the way they implement two-player varies wildly and not all of it survives the trip across the internet:
- Joystick-swap games: on the original hardware, two players physically passed a single joystick between turns (many puzzle and arcade conversions did this). Over netplay there's no shared joystick to hand over — each player has their own — so the "swap" never happens.
- Sequential / turn-based two-player: one player completes a level or a round, then the other plays the same thing on the same screen. The netplay session technically works, but it's just two people watching one person play at a time.
- Hot-seat games requiring local presence: shared keyboard for both players, "press fire when ready" prompts that rely on physical proximity, etc.
Play Together is a curated subset of titles that are simultaneous two-player on a split or shared screen — both players acting at once with their own joystick, the way it should feel. That's a much smaller list than "games with a 2P option in the menu".
If you want to host a sequential or joystick-swap game anyway, you still can — just publish it via Online Play → Host this game from inside the emulator. Netplay doesn't enforce the curation; only the one-click button does.
Tips & troubleshooting
- Adblockers: the lobby and the emulator both
live on
lobby.atari.org.pl, so the WebSocket connection is same-origin — that bypasses most third-party-WS filter rules. If Join still fails with "WSS blocked", whitelist the domain in your blocker. - Fallback host: if
lobby.atari.org.plis unreachable from your network, the emulator also lives at ilmenit.github.io/AltirraSDL (GitHub Pages mirror). - Performance: WebAssembly runs at full speed on
modern desktops and recent phones. On older devices, disable
display effects in
Configure System → Display. - Persistence: files you upload, settings you change, and the firmware bundle are stored in your browser's IndexedDB, separately per origin. Wiping site data also wipes them — back up via the File Manager first.
- Hardware mode: Library titles boot as 130XE with 320 KB RAM. Once inside the emulator you can change this from System → Hardware for any game that prefers a different machine.
- Self-hosting: the lobby is a small C++ HTTP/WebSocket server (~100 KB binary). See Run your own lobby in the footer for a ready-made systemd unit and Caddy config.