September 27, 2026
Neo Angband v1.19.0
Added
-
VisibleUI AnybandUI is on the recommended mods list. It adds a mouse-first interface ported from Wurli Monkhaven’s AnybandUI frontend, and each of its features starts off until you choose it.
-
InternalModding-API Mods can declare numbers the player sets on the Mods screen. A manifest’s
settingsgives each one a range, a step, a default and an optional unit and parent switch. The row steps with Left and Right, and the mod reads the value fromctx.settings, which stays in range and can tell the mod when it changes (#295). -
InternalModding-API Interface mods can act on floor objects and read more of what the game shows. Object commands and pickup take
args.floor, and floor items carry a pile index and an item key. Item views add the inventory name and the ignore mark. Store quantity prompts list the total for every amount and the price confirmation carries its price. The snapshot reports the store rows for the quiver and equipment, message repeat counts and colours, and the rest mode with the length asked for. The command catalogue names each command, and blast previews take a breath’s arc. Text and spell prompts accept a cancel reply (#294). -
InternalModding-API Interface mods can read richer map, item, spell, store and character state. Frozen input snapshots and inspections expose quiver and floor items, stable item keys, slot names, spell study facts, stock inspection, blast metadata, store quotes, message history, rest activity and roster lineage events. The intent catalogue, grid look, click modifiers, ignore rules and rest interruption use existing game paths. (#291)
-
InternalModding-API Mods can run character creation. With
ui:birth.replace, a mod’sbirth(ctx)presenter gets each character creation as a draft it edits through the game’s own point-buy, roller, name and background rules, then accepts or cancels.ctx.saves.create()starts creation from the title, optionally from a previous character. (#291) -
InternalModding-API Mods can read the run journal and an end-of-run report.
ctx.character.history()returns the character’s history as data, andctx.character.onRunEnddelivers one report when a character dies or retires, with the cause, the score, the final belongings, the last messages and the character sheet. (#291) -
InternalModding-API Mods can read the knowledge menu with
ctx.knowledge. A mod lists each category’s known entries in the game’s own groups and gets each entry’s recall page, and reading a page never moves the game’s random stream. (#291) -
InternalModding-API Mods can read what visual effects need. Monsters in the snapshot mark uniques and quest guardians, and the player view adds the low hit point threshold and the recall and descent timers. Remembered floor objects carry a glow class that matches their
{cursed}and{??}markers,ctx.inspect.terrainCatalogue()lists terrain with its stairs and fire flags, and the bolt and explosion events name their element. (#291) -
InternalModding-API Menu mods can read the character sheet and change options and keymaps.
ctx.character.sheet()returns the sheet’s panels, stats, history and flag grids as data.ctx.saves.renamerenames characters that are not in play by rewriting their saves.ctx.optionsreads the game’s options and, withoptions:write, changes interface options and the delay settings.ctx.keybindings, withkeymap:edit, lists, sets and removes keymaps and captures a key to bind. (#291) -
InternalModding-API Mods can read the current controller and enabled peers. Frozen driver and public mod reads, controller status events, input ownership refusals, and per-mod display setter restoration let interface mods coexist with other controllers and display mods. (#290)
-
VisibleUI Subwindows can float inside the game viewport. Float and Dock controls move panels between floating windows and remembered docked places; a switch can show floats docked without losing their positions, and hidden panels return to their last place. (#287)
-
InternalModding-API Interface mods can read travel routes, grid actions, and item rules. Frozen inspect answers use the game’s pathfinder, remembered terrain, and learned ignore settings; a display margin keeps whole map cells clear for mod controls. (#289)
-
InternalModding-API Mods can provide panels for the tiled subwindow layout.
ctx.ui.registerPanelKindadds a host-mounted shadow-root panel underui:panel.mount, with saved placement, tabs, state updates, cleanup and a placeholder when its mod is not loaded. (#287) -
VisibleUI Subwindow panels can share one space as tabs. Dropping a panel on the new Tab target in the middle of another panel adds it as a tab, and a tab strip in the title bar switches between them. A window too small for every panel now folds the most cramped panel into a tab beside the panel closest to it in shape instead of hiding it, and separates them again when there is room. (#287)
-
VisibleUI Each part of the subwindow manager has its own switch. The Subwindow setup screen turns tabs, small-window folding, divider locking and fit to content on or off one at a time, and none of them changes a saved arrangement. Fit to content gives a panel that asks for a set height that height until you drag its divider; double-clicking the divider hands the size back. (#287)
-
VisibleUI The dungeon view can be moved like any other panel. A grip in its top-right corner drags it to another panel’s edge or swaps it with a panel, and a switch on the Subwindow setup screen hides the grip. It never closes, hides or becomes a tab. (#287)
-
InternalModding-API JSON documents share a schema registry and canonical writer. The mod SDK validates envelopes and scalar values, migrates older versions, and serializes stable output; desktop window placement now converts
window.txttowindow.jsonon first read. (#288) -
InternalModding-API Mods can read the game’s own inspection answers.
ctx.inspectandAgentViewreturn an item’s description, a monster’s recall, a spell’s details, the items a command would offer, and aiming paths, each stamped with the current input token. Answers cover only what the player knows, need the matching state read grant, and leave game state and RNG unchanged. (#285) -
InternalModding-API Resolved combat, healing, and movement events expose outcomes to interface mods. Core emits copied hit, miss, damage, death, restored HP, and typed walk or teleport facts at their resolving paths, with a visibility flag; web mods subscribe through
ctx.eventsusing individualevent:<name>grants. (#285) -
InternalModding-API Mods can manage characters from their own title screens. The
saves:managegrant exposes frozen roster entries and routes load, rename and confirmed deletion through the host’s character paths; only the character in play can be renamed. (#285) -
InternalModding-API Mods can filter panel content with the terminal canvas. The optional
scope: "game"onctx.display.setVisualFiltercovers mod panels and tiled subwindows under the existingdisplay:filtergrant. The default remains canvas-only, while host recovery and consent screens stay clear. (#285) -
InternalModding-API Mods can read the player’s known level in one call.
ctx.knownLevel()returns frozen cells with remembered terrain and objects; real contents requirestate:map-actual.read(#285). -
InternalModding-API A mod can submit player actions with
ctx.intent.submit(). Theinput:intentgrant exposes validated commands, travel and targeting at the current snapshot token through the game’s existing input path without marking the character as autoplayed. Rejected actions leave game state unchanged. (#285) -
InternalModding-API Mods can read and answer the game’s open prompts. The input snapshot reports typed confirmation, quantity, text, direction, item, spell, and target waits under
state:interaction.read;input:prompt.replygrants an optional context method that validates an answer and sends it through the existing handler (#285). -
VisibleUI Open the Mods screen from the title screen before creating a character. Install, enable and order mods there; applying changes reloads the title and birth screens with the new mod set (#286).
-
InternalModding-API A mod can read one input wait whole with
ctx.snapshot(). It returns the player, pack, equipment, monsters, target, stores and spellbooks from one moment, with the shell’s phase, whether a “-more-” pause holds input, and the last map frame, under a token that changes only when the game does.AgentView.capture()andinputToken()give the core half, andtokenIsCurrent()checks a token against the game as it stands now. Reading changes no game state or RNG (#285).
Changed
-
InternalModding-API A mod manifest, locale file or font catalog can be wrapped in the house JSON document. Projects from the SDK scaffold now start with a wrapped manifest, which needs this engine or later, and every reader in the host and the SDK tools accepts both that and the bare manifest published mods ship (#288).
-
InternalSave-Compat Load orders, the build id,
.ndelveexports and installed-mod records are JSON documents. Each reader still takes the older form, and an installed-mod record is rewritten the first time it is read (#288). -
VisibleSave-Compat High scores, your last character choices and the desktop app’s small settings files move to the new save format. Your existing copies convert the first time the game opens them, and nothing in them is lost (#288).
-
InternalModding-API A mod’s
prefsresource is a JSON preference document. Visual overrides, colours, sounds, auto-inscriptions, entry renderers and keymaps apply for the session, through the same grammar and tile replay as before, and never change the player’s saved preferences. A.prfpath fails manifest validation. (#288) -
InternalSave-Compat The web game’s single-value settings share one JSON document. Language, graphics mode, sidebar layout, update channel, log level, control profile, autoplayer speed, the third-party mods switch and two one-time flags live under
neo-angband:settingsinstead of ten separate browser-storage keys. The first launch after an update moves each old value into the document and removes the old key once the document reads back; a document from a newer build is left untouched. (#288) -
InternalSave-Compat The mod manager’s state and the profile list are JSON documents. Each profile keeps its enabled mods, choices, consents, rule and section choices and load-order pins in one
neo-angband:mod-statedocument, and the install keeps its profiles and active profile inneo-angband:profiles. Values under the older keys move in the first time the game starts. When the desktop app’s local address changes, it now carries over everyneo-angband:document the new address lacks, these two and the settings among them. (#288) -
VisibleUI A new install opens with the default subwindow arrangement. The first launch shows the panels of the shipped Loth.prf layout around the main view instead of the game view alone. A layout with every panel turned off now stays that way between launches. If you had every panel off before this version, the default arrangement appears once; turn the panels off again and that choice sticks. (#287)
-
VisibleUI The title screen calls Neo Angband a faithful but moddable port of Angband, meant to be playable almost anywhere. The line under the logo used to describe it by its programming language.
-
VisibleSave-Compat A character export is a plain JSON document. A
.neocharfile holds the character and the save as readable JSON. An older character file still imports, and a save from before this change still loads. (#288) -
VisibleSave-Compat Saved option defaults, monster memory, random-artifact exports and Linoleum tile packs are stored as JSON. Your existing files convert the first time the game reads them, and the old copies are removed once the new ones read back correctly. A tile pack already saved in your browser converts the same way. If a file cannot be read, it is left untouched and the game uses the defaults for that session. (#288)
Fixed
- VisibleUI The Mods screen no longer says that turning a mod on turns all its switches on. It says how many are on by default and what turning the mod on will ask. For a mod that is already on, it points to the mod’s own page.
- VisibleUI Subwindows stay in place when a mod tints the display. A colour or CRT effect used to shift each subwindow’s picture off its panel by the panel’s own offset, which left the panel blank.
- VisibleUI A mod’s panel shows its content from the top. The panel’s unused text canvas used to fill the panel’s whole height and push the mod’s content out of sight.
- VisibleModding-API A mod’s spell or item use that names no direction asks the game’s own questions first. The player picks the direction, confirms a spell cast with too little mana, and chooses any item the effect targets, just as with the keyboard. Before, the spell or device fired at the current target, and with no target set the mana or the charge was spent on nothing.
- InternalModding-API A mod’s quality rule for rings and amulets stops at “bad”, as the game’s own quality menu does. A mod can also give the whole sidebar back to the map with a zero sidebar size. A Ctrl travel intent outside play is refused for the phase rather than as a bad grid (#294).
- InternalModding-API A mod’s monster list holds only the monsters the player can perceive.
ctx.snapshot().core.monstersused to include every monster on the level. It now matches the game’s own monster list, so detected and telepathically sensed monsters appear, and unseen monsters and mimics posing as objects do not. (#293) - VisibleUI Installing an update on Windows no longer opens a console window. The script that swaps in the new version runs hidden, and the game still reopens on screen when it finishes. (#292)
- InternalModding-API Store intents now ask the store’s quantity and price questions before trading. Mods answer or cancel the typed prompts, while core agent callers with an explicit quantity keep their direct transaction path. (#291)
Downloads
- neo-angband-web-1.19.0.zip22 MB
- Neo.Angband-1.19.0-amd64.deb117 MB
- Neo.Angband-1.19.0-arm64-mac.dmg135 MB
- Neo.Angband-1.19.0-arm64-mac.zip135 MB
- Neo.Angband-1.19.0-portable.exe117 MB
- Neo.Angband-1.19.0-win.zip155 MB
- Neo.Angband-1.19.0-x64-mac.dmg140 MB
- Neo.Angband-1.19.0-x64-mac.zip140 MB
- Neo.Angband-1.19.0-x64.tar.gz137 MB
- Neo.Angband-1.19.0-x86_64.AppImage144 MB
- Neo.Angband.Setup.1.19.0.exe117 MB