HE

hextris

Self-hosted block-stacking puzzle game in the browser

Game Servers ★ 2.4k stars Easy setup GPL-3.0

Hextris is an open-source, addictive puzzle game inspired by Tetris, played in a web browser. It is a static web game that can be self-hosted on any web server for offline or LAN play.

Key features

  • Browser puzzle game
  • Static site hosting
  • No backend needed
  • Mobile friendly

Pros & cons

Strengths

  • Trivial to host
  • Fun and polished

Trade-offs

  • Single-player only
  • Simple game

hextris replaces

Last reviewed Sep 13, 2026 · 851 words

Hosting Hextris is git clone plus one line of web-server config, and the whole thing weighs less than a single photo from your phone. There is no backend, no database, no build step and nothing to update, which makes it the cleanest possible test of a new reverse proxy or the fastest way to put a game on a family dashboard. It has been on GitHub since 2014, sits at 2,435 stars under GPL-3.0, and plays as well on a phone as on a desktop.

What Hextris actually is

It is a falling-block puzzle on a hexagon. Blocks slide in from six directions toward a rotating central hex; you spin the hex with the arrow keys or by tapping the sides of the screen, and matching three or more blocks of a colour along an edge clears them. Games last 2 to 5 minutes, the difficulty curve is steep, and the high score lives in the browser's local storage, so it survives page reloads but not a cleared cache. Single-player only, no accounts, no leaderboard. The catalogue's "simple game" note is fair: this is a polished time-waster, not a platform.

That simplicity is the reason it shows up in self-hosting lists. The public copy at hextris.io works fine. The self-hosted copy works when your internet is down, on a plane, on a LAN with no outbound access, or on a kiosk that must not phone home. It also makes a good first tenant for a fresh web server, because when it loads you know your TLS, DNS and routing are all correct, and when it does not there is no application layer to blame.

Serving it takes one line

Clone the repository and point any static server at the directory. With Caddy, that is the entire site block:

hextris.home.example.com {
    root * /srv/hextris
    file_server
}

Caddy fetches a certificate on its own if the name resolves publicly, or you use its internal CA for a LAN-only name. If you would rather keep everything in containers, the nginx image does the same job:

services:
  hextris:
    image: nginx:alpine
    volumes:
      - ./hextris:/usr/share/nginx/html:ro
    ports:
      - "8085:80"
    restart: unless-stopped

That container idles at about 5 MB of RAM, well under the 64 MB the catalogue lists, and the game is a few hundred kilobytes of JavaScript, CSS and images. On a Raspberry Pi Zero it loads in under a second on the LAN. There is nothing to configure inside the game itself; if you want it at a subpath rather than a subdomain, serve it from /hextris/ and it works because every asset is referenced relatively.

Where it sits on a homelab

Three uses come up in practice. First, dashboards: a tile on a Homepage or Heimdall board that opens a game is a small quality-of-life feature for a household, and Hextris is the one that works on the kitchen tablet. Second, guest networks and captive LANs: a static game needs no outbound access, so it is safe on a VLAN that is otherwise cut off. Third, as a canary. I keep a static site on every reverse proxy I run because a 200 from a folder of files is the fastest way to prove the proxy is healthy before debugging a real application behind it.

It also pairs naturally with the other static games in the games category, 2048 being the obvious sibling. Serve them from one nginx container with one subdirectory each and you have a LAN arcade for zero maintenance.

What it is not, and what to run instead

Hextris has no multiplayer, no accounts, no server-side scores. If you want a game night for a group, look at the browser party games and Minecraft servers elsewhere in the category; they are real services with real resource needs. If you want a project you can tinker with, the codebase is vanilla JavaScript from 2014 with no framework, which is either charming or dated depending on your mood, but it is small enough to read in an afternoon and the GPL-3.0 licence lets you fork it for a custom colour scheme or a family leaderboard.

Updates are a non-issue. The repository sees occasional commits, but the game has been feature-complete for years and there is no attack surface in a static file server beyond the server itself. Update nginx or Caddy on your usual schedule and leave the game alone.

What I'd do

Clone it into /srv/hextris, serve it with Caddy on a LAN-only name, and put a tile for it on the household dashboard. Total time about 4 minutes, ongoing cost zero. If you have never run a reverse proxy before, this is the thing to deploy first, before Jellyfin or Nextcloud, because it lets you get certificates and DNS right without an application in the way. When the game loads over HTTPS on your phone, the proxy is done and the real services can follow.

Similar game servers apps