Browser Arcade is a first-party static launcher that bundles seven MIT-licensed browser games in one StartOS package. The launcher, games, licenses, fonts, images, and audio are served locally.
Install Browser Arcade from the start9.tabordalab.com (TabordaLab StartOS registry), or sideload the .s9pk package.
- Package identity
- Architecture
- Image and container runtime
- Game catalog and source locks
- Volume and data layout
- Installation and first run
- Network access and interfaces
- Actions
- Backups and restore
- Health checks
- Dependencies
- Security and offline design
- Limitations
- Updating vendored games
- Build and test
- What is unchanged from upstream
- Quick reference for AI consumers
| Field | Value |
|---|---|
| Repository | browser-arcade-startos |
| StartOS package ID | browser-arcade |
| Display title | Browser Arcade |
| First-party license | MIT |
| Registry category | Games, assigned in registry metadata rather than the package manifest |
Browser Arcade and its StartOS wrapper live in this repository. The games are vendored components, not a separate Browser Arcade upstream project or submodule. Because the current manifest requires an upstream repository, upstreamRepo and packageRepo intentionally identify this same repository.
The StartOS daemon runs one Nginx subcontainer. Nginx serves the launcher and vendored assets on port 80. Gameplay executes in the user's browser, so there is no database, game server, account service, or server-side simulation.
The Dockerfile builds from the official Alpine-based Nginx image pinned by immutable multi-architecture digest in Dockerfile. It supports x86_64 and aarch64. The build copies only the local Nginx configuration, launcher, game files, and preserved licenses. It performs no network fetch and installs no runtime package.
The image uses Nginx's normal entrypoint. Static application and license files have write permission removed. The current SDK exposes read-only controls for mounts but not a compatible read-only root-filesystem flag for this subcontainer, so no unsupported setting is declared.
| Game | Genre | Source record | Input |
|---|---|---|---|
| 2048 | Puzzle | 2048 | Keyboard, touch |
| Radius Raid | Shooter | Radius Raid | Keyboard, mouse |
| BrickIt | Arcade | HTML5 Games by tvanas | Keyboard, touch |
| BounceIt | Arcade | HTML5 Games by tvanas | Keyboard, touch |
| FloodIt | Puzzle | HTML5 Games by tvanas | Mouse, touch |
| SweepIt | Puzzle | HTML5 Games by tvanas | Mouse, touch |
| SnakeIt | Arcade | HTML5 Games by tvanas | Keyboard, touch |
Exact repositories, immutable commits, license paths, and vendored paths live in games.lock.json. THIRD_PARTY_NOTICES.md is generated from that lock. The asset review and minimal offline patches are recorded under third_party/.
The package declares zero StartOS volumes because the service has no server-side data. Game progress and high scores use each browser's local storage. Clearing browser storage or using another hostname, device, or browser profile can produce a separate or empty save state.
The service requires no setup wizard or credentials. After it starts, open the Web Interface and choose a game. The launcher provides search, genre filtering, input badges, controls, normal Play links, fullscreen actions where supported, and local license information.
| Interface | Protocol | Container port | Purpose |
|---|---|---|---|
ui |
HTTP | 80 | Launcher, games, licenses, and static assets |
StartOS terminates external TLS and routes the exported hostname to this interface. The application does not proxy traffic and has no resolver or external service requirement.
None. Browser Arcade needs no configuration, credential, import, or maintenance action.
The backup export is valid but contains no volumes. Browser-local scores and saves are outside StartOS and are not included in package backups or restore operations.
The daemon readiness check observes whether port 80 is listening. Nginx also exposes /healthz, which returns a plain-text successful response for direct runtime validation.
None. Nginx is part of the package image and is not a separate StartOS dependency.
- Nginx disables directory listing and returns a real 404 for missing game assets.
- The launcher uses a strict Content Security Policy.
- Game paths receive the inline script and style allowance required by the audited legacy games. No game receives
unsafe-eval. - Static audits reject remote runtime references and missing local assets.
- Browser tests block non-local requests in Chromium and Firefox.
- There are no ads, trackers, analytics, uploads, secrets, external APIs, CDNs, or remote fonts.
- Access is controlled by the user's StartOS and network exposure choices. Browser Arcade has no application password.
An idle StartOS snapshot on August 13, 2026 observed 0.000 CPU-seconds over five seconds, 108 MiB of container memory, 3,142 KiB of static files, and zero received or transmitted bytes during the sample. These figures describe one x86_64 server and can vary with StartOS, architecture, Nginx worker count, and traffic.
- Scores and saves are browser-local and are not synchronized or backed up by StartOS.
- Clearing browser storage resets local progress.
- Different hostnames can have separate local storage.
- Gamepad support is not guaranteed.
- Older games can behave differently across browsers.
- Radius Raid requires particular attention during Firefox and non-Chromium compatibility testing.
- There are no accounts, multiplayer services, server-side saves, custom game uploads, ROM support, or Internet-required features.
- Fullscreen availability and behavior depend on the browser and device.
Updates are deliberate and never merged automatically. For each source update:
- Select and check out an immutable upstream commit.
- Review repository and per-directory licenses, assets, fonts, audio, images, imported libraries, runtime links, analytics, advertisements, and external APIs.
- Replace the corresponding vendored subtree while preserving its layout.
- Record minimal required modifications in
third_party/PATCHES.md. - Update
games.lock.json, local license files, and the asset audit. - Run
node scripts/generate-notices.mjs. - Run all catalog, license, network, local-asset, offline, browser, and package checks.
- Review the resulting package on StartOS before release.
From the package repository inside a current StartOS workspace:
npm ci
npm run check
npm run format:check
npm test
make x86
make armnpm run audit runs the catalog, license, runtime-network, and local-asset gates. The browser suite launches all seven games in Chromium and Firefox and rejects non-local requests. The release gate requires clean architecture builds and final StartOS installation checks.
Game engines, rules, controls, local score behavior, directory structures, visual assets, and audio remain upstream code and content. The small recorded patches remove outbound runtime links, replace one missing local icon reference, and preserve offline behavior. Browser Arcade adds the launcher, package integration, static-server policy, license UI, audits, tests, and documentation.
Follow .ai-workspace/AGENTS.md and update every source lock, license, notice, audit record, and offline test when changing vendored content.
package_id: browser-arcade
architectures: [x86_64, aarch64]
volumes: {}
ports:
ui: 80
dependencies: none
startos_managed_env_vars: []
actions: []
data_location: browser_local_storage