Skip to content

Releases: AHS12/heka

0.8.5

Choose a tag to compare

@AHS12 AHS12 released this 06 Sep 12:08
ca8d99a

What's Changed

[0.8.5] - 2026-09-06

Heka learns to introduce itself and to scale: a first-run tour, a What's New
dialog fed by the changelog embedded right in the binary, a hidden heka dev
toolbox for rehearsing both, and — the big one — server-side search with
cursor pagination for the tasks and schedules lists, so the pages stay fast
and complete even with hundreds of entries. Freshness is engineered rather
than polled: a tiny revision pulse catches scheduled runs, CLI commands, and
on-disk YAML edits without ever refetching the pages you're scrolling.

Added

  • What's New dialog. CHANGELOG.md ships inside the binary. After an
    update the shell greets you with every release newer than the one you last
    saw (newest first), rendered as proper markdown; a fresh install shows this
    release's notes right after the first tour. The About page carries a
    "View changelog" button that opens the whole file, plus Website and Docs
    buttons (heka.ahs12.xyz) beside the existing GitHub link.
  • First-run tour. A five-step spotlight tour over the always-visible
    chrome — nav pills, daemon status, theme toggle, Settings — with
    high-contrast popover and arrow styling that stays legible on every theme
    variant, plus a visible ring around the highlighted element. Replayable
    from Settings → Appearance or the About page; the tour hands straight over
    to the release notes on a fresh install.
  • Server-side search and cursor pagination for the tasks and schedules
    lists. Search is debounced (one request per settled query — tasks match
    name and slug, schedules match slug and task slug) and runs on the daemon;
    type and enabled filters (tasks) and the kind filter (schedules) moved into
    SQL as well. The lists load 50 rows at a time over stable slug keyset
    cursors and keep every page already scrolled into memory as you scroll for
    more, with a "X shown · Y total" footer and honest loading states: a
    spinner in the search field while a query is in flight, a "Loading more…"
    row while the next page arrives.
  • Revision pulse. A new /v1/revision endpoint exposes one cheap
    aggregate signature per domain (tasks, schedules, runs). The GUI diffs it
    every few seconds and invalidates exactly the list whose signature moved —
    so a scheduled run firing in the background, a heka run from another
    terminal, or a YAML file edited on disk all appear in the open lists within
    seconds, without refetching a single page.

Changed

  • Tasks and schedules lists no longer poll. Freshness comes from mutation
    invalidations (Run Now, enable/disable, delete, create/update/import,
    reconcile) plus the revision pulse for everything outside the GUI;
    window focus still refetches as a safety net. Run-toggling stays
    optimistic — chips flip instantly and roll back on failure, now correct
    across every loaded page.
  • /v1/tasks and /v1/schedules now return {items, total, next_cursor}
    envelopes instead of bare arrays. Calls without a limit (the CLI, the
    dashboard's next-run panel, the schedule-form picker) still receive full
    lists — heka list --json output is byte-identical. Schedules' kind
    filter moved from the handler's in-memory loop into SQL.
  • Schedule cards lead their header with the enable switch; edit and delete
    sit side by side next to it.
  • Reconcile schedules now refreshes the tasks list too, since reconciled
    runs change task chips.

Fixed

  • New IPC query parameters are URL-encoded properly, so search text
    containing spaces, %, or & reaches the daemon intact (the older runs
    filter path keeps its behavior).

Full Changelog: 0.8.2...0.8.5

0.8.2

Choose a tag to compare

@AHS12 AHS12 released this 04 Sep 19:24
b9fe6c6

What's Changed

[0.8.2] - 2026-09-05

The schedule creator grows out of its dropdowns: a pattern-first builder that
can express any standard cron — including things like "September 23rd through
26th at 9:00" — with a live preview of the next runs, and schedules can now be
edited instead of deleted and recreated.

Added

  • Pattern-based schedule builder. The create dialog now starts with six
    sections — Every N, Daily, Weekly, Monthly, Once, and Cron — each with
    purpose-built inputs instead of single-choice dropdowns:
    • Monthly picks days of the month from a 1–31 grid, supports ranges
      ("23rd–26th" → 0 9 23-26 * *) and an optional month restriction
      (0 9 23-26 9 *), with honest notes for months that have no 29th/30th/31st.
    • Weekly multi-selects weekdays (contiguous picks emit ranges:
      Mon–Fri → 30 8 * * 1-5) with Weekdays/Weekend presets.
    • Daily, Weekly, and Monthly accept multiple times per day
      (09:00 and 17:00 → 0 9,17 * * *).
    • Cron is the full-power escape hatch: raw 5- or 6-field expressions
      with per-field breakdown, live validation, and grammar hints (lists,
      ranges, steps, names, @every). Steps, names, and other shapes the
      builder doesn't model stay available here.
  • Live preview in the builder. Every keystroke shows a plain-language
    description ("At 09:00, on day 23–26, in Sep"), the generated expression
    with a copy button, and the next five run times with relative offsets. When
    multiple times would cross-fire (9:05 and 10:42 also means 9:42 and 10:05),
    the preview says so explicitly.
  • Schedule editing. Schedule cards gain an Edit button; the same dialog
    reopens prefilled and saves through the existing update API. Schedules
    created in the app round-trip back into their builder section; foreign
    expressions open in the Cron section unchanged.
  • A cron engine for the frontend (parsing, validation, next-run computation,
    description) that mirrors the daemon's robfig parser exactly, verified
    expression-by-expression against it via a generated golden fixture.

Changed

  • Schedule cards and the dashboard's next-run panel describe recurring rules
    in plain language, keeping the raw expression underneath (list) or as a
    tooltip (dashboard) for precision.
  • Cron validation in the schedule form now runs the same grammar the daemon
    will apply, with field-accurate messages ("end of range (7) above maximum
    (6)") before anything is saved.

Full Changelog: 0.8.1...0.8.2

0.8.1

Choose a tag to compare

@AHS12 AHS12 released this 04 Sep 07:55
e674964

What's Changed

[0.8.1] - 2026-09-04

A correctness pass over notifications and run artifacts: every webhook
payload now identifies the task it came from, notifications report the real
trigger, and the declared-but-dead capture_output setting is gone. Dark
themes get a precision pass of their own: CRT Dark replaces Gradient Dark,
and both dark themes now paint every page consistently.

Changed

  • Gradient Dark is replaced by CRT Dark: an accent-phosphor dark theme
    with scanlines and an accent-tinted ambient wash (pick the green accent
    for a classic terminal). Users who had Gradient Dark are migrated
    automatically. CRT Dark's scanlines are drawn as faint light lines so the
    texture is actually visible on a near-black screen.
  • Khaki Dark joins the dark roster — the warm brown twin of the light
    Khaki default — and High Contrast is now available in light mode too
    (near-black text on pure white with strong dark borders, mirroring the
    dark variant). Variants survive mode switches via the quick-toggle.
  • Every surface, border, and text color across the app now derives from the
    theme tokens instead of hardcoded grays — previously only the Dashboard
    did. High Contrast (light or dark) and CRT Dark now look identical in
    quality on every page and dialog: true-black panels, light borders,
    properly bright text. Light themes are visually unchanged.

Fixed

  • Webhook notifications name the task and its outcome. Payloads read like
    the desktop toast — "deploy — Failed • Trigger: schedule • Duration:
    5.1s" — instead of a bare "Trigger: … • Duration: …" that gave no way to
    tell which task ran.
  • Scheduled runs no longer notify as "Trigger: manual". The completion
    callback now receives the actual trigger (manual, schedule, cli, system)
    through the executor's group result.
  • Missed-run reconciliation and the NEXT RUN display evaluate cron specs in
    the daemon's local timezone. Stored windows are UTC while the running
    engine fires local ticks, so on a UTC+6 machine a daily 9:00 schedule that
    fired while the PC was off reported "0 caught up" at boot and silently
    dropped the missed run.
  • Webhook format "pumble" validates again. Pumble incoming webhooks accept
    Slack-style payloads, so the editor now offers a single "Slack / Pumble"
    option that saves the canonical "slack" format; existing YAML with
    "pumble" loads as-is and re-exports as "slack".
  • Per-run artifacts (stdout.log, stderr.log, run.json) land under the
    global runs folder (<data_dir>/runs, configurable via
    run_artifacts_dir) unless a task sets output_dir. They previously went
    to the task's working directory, leaving the configured runs root — and
    the "run artifacts" part of backups — empty.

Removed

  • The capture_output task field. It had no behavioral effect (output is
    always capped and stored on the run row). Existing YAML files keep
    parsing; the field is dropped the next time the task is saved.

[0.8.0] - 2026-09-04

Backup & restore, plus a proper home for a growing vault. Every archive is an
AES-256-encrypted zip that captures the complete Heka state — a consistent
SQLite snapshot, the vault key, the canonical task YAML files, and the user
config — so a restore brings back exactly what was there, secrets included.

Added

  • Automatic backups on a configurable schedule — every N hours (up to a
    year), daily, weekly, or monthly at a local time — with missed-run
    catch-up: if Heka was closed at the scheduled time, the missed backup
    runs once at startup.
  • Local destination (custom folder + keep-latest retention, default inside
    the data directory) and an S3-compatible remote destination — AWS S3,
    Cloudflare R2, Backblaze B2, MinIO — with its own keep-latest pruning and
    a one-click "Test connection" that exercises the bucket end to end.
  • S3 credentials live in the secrets vault (BACKUP_S3_ACCESS_KEY_ID,
    BACKUP_S3_SECRET_ACCESS_KEY), same write-only discipline as every other
    secret.
  • Archive encryption with a passphrase stored in the vault
    (BACKUP_PASSPHRASE) so scheduled backups run unattended — with a loud
    warning that losing it means losing the backups, since restore on a new
    machine asks for it.
  • Manual "Back up now" with live status, a job history view (trigger,
    status, size, per-destination outcomes), and desktop notifications when a
    scheduled backup fails.
  • A guided restore flow: pick an archive, verify it with the passphrase,
    preview exactly what it contains (created when, which Heka version, task
    counts), choose optional parts (config.yaml, run artifacts), and let the
    app stop the daemon, restore, and prompt to start it again. A safety
    backup of the previous state is written automatically before anything is
    overwritten; archives from newer Heka versions are refused, and checksums
    guard against truncated or tampered archives.
  • A dedicated Backup section in Settings with all of the above, and
    heka backup create|status|history|test plus heka restore in the CLI.
  • A dedicated secrets manager page (/secrets, linked from Settings →
    Secrets) built for large vaults: search, sort, "unused only" filter,
    per-key usage tracking (which tasks reference ${KEY}), bulk delete with
    confirmation, pagination, and per-key value replacement. Keys stay the
    only thing ever displayed — values remain write-only.

Changed

  • Backup catch-up is now part of the missed-run reconcile pipeline: a missed
    auto-backup runs once on daemon start, on wake from sleep, on the periodic
    reconcile cadence, and from the "Reconcile now" button — not only via the
    backup loop's own tick. A reconciled backup is labeled "catch-up" in the
    job history, and the missed window is recorded in the system log
    (Logs → System), alongside new events for manual starts and schedule
    arming.
  • The backup time-of-day picker is a themed segmented field (HeroUI
    TimeField) instead of the native browser time dropdown, which overflowed
    the panel.

Fixed

  • The Schedules page no longer shows a stale NEXT RUN after a missed run
    was caught up. Reconcile closed the miss window without re-deriving
    next_run_at, and the startup path read a cron entry that only carries a
    value once the engine starts — so a daily 9:00 schedule kept showing
    yesterday's 9:00 as next. Both paths now compute the next occurrence
    directly from the cron spec.
  • S3 "Test connection" now saves pending edits first (endpoint, bucket,
    keys, Use HTTPS), so it tests exactly what is on screen. Enabling the S3
    destination also defaults to HTTPS — plain HTTP is 301-redirected by
    Cloudflare and friends, which previously surfaced as a wall of HTML; the
    redirect now produces a clear, actionable error instead.

Full Changelog: 0.7.7...0.8.1

0.7.7

Choose a tag to compare

@AHS12 AHS12 released this 03 Sep 18:51
752ebfb

What's Changed

[0.7.7] - 2026-09-04

A fresh coat of paint: the app icon — window, executable, installer, tray,
and About page — is replaced with the new artwork (yellow "H" with the robot,
clock, browser, and gear).

Changed

  • New application icon everywhere it appears: the executable and installer
    icons (multi-size ICO rebuilt at 16–256 px), the Wails app icon, the system
    tray icon (now generated from an exact 32 px source for crisper results),
    and the About page logo.

Fixed

  • The dashboard "Last 7 Days" chart no longer reshuffles on every poll. The
    stats endpoint flattened its per-date build map in randomized Go map
    order, so the days arrived scrambled (e.g. 09-03 first) each time the
    dashboard re-fetched; run history is now sorted by date ascending.

[0.7.6] - 2026-09-03

A reliability patch for the missed-run machinery, prompted by a field report:
a daily 9:00 schedule missed its activation while the daemon was down, and
reconcile kept insisting there was nothing to catch up.

Fixed

  • Missed-run reconciliation no longer masks the next occurrence when the
    previous run finished within the same second it started. Such sub-second
    runs store started_at == finished_at == last_run_at (RFC 3339 has second
    precision), and the inclusive window boundary counted that already-
    accounted run as "fired" in the next window — so missed computed as
    1 - 1 = 0 and the missed activation was never caught up. The boundary is
    now exclusive.
  • The periodic reconcile pass now logs its outcome every tick to
    Logs → System (reconcile (periodic): checked N schedule(s), M caught up),
    proving the loop is alive; previously it stayed silent unless it actually
    caught something.

Full Changelog: 0.7.5...0.7.7

0.7.5

Choose a tag to compare

@AHS12 AHS12 released this 02 Sep 20:56
bf443c1

What's Changed

[0.7.5] - 2026-09-03

This release is about the part of Heka you see first. The Home screen, the
task list, and the task dialogs got a full pass to feel like a proper desktop
app — quicker to read, quicker to act.

Added

  • A reworked Home screen. Up top you'll find the state of the engine at a
    glance (is the daemon up, is the scheduler running) and three quick
    actions: create a task, create a schedule, or run any task right from a
    small picker — no need to visit other pages for the everyday stuff.
  • The next scheduled run now gets the spotlight it deserves: which task,
    when it fires, and how long from now ("in 14h 2m"), with a one-click
    "Run now" if you can't wait.
  • Recent activity rows now open the exact run they refer to — one click from
    the dashboard straight to that run's output — and show friendly times like
    "2m ago" (the full timestamp appears when you hover).
  • Hovering the status dot in the top bar — or the engine badge on Home —
    now tells you what's actually going on: the version, the state of the
    core and scheduler, and how long the daemon has been up. When the
    scheduler is paused, it says so plainly.
  • The task list is now made of cards instead of a dense table. Each card
    shows the task, its type, when it last ran and how it went, with Run,
    enable/disable and delete right on the card. Clicking a card opens the
    editor.

Changed

  • Creating and editing tasks now happens in a dialog, the same way for both.
    Editing no longer navigates away from the task list, and importing a task
    file drops you straight into the editor to review it.
  • The task dialog is wider, so the form breathes and the YAML editor has
    room to work.
  • The default window size is larger, and Tasks and Schedules use the extra
    room. On small laptop screens the window quietly shrinks to fit — the
    shape stays the same.
  • Statuses are written the way people say them — "Timed out" instead of
    "timed_out" — everywhere, including the charts and the log filters. The
    status chart now shows readable labels with aligned counts, and the log
    filters use the same wording.

Fixed

  • The status dot in the top bar ignored the mouse entirely — hovering it
    never showed anything. It now has a proper hover area and reveals the
    health details described above.

Full Changelog: 0.7.2...0.7.5

0.7.2

Choose a tag to compare

@AHS12 AHS12 released this 02 Sep 15:31
d8b3030

What's Changed

[0.7.2] - 2026-09-02

Added

  • Heka now remembers your window. The size and position you leave it in are
    restored the next time you open the app, including whether it was
    maximized. If the monitor you last used is no longer connected, the window
    reopens centered on a visible screen instead of getting lost off-screen.
  • A "Pause scheduler" switch in Settings → Reliability. Pausing used to be
    possible only from the tray icon; the switch mirrors that state, so you
    can pause and resume without hunting for the tray. Both controls stay in
    sync, and a paused scheduler survives daemon restarts.

[0.7.1] - 2026-09-02

This release makes Heka more dependable day to day. The daemon — the
background part of Heka that runs and schedules your tasks — now stays
reachable no matter how it was started, and it explains itself clearly when
something is wrong.

Fixed

  • Fixed the confusing "heka daemon is not running" error that could appear
    even when the daemon was actually running. If Heka had been started as
    administrator (for example, to get notification sounds working), the CLI
    and GUI could not connect to it. Heka now grants your Windows account
    permission to reach the daemon regardless of how it was started.
  • heka daemon stop now actually stops the daemon. Previously it was
    silently ignored whenever the daemon was running with a tray icon.
  • Fixed a small race when logging into Windows: the automatic startup and
    the watchdog could briefly overlap when bringing the daemon up. That can
    no longer lead to tasks running twice.
  • heka daemon status now tells you what is actually wrong and what to do
    next, instead of always reporting "not running".

Added

  • You can now choose how often the watchdog checks on the daemon, in
    Settings → Reliability. Pick anywhere from every minute to once an hour —
    the change applies right away, no restart needed.

Changed

  • Command-line error messages are clearer: they now tell you whether the
    daemon needs to be started, was started with administrator rights, or is
    simply busy.

[0.7.0] - 2026-09-02

Added

  • Schedules now catch up automatically. If your computer was off, asleep, or
    the app was in the background when a recurring task should have fired,
    Heka will run the missed schedule as soon as you return — no more wondering
    why the 9 AM task never happened. You can choose how often to check
    (every 2, 5, 8, or 10 minutes) in Settings → Reliability.
  • Heka now notices when your PC wakes from sleep and catches up missed runs
    right away, instead of waiting for the next check. Resuming the scheduler
    after a pause does the same.
  • A new System view on the Logs page shows what the scheduler has been up
    to: when the daemon started, when it woke from sleep, and exactly what it
    caught up — which schedule missed how many runs and what was done about it.
    Manual checks and the check at startup always report their result, even
    when nothing was missed.
  • If a missed task fails to start (for example the script was temporarily
    unavailable), the catch-up stays pending and is retried on the next check
    instead of being silently dropped.
  • "Reconcile now" button on the Schedules page lets you catch up on missed
    runs without waiting for the next tick.
  • New heka schedules reconcile command for the same on demand from the
    terminal. It now points you to Logs → System to see what was caught up.
  • heka schedules missed command for debugging. Lists schedule runs the
    daemon recorded as missed or skipped, so you can see exactly which
    schedules didn't fire (and when) after the PC was off, asleep, or when an
    overlap was skipped. Supports --since (default 168h/7d), --status (default
    missed,skipped), --task, and --limit, with both human-readable and
    --json output.
  • Each schedule row now shows whether missed runs will fire (Run now) or
    just be logged (Skip), so you know what will happen after downtime.

Changed

  • Missed-run checks now run every 2 minutes by default (was 10), so
    catch-up after a nap or short sleep happens within moments of returning.
  • The log retention and notification settings now also include the new
    reconciliation interval, keeping the settings shape consistent.

Full Changelog: 0.6.9...0.7.2

0.6.9

Choose a tag to compare

@AHS12 AHS12 released this 01 Sep 15:02
8bd8a8d

What's Changed

New Contributors

  • @AHS12 made their first contribution in #1

Full Changelog: https://github.com/AHS12/heka/commits/0.6.9