Skip to content

v1.3.0

Latest

Choose a tag to compare

@github-actions github-actions released this 30 Apr 02:17
7a11fb0

1.3.0 (2026-04-30)

Features

  • add dev-docker-rebuild target and update dev docs (cd9ffe5)
  • add HMR targets to Makefile for Go dev workflow (31edf31)
  • add official Docker install path (d4ef6fb)
  • alerts: add backup alert event type and dispatcher (70f3f38)
  • alerts: add clear alert history (all or resolved only) (7231243)
  • alerts: snapshot rule config in alert history (1c50993)
  • api,proxy: multi-endpoint support with per-service routing (cb6b136)
  • api,ui: add degraded app status, user management improvements (131496f)
  • api,ui: delete deploy history versions (856e599)
  • api,ui: support first-time git setup against empty remote (5a98457)
  • api: activity endpoints (da4ef83)
  • api: add backup summary, detect, config-trigger, test-s3 endpoints (525563e)
  • api: add POST /api/git/test-connection (c0f8aa7)
  • api: add trust page and CA cert download for local TLS (870de7f)
  • api: add UpdateWebhook and TestWebhook endpoints (dd7ef00)
  • api: apply-pending route + toggle fields in config/status (1d65732)
  • api: archive view, purge endpoint, delete refuses archived (c07e67a)
  • api: expose deployment_mode/deployment_label on /system/info (b139141)
  • api: git status + webhook routes + compose/env write hooks (ce111ab)
  • api: populate audit.Ctx in auth middleware (ecdddbc)
  • api: POST /api/git/sync-now route (1984c99)
  • api: prevent app overwrite on deploy; suggest name for template collisions (c002b45)
  • api: realtime notify-only events bus and WebSocket (e2146ec)
  • api: rewrite backup handlers for v2, add compose version endpoints (fa446e7)
  • audit/render: registry + compose diff renderer (0af1137)
  • audit/render: renderers for all categories (5378883)
  • audit: Ctx + context helpers (e68cfbf)
  • audit: record config changes across all categories (1a3614e)
  • audit: Recorder replaces in-memory Logger; migrate call sites (191f9d7)
  • audit: render archive and purge actions (61dd5ca)
  • audit: retention pruner (06809c3)
  • backup: add checksum module for backup integrity verification (83f76f8)
  • backup: add hook runner for pre/post backup lifecycle hooks (8f8436e)
  • backup: add pipeline processor, rewrite scheduler with hot-reload + retention (b2cb817)
  • backup: add v2 migration and rewrite core interfaces (1c1dae1)
  • backup: implement all 6 backup strategies (49f75cb)
  • backup: rewrite targets to new interface, add detection coordinator (558454d)
  • cli: wire backup alerts, S3 decryption, missed backup checker (438c6d3)
  • cmd: add config export/import subcommands (43afee1)
  • cmd: first-boot sidecar backfill + idempotent backfill test (6628912)
  • cmd: prune orphan sidecars on serve startup (3b0a485)
  • cmd: wire configsync Syncer at startup + mutation hook + global import (1b47d5e)
  • cmd: wire gitsync into serve + CLI git subcommands (bda3909)
  • community recipes catalog integration (#11) (2d4c5bb)
  • config: add tls.mode validation, support 'local' mode (bd2e83b)
  • config: expand ~ in data_dir, apps_dir, and ssh_key_path (d8080c6)
  • config: GitSync config block + validation (a1b67fb)
  • configsync: add ImportGlobalIfEmpty + ImportAppSidecarIfMissing helpers (9390a1c)
  • configsync: add sidecar YAML types (a12527d)
  • configsync: apply FS-loaded sidecars to DB transactionally (bf4d391)
  • configsync: DeleteAppSidecar + PruneOrphanSidecars (85b344d)
  • configsync: first-boot seed and FS->DB reload (d913bbe)
  • configsync: inject .gitignore entries for secrets files (0e1301b)
  • configsync: load app and global state from FS (cd7f019)
  • configsync: redacted global sidecar types (25c0e88)
  • configsync: rehydrate archived apps from tombstones on reload (3211a84)
  • configsync: SidecarWriteHook for gitsync integration (1089e20)
  • configsync: split secret material into AppSecrets/GlobalSecrets types (c48c063)
  • configsync: tombstone read/write/delete helpers (27a4b16)
  • configsync: write secrets to mode-0600 sidecar files (ea967dd)
  • configsync: write/read/import sidecars + debouncer + tests (0806a4a)
  • configsync: write+import redacted _global.yml, schedule writes both (fe798f3)
  • deployer: emit deploy_succeeded/deploy_failed/rollback audit events (2f66645)
  • deployer: post-deploy stabilization + unstable status, audit all templates (3249a75)
  • deployment: detect native/docker/desktop/dev modes (91310bf)
  • e2e,templates: probe actual reachability for every app template (#8) (924cb84)
  • export/import app config bundle (#13) (73524b8)
  • export/import follow-ups (docs, audit render, overwrite preview) (#15) (a583298)
  • gitsync: add CheckRemote with classified errors (dbc0e05)
  • gitsync: add poll/auto-push/auto-apply/webhook toggles (7df4d4e)
  • gitsync: add RecentCommits to Status (c83aebb)
  • gitsync: core syncer + init + commit worker (57d0e5b)
  • gitsync: DB-authoritative config + UI form for git sync (d8250da)
  • gitsync: HMAC webhook handler (22b25fb)
  • gitsync: stamp audit rows on push success/failure (843ac9f)
  • metrics: use compose service name instead of container hash (07d0b94)
  • mirror docker.io images via GHCR to dodge Hub rate limits (74623d4)
  • proxy: add local TLS mode using Caddy internal issuer (e1965bd)
  • proxy: shared simpledeploy-public network + container-IP upstream (344a3f3)
  • reconciler: add syncer field + DR recovery after UpsertApp (79b73d7)
  • reconciler: archive on disk-removal instead of delete (3d96653)
  • reconciler: periodic app-status refresh (60700e6)
  • reconciler: watcher reloads FS-authoritative state on change (3f905c3)
  • rework roles to super_admin/manage/viewer (#14) (857b2e5)
  • store: add archive-aware list helpers and MarkAppArchived (78883fb)
  • store: add archived_at column on apps (5d0e8cb)
  • store: add audit_log migration (b0045b0)
  • store: add backup summary and recent runs queries (40db7f8)
  • store: add helpers for configsync import/export (076163f)
  • store: add MutationHook infrastructure (43ca7c5)
  • store: add PurgeApp cascade (ffda214)
  • store: add WipeConfigForRestore for DR import --wipe (e69f432)
  • store: audit_log read/write/prune/sync + retention config (cdd5622)
  • store: helpers for redacted global import (preserve secrets) (c1c8c59)
  • store: InsertConflictAlert for gitsync conflicts (dbb7f29)
  • store: rewrite backup store for v2 schema + add compose version metadata (53abe0c)
  • store: system_meta table and backup_configs uuid backfill (2f31248)
  • store: wire MutationHook into all mutating methods (e761ac4)
  • ui,api: inline scale controls + scalability detection (#27) (62cfa27)
  • ui/api: activity client helpers (622cd2e)
  • ui: ActivityRow component (d9284d3)
  • ui: add ActionModal component with live WebSocket terminal output (5211625)
  • ui: add active-only toggle to alert history (dabedbc)
  • ui: add app-level templates to Deploy wizard (528f8f7)
  • ui: add backup summary, detect, config-trigger, test-s3 API methods (c1313b8)
  • ui: add BackupHealthCard dashboard component (ab6cc4f)
  • ui: add Backups tab to AppDetail (a5f03be)
  • ui: add BackupsTab per-app backup management component (21f62b6)
  • ui: add BackupWizard 4-step config creation component (28f3a6d)
  • ui: add delete confirmation modal to users page (650af76)
  • ui: add Deployment card + mode-aware hints to System overview (ddcb27e)
  • ui: add display name and email to user creation and cards (72da851)
  • ui: add inline help text to alerts sections (42489db)
  • ui: add local TLS option with amber warning in endpoint settings (e9849b5)
  • ui: add manual override toggle to backup wizard strategy selection (a01947e)
  • ui: add OverviewTab component (ce80c62)
  • ui: add request metric charts to metrics tab (93aa1a2)
  • ui: add ScheduleBuilder visual cron component (4964e94)
  • ui: add SettingsTab component consolidating app settings (0f5d6cb)
  • ui: add sparkline and onclick support to StatCard (bfecb9c)
  • ui: add SparklineChart component for stat card trends (38651a2)
  • ui: add Test connection button to Git Sync page (bf76386)
  • ui: archived apps view with purge action (30e9144)
  • ui: auto-generate rule names from config (b53c719)
  • ui: comprehensive setup screen with profile fields and password strength (3c1e20b)
  • ui: dashboard recent-activity card (9eaa0a0)
  • ui: deploy wizard integration polish, SlidePanel moved into wizard (d078ff0)
  • ui: deploy wizard step 1 name input with validation (058521f)
  • ui: deploy wizard step 1 YamlEditor with auto-validation (80eba21)
  • ui: deploy wizard step 2 routing labels with injection (b6962c5)
  • ui: deploy wizard step 2 service summary and registry selector (7d8e484)
  • ui: deploy wizard step 3 with live log streaming (5fe7ffc)
  • ui: endpoints only in Settings, compose read-only view, env confirm+autocomplete (f965d7d)
  • ui: enhance compose versions with inline editing, download, restore (9b66706)
  • ui: enhance visual editor with protocol support and service templates (2bc7473)
  • ui: env var UX overhaul in visual editor (953a55f)
  • ui: export compose yaml from config tab (99d4865)
  • ui: GitSync admin page + nav link (1fcf90e)
  • ui: global Audit view replaces in-memory ring buffer tab (dfecb03)
  • ui: guided Telegram webhook setup with bot token + chat ID builder (7f3adb4)
  • ui: help & feedback menu; add github issue/PR templates (ad742d6)
  • ui: hide Git Sync nav for non-super-admins (4c61f76)
  • ui: improve alert cards on dashboard home (fe0fb61)
  • ui: improve alert rule creation UX (5d9bd61)
  • ui: log-line compact activity rows + omnipresent ActivitySidebar (auto-open on new activity) (7a8236a)
  • ui: mode-aware hints in backup destination and logs tab (63f7dd1)
  • ui: move gitsync config into modal, regroup sections (af82e80)
  • ui: move mode toggle above endpoints, file paths in YAML view (018f2df)
  • ui: multi-endpoint visual editor with service routing (e7e6314)
  • ui: per-app Activity tab (94a6d4c)
  • ui: per-container chart lines with visibility toggles (d0ce3c9)
  • ui: per-endpoint edit/add/delete, simpler env vars view (78528ef)
  • ui: plain .env editor in YAML mode, dedupe env section (ccaf3dd)
  • ui: polish API keys section, empty states, and key banner dismiss (44effa2)
  • ui: prioritize upload/build over templates, expand service list (16c739a)
  • ui: quick-test endpoint mode + HTTP->HTTPS redirect listener (e400391)
  • ui: read-only visual builder, fix endpoint JSON, compose in ConfigTab (c1a5d31)
  • ui: realtime store and per-page subscriptions (7f7e99e)
  • ui: replace user table with card grid and empty state (e628cbd)
  • ui: restructure visual compose editor into grouped sections (e907500)
  • ui: revamp app details to 4-tab layout with action modal (8184b25)
  • ui: rewrite /backups as cross-app health dashboard (41e97e9)
  • ui: rewrite Alerts page with FormModal, edit/test webhooks, improved UX (d9d5768)
  • ui: rewrite backup UI for v2 with 6-step wizard, hooks, download, upload-restore (65bb9ed)
  • ui: rewrite deploy wizard with modal + visual builder (9b29f14)
  • ui: scaffold DeployWizard with step indicator (5f56aa6)
  • ui: show actual values in chart tooltips (77f9ba6)
  • ui: show deployment mode badge in StatusBar (8ed128e)
  • ui: show recent git activity on Git Sync page (58bfeda)
  • ui: show slug, compose path, env path in app info (fc92d28)
  • ui: template access modes (quick-test sslip.io / custom / port-only) (5922df4)
  • ui: toggle controls + pending-apply banner (8922844)
  • ui: update frontend for metrics v2 API (c90f90b)
  • ui: validate memory and CPU resource limits in VisualEditor (625d903)
  • ui: view-first Settings with read-only endpoint cards (5264e63)
  • ui: visual compose builder overhaul (cb221f0)
  • ui: wire DeployWizard into Dashboard, remove old deploy form (d724907)
  • wire data_dir into proxy config for local TLS storage (b8660e7)
  • wire tls mode and data dir into API server (16f42d4)

Bug Fixes

  • activity: address code review findings (1-8) (582e237)
  • activity: JSON shape (snake_case + raw before/after), per-app filter by slug, UI res.data unwrap, broader e2e coverage (7eed04b)
  • activity: tighten non-admin scope to own auth events only (a90cbf5)
  • address archive + FS-authoritative review issues (32040ce)
  • address code review findings (ad1c84d)
  • alerts: close webhook SSRF DNS-rebinding window; expand reserved-IP filter (5b90450)
  • alerts: human-friendly values in webhook messages (48ec37a)
  • alerts: resolve active alerts on rule disable/delete + format history values (e526d0a)
  • alerts: update active history snapshot when rule is edited (6213e7f)
  • api,proxy,ui: endpoint-update reliability + per-route local TLS (e3e8990)
  • api,reconciler: remove orphan sidecar when app is deleted (bb3c1bc)
  • api,ui: add json tags to BackupConfig/BackupRun structs (05bf322)
  • api,ui: filter app list by access and add per-app grant UI (#21) (ddccc5a)
  • api,ui: prevent silent overwrite when deploying existing app name (94bac4d)
  • api: adaptive gap threshold in metrics insertGaps (7639c34)
  • api: add Content-Security-Policy on SPA index.html (b92c121)
  • api: add HTTP server slowloris defenses (ReadHeaderTimeout, IdleTimeout) (6fbb632)
  • api: add JSON tags to alert structs + populate AppSlug in rules list (a11ad55)
  • api: add panic-recovery middleware (1b667b1)
  • api: API key scopes — accept expires_at on create + last_used_at tracking (7a96c27)
  • api: cap concurrent upload-restore goroutines (2343d68)
  • api: cap inbound WS frames on logs and deploy_logs endpoints (54eff74)
  • api: correct disk size calculation on Linux (87a9889)
  • api: DELETE returns 404 when app row missing instead of 5xx (c24e44e)
  • api: enforce per-app access check on backup config/run endpoints (d00b072)
  • api: fix SPA redirect loop in UI serving (573e900)
  • api: gate backup-config + alert-history routes by role/access (#23) (c4f6156)
  • api: gate webhook + alert-rule routes by role and per-app access (#18) (8251ff6)
  • api: make session cookie secure flag conditional on TLS mode (f0f360e)
  • api: patch IDOR on GET /api/activity/{id} (32466d2)
  • api: per-handler request body limits (01be207)
  • api: record audit rows for rollback, profile self-update, gitsync config (af4d2e7)
  • api: restrict global:audit WS topic to super_admin (6f1acd0)
  • api: scrub crypto error details from registry encrypt responses (cd841bf)
  • api: scrub webhook secrets from non-admin GET /api/webhooks (e1a02b2)
  • api: silence errcheck on SetWriteDeadline (aa80747)
  • api: tighten platform reads to super_admin and filter cross-app lists (#24) (f916434)
  • api: tighten WS Origin check + always SameSite=Strict on session cookie (e11d4a6)
  • api: validate .env keys/values to prevent line injection (c96a70d)
  • api: validate endpoint domains at the API boundary (e2115a7)
  • api: verify JWT user exists in DB before granting access (e67f7a6)
  • api: wake Users page on user_/apikey_ audit events (#20) (d84663c)
  • api: WS logs streams send pings + recheck auth periodically (addeec3)
  • audit: capture old compose bytes for redeploy diff (Before snapshot) (5c4e605)
  • audit: capture real username for user_deleted; thread actor for login events (a704fea)
  • audit: instrument missing app settings handlers (env, IP allowlist, certs, pull, version delete, cancel) (1e14f0d)
  • audit: wire lifecycle/created on new-app deploy + compose diff capture (8705b72)
  • auth: derive JWT signing key via HKDF subkey from master_secret (e8a8c61)
  • auth: make login rate limit configurable; raise for e2e (#70) (a109935)
  • auth: pin JWT issuer and audience claims (c3fa950)
  • auth: RealIP trusted_proxies accepts CIDR ranges (ddc3f73)
  • auth: rekey login lockout to (user,ip) tuple + match 401 on lock (849f543)
  • auth: server-side JWT invalidation via token_version (1e54522)
  • backup,proxy: busybox-tar compat on restore; opt-out for HTTP redirect (#71) (3bbabfb)
  • backup: cap gzip decompression on restore to prevent compression bomb (65c99a5)
  • backup: credential sourcing, container naming, download path, s3 uploader (8ee41be)
  • backup: use SAVE for redis with BGSAVE+poll as fallback (43349a8)
  • backup: validate restore tar stream before piping to docker exec (090a10c)
  • build: drop HTTPListenAddr reference that leaked from WIP (e525359)
  • cli: improve Docker/Compose missing error message (30efae8)
  • cmd: only mark backfill complete on full success (7e19cfc)
  • compose: expand ValidateComposeSecurity to cover container-escape vectors (de00950)
  • compose: preserve default network on InjectSharedNetwork (#9) (25d5d65)
  • config: git_sync YAML key (snake_case) + install git in container (e7d3657)
  • configsync: debouncer race + sentinel collision + docstring (38c5ed3)
  • configsync: preserve DB rows across sidecar reapply (969342e)
  • configsync: stage-all after orphan prune + app sidecar delete (73a8dc7)
  • config: update test for 5-tier defaults (d063095)
  • deploy,ci: proper WS keepalive + use GHCR mirror in main CI e2e (9b6adc8)
  • deployer,reconciler: prevent double-dispatch race on API-driven deploys (aab0604)
  • deployer: check fmt.Sscanf return (errcheck lint) (90fd42c)
  • deps: bump go directive to 1.26.2 (98da666)
  • deps: bump postcss to 8.5.12 (c2761bf)
  • docker: health check uses HTTP and configurable port (87978f5)
  • e2e,templates: use real adminer tag, accept Unstable for code-volume templates (8d6c2f1)
  • e2e: accept unstable/failed badge in slow-templates deploy test (e6bc7b5)
  • e2e: accommodate mirrored image refs and slower GHCR pulls (8b64038)
  • e2e: adapt template tests to new wizard + resilient manifest check (35f90aa)
  • e2e: bump 03b Node API budget to 18 min for slow CI image pulls (44f885e)
  • e2e: bump deploy expect + test timeout for slower GHCR on CI (cb02705)
  • e2e: fix 6 remaining test failures (63a3117)
  • e2e: fix Advanced button click in endpoints test (b2ef5c5)
  • e2e: fix final 4 test failures (c1ea26f)
  • e2e: fix final 5 failures with resilient assertions (7466235)
  • e2e: fix last 2 test failures (eeb6e59)
  • e2e: fix lockout test cascade and path traversal fixture (532ed2e)
  • e2e: fix rate limiting and deploy wizard selectors (06ffc42)
  • e2e: fix remaining selector and state issues (97022e5)
  • e2e: fix remaining selector issues and test expectations (5fd5aea)
  • e2e: fix selectors and flows based on actual UI (92636e6)
  • e2e: fix selectors based on actual UI components (f044251)
  • e2e: poll with reload for restart button after start (80a858c)
  • e2e: restore test.setTimeout for 03b Node+Postgres (0d963ca)
  • e2e: simplify Advanced test to verify section exists (7d673fd)
  • e2e: templates-deploy-all missed the Browse templates click (7431b13)
  • e2e: try dispatchEvent for Advanced click (3a261a9)
  • e2e: use API to ensure app running before restart test (fb62035)
  • e2e: use evaluate for Advanced section click (ca1dae3)
  • e2e: use getByRole with force click for Advanced (f2ffe24)
  • e2e: wait for restart button after start (no modal) (6380043)
  • gitsync: detach webhook handler context to prevent goroutine leak (#12) (6bea9a2)
  • gitsync: extend suppress tail + no-rebound + poll loop tests (97c8aa4)
  • gitsync: make sync robust + surface errors (90e1e99)
  • gitsync: scrub secrets from probe errors and surface decrypt failures (5bc9aa2)
  • gitsync: stageAllowed now stages tracked-file deletions (2c3ce71)
  • lint: address CI findings + harden pre-push hook (74c5f63)
  • logbuf: strip ANSI escapes and cap per-line bytes (bfeb79d)
  • metrics: align rollup thresholds with view windows (7711e4e)
  • metrics: query all feeder tiers so longer ranges show unrolled data (3d630c0)
  • metrics: use single timestamp per collection cycle (e1d2dec)
  • packaging: harden simpledeploy.service systemd unit (4b7a47e)
  • proxy,api,e2e: dedupe TLS policies, restore force deploy, fix test bugs (cbe5fe2)
  • proxy,deployer,api: port-stripped host lookup, deploy auth, super-admin guard (5a08a6d)
  • proxy: inject default security headers on Caddy app responses (fa66b6e)
  • proxy: wire http_listen_addr and default to :80 for HTTP->HTTPS redirect (864b8fb)
  • reconciler,ui,e2e: routes-only refresh + reliable status-badge assertion (75b1341)
  • reconciler: apply ValidateComposeSecurity in scan loop (3f01aba)
  • reconciler: normalize stale compose_path when apps_dir changes (5aa7214)
  • refresher race + WS deadline + slow-pull e2e timeouts (b9b44eb)
  • resolve four residual e2e failures (proxy TLS + test stability) (6e5a834)
  • security hardening across Go codebase (087320f)
  • security: batch hardening (M-15, L-09, L-10, L-11) (2a77363)
  • security: bind management dashboard to 127.0.0.1 by default (10896af)
  • security: pin published host ports to 127.0.0.1 (f09161f)
  • security: preserve audit log on app purge; sentinel on full purge (481caac)
  • security: tighten file modes for secrets and app config (59cae8f)
  • sqlite backup tmp uses source basename; postinstall locks down dirs (82d7736)
  • stabilize three remaining e2e flakes (6b46c51)
  • store,e2e: allow 'unstable'/'failed' app status; raise 03b timeout (43625dd)
  • store,gitsync: conflict alerts insert null rule_id + regression test (1a86112)
  • store: isolate audit retention table; clean SyncEligible read (9730bf1)
  • store: log fireAppHook lookup errors + tighten DeleteAlertRule + clean test dead code (c92b45b)
  • store: migration 017 makes alert_history.rule_id nullable (1ca2989)
  • store: scan avg(mem_bytes) as float64 to handle SQLite avg() return type (edb6a93)
  • templates: nginx-static TCP healthcheck + accept Failed in deploy-all (90bee72)
  • templates: pg_isready uses POSTGRES_USER, not hardcoded "postgres" (6fd3811)
  • ui: Add Service button not working in deploy wizard (33a412b)
  • ui: Advanced section not expanding due to ComposeFile typo (162e678)
  • ui: align archive view with PascalCase App fields (9989c6b)
  • ui: aria-label on access mode buttons so e2e selectors match (02e9deb)
  • ui: cap app overview memory total at host memory (0112b3e)
  • ui: community recipes modal transparent due to undefined bg token (6af253c)
  • ui: compact activity rows wrap summary on its own line so it stays readable (9d3eeb0)
  • ui: container label mismatch causing empty charts (e1798d0)
  • ui: correct vite dev proxy target and port (7779200)
  • ui: deploy log coloring based on content not stream (82170d4)
  • ui: deploy wizard review fixes (5104dbd)
  • ui: endpoint custom TLS, detailed service cards, per-service edit (8c7c78c)
  • ui: endpoint display, service field, YAML mode sync (45681cd)
  • ui: export isValidIPv4 missed in 5922df4 (786754c)
  • ui: fix env var Add button, remove dead code (0ad7789)
  • ui: fix wizard strategy field name mismatch with detect API (bd900af)
  • ui: honor ?tab= query on system page (622ea8c)
  • ui: improve service edit UX (ffbce78)
  • ui: improve users page UX - modals, card layout, key date fix (9c9bd15)
  • ui: include summed bytes in Total memory tooltip (e4e5435)
  • ui: make users page and form modals mobile friendly (1f5bcad)
  • ui: premature deploy toast + stuck deploy screen (64a01b8)
  • ui: refresh dashboard on failed deploy; add endpoints UI in visual editor; include compose services in endpoint dropdown (6917fbc)
  • ui: remove duplicate ids declaration in loadMetrics (23ec466)
  • ui: remove undefined compose reference in SettingsTab read-only view (096c445)
  • ui: rename app overview activity card to Recent Deployments (46fa12d)
  • ui: render StatusBar in Layout so mode badge is visible (12f0e02)
  • ui: RepeatableField empty row disappearing on add (dcaff58)
  • ui: simplify settings layout (b6f3708)
  • ui: Svelte compile errors in alerts module (cfc50da)
  • ui: tooltip showing undefined, mem subtitle showing single container (12ead4b)
  • ui: uniform card borders, file path headers in YAML mode (5100e82)
  • ui: use $derived for reactive statusColor in BackupHealthCard (80e161e)
  • update template image tags that no longer exist on Docker Hub (d1146c2)
  • use config values for rate limiter instead of hardcoded 10/min (55f41b9)

Performance Improvements

  • e2e: cut runtime by ~40% via configurable intervals + compose restart (aa6e0fa)
  • e2e: shard templates workflow + prepull + storageState + parallel (#7) (ea5260e)