-
v0.7.2
Stablereleased this
2026-10-08 15:05:35 +11:00 | 0 commits to main since this releaseAdded
- a consistent copy of a deployment a server is still writing
Other
- tephra locks its segment directory, so the data-directory lock is about the rest
- a lane belongs to one effect, and writers of one resource belong in one effect
Downloads
-
Source code (ZIP)
1 download
-
Source code (TAR.GZ)
2 downloads
-
v0.7.1
Stablereleased this
2026-09-22 01:38:33 +10:00 | 4 commits to main since this releaseOther
- the adoption race keeps erasing until the adopter is done rather than for a round count of its own
- heklang 0.11.0, where an event is a type a fn can return
- heklang 0.10.0
Downloads
-
Source code (ZIP)
2 downloads
-
Source code (TAR.GZ)
2 downloads
-
v0.7.0
Stablereleased this
2026-09-20 02:56:37 +10:00 | 8 commits to main since this releaseAdded
- [breaking] a subject's key is adopted under its declared parent before a deploy serves
- [breaking] a subject is a declared type whose values are its ids, and can be deleted with its tenant
- a scan orders by a declared index, and its cursor is the index tuple
- a scan filters on any prefix of a declared index, and ranges on the column after it
- a sealed record, list or map round-trips through the read model and an effect
- an operator can see every wedged lane, not just the one holding the watermark
Fixed
- [breaking] a key namespace written before schema v10 is renamed rather than carried blind
- a cursor is refused when its ordering changed width, and an optional column ranges
Other
- the orders example says what a customer under a shop actually erases
- heklang 0.9.0, where a subject is a type and a sealed composite decodes
Downloads
-
Source code (ZIP)
1 download
-
Source code (TAR.GZ)
2 downloads
-
v0.6.0
Stablereleased this
2026-09-16 01:15:27 +10:00 | 20 commits to main since this releaseAdded
- the console writes an ad-hoc projection and watches it fold
- an ad-hoc projection answers over HTTP, behind a setting a deployment turns on
- an undeployed projector folds over the live log and prints its rows
Fixed
- rustls 0.23.45 rejects a handshake message that spans a key change (RUSTSEC-2026-0285)
Other
- heklang 0.8.0
- a private const is named rather than linked, and a trait link takes its crate path
- heklang 0.7.0, where an answer takes no return and no parens
Downloads
-
Source code (ZIP)
1 download
-
Source code (TAR.GZ)
1 download
-
v0.5.1
Stablereleased this
2026-09-12 19:01:56 +10:00 | 28 commits to main since this releaseOther
- hekla depends on the released heklang 0.6.1
Downloads
-
Source code (ZIP)
2 downloads
-
Source code (TAR.GZ)
1 download
-
v0.5.0
Stablereleased this
2026-09-12 00:13:11 +10:00 | 30 commits to main since this releaseAdded
- [breaking] a deploy that cannot read its own log does not start
- (ui) the tephra mark replaces the letterform in the rail and in the tab
- (ui) the browser's own chrome takes its colour from the theme the console is showing
- (ui) the rail becomes a drawer on a narrow screen, and every control is sized for a thumb
- (ui) a correlation keeps its colour wherever it appears, and the rail says where a chain ends
Fixed
- (ui) a long enum kind reads as its count, and no kind can squeeze a command's inputs again
Other
- hekla depends on the released heklang 0.6.0
- a test that omits a field younger than the log waits for a handler that needs one
Downloads
-
Source code (ZIP)
1 download
-
Source code (TAR.GZ)
2 downloads
-
v0.4.0
Stablereleased this
2026-09-09 22:03:27 +10:00 | 39 commits to main since this releaseFixed
- [breaking] hekla test synthesises the envelope hek test does, not one of its own
Downloads
-
Source code (ZIP)
1 download
-
Source code (TAR.GZ)
2 downloads
-
v0.3.1
Stablereleased this
2026-09-09 21:01:56 +10:00 | 41 commits to main since this releaseAdded
- a scrape says what /status cannot, and no label is ever a lane key
- (cli) a redirected log carries no color, and --no-color drops it in a terminal too
Downloads
-
Source code (ZIP)
2 downloads
-
Source code (TAR.GZ)
1 download
-
v0.3.0
Stablereleased this
2026-09-08 22:16:10 +10:00 | 44 commits to main since this releaseAdded
- [breaking] a project declares the deployment credentials it needs, and no surface ever shows one
- (ui) the console runs a command, and /admin/commands describes every one
- (ui) the console browses a projector's rows, and a row links back to the events that built it
- [breaking] an on latest arm runs once per key per batch, and its invocation records the range it folded
Fixed
- (ui) the declarations table keeps its columns, a long effect error clips, and a count reads singular at one
Other
- two private items are named rather than linked, so rustdoc denies nothing
- (projector) a completed rebuild logs how long it took
Added
- a project declares the deployment credentials it needs with
secret NAME, and hekla resolves each
from[secrets]inhekla.toml({ env = "..." }or{ file = "..." }) or from
HEKLA_SECRET_<NAME>.hekla serverefuses to start when a required one is unset, naming every
missing one at once hekla secretsreports every declared credential, where this machine reads it from, and a short
fingerprint, and exits non-zero when a required one is unset, so it works as a pre-deploy gatehekla planreports the same, always present in--json, and--replaycounts invocations it
could not replay because an effect reads a credential this machine has not set/admin/systemand/admin/schemalist the declared credentials beside the keystore: a name, a
source and a fingerprint, never a valuehekla checkwarns about a declared credential nothing reads, and about a[secrets]entry naming
no declaration. It never reads the environment, so it stays a CI gate- an
on latestarm runs once per key per dispatch batch, at the newest matching position in it,
and the surviving invocation records the range it folded /admin/effects/{name}reportslatest_collapsed, the positions folded into another invocation
since this process started
Changed
- [breaking] an effect arm declaring
on latestloads and runs, where the previous release
refused it at load rather than running it ason - an effect's in-flight cap counts units of work rather than positions, so a lane's whole backlog
collapses to one invocation however long it is - schema v9 adds
effect_invocation.collapsed_from; rows written before it read back as null, which
is the same answer as an invocation that folded nothing - a transport failure's message now names a credential rather than spelling it.
ureqwrites the url
it was given into its own error text, and hekla concatenates that onto the wedge message, so a
webhook whose whole address is the credential used to reach/status,/adminand the logs on the
first DNS failure - heklang 0.5.0
Downloads
-
Source code (ZIP)
3 downloads
-
Source code (TAR.GZ)
2 downloads
-
v0.2.0
Stablereleased this
2026-09-06 19:51:21 +10:00 | 52 commits to main since this releaseAdded
- (cli) hekla rewind takes an effect back over history, against a stopped process
- a key change that would repartition the lanes stops the effect, and hekla plan names it
- on live declines the history that predates an effect, resolved once at first activation
- [breaking] an effect arm runs in the lane its key names, so one stuck aggregate blocks nobody else
- [breaking] hekla plan replays recorded invocations against the code you are about to deploy
- hekla plan says what a deploy would change, and names why
- [breaking] one declaration table holds every version of what the program does
Other
- heklang 0.3.0, and every effect arm names its lane
- the project builds and releases on the forge it now lives on
Added
- an effect arm runs in the lane its
@keynames, so one stuck aggregate no longer blocks every
other one on livedeclines the history that predates an effect, resolved once at first activationhekla rewindtakes an effect back to a position, against a stopped process/statusnames the lane holding an effect's watermark down, and how many lanes are wedgedhekla plannames the event types whose lane a deploy would repartition
Changed
- [breaking]
@keyis mandatory on every effect arm (heklang 0.3.0) - [breaking] an effect arm declaring
on latestis refused at load until batch collapse lands,
rather than run ason, which would honour a different guarantee silently [effects] pool_sizeis live: it bounds how many lanes run at once, across every effect- an effect's watermark is a low-water mark, so it no longer advances past a wedged lane
- schema v8 adds
effect_laneandeffect_activation;hekla planrefuses a data directory this
build has not migrated, so runhekla serveagainst it once first
Downloads
-
Source code (ZIP)
1 download
-
Source code (TAR.GZ)
2 downloads