August 26, 2026 - stable
Neo Angband v1.0.0
Neo Angband 1.0.0
What you can download
| Platform | File |
|---|---|
| Windows (installer) | Neo Angband Setup 1.0.0.exe |
| Windows (portable, one file) | Neo Angband-1.0.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-1.0.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:
- 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. - Open System Settings -> Privacy & Security and scroll to Security, near the bottom.
- 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.
Added
- Two new
ModHooksextension points for the bug-fixes mod:partialStackMerge, a veto on combinePack’s uneven-stack merge (the point a mod can refuse to drain an already-full source stack into a smaller one, neostryder/neo-angband#115), andpackOverflowVictim, a decision hook that lets a mod redirect pack_overflow’s NULL-victim shed to the item that actually displaced out of the quiver rather than the last inventory slot (neostryder/neo-angband#116). With no hook installed, both call sites are byte-identical to 4.2.6. checkRecordsnow emits an advisoryfield/vocabularyhint when a record’s value falls outside the closed setRECORD_BLUEPRINTSmeasures for that field - the same measurement the workshop’s record-screen dropdown and file editor already read independently of each other. The two consumers now share one answer instead of each deciding on its own (neostryder/neo-angband#48).- Agent API 1.4.0:
PlayerStatusViewnow exposes thirteen buff timers (fast, sprint, protection from evil, hero, berserker strength, mystic shield, stoneskin, blessed, fastcast, and the five temporary elemental resists) alongside the eight negative afflictions it already carried, the same read-only, add-only way. Unblocks a mod-side buff cross-check against real engine state instead of the mod’s own message-based bookkeeping (neostryder/neo-angband#121). - The desktop build now bundles README.md and the other root policy/legal docs (CHANGELOG, LICENSE, TERMS, PRIVACY, SECURITY, CODE_OF_CONDUCT, CONTRIBUTING, AI_USAGE_POLICY) at the install folder’s own root, beside the executable - they were never copied there before.
Changed
- The browser tab icon, PWA install icon, and iOS home-screen icon are now
the actual app icon (the same mascot artwork the desktop build ships)
instead of a placeholder green “@” glyph. The web app’s
index.htmlalso gained explicit favicon<link>tags, which it never had before. - The portable data folder beside the executable is named
datainstead ofneo-angband-data. Only a fresh install or a fresh portable data folder gets the new name; an existingneo-angband-datafolder is found and used in place, exactly as before, both at startup and across an in-place update - nothing migrates and no save is moved, and neither name is ever deleted out from under an install that has it.
Fixed
-
A message longer than the display line took up a whole page of its own; upstream splits it at the rightmost space and recurses on the rest instead. The pager now does the same (neostryder/neo-angband#7).
-
Selecting a Linoleum tile pack that had never been converted before blocked the whole game until the entire source atlas finished slicing into loose files - long enough on a large pack (Shockbolt) to look identical to a hang. The game now hands control back immediately and shows a banner naming what is converting; the tileset applies once it finishes. Streaming individual tiles in as they convert, instead of applying the whole pack at once at the end, remains open (neostryder/neo-angband#124).
-
The birth point-buy stat allocation screen never showed the gold-rectangle cursor upstream draws just after the current stat’s cost (ui-birth.c:1135), because that screen is hand-rolled rather than built on the shared menu widget every other cursor-driven screen in the game already gets it from. Up/down now moves a real cursor there like everywhere else (neostryder/neo-angband#60).
-
menuNav, the one navigation helper every overlay and menu screen shares, never recognized h/j/k/l, even with the roguelike keyset selected - a game-wide gap, not limited to the birth screen where it was first reported. It now takes aroguelikeparameter and resolves h/j/k/l through the same direction mapping arrows and numpad already use. Reported by Nate (neostryder/neo-angband#127). -
The store’s item context menu (Examine/Buy/Buy One) printed its labels directly over the live stock list with no backdrop, so the stock row’s own text bled through around and behind them. It now draws as a bordered, backed popup near the selected row instead. Reported by Nate (neostryder/neo-angband#128).
-
A mod’s unresolvable reference or malformed patch could take the whole game down at boot in six places the mod-resilience audit had not yet reached: an artifact’s
flags:/values:tokens, a curse’stype:entries, a monster’sbase:/friends-base:/friends:/shape:, a terrain feature’smimic:, and a store record whoseowner:list areplacesbody dropped entirely. Each now drops only the mod’s own bad entry (or, where the field is the whole record’s foundation, the one record) and reports it, the same way an ego’s unresolvableitem:line already did; core’s own data still fails loudly. A malformedfieldPatchoperation - anappendwritten withvalueinstead ofvalues, for instance - used to abort composition entirely with no partial result and could drop every installed mod at once when the resulting error named none of them; it is now refused the same way a missing patch target already was (neostryder/neo-angband#8). -
Nearly every screen in the web front end still wrote its UI text as a hardcoded English literal, so a mod-supplied locale could not reach it no matter what it declared: context menus, the mods and mod-browse screens, options, keymap editing, pref-file screens, the wizard/debug console, the shop, the character sheet, the knowledge browser, the title screen’s credits, and birth and character-select. All of it now routes through
t()- over a thousand message ids added in this pass - and the bundleddemo-resourcesmod’sen-XApseudo-locale catalog grew to match, so switching to it no longer shows plain English for anything that is in fact translatable. main.ts’s combat messages and itsconfirmYesNo/getCheckprompts were outside this pass’s scope and remain untranslated (neostryder/neo-angband#95). -
An autoplayer mod (the Borg) took over the keyboard with no way to hand it back short of force-quitting: its own answer to a blocking prompt reached the game the same way a real keypress did, so opening the game menu to disable it just closed again on the mod’s next tick. Any real keypress now interrupts an autoplayer immediately, only while the window actually has focus, so one left running in the background does not hand back control on a keystroke meant for another window. Ctrl-Z also now offers to start one, through upstream’s own warn-and-confirm prompt, rather than a silent mod-manager toggle that took effect on the next reload (neostryder/neo-angband#125).
Found something that does not match Angband 4.2.6? Open an issue or come and say so in the Discord.