Releases: neostryder/neo-angband
Release list
Neo Angband 1.0.1-edge.96 (edge)
This is an automatic build of every commit on master. It is the
early channel of the in-game updater, and it is not a release.
Built from e1be8ef: Neo Angband 1.0.0
No release notes, no changelog entry, and no promise that it works.
It has passed the same test suite every commit passes and nothing else -
in particular nobody has played it. Saves made here are still saves: a
format change ships its conversion like any other build. If you want
something that has been looked at by a human, switch the channel to
beta on the update screen.
This release is REPLACED, tag and all, by the next commit.
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, #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 (#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
(#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 (#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'sindex.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 (#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 (#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
(#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 (#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
(#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'sflags:/values:tokens, a curse'stype:entries, a monster's
base:/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 with
valueinstead 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 (#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 bundled
demo-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/getCheck
prompts were outside this pass's scope and remain untranslated
(#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
(#125).
Found something that does not match Angband 4.2.6? Open an issue or come and say so in the Discord.
Neo Angband 0.34.2
What you can download
| Platform | File |
|---|---|
| Windows (installer) | Neo Angband Setup 0.34.2.exe |
| Windows (portable, one file) | Neo Angband-0.34.2-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.34.2.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.
Fixed
- The desktop build's injected mod-origin-merge script carried its own copy of
the save database's schema, out of sync with a store added earlier: it still
expected schema version 2 and did not know about the linoleum tile-cache
store, so an install landing on that path could fail to open a save
(#122).
Found something that does not match Angband 4.2.6? Open an issue or come and say so in the Discord.
Neo Angband 0.34.1
What you can download
| Platform | File |
|---|---|
| Windows (installer) | Neo Angband Setup 0.34.1.exe |
| Windows (portable, one file) | Neo Angband-0.34.1-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.34.1.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.
Fixed
- The desktop in-place updater refused to download any release after GitHub
renamed the CDN host release downloads redirect to, failing every update
attempt with "the release download redirected to an unexpected host." The
trusted-host check now matches any*.githubusercontent.comsubdomain
instead of one specific hostname, so a future rename does not repeat this.
A copy already stuck on the old check has to be reinstalled by hand once
(see the README) since the broken check runs in the copy that is already
installed, not in whatever is published next.
Found something that does not match Angband 4.2.6? Open an issue or come and say so in the Discord.
Neo Angband 0.33.0
What you can download
| Platform | File |
|---|---|
| Windows (installer) | Neo Angband Setup 0.33.0.exe |
| Windows (portable, one file) | Neo Angband-0.33.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.33.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
- Character history now exposes a write-time mod seam that can retain raw input
with a display-expansion marker, plus a display-time formatter shared by the
history screen and character dump. Unused seams preserve the faithful 4.2.6
stored text and rendering. - A mod can now decide the radius a blast is built from, through a new
projectionRadiushook on the behaviour seam (ModHooks). Core reads it in
computeProjectionbefore any grid is collected, and it is foldedchained,
so two mods narrowing one blast for two unrelated reasons both get their
narrowing. With no mod contributing one the member is absent and the radius is
used exactly as it was given, which is Angband 4.2.6's own behaviour: 4.2.6
sizes its damage-at-distance table bymax_rangeand never checks the radius
against it, so a radius above the maximum reaches distances the table has no
entry for. Upstream corrected that after the tag
(f0f6bd223,
upstream issue #6671); core
stays pinned to the tag and holds only the point at which the radius is
decided, and the correction ships as theupstream-catchupmod's
catchup.projectionsrule. The hook is RNG-free by contract - the radius
decides how many grids the blast collects, so a draw there would move the
stream by an amount that depends on the terrain.
Fixed
- Long capability descriptions and other scrollable table text now wrap instead
of being silently cut off at the edge of the terminal. Reported by neostryder.
Found something that does not match Angband 4.2.6? Open an issue or come and say so in the Discord.
Neo Angband 0.31.0
What you can download
| Platform | File |
|---|---|
| Windows (installer) | Neo Angband Setup 0.31.0.exe |
| Windows (portable, one file) | Neo Angband-0.31.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.31.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.
Security
- The desktop updater no longer accepts a download URL or checksum from the
renderer. The main process re-reads the named release from GitHub and
resolves the platform asset's URL, digest, and size itself; redirects are
followed manually with a host check on every hop, and extraction now
enforces archive size, entry count, and expansion-ratio limits. - A content patch path such as
__proto__.xno longer reaches
Object.prototype. Every path-walking entry point in the patch and compose
modules now rejects__proto__,prototype, andconstructorand reads
only a container's own properties. - Repository mod downloads and imported
.neocharsaves now decompress
within the same resource limits the local mod importer already enforced,
instead of expanding an untrusted archive or save with no ceiling. - The game window no longer navigates away from its own origin on a
same-window navigation. The check that decides what counts as the game's
own address now parses the URL instead of matching a string prefix. - Three dependencies pinned to versions with published advisories
(fast-uri,js-yaml,nanoid) are updated.
Found something that does not match Angband 4.2.6? Open an issue or come and say so in the Discord.
Neo Angband 0.30.0
What you can download
| Platform | File |
|---|---|
| Windows (installer) | Neo Angband Setup 0.30.0.exe |
| Windows (portable, one file) | Neo Angband-0.30.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.30.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
- The mod conflict report now includes a row for two or more mods that both
provide the player's own tile.TileRegistry.playerTilealready took the
first non-null answer in load order; a later provider's opinion was
silently discarded with nothing to show for it, unlike every other
contested slot the report already covers.
Changed
- Mod sizes now display as their exact byte count instead of a KiB/MiB
approximation. Every size in the pipeline was already measured exactly;
only the display step was rounding it.
Fixed
- Text-entry prompts (including the mod install "Repository" prompt) now
accept a pasted value, and no longer insert a character typed while
composing text through an IME. - A session-only mod's consent now refreshes when a re-staged draft changes
the archive's bytes, instead of carrying the original consent across the
edit.
Found something that does not match Angband 4.2.6? Open an issue or come and say so in the Discord.
Neo Angband 0.29.0
What you can download
| Platform | File |
|---|---|
| Windows (installer) | Neo Angband Setup 0.29.0.exe |
| Windows (portable, one file) | Neo Angband-0.29.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.29.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
- Mod authors can now put
renamedSectionFlagson aPackSectionto preserve
a player's explicit on/off decision when a section is renamed or when a rule
becomes a section to gate content. The host imports the first matching legacy
rule or section choice before applying the section default. - A save's manifest now records the content digest of every present pack.
Loading warns when a still-present pack's digest no longer matches what the
save was written with, catching a session-only mod that patched a core
record (rather than only adding one) differently, or dropped the patch
entirely, even though nothing was orphaned. Only session mods are measured
today; a regular installed mod's digest is a documented follow-up
(docs/modding/MOD_SEAMS.md section 4d). - The agent view can answer "does this player's class have flag X."
PlayerView.classFlagsreports the PF_* codes on the player class's own flag
set (class.txt'splayer-flags:lines) - COMBAT_REGEN for a Blackguard, ZERO_FAIL
for a Mage, and so on. The view already carried equipment-derived object flags
and derived skills, but nothing that read the class definition itself, so a mod
asking a class-flag question had no seam to ask it through. A new field on an
existing view rather than a new accessor, so the agent API is now 1.3.0.
Fixed
flavor.txt'sfixed:/flavor:order is now recoverable from the
compiled record. The content compiler used to split the two directives
into separate arrays, so a record that interleaved them could not be
reproduced from the compiled shape at all - the entryindexcannot stand
in for file order either, since flavor.txt's own numbering is not the order
the file writes lines in. Nothing shipped interleaves the two directives, so
this was latent rather than live; it would have become live the moment a
mod's flavor.txt did. The compiler now emits one orderedentrieslist per
record, each entry tagged with which directive produced it, so binding
follows the file's real line order regardless of how a flavor.txt
interleavesfixed:andflavor:.
Found something that does not match Angband 4.2.6? Open an issue or come and say so in the Discord.
Neo Angband 0.28.1
What you can download
| Platform | File |
|---|---|
| Windows (installer) | Neo Angband Setup 0.28.1.exe |
| Windows (portable, one file) | Neo Angband-0.28.1-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.28.1.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.
A fixes release: two keymap defects are corrected, and the Mod Builder mod is
renamed to ModForge.
Fixed
- Home/PageUp/End/PageDown now walk the same diagonal the numpad digits
7/9/1/3 do with Num Lock on, matching the numpad's own orthogonal keys
(Arrow keys), which already worked either way. - A custom keymap can now be triggered by a plain F-key (F1-F12, no modifier)
or by Enter, and an action sequence can now include Enter as one of its
keypresses - so a macro ending in Enter, such as the rest command
R&[Enter], can be bound. Both the keymap editor's capture prompt and the
keymap resolver that fires a bound key during play now accept the same set
of trigger keys, so a trigger the editor accepted could no longer silently
fail to ever fire.
Changed
- The Mod Builder mod is now named ModForge, with a new manifest id (
forge).
An existing install's enabled and consent choices carry over automatically.
Found something that does not match Angband 4.2.6? Open an issue or come and say so in the Discord.
Neo Angband 0.28.0
What you can download
| Platform | File |
|---|---|
| Windows (installer) | Neo Angband Setup 0.28.0.exe |
| Windows (portable, one file) | Neo Angband-0.28.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.28.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.
A mod-authoring release: a plugin now gets the SDK's authoring stack and the
game's own composed records live in ctx, and can apply a staged mod with a
proper reload instead of asking the player to press one - alongside a fix for
two windows open on the same character overwriting each other's saves, and a
Turbo speed tier for a mod's autoplayer.
Fixed
- Two windows open on the same character no longer overwrite each other's saves.
The character a window writes to is now that window's own, held for as long as
it is open, instead of being read from a setting every window on the origin
shared. Opening a character that is already being played somewhere else is
refused with an explanation rather than allowed and then silently lost, and a
window that ends up without the character - a duplicated tab, which resumes
without passing the character select - says so instead of playing on unsaved.
neo-angband-activestill records which character to offer at the next launch;
it no longer decides where a save goes.
Added
- A player-visible speed control for a mod's autoplayer: the mod's own Fixes &
tweaks screen (Mods -> the mod) now shows an Autoplayer speed row - Turbo,
Fast, Normal or Slow - beside the rule that hands it the keyboard in the
first place, once it holds the controller slot. Takes effect at once, no
reload. Fast, Normal and Slow match the debug agent seam's existing
?speed=fast|normal|slowtiers; Turbo (10ms) has no named equivalent there,
since the debug seam already reaches 10ms by passing a raw millisecond
value instead of a tier name. ctx.authoring: the mod SDK's authoring stack, handed to a plugin. The
whole public barrel, live, on the termsctx.coreis handed over: blueprints
measured from core's own records,peersFor,suggestFields,templateRecord,
draftRecord,checkRecordsandModProject. Always present and gated by no
capability, because these are pure functions over data the caller supplies. A
tool that helps somebody write a monster could reach none of it before: a plugin
resolves no bare specifier, so the published npm package was out of reach of the
game it describes.ctx.composedRecords: the records the running game was composed from.
Every content record as JSON, keyed by pack-file stem with no extension, which
is the shape the authoring functions accept. This is the unbound twin of
ctx.registries: a boundMonsterRacehas nobase, because the binder
resolved the name into a pointer, so a table of comparable records could not be
built from the registry. Mod-added records are in it on the same terms as
core's, each carrying its provenance, so a draft based on another mod's content
can name the dependency it just acquired. Absent during content composition,
for the reasonctx.registriesis.ctx.reloadGame: a mod can apply what it just staged. The game's own
mod-change sequence, behind eithermod:installormod:session- whichever
capability the mod already holds - because content composes at load and
staging plus reload are one act: a mod that cannot follow a stage with a
reload leaves the player holding something the running process will never
load. What the host does that a mod cannot do for itself is the sequence -
every plugin'suninstall()runs, the autoplayer hands the keyboard back, the
live character is written down, and the session comes back on that character
instead of on the title screen. It is not a permission to reload: a plugin
runs in the page and reacheslocationwith no grant at all, and a mod
calling that directly loses the player's progress since the last save.- An install outcome now carries the game's own wording.
ctx.installMod(bytes)answers withlineson both arms: the lines the Mods
screen itself prints for that same install, including one row per unmet
requirement and the author's advice under them. A mod built inside the game
therefore fails a standards check in the same words as one somebody downloaded,
rather than in a second vocabulary a player cannot look up.problemis
unchanged and is still one whole sentence. - A second API-surface ratchet, over the SDK.
packages/mod-sdk/mod-sdk-api-surface.jsonrecords its 94 runtime exports and
mod-authoring-surface.test.tsfails in both directions against it. Handing a
namespace to a plugin puts every name in it beyond the compiler's reach, which
is why core has had this since 2026-08-02;node tools/api-surface.mjsnow
checks and updates both baselines in one run.
Changed
- The download screen's size line now shows the exact byte count, comma-grouped,
instead of rounding to KB or MB - "162,343,507 Bytes" rather than "155 MB".
The screen already reads as a terminal (the ASCII progress bar); an unrounded
count fits that and visibly climbs while the download runs, where a
one-decimal MB figure barely moves.
Found something that does not match Angband 4.2.6? Open an issue or come and say so in the Discord.