The version you opened from Cloudflare Pages is a static preview:
the editor works, files are kept in your browser's localStorage,
and you can download / upload schedule JSON files. The CP-SAT solver
itself doesn't run in the browser — generating, matching, improving and
re-scoring timetables all require the installable version below.
Pick the route that matches your operating system. Each link goes to the official Docker download page — sign-in is not required for personal / educational use.
docker --version should print something like
Docker version 27.x.x..dmg, drag Docker.app
into Applications, then launch it from Launchpad.docker --version.# Install Docker Engine + CLI from the distro repos. One-line:
sudo apt update && sudo apt install -y docker.io
# Optional: let your user run docker without sudo (logout/login after).
sudo usermod -aG docker $USER
# Verify:
docker --version
For other Linux distros (Fedora, Arch, etc.) follow the official Docker Engine install guide — one section per distro.
szebenisz/fetjs:latest image is publicly pullable. If you
ever do sign in, that's only for pushing your own images.One command — no Python, no virtualenv, no PATH setup. Pick the line
that matches your terminal. The -v mount keeps your data
files and generated schedules on the host (under ./data/) so
they survive container restarts. Open
http://localhost:8001/ once it's
up, and Ctrl-C in the terminal to stop.
docker run --rm -p 8001:8001 -v "$(pwd)/data:/app/data" szebenisz/fetjs:latest
docker run --rm -p 8001:8001 -v "${PWD}/data:/app/data" szebenisz/fetjs:latest
docker run --rm -p 8001:8001 -v "%cd%/data:/app/data" szebenisz/fetjs:latest
Pass -e PORT=… and map the same host port. The
PORT env variable is read by the server at startup, so the
container actually listens where you tell it to. Then visit
http://localhost:9000/.
docker run --rm -e PORT=9000 -p 9000:9000 -v "$(pwd)/data:/app/data" szebenisz/fetjs:latest
docker run --rm -e PORT=9000 -p 9000:9000 -v "${PWD}/data:/app/data" szebenisz/fetjs:latest
docker run --rm -e PORT=9000 -p 9000:9000 -v "%cd%/data:/app/data" szebenisz/fetjs:latest
The static-preview site saves your edits in your browser. To carry them over to the installed version:
Schedules round-trip the same way through the ⬇ JSON / ⬆ JSON buttons on a schedule run.
| Feature | Static preview | Installed version |
|---|---|---|
| Edit Years / Teachers / Subjects / Rooms / Activities | ✅ yes | ✅ yes |
| Persistent storage | browser localStorage | data/ on disk |
| Download / upload data JSON | ✅ yes | ✅ yes |
| View uploaded schedule JSON | ✅ yes | ✅ yes |
| 🎲 Multistart · 🔄 Improve · 🧮 Rescore | ❌ disabled | ✅ yes |
| 🧠 SAT Match teacher assignment | ❌ disabled | ✅ yes |
| Print / multi-page PDF | ✅ yes (uploaded runs) | ✅ yes |
Use the custom-port command above with a different value, e.g.
-e PORT=8002 -p 8002:8002.
ortoolsYou're probably on Apple Silicon / ARM64 and pulled an x86_64-only build.
The multi-arch image on Docker Hub should auto-select, but if you build
locally: docker build --platform linux/arm64 -t fetjs:arm .
You're still on the static preview. Open http://localhost:8001/ (or your custom port) to get the installed version where the solver runs.
← Back to the editor