# Hextris — self-hosted Tab Arcade edition

Prepared 2026-10-17. This is an ad-free modified version of Hextris, not a new game and not an assertion of current popularity.

## Authoritative source and revision

- Repository: https://github.com/Hextris/hextris
- Branch observed: `gh-pages`
- Pinned revision: `3f4847dc8fd7dab3d1c87e6324b9159d92fbd396`
- Exact upstream tree: https://github.com/Hextris/hextris/tree/3f4847dc8fd7dab3d1c87e6324b9159d92fbd396
- Original archive: https://codeload.github.com/Hextris/hextris/zip/3f4847dc8fd7dab3d1c87e6324b9159d92fbd396
- Copyright notice: Copyright (C) 2018 Logan Engstrom.
- Creators credited upstream: Logan Engstrom, Garrett Finucane, Noah Moroze and Michael Yang.
- Upstream README explicitly permits redistribution and modification under GNU GPL version 3 or any later version. Its full original notice is retained in `UPSTREAM-README.md`; the complete upstream license is retained verbatim in `LICENSE.md`.

## Components and asset rights

- Hextris gameplay JavaScript, original styles and five original SVG control images are from that exact GPL repository. The retained images are only `btn_back.svg`, `btn_help.svg`, `btn_pause.svg`, `btn_restart.svg` and `btn_resume.svg`; the repository supplies them with the GPL project and identifies no separate asset license. Advertising images, app-store badges, social artwork, promotional screenshots and all bundled upstream fonts are omitted.
- jQuery 1.9.1 is served locally, in its original unminified form, from https://code.jquery.com/jquery-1.9.1.js. Copyright notices in that file are preserved. Its full MIT license, copied from https://raw.githubusercontent.com/jquery/jquery/1.9.1/MIT-LICENSE.txt, is in `vendor/JQUERY-LICENSE.txt`. The matching unminified version replaces the upstream minified copy; gameplay still uses the same 1.9.1 API.
- The existing site's IBM Plex Sans Regular and Semibold fonts are copied without binary modification into `style/fonts/`. Copyright 2017 IBM Corp., Reserved Font Name "Plex"; the complete SIL Open Font License 1.1 is supplied in `style/fonts/ibmplexsans-OFL.txt`. No Google Fonts request or upstream Exo/Font Awesome dependency remains.
- New adapter code and styles in this edition are supplied under GPL-3.0-or-later, copyright 2026 Tab Arcade contributors. Simple play/key triangles are drawn procedurally instead of loading an icon font.

## Modifications dated 2026-10-17

1. `index.html` was replaced with a small iframe-ready document that retains the gameplay's expected elements. Removed AdSense, Google Analytics, social-sharing UI, app-store links, promotion scripts, tracking metadata and remote fonts. Added `noindex, follow`, a local content security policy and accessible start/control names, focus treatment, credits/source access and an explicit reload recovery panel.
2. `js/initialization.js`: removed Analytics and obsolete unload serialization; selected touch controls from coarse-pointer capability as well as the original mobile user-agent check; high scores use isolated storage; prevented scrolling with an explicitly non-passive touch listener.
3. `js/main.js`: removed the remote score reporting request, the remote `a.js` loader and app-store/social promotion from Help. Preserved creator attribution and added local source/license access. A new visit starts a fresh run.
4. `js/view.js`: removed the nonessential visited cookie, social share calls and mobile-app sales copy. Pause is a plain game state. Replaced the Font Awesome play glyph with a drawn triangle.
5. `js/render.js`: draws keyboard-direction triangles without Font Awesome.
6. `js/input.js`: replaced the external Keypress dependency with standard keyboard events for arrows/A/D/S, Enter, P and Space. Inputs retain left/right rotation, held fast drop, pause/resume and restart; removed obsolete mobile user-agent branches from restart binding.
7. `js/save-state.js` and `js/Block.js`: removed executable serialized game-state restoration and JSONfn/eval. Persist only top local high scores under `tabarcade:hextris:highscores`; the in-memory fallback keeps the game usable when storage is unavailable. Reloading does not resume the previous board.
8. `style/style.css`: original styles with upstream bundled font declarations removed. `style/embed.css` adds local licensed fonts, contained iframe sizing, three size treatments, visible focus, adequate touch controls and reduced-motion UI transitions. The game itself remains a visual timing game.
9. `js/embed.js`: local failure/reload behavior, keyboard access for image controls, a keyboard-operable Start button, visibility pause, storage fallback and reduced-motion DOM effects.

## Corresponding source and installation

`source.html` provides a visible credits/license/source page. `hextris-source.zip` contains the complete preferred source for this modified runtime, all local dependencies/assets/fonts, their licenses, this provenance record, and the source-file SHA-256 manifest. The ZIP excludes only itself. Every source file can also be downloaded individually from its relative URL. All game files are served unminified; no transpiler, compiler, package install or private service is needed.

To run the archive independently, extract it and serve its directory using an ordinary static HTTP server. Open `index.html`. Embedding uses the same file in an iframe; no remote game service, account or SDK is required. Preserve this source access and all included licenses when redistributing or updating the game. This independent game package is GPL software; its license does not grant rights to unrelated site assets or trademarks.

## Privacy and validation boundary

The gameplay has no ads, analytics, score uploads, cross-origin resource loads, audio or account service. `connect-src 'none'` blocks network API calls; scripts, images and fonts are same-origin only. High scores are stored only in this browser, without account sync. Local source/credits links are user initiated.

Static checks covered all included JavaScript syntax, the local HTML/CSS dependency graph, absence of active third-party URLs in the game code and local asset/source integrity. Actual canvas rendering, playability, mobile touch, game-over/restart and the embedded host layout still require a real-browser check before publication. The original game uses Canvas 2D and JavaScript, not WebAssembly. No contemporary trend or popularity claim is made.
