| Name | Modified | Size | Downloads / Week |
|---|---|---|---|
| Parent folder | |||
| acton_0.27.0_amd64.deb | 2026-05-08 | 84.7 MB | |
| acton_0.27.0_arm64.deb | 2026-05-08 | 81.0 MB | |
| acton-linux-aarch64-.tar.xz | 2026-05-08 | 105.4 MB | |
| acton-linux-x86_64-.tar.xz | 2026-05-08 | 111.0 MB | |
| acton-macos-aarch64-.tar.xz | 2026-05-08 | 116.3 MB | |
| acton-macos-x86_64-.tar.xz | 2026-05-08 | 100.6 MB | |
| README.md | 2026-05-08 | 27.2 kB | |
| v0.27.0 source code.tar.gz | 2026-05-08 | 2.7 MB | |
| v0.27.0 source code.zip | 2026-05-08 | 3.4 MB | |
| Totals: 9 Items | 605.1 MB | 3 | |
Added
- Add precise content-hash based build output reuse throughout the compiler pipeline for optimal compilation [#2447, [#2497], [#2581], [#2674]]
- Acton now decides whether previous typechecking results, generated build outputs, and downstream work are still valid from source and dependency content instead of relying on file modification times
- Cached module interfaces record source hashes, module-level public and implementation hashes, and per-name source / public / implementation hashes
- Per-name dependency hashes let the compiler track exactly which names a declaration depends on, so unrelated edits do not force whole modules or downstream dependents to be rebuilt
- Public type-signature changes rerun front passes for affected downstream modules; implementation-only changes can refresh implementation hashes and rerun back passes / code generation without forcing unrelated typechecking
- When hashes match, cached build output is reused directly instead of reparsing, re-typechecking, or regenerating work that is already fresh
- Add concurrent module compilation across the build graph. [#2524, [#2527]]
- The compiler schedules modules as soon as their dependencies are ready, allowing independent parts of a project to typecheck in parallel
- Front passes and back passes are separated, so dependent modules can start once an interface is available while normalization, C generation, and other back-end work continue in parallel
- Ready modules are prioritized by critical path so large dependency branches do not leave available workers idle
- This keeps project builds, watch mode, and LSP feedback responsive while still producing the same deterministic build outputs
- Add VS Code editor support through the Acton language server. [#2487, [#2753]]
- The VS Code extension can now show Acton syntax and type errors inline,
using the same parser and typechecker as
acton build - Completion suggests attribute names, function and method argument names, and other relevant source-level names
- Hover shows Acton information for names under the cursor
- Editor state is kept in memory for fast lookups, so completion and diagnostics stay responsive while typechecking continues
- Add
acton doccommand for generating documentation [#2274, [#2284], [#2292], [#2293], [#2295]] - Supports multiple output formats (text, markdown, HTML)
- Default is to open browser into HTML docs when window environment is
available, in terminal we fall back to colored text output. Use
acton doc -tto force text / terminal output. - Plain
acton docwill show module index in browser - for terminal output, a source file must be given, likeacton doc src/foo.act -t - Text output is colored for output to TTY (terminal), piping output falls
back to plain ASCII output. Also honors
NO_COLORenv var - HTML supports:
- colorized output of types etc
- inter-module links to type definitions
- explanatory tooltips for generic types
- Add optional chaining and forced unwrapping for optional values [#2672, [#2726]]
person?.residence?.namereturnsNonewhen any step isNoneperson!.residence!.nameraisesValueErrorwhen a required step is unexpectedlyNone- Both forms support attribute access and method calls via
?./!., plus indexing and slicing via?[...]/![...] - Add
acton sigto inspect inferred type signatures using the same project-aware module and dependency resolution asacton build. [#2746] - Useful when an error says
foo.bardoes not have attributeX, sinceacton sig foo.barresolves names like the compiler does: first asbarin modulefoo, then as modulefoo.bar - Add docstring support throughout compiler and AST [#2282]
- Parse docstrings in AST declarations [#2269, [#2270], [#2271], [#2565], [#2736]]
- Unescape docstrings in NameInfo
- Allow module docstrings before imports
- Add short options support for argparse module [#2289]
- Add global command-line options support to actonc [#2291]
- Add new Hashable protocol and hash() builtin function [#2255]
- Replace hash method with new composable hashing approach
- Types implement
.hash(self, hasher)method to update a stateful hasher object - The hasher accumulates state from multiple fields:
self.x.hash(h); self.y.hash(h) - Use the
hash()function to get hash values:h = hash(my_object) - All built-in types implement Hashable protocol
- Uses fast wyhash algorithm via Zig implementation
- Parser / Syntax errors are now prettier [#2306, [#2307], [#2309]]
- Replace basic error rendering with elegant unicode style using Diagnose library
- Better structured error reporting using Megaparsec's ADT typed error system
- Improve error messages for type variable name violations
- Clear hints explaining that single uppercase letters are reserved for type variables
- Show cases possibilities of new parser error diagnostics
-
Plain ASCII example (in terminal is even prettier):
[error Parse error]: Invalid name (reserved for type variables)
+--> test/syntaxerrors/err41.act@1:7-1:8 |1 | class Z(value): : ^ : `- invalid name 'Z' : | Hint: Single upper case character (optionally followed by digits) are reserved for type variables. Use a longer name. -----+
-
Improve string interpolation parsing [#2321]
- String parsing has been rewritten from scratch
- String interpolation now works by default in all string literals (no f-prefix required)
- Both
"hello {name}"andf"hello {name}"support interpolation
- Both
- The change to interpolate normal strings is backwards incompatible, any strings containing curly braces now need to be escaped or be converted to raw strings, i.e. "{" -> "{{" or r"{"
- Backwards compatibility for classic
%operator style is currently maintained, i.e. NO interpolation is performed fors = "hello %s, here is {}" % name, so curly braces are treated literaly- NOTE: %-operator style formatting will be deprecated in the future
- Parser support nested interpolation strings (thought the necessary rewrites
- Properly handle escape sequences in interpolated strings
- Support complex expressions in interpolations including slices (
{arr[1:3]}) -
Better error messages for malformed format specifications and many other cases
ERROR: [error Syntax error]: Empty format specifier after ':' ╭──▶ test@1:27-1:27 │ 1 │ f"Unbalanced format {name:}:10}" •
• ╰╸ Empty format specifier after ':' ─────╯ -
Let
repr()andtype()accept optional values [#2373] repr(None)returns"None"andtype(None)returns"None"- More convenient than needing wrapper functions for optional values
- Add webex PR merge notification [#2372]
- Recognize projects by
Build.act&build.act.json[#2358] - Accept
Build.act(new ideal),build.act.json(common), orActon.toml(existing) - Check for
src/directory presence for robustness - Allow any expression after
after[#2342] - Previously limited to local functions, now supports method calls, actor methods, etc.
after 1.5: obj.method()andafter 0.1: remote_actor.action()are now valid- Add
utils/update-changelog.shscript to update this file (CHANGELOG.md) using Claude - it's a good prompt! - Allow logging of optional values [#2382]
- Change logging data parameter type from
dict[str, value]todict[str, ?value] - Enables structured logging with None values like
{"user": None, "count": 42} - Add
acton build FILEfor file-oriented builds through the main CLI. [#2471, [#2592]] - Add
acton build --watchfor fast edit/build feedback loops. [#2571] - Watch mode performs an initial project build and then keeps running, rebuilding automatically when source files change
- Ordinary
.actfile edits use the incremental compiler scheduler, so unchanged modules, dependencies, and back-end work can be reused instead of rebuilding the whole project - Adding or removing source files, or changing
Build.act, triggers project rediscovery so the build graph stays aligned with the project layout and dependency configuration - New edits supersede older in-flight work, which keeps the compiler responsive while a user is actively typing
- Single-file watch is also supported with
acton build FILE --watchoracton FILE --watch acton test --watchuses the same machinery and reruns affected test modules after successful rebuilds- Add
acton speccommands for inspecting and updatingBuild.actas JSON. [#2534] - Expand
acton pkgpackage management [#2534, [#2554], [#2586], [#2596]] acton pkg updatedownloads the package indexacton pkg searchsearches the local package indexacton pkg addcan add packages by package name, archive URL, or GitHub repository URLacton pkg upgradeupdates dependencies with stored repository metadataacton zig-pkg add/removemanages Zig package dependencies inBuild.act- Add project fingerprints to
Build.act[#2634, [#2681]] - Fingerprints identify project lineage and are validated against the project name
- This makes accidental project renames and dependency identity conflicts easier to detect
- Add local dependency overrides with
--dep NAME=PATH. [#2555] - Add release mode aliases [#2708, [#2761]]
--releaseand--optimize=releaseselectReleaseFast--release=safe,--release=small, and--release=fastselectReleaseSafe,ReleaseSmall, andReleaseFast- Add
--jobs,--tty,--no-progress, and--timingcontrols to the mainactonCLI. [#2478, [#2526], [#2628]] - Add
--parse-astfor compiler debugging. [#2541] - Add JSON output for
acton testandacton test list. [#2598] - Add a content-hash based result cache for
acton test. [#2651] - Test results can be reused when the tested module, its dependencies, and expected snapshot data have not changed
- This makes repeated test runs much faster while still invalidating cached results when relevant source or dependency content changes
- Use
acton test --no-cacheto bypass the cache and force selected tests to rerun - Add
acton test --show-logto always print captured test logs. [#2408] - Add
acton test --acceptas an alias for accepting snapshot / golden output. [#2584] - Add
acton test stressmode for repeated concurrent test execution. [#2683, [#2691], [#2692], [#2694]] --stress-workerscontrols the worker count- Stress output shows mixed outcomes and phase coverage while running
- Add test capability tags with
testing.require()andacton test --tag. [#2655] - Add
--min-time,--max-time,--min-iter, and--max-itercontrols for test runs. [#2467, [#2408]] - Add
u1,u8,i8, and builtini64support. [#2532, [#2519]] - Add
list.count()method. [#2521] - Add JSON encoding / decoding for list values at the document root. [#2508]
- Add
xml.Node.encode(pretty=True)for pretty XML output. [#2512] - Add URI
quote()andunquote()helpers. [#2719] - Add HTTPS server and TLS listener support. [#2576]
- Add an Acton LLDB plugin for debugging Acton programs. [#2520]
- Adds
acton bt,acton locals,acton demangle, andacton breakcommands inside LLDB - Shows filtered, Acton-demangled backtraces with argument values instead of forcing users to read raw generated C symbol names
- Prints locals with Acton names and value summaries, including strings, boxed values, objects, actors, classes, and generic value slots
- Supports Acton source breakpoints like
acton break src/main.act:42 - Add container image builds for Acton Debian packages. [#1404]
- Add
PROFILEbuild option to the Makefile. [#2664] re.match()now accepts an optionalstart_posto begin scanning at an offset. [#2569]
Changed
- Move total build graph construction, dependency builds, and generated build.zig / build.zig.zon dependency wiring into the compiler. [#2550, [#2551]]
- Use f-strings throughout standard library [#2297, [#2290]]
- Improve process environment handling [#2298]
- Inherit PATH when custom environment is provided
- Enhance ecosystem lift process with additional documentation [#2272, [#2288]]
- Extend QuickType with effect output for better comprehension translation [#2267]
- Improve acton.rts.sleep platform coverage [#2303]
- Switch to use new hash() function instead of hash [#2255]
- Remove hash special method in favor of hash() builtin [#2304]
- Rename
docs/acton-by-exampletodocs/acton-guide[#2313] - Adopt Zig optimization levels in Acton [#2362]
- Replace
--devflag with--optimizeaccepting: Debug, ReleaseSafe, ReleaseSmall, ReleaseFast - Change default from ReleaseFast to Debug (matching Zig's default)
--devmaps to Debug for backward compatibility, new--releasemaps to ReleaseFast- Simplify command-line parser structure [#2367]
- Remove deprecated
--devoption [#2366] - Revamp
actoncdebug / verbose mode [#2354] - Avoid writing
.tyfiles in Types.reconstruct [#2357] - Remove unused sysLib & projLib fields from compiler Paths [#2385]
- Cleanup remnants from pre-Zig build system migration
- Simplify Webex PR merge notification & handle escapes [#2376, [#2384], [#2507]]
- Improve message formatting and environment variable handling
- Retire the Acton-written CLI and make the Haskell compiler package provide
the
actonexecutable directly. [#2607] acton, package management, testing, LSP, and compiler scheduling now use shared compiler code- The old
actoncimplementation has been renamed to theactoncompiler package - Require
Build.actfor projects and requirenameandfingerprintin root project build files. [#2643, [#2644]] - Stabilize public interface hashes, include qualified free names in name hashing, and preserve full source locations in cached interfaces. [#2578, [#2747], [#2752]]
- Validate cached
.tyfiles with source metadata and treat version, compiler, and dependency mismatches as recoverable stale cache entries. [#2440, [#2717], [#2718]] - Defer full parsing until after project discovery. [#2742]
- Pass explicit module selections into generated Zig builds so dependency builds only build the modules selected by the compiler. [#2666]
- Use canonical dependency roots in generated
build.zig.zonfiles and isolate transitive Zig dependency names. [#2690, [#2696]] - Upgrade the bundled Zig toolchain to 0.15.2. [#2590, [#2594]]
- Use architecture-based default CPU settings for Zig targets. [#2574]
- Rename
--ignore-compilerto--ignore-compiler-versionand make compiler version / mtime mismatches explicit stale-cache checks. [#2568, [#2573], [#2608], [#2609]] - Move generated C line directives behind
--dbg-no-lines. [#2518] - Enable larger parallel GHC nurseries for compiler builds. [#2522]
- Use HashMaps for imported type environments. [#2517]
- Update the
acton newproject template. [#2589] - Track build cache growth with periodic checks. [#2475]
- Make snapshot testing use
snapshots/expectedandsnapshots/outputdirectories instead of the older golden layout. [#2620] - Make
acton test --nameregex based. [#2616] - Store discovered test metadata in
.tyheaders so test discovery can reuse cached interfaces. [#2636] - Show cached test failures by default while keeping cached successes hidden. [#2557]
- Align test progress with build progress, use project-qualified module names in progress output, and adapt progress width/timer fields to terminal width. [#2618, [#2619], [#2628], [#2665], [#2667], [#2682], [#2731]]
- Use the provided
logging.Handlerin HTTP server actors. [#2698] - Set empty XML node
textandtailvalues toNone. [#2509] - Make
file.mkdir()andfile.rmdir()idempotent. [#2477] - Use
mkdtempsemantics for temporary directory creation. [#2693] - Prebuild one-byte ASCII strings to reduce allocation churn. [#2705]
- Use common dependency builds to avoid redundant rebuilds and guard root-pin
warnings behind
--quiet. [#2649, [#2653]]
Removed
- Remove numpy support from the compiler, parser, stdlib, and tests. [#2413]
- Remove the old explicit stub compilation mode. [#2414]
- Remove the old Acton-written
acton.actCLI implementation after moving CLI functionality into the compiler package. [#2607]
Fixed
- Fix string 'in' operator for substrings found at position 0 [#2280]
- Fix unintended dependency on complete scope when scanning init for attributes [#2285]
- Ensure lambda-bound variables are in scope when comprehensions are translated [#2267]
- Default print diff for testing.assertEqual failure [#2260]
- Fix VERSION substitution in Homebrew PR creation [#2266]
- Fix escaped braces in strings at position 0 [#2370]
- Escaped braces
{{and}}at start of strings were incorrectly parsed as interpolation - Now correctly converts
"{{a}}"to"{a}"and handles mixed cases like"{{hello}} {world}" - Fix actor constructor alias resolution [#2365]
- Aliased actors from imports (
from worker import Worker) now correctly generate module-prefixed constructors - Fixes issues with builtin actors like
StringDecoderand explicit aliased imports - Fix
.endswith()for strings shorter than needle [#2348] - Prevent out-of-bounds memory access when haystack is shorter than needle
- Fix
acton versioncommand structure [#2363] - Avoid superfluous rebuilds for actonc [#2349]
- Replace
$FORMATmacro with C function [#2327] - Fix "2320" error [#2323]
- Fix Hashable protocol implementation [#2255]
- Correct zig bytes definition
- Fix issues with bytes containing NUL character
- Fix solver handling of generic tuples, top-level constraint solving, skolemized type variables, scoped constraints, optional bounds, and coerced index targets. [#2319, [#2332], [#2339], [#2438], [#2564], [#2570], [#2587], [#2603], [#2624], [#2661], [#2675]]
- Accept four or five quotes at the end of triple-quoted strings. [#2388]
- Improve
str.__repr__()to escape braces correctly and handle quoted strings. [#2386] - Fix unclosed string parser diagnostics. [#2486]
- Escape generated C identifiers that became keywords in C23. [#2480]
- Fix Unicode handling in regular expressions. [#2540, [#2553]]
- Fix parsing, inference, and code generation for negative integer literals,
including the most negative
i64value. [#2492, [#2543]] - Infer
bigintfor integer literals outside thei64range. [#2519] - Fix
argparsedefaults for list arguments and preserve rest arguments after--. [#2473, [#2580]] - Fix boolean singleton use and
Nonechecks in arbitrary boolean contexts. [#2485, [#2491]] - Fix
bytes.startswith()end-bound checks. [#2410] - Fix
bytes.split()andbytearray.split()for empty separator edge cases. [#2453] - Fix tuple printing when tuple values contain
None. [#2430] - Implement
__repr__()for exceptions. [#2421] - Fix printing lists that contain optional elements. [#2613]
- Fix violations of the UTF-8 invariant when creating strings. [#2455]
- Fix UTF-8 character / byte offset handling in string partitioning. [#2676]
- Fix
process.pid()after the process has exited. [#2405] - Fix process and build output handling for paths containing spaces. [#2516]
- Fix UTF-8 handling in accepted golden test output. [#2593]
- Fix JSON encoding of fixed-size integer values. [#2530]
- Fix XML parse errors to use
XmlParseErrorinstead of generic runtime errors. [#2420] - Fix XML special character escaping, CDATA decoding, UTF-8 handling, and prefixed attribute decoding. [#2422, [#2433]]
- Fix HTTP response callbacks to pass headers and treat header defaults case-insensitively. [#2448]
- Validate malformed HTTP requests and responses instead of accepting invalid input or crashing during decode. [#2454, [#2457]]
- Fix
is not Nonelowering and optional narrowing through comprehension head expressions. [#2412, [#2402], [#2720]] - Fix sequential flow analysis around
$RAISE. [#2401] - Fix
while ... elsehandling and reevaluate effectful loop conditions each iteration. [#2464, [#2466]] - Fix
and/orexpressions when unboxing is involved. [#2465] - Fix type casts to unboxable values during code generation. [#2479]
- Fix conversion of dot selections with partially aliased import chains. [#2700]
- Fix term substitution when the substitution range and domain overlap. [#2701]
- Fix lambda lifting and CPS edge cases around converted closure types and nested control flow. [#2709, [#2735], [#2737]]
- Fix class attribute initialization checks and improve diagnostics for uninitialized attributes. [#2391]
- Fix class-level and cyclic protocol witness handling. [#2484, [#2488], [#2556]]
- Fix class instance handling of type-parameter witnesses and prevent static methods from being invoked on instances. [#2623]
- Fix conversion of
Selfin protocol methods after moving protocol conversion before constraint solving. [#2632] - Fix optional equality and optional-chain type inference edge cases. [#2716, [#2672], [#2726]]
- Fix private imported names leaking through interfaces. [#2567, [#2752]]
- Fix actor
selfchecks and discovered actor test wrappers. [#2514, [#2535]] - Fix malformed module top-level statements by restricting modules to declarations, imports, and assignments. [#2728]
- Fix generated name collisions by prefixing generated names with the top-level name. [#2729]
- Fix stale transitive dependencies after import renames. [#2727]
- Fix transitive imports for cached modules. [#2677]
- Fix missing dependency name hashes by treating them as stale cache entries. [#2637]
- Fix dependency cache invalidation when a path from
--syspathchanges. [#2510] - Fix dependency override handling for declared dependencies. [#2555]
- Validate local
--deppaths as Acton project roots. [#2638] - Rework dependency downloads and honor
http_proxy. [#2640] - Fetch transitive remote dependencies reachable through path dependencies before project discovery. [#2668]
- Fix stale implementation refreshes when an interface hash is missing. [#2674]
- Fix orphaned module artifacts after modules are removed. [#2633]
- Preserve normal and test root stubs and prune orphaned binary executables. [#2265, [#2505], [#2538]]
- Fix relative / absolute path handling for build files and build.zig.zon syspath entries. [#2493, [#2495]]
- Skip Zig builds for dependency projects when only Acton interface artifacts are needed. [#2496]
- Fix
Build.actnull handling and unused dependency builds. [#2539, [#2557]] - Force recompilation when an alternate output directory is selected. [#2513]
- Fix
acton --parseoutput. [#2536] - Fix
acton buildhandling after Zig toolchain upgrades. [#2595] - Improve error handling for compiler back passes. [#2597]
- Fix LSP stdout framing corruption. [#2629]
- Fix RTS message waiting so actors are not missed between waiting states and message delivery. [#2689]
- Clean up libuv file requests to avoid stale request state. [#2695]
- Work around macOS 26.4 command-line tools breaking Zig and set
DEVELOPER_DIR=/dev/nullfor actondb on macOS. [#2715, [#2756]] - Restore the Zig dist target. [#2745]
- Delete an accidental root-level copy of
Types.hs. [#2739]
Documentation
- Add ecosystem lift process documentation
- Add Hashable protocol documentation to Acton Guide. [#2310]
- Add actor
self, collection comprehension, and guide organization updates. [#2314, [#2315], [#2316], [#2318]] - Add Acton developer guide covering repository layout, build flow, compiler passes, runtime, and testing internals. [#2566]
- Reshape the Acton Guide around task-oriented language, project, testing, and stdlib documentation. [#2734, [#2740], [#2750]]
- Document optional chaining and forced unwrapping. [#2722, [#2732]]
- Document class initialization rules and improved uninitialized attribute diagnostics. [#2391]
- Document project fingerprints and the
Build.actproject format. [#2634, [#2644]] - Document incremental compilation and content hashing. [#2610]
- Document RTS backtrace debugging arguments. [#2615]
- Explain constraint errors with rendered signatures. [#2751]
- Clarify Acton lock ownership responsibilities. [#2678]
- Update Ask Acton vector store data when the guide changes. [#2748]
Testing / CI
- Support test discovery of actors [#2337]
- Recognize test actors without needing wrapper functions
- Compiler generates wrappers automatically for discovered test actors
- Remove old test types (sync/async/env test functions)
- Update macOS CI to include macos-15 x86_64/aarch64 and macos-26 arm64, and drop macos-14 to keep the PR matrix small. [#2511, [#2583]]
- Test run MUSL executables on Linux [#2355]
- Test http2, netclics, zlib, netcli applications [#2338, [#2331], [#2324]]
- Add self name check for actors [#2317]
- Add more parser / syntax error test cases [#2308]
- Stop testing Debian 10 [#2352]
- Drop Debian 11 from test-linux CI matrix [#2588]
- this means we do not test / support Debian 11 as a OS dist for developing Acton itself
- Debian 11 is still a valid run time target for Acton programs
- run-linux still covers compiling & running Acton programs on Debian 11
- Support multiple files for compiler testing framework [#2363]
- Accumulate environment from modules to support imports
- Add compiler pass golden tests for parse, kind, type, normalize, deactorize, CPS, lambda lift, boxing, header generation, C generation, and signatures. [#2548]
- Add incremental rebuild regression tests with stable sanitized hash output. [#2503, [#2506], [#2581], [#2631]]
- Add snapshot testing coverage and cache validation for expected snapshot metadata. [#2639, [#2679]]
- Add stress testing fixtures with racy and crashing FFI examples. [#2683]
- Add TLS stdlib tests and an HTTPS server test fixture. [#2572, [#2576]]
- Add ecosystem and ACTMF application tests. [#2641, [#2548]]
- Add more ecosystem applications to CI coverage. [#2641]
- Add Linux container image builds from Debian packages. [#1404]
- Build Debian packages on Ubuntu 22.04 and fix stack usage in build-debs. [#2647, [#2652]]
- Allow Telemetrify failures while macOS 26 support settles. [#2585]
- Drop the shared Acton cache from CI. [#2605]
- Drop Telemetrify from CI. [#2749]
- Add build.zig generated-file gitignores. [#2656]
- Close golden files after reading them during tests. [#2617]
- Update GitHub Actions dependencies including checkout, cache, upload/download-artifact, create-pull-request, Docker build actions, and release-note extraction actions. [#2415, [#2429], [#2498], [#2499], [#2537], [#2544], [#2558], [#2559], [#2560], [#2561], [#2669], [#2670], [#2684], [#2685], [#2686], [#2687], [#2591], [#2754], [#2755]]