Hush is a local-first idle horror game built with SvelteKit.
The player survives by managing when to check the signal, when to stay quiet, and how predictable their behavior becomes. Opening the app, repeating actions, and returning too often can all teach the unseen listener how to find the player.
Listen, Hide, and Decoy.The UI intentionally avoids exact numbers during normal play.
Sound: how exposed the player is by noise.Knowledge: how much useful information remains.Pattern: how predictable the player has become.Threat: how close the listener is.Green is safer, yellow is unstable, and red is dangerous.
Install dependencies:
npm install
Run the dev server:
npm run dev
Run type and Svelte checks:
npm run check
Build for production:
npm run build
Preview a production build:
npm run preview
Open the app with:
?debug=true
Debug mode:
Example:
http://127.0.0.1:5173/?debug=true
Hush stores progress locally in localStorage.
Current keys:
hush.save: active run statehush.bestSurvivedMs: best survival timeThere is no backend, login, cloud save, leaderboard, or database in the MVP.
The app includes basic PWA support:
The service worker is registered only outside SvelteKit dev mode, so local development does not get stuck with stale cached assets.
src/lib/game/ Core simulation, actions, save/load, balance, death logic
src/lib/components/ Svelte UI components
src/routes/+page.svelte Main game screen
static/ PWA manifest, icons, service worker
documentation.md Original MVP design documentation
The listener is never shown. The horror comes from logs, ambiguity, timing, pattern recognition, and corrupted information.
The game should stay small, readable, and tense rather than becoming a complex resource-management dashboard.