Releases: Stelliro/Morkyn
Release list
Mørkyn 0.9.12
Morkyn 0.9.12
Second hotfix on the 0.9.1 line, from the first external playtest.
Turns no longer repeat their own sentences. The narrator no longer gives the
player gear they do not own. Copying a scene keeps the place and character
names. A capped inventory list is no longer described as everything the player
holds. Browser updates actually arrive, which 0.9.11 did not.
No save-format change from 0.9.11.
Mørkyn 0.9.1-wip
Mørkyn 0.9.1-wip is a work-in-progress drop on the 0.9 line. Playable. Not a stable 0.9.1.
Last stable: 0.9.0.
Download
| OS | File | What to do |
|---|---|---|
| Windows | start.bat | Drop in an empty folder and double-click |
| Linux | start.sh | bash start.sh in an empty folder |
| macOS | start.sh | Same file as Linux — bash start.sh |
Requires Git and Python 3.11+. --full also installs llama-cpp-python (built-in GGUF server only). --help lists flags.
If you already have a clone: git pull on main, then Morkyn.bat / Morkyn.ps1.
Since 0.9.0
- Venues in the play UI — shops on this square as chips (open/closed, keeper, way out).
- Inspect does not duplicate the item — looking at the seed no longer mints extras.
- Inventory quantity is on the row — name + count; details on hover.
- Setting coherence — era-correct NPC jobs, magic level matches an open-magic world, an unset tech dropdown no longer calls a starship iron age, place names no longer walk into Riverbend / possessive chains /
[[L1]]. - Continuity contracts — naming, recall of specifics, answer-acts, NPC pronouns, movement repair.
- Randomize actually randomizes — idea-bank sparks no longer pin the same two cards.
- One-file launchers
start.bat/start.sh(also on this release).
Full list: CHANGELOG.md
WIP, on purpose
Expect rough edges. The loop plays: act, world applies, next act. Clock vs prose, leftover zero-qty rows, and small-model narration still need work.
Upgrading
Existing 0.9.0 saves migrate in place. Export a slot first if you want a rollback point.
Mørkyn 0.9.0
Mørkyn is a local-first browser RPG: a local LLM narrates turns and proposes structured world changes, while SQLite stays the source of truth.
0.9.0 moves the decisions a 7B keeps getting wrong out of the model and into the server, then verifies each one against a live local model.
Install
Download start.bat (Windows) or start.sh (Linux / macOS) from the assets below, drop it in an empty folder, and run it. Nothing else to fetch first.
Windows double-click start.bat
Linux / macOS bash start.sh
It clones the project, builds a private .venv, installs the dependencies and starts the game. Every run after that checks for updates and asks before applying them — answer no and it starts the copy you already have. Offline, it skips the check and starts anyway. It will not touch a checkout that has local changes or local commits.
--full also installs llama-cpp-python for the built-in GGUF server; the default install leaves it out, because its CUDA wheels are a large download that fails without a matching toolchain and neither Ollama nor the cloud APIs need it. --update and --no-update skip the prompt in either direction; --help lists everything.
Requires Git and Python 3.11+. Verified from empty folder to a served UI on Windows 11 and on Alpine 3.23 (musl, Python 3.12).
Server-rolled dice
The model writes a band — trivial, small, large — and the app rolls the amount, scaled by level, difficulty and growth settings. Every roll is audited in dice_rolls. Deterministic blake2b seeding means a rewind reproduces the same dice.
Content packs
JSON files that add, retune or remove skills, powers, items and tables with no code changes. Drop one in data/packs/. GET /api/content-packs/authoring-bundle returns a self-contained spec you can hand to any LLM to author content.
Venues
Shops, inns, forges and temples are real places you walk into and back out of.
A venue is a locations row whose parent_id is the place you enter it from, so entering is an ordinary move and everything downstream — visit counts, entity codes, the map, export/import — keeps working. On top of that:
- Opening hours against the world clock, wrap-aware (a tavern open 11:00–02:00 is open at 01:00, shut at 03:00).
- Containment: you enter a shop from the street outside it. Naming one from two locations away walks you to its door; going in costs the next turn.
- Commonality: a hamlet has no apothecary, a town has no counting house, and each kind is capped per settlement.
- A keeper who stays the same person.
What this replaced: a probe walked into an apothecary, talked to the keeper, stepped out and went back in — and the database recorded one location and zero movement for all four turns. Asking to return from two locations away minted an unrelated top-level Apothecary and teleported the player inside it, at night. The keeper was a man, then a woman, then a different man.
Continuity
Movement, narrative person and NPC identity are server contracts with deterministic repair rather than things the model is asked to remember. A doorway turned out to be the move the model reliably narrates and reliably fails to record, so movement repair gained venue_enter / venue_exit / venue_opened / venue_return.
Encounters
Travel, wait and rest danger now accounts for stats, skills, wounds, fatigue, carried load, terrain, weather and time of day. Participant counts and threat are rolled server-side.
Setup and backstory
- A character you wrote as native is no longer rewritten into an isekai one. Origin classification is scored instead of first-hit — "a compound clerk who tallies grain fees at the gate office" was matching "office" and being rewritten.
- The stitch path now keeps the former life you wrote instead of drawing a fresh one.
- Backstory rewrites are seeded by blake2b.
abs(hash(text))made every repair identical within a run and irreproducible across runs.
Also in this release
Character art hires/upscale path with LoRA persistence, and Simple Start setup fixes so expand/compose stops clobbering surface edits. 16 proof harnesses under tools/, all passing.
Verified
355 unit and regression tests plus 7 behavior checks, passing and order-independent. Live probes against a local qwen2.5:7b-instruct for narration quality, movement, continuity and venues. The schema migration was checked against a hand-built pre-venue database with its rows intact.
Not verified
The browser UI was not exercised end to end in this pass, and it has no venue awareness — entering a shop changes the location name the UI already shows, but there is no "shops here" list and no open/closed indicator. Venues reach the player through prose and the location name only.
Upgrading
The locations schema gains six additive columns (parent_id, kind, open_minute, close_minute, settlement_size, keeper_npc_id). Existing saves migrate in place on first launch; nothing is dropped. Export your world first if you want a rollback point.
Run python tools/make_debug_save.py for an importable world that already has gold, equipped items, a locked ability, part-spent resources and three venues on one square — useful for testing without burning a setup.
Mørkyn v0.9.0-beta
Mørkyn 0.9.0-beta (WIP — replaced)
Pre-release from branch test/morkyn-0.9-wip. Playable preview of the 0.9 line — expect rough edges and save-format evolution before a stable 0.9.0.
This upload replaces the previous v0.9.0-beta pre-release on the same tag.
Highlights (this drop)
- Themed start locations: cyberpunk, steampunk, wasteland, celestial heavens, noir, undersea, arctic, desert, gothic, space + expanded fantasy banks
- Heavens / prison state: blank map + movement lock when starting in celestial confinement
- Backstory quality gate: invent → verify → retry → diversified fallback (same spirit as powers); stock freight/truck/dirt-road clones denied
- Powers: strip numeric junk names (
Salt Circle 52); unique remakes without bare digits - Art / hires: upscaler settings stick in the quality bar; extras upscale payload hardened for Forge 422s; default ESRGAN-class upscaler for post-upscale
- Opening / entities: known place/NPC/item names become clickable links; opening fallback uses
Name [[code]]; server injects codes for known names - Export / setup: integrity tests, isekai arrival-only start locations, starter diversity polish
Earlier 0.9-beta base
- Resources (mana / energy / fatigue), ability cost/prereq variety, lock-after-create
- Setup sanitation (bool/enum clamps, magic_level aliases)
- Forge LoRAs + hires always visible
Version
- App branch:
test/morkyn-0.9-wip - Tag:
v0.9.0-beta→ commit on this push
Install / update
git fetch origin --tags
git checkout test/morkyn-0.9-wip
# or: git checkout v0.9.0-beta
git pullNot a stable production release. Report issues against the WIP branch.
Mørkyn v0.7.0
Mørkyn 0.7.0
Rebrand + long-playthrough tools.
Highlights
- Rebrand to Mørkyn (UI, API, launchers, docs)
- Brand assets in
Media/(logo + key art) - Hierarchical memory consolidation
- Token budget guard before LLM calls
- Campaign save slots
- Context health + compact mode
- Off-screen GM event ticks
- Combat profiles + verification memory (included from local WIP)
python behavior_test.pyregressions