The Ledger

August 22, 2026 - prerelease - stable

Neo Angband v0.27.0

Neo Angband 0.27.0

View this release on GitHub

What you can download

Platform File
Windows (installer) Neo Angband Setup 0.27.0.exe
Windows (portable, one file) Neo Angband-0.27.0-portable.exe
macOS .dmg, or the .zip if you prefer to unpack it yourself
Linux .AppImage (no install), .deb, or .tar.gz
Self-hosting neo-angband-web-0.27.0.zip - static files, any web server

The portable Windows build and the AppImage need no installer: download, run, and the game keeps its saves in a folder beside itself.

These builds are not code-signed

There is no Apple Developer identity or Windows certificate behind this project yet, so your OS blocks the first launch.

Windows is one click: SmartScreen says “Windows protected your PC”, choose More info then Run anyway.

macOS is not one click, and the dialog it shows you does not contain the way through - it offers only Done and Move to Trash. Do this:

  1. Drag the app out of the .dmg, then double-click it and press Done on the refusal. This step is required: it is what makes the permission below appear, and it expires about an hour later.
  2. Open System Settings -> Privacy & Security and scroll to Security, near the bottom.
  3. Press Open Anyway on the line naming Neo Angband, authenticate, and launch it again.

Or, the same decision in one command: xattr -d com.apple.quarantine "/Applications/Neo Angband.app"

The old right-click -> Open trick does NOT work: Apple removed that bypass in macOS 15 Sequoia.

On Apple Silicon take the arm64 build. The x64 one is for Intel Macs, not a fallback - Apple is withdrawing Rosetta 2, so on a current Mac it is likelier to refuse to launch than to run slowly.

If that trade is not one you want to make, build it yourself - docs/INSTALL.md - or play in the browser, which needs no trust decision.

Your save

Saves survive an update. Every save-format change ships the conversion that reads the version before it, and a save this build cannot open is left untouched rather than replaced.


A trading and rest release: an agent’s shop-buy, shop-sell and shop-exit commands now reach a real handler instead of a silent no-op, and the rest command carries its own multi-turn continuation matching upstream instead of spending exactly one turn per call, so resting reaches the doubled regeneration rate upstream gives it. Alongside these, “Report a problem” opens the right issue tracker for the game or an installed mod directly from the report screen, repeated messages page correctly during a run or a rest, and the recall screen’s run-length format matches upstream’s own.

Added

  • “Report a problem” now opens the right issue tracker, for the game or for a mod. Once the report file is written the screen lists a destination per project and opens the chosen one in the real browser: G for Neo Angband, C for the RPGM Tools Discord, and a digit for each enabled mod that has a recorded origin. Nothing is uploaded; the file is still attached by hand.

    A mod’s address is read from its install record, which is the repository the mod was pinned to on first install rather than whatever the copy on disk now claims. Neo Angband’s own row goes to the template chooser, because its two templates are known to exist; a mod’s row goes to the tracker root instead, because whether somebody else’s repository has templates, or has issues open at all, cannot be known from inside the game. A mod whose origin is not a repository the game can address - one imported from a file that declared none, for instance - says so and offers no key, rather than guessing at a URL that might open a stranger’s project. Every address is printed under its row, so no page is opened that the player has not read first.

    The same screen now gives the advice that decides whether a report is actionable: one problem per report, search the tracker first, say what you did and expected and got, and which of the two forms a difference from Angband belongs in.

Fixed

  • The rest command spent exactly one game turn per invocation no matter what duration was requested, because it was wired to the same handler as standing still in place. Upstream’s own rest command takes one turn too, but re-queues itself on the internal command queue so a single keypress runs to the full requested duration - a turn count, “until HP and SP are full”, “until nothing is needed”, or “until either is full” - without asking for input again, and stops early on a disturbance exactly as any other rest would. The port’s desktop keyboard worked around the gap with its own turn-by-turn loop outside the engine, so it looked correct at the keyboard; every other caller of the command queue got only the single turn, and never reached the five-turn threshold for resting’s doubled regeneration rate. The command now carries its own multi-turn continuation, matching upstream, and reaches every caller the same way.
  • Repeated identical messages showed as one top line with a ticking <Nx> counter instead of being reprinted. Upstream keeps the run-length count for the recall screen only: the top line is redrawn for every occurrence, several share the line, and a -more- prompt stops for each screenful. The recall screen (Ctrl-P) still collapses the run, unchanged. Two related cases came with it: the top line no longer carries a <Nx> suffix that belongs only to the recall screen, and the partial line left by a step of a run or a rest now carries into the next step instead of being wiped, so its -more- arrives when the line fills rather than never. A dig, an open or a disarm keeps starting each attempt on a fresh line, which is what upstream does for a command repeating on its own count. Reported by nck_m.
  • Leaving a level with several screenfuls of pending messages read only the earlier ones: the last screenful got no -more- and was wiped by the new level. The flush before a level change now stops for every screenful.
  • A run of identical messages on the recall screen (Ctrl-P) read text (xN); upstream’s own format (ui-knowledge.c, ui-display.c) is text <Nx>. Three comments describing the old, wrong format as upstream’s are corrected too. Reported by nck_m.
  • “Report a problem” told a player to send the written file “wherever you got the game from,” naming no actual destination. It now names the GitHub issue tracker and the RPGM Tools Discord, and the two issue form templates note that the report file already answers several of their required fields. Reported by nck_m.
  • An agent’s shopBuy / shopSell / shopExit commands reached no handler at all: the engine’s command registry had nobody registered for shop-buy, shop-sell or shop-exit, so a controller’s shopping decisions were a silent no-op and an autoplayer that stepped into a shop could not spend or raise a copper. The three now resolve a stock index or a gear handle into a real object, re-check standing in the right store, and commit through the same buy/sell path the interactive shop screen uses.

Found something that does not match Angband 4.2.6? Open an issue or come and say so in the Discord.