What's Changed
- Keep repository wizard height stable (cbea3ff)
- improve README top section flow and note placement (e41767d)
- docs: add enterprise README section (db800f9)
- docs: simplify README copy (24310a6)
- docs: polish README presentation (d72c685)
- docs: refine README assets and links (88403bd)
- chore: ignore local README screenshots (e1f078f)
- Fix frontend wizard review tests (0550f6b)
- docs: refresh README for 2.0 release (f488d3b)
- Fix frontend lint issues (b4c8f60)
- refine WizardStepScheduleReview code formatting and layout (786d5ce)
- redesign schedule wizard review step and fix mobile padding (05254ad)
- redesign wizard review step and backup flow preview (7f16780)
- Add Umami analytics for announcements (593cf08)
- Fix Borg v2 encryption label in repo review (ab398db)
- chore: release v2.0.0-beta.2 (2d24e70)
- refactor: promote RunningBackupsSection to shared redesigned component (f263294)
- test: add backup progress contract coverage (ebb2496)
- Update frontend tests for current UI behavior (4f7a726)
- feat: redesign running backup progress card (8a86e72)
- Fix backup progress visibility race (9b10a33)
- test: extend real backup contract coverage and rename manual backup nav (a224ad5)
- Tidy backup page header (6dd2c7d)
- chore: update package lock (2284d1b)
- fix: limit dashboard upcoming tasks to next 24 hours (8095409)
- feat: show next backup schedule on repository cards (4b47d2c)
- Fix Borg 2 backup progress contract (b3e8efa)
- feat: unify log viewer usage and add copy button to dialog (53fb39e)
- feat: add passphrase visibility toggle to wizard security and review steps (38cd644)
- chore: release v2.0.0-beta.1 (201cdb8)
- test: refresh coverage assertions for current frontend states (f11cc12)
- test: update frontend loading assertions for skeleton states (38dcbcd)
- chore(deps): bump the backend-minor-patch group across 1 directory with 6 updates (#402) (ba10c84)
- chore(deps): bump the frontend-minor-patch group across 1 directory with 13 updates (#403) (83d4567)
- feat: improve frontend loading states with skeletons (15555af)
- fix: add skeleton header bar to archives list loading state (45a86be)
- fix: move responsive Skeleton height to sx prop to satisfy TypeScript (ec7287a)
- fix: eliminate skeleton loading layout shift across dashboard, schedule, and SSH pages (4090882)
- fix: replace version info loading text with skeleton chips (cd10a71)
- feat: add buy links to plan upgrade surfaces (b72eb2b)
- fix: repo dropdown mobile truncation and remove italic text (73d6cdf)
- feat: add primary-tinted header bar to archives list (192b476)
- feat: redesign archives page with two-panel layout (7c3f4c8)
- fix: replace emojis with Lucide icons in restore cards (5915faf)
- fix: redesign archive card to match repository card design language (c9d6b55)
- fix: compute v2 repo total_size via routed stats refresh (55b2937)
- chore: update security dependencies (bf15842)
- fix: mount borg2 archives with archive filters (87ad108)
- fix: resolve borg2 archive ids in v2 archive routes (a68c660)
- fix: accept routed archive stats and decoded repository fields (756e7a5)
- fix: harden startup cache config and schedule cleanup migration (57c41cd)
- test: skip mount integration when fuse is unavailable (29689a6)
- test: refresh frontend assertions for updated ui flows (2612fc2)
- fix: update tests for routed borg boundaries (3afbf28)
- test: add real borg cli contract coverage for borg2 flows (046f38d)
- refactor: share maintenance job startup and backup execution (05e5ba3)
- feat: redesign Users tab with table layout, search, and filters (ae07e18)
- fix: make dev runtime borg2 mount dependencies reproducible (c1be48c)
- fix: correct borg2 archive mount command handling (dcf9a16)
- fix: report archive mount availability errors explicitly (542d2f2)
- fix: normalize borg2 prune commands and modal responses (3a07881)
- fix: align backup run routing across borg1 and borg2 (98a96d5)
- feat(ui): replace mount success toast with custom branded notification (d47b7ff)
- feat(ui): redesign prune dialog with separate results modal and colorized output (5653868)
- fix(ui): replace unnecessary info alerts with tooltips and captions (27d539b)
- test: align smoke and manual clients with current auth and borg2 flows (db90459)
- frontend: use version-aware borg client for archive and backup actions (db7f0ea)
- refactor: extract versioned repository APIs and maintenance helpers (9d512ad)
- refactor: route borg operations through versioned services (a4bc1c4)
- feat(ui): add skeleton loading to repositories tab (a170837)
- feat(ui): redesign login screen with split panel layout and brand identity (e662135)
- fix(ui): blur public key with reveal/copy icons, fix mobile stats wrapping (83dd2f4)
- fix(ui): replace deploy password alert with info icon tooltip (67616ec)
- fix(ui): reduce start backup button visual weight (f7de091)
- chore: release v2.0.0-alpha.5 (ab67edb)
- Update wizard tests for source directory helper (ef1b77f)
- fix(ui): simplify v2 beta warning to chip-only with tooltip (08458c4)
- Add missing locale help labels (8442968)
- Fix Borg 2 repository routing and preview handling (42894f6)
- fix(ci): prevent smoke tests from registering against production license server (7963765)
- Release 2.0.0 alpha 4 (7050b30)
- Add OTA updates worker (3e0199c)
- fix(dev): add activation public key default to dev compose (875106b)
- fix(ui): move full access notice to sticky footer in PlanInfoDrawer (c04bbbf)
- Harden startup licensing sync defaults (3a17f32)
- Add script status regressions and stabilize v2 gating tests (313c7cb)
- Fix stale next_run when re-enabling schedules (990a36f)
- Fix activation key and bump to 2.0.0-alpha.3 (3b1613f)
- Fix repository configuration docs (5244a6e)
- fix(licensing): bake default activation service URL into image and config (707a234)
- fix(ui): redesign BackupHistorySection filters with flat design language (fe6d645)
- Prepare 2.0.0 alpha prerelease flow (56fea46)
- Unify OTA manifest sources (b3323a3)
- Fix frontend typecheck and formatting issues (f2003fd)
- fix(tests): update tests to match redesigned UI components (8642bb6)
- fix(ui): fix mobile pagination layout and filter pill wrapping in ArchivesList (30ff876)
- feat(ui): redesign Remote Machines tab with unified design language (a2931a7)
- refactor(ui): remove card wrappers from repository selector and backup section (bfff7ca)
- feat(ui): unify button design language across all UI surfaces (ca6ee9c)
- fix(ui): improve data table headers and filter bar design (9033255)
- fix(ui): add dividers between filter pill groups in Archives toolbar (d9022d5)
- fix(lint): add missing React import in RepositoryStatsGrid (ea68375)
- refactor(ui): replace SSH single-key info Alert with inline tooltip icon (35d9644)
- fix(plan): hide community unavailability notice for non-full-access users (7979768)
- Fix stale frontend unit test expectations (bd0dd41)
- feat(ui): add semantic colors to notification card stats (0403923)
- feat(ui): add semantic colors to schedule card stats (141df74)
- feat(ui): add semantic colors to repo card stats and action icons (f18729e)
- fix(schedule): wizard resets to step 1 when switching tabs or on polling refetch (c7cad81)
- refactor(ui): replace blue info Alerts with icon tooltips in schedule wizards (a56f455)
- chore: prettier formatting fix on ArchivesList ToggleButtons (aef6d92)
- feat(archives): persist selected repository in URL for deep linking (224b7d1)
- Fix dashboard horizontal overflow (56f7aea)
- Add OTA plan drawer content manifest (765c221)
- chore: linter formatting fixes on ArchiveCard and RepositoryStatsGrid (063f537)
- fix(ui): restore colors on stat cards — tinted bg, colored label/value/icon (20bff31)
- refactor(ui): align stat cards with RepositoryCard design language (8e14cba)
- refactor(ui): rewrite ArchiveCard to match RepositoryCard design language (26c1874)
- feat(ui): overhaul Archives tab with modern dark-theme design (1d389fe)
- fix(ui): improve info icon alignment in Manual Backup section (2b29384)
- fix(ui): move observability-only alert into info icon tooltip on Backup page (836c1c2)
- feat(ui): redesign upcoming jobs section to match dark theme (eebfffe)
- Add manifest-based announcement translations (a0f9f81)
- Fix inline post-backup script env typing (dc84d6b)
- fix(ui): migrate notification dialogs to ResponsiveDialog (mobile bottom sheet) (89a6fc6)
- feat(dashboard): surface observe-only repositories in health view (d93caea)
- fix(ui): migrate check schedule dialog to ResponsiveDialog (mobile bottom sheet) (17d68f2)
- fix(ui): stack selection cards vertically on mobile in wizard steps (8c66c25)
- fix(ui): post-review cleanup — footer padding, prop docs, aria labels, dead ternary (21da3ec)
- feat(ui): migrate ScheduleWizard to ResponsiveDialog with sticky footer (fc7811c)
- feat(ui): migrate RepositoryWizard to ResponsiveDialog with sticky footer (5605f58)
- feat(ui): compact mobile layout for WizardStepIndicator — icon circles + step label row (0c2ba13)
- feat(ui): add footer prop to ResponsiveDialog for sticky mobile actions (ebffd31)
- i18n: extract hardcoded strings to localization across settings and card components (c674efc)
- fix(ui): manage access mobile layout, height stability, and em dash removal (154caa9)
- ci(deps): bump docker/setup-qemu-action from 3 to 4 (#393) (13b50ea)
- ci(deps): bump docker/login-action from 3 to 4 (#392) (dc7aa52)
- ci(deps): bump softprops/action-gh-release from 1 to 2 (#395) (444bf05)
- ci(deps): bump codecov/codecov-action from 5 to 6 (#391) (ab38707)
- feat: Change header used for authorization to allow for use of Borg UI behind reverse proxies with HTTP Basic Auth. (#364) (e0169a3)
- fix(account): restore deployment identity header (c190c64)
- feat(settings): refresh users management cards and access flow (b44c632)
- fix(ui): flatten Account tab — remove nested cards, simplify header (a051956)
- fix(ui): align UsersTab header with standard settings tab pattern (21c1e33)
- chore: prettier fix (6874670)
- fix(ui): remove unnecessary cancel button from info-only modal (3b75ff2)
- fix(ui): use ResponsiveDialog for notifications info modal (bottom sheet on mobile) (512f58c)
- fix(ui): move info icon inline with title text, remove awkward float (17e559e)
- fix(ui): replace Active chip with icon badge; add event category strip to notification cards (797de33)
- fix(ui): remove initials avatars from all cards; move notification info inline to modal (1c90bb9)
- feat(ui): replace DataTable with EntityCard-based cards in Schedule and Notifications (155f625)
- fix(ui): stack API Tokens header vertically on mobile for better touch targets (8e673c0)
- fix(ui): remove overflow hidden from repo cards container to show hover border (eb1b263)
- fix(ui): stack SSH key action buttons vertically on mobile (42c9737)
- feat(ui): bottom sheet for dialogs on mobile (c6c99d7)
- fix(frontend): update repository card accessibility and tests (532ae09)
- fix(ui): remove disablePortal from ResponsiveDialog, clean up types and animation guard (0ebacb5)
- feat(ui): add ResponsiveDialog wrapper — Dialog on desktop, bottom sheet on mobile (95eac3f)
- chore(ui): format shared table components (7bc812b)
- fix(ui): polish mobile controls and settings details (530769a)
- feat(repositories): optimize repository flows for mobile (0c1a9c2)
- feat(frontend): improve mobile layouts across activity, backup, schedule, and archives (018dcc2)
- feat(settings): make settings and admin surfaces mobile-friendly (66d4a58)
- feat(ui): add responsive table and shell primitives (94a012b)
- chore(analytics): update consent wording (9902d41)
- chore(release): prepare 2.0.0 announcement and versioning (0d877dd)
- feat(announcements): fix dev CORS and add what's new pattern (f30f671)
- fix(import): allow unencrypted repositories without passphrase (880f2b8)
- fix(repositories): centralize stats repository access (d182ad0)
- fix(ci): address analytics lint and layout tests (a185164)
- feat(analytics): expand lifecycle and funnel tracking (0d43242)
- feat(plans): expand community and pro user seats (24f6083)
- chore(i18n): add missing licensing locale keys (d556d42)
- style(settings): standardise card styling across all settings tabs (a72dc9b)
- refactor(licensing): remove shared secret config (49f024a)
- chore(dev): update activation runtime config (41534a3)
- refactor(licensing): simplify backend activation config (a413320)
- feat(frontend): refine plan badge and plan drawer entitlement UX (45f15c1)
- feat(frontend): add licensing settings tab and entitlement-aware plan data (589baa0)
- feat(licensing): add backend entitlement state and activation endpoints (3786053)
- Update plan and licensing locale copy (1145377)
- Add licensing API client (5b83659)
- docs: point pages site to docs.borgui.com (306a727)
- Create CNAME (64909e0)
- style(frontend): format new coverage tests (6cf4c1b)
- test(frontend): align plan component coverage with public props (68f3dae)
- test(frontend): cover plan badge and system info hook (6ce0906)
- test(frontend): cover plan drawer and backup page flows (a6cc494)
- test(frontend): cover account sections and ssh flows (7bacde1)
- test(unit): align schedule payload assertions (d6476c7)
- test(unit): tighten response payload assertions (537395c)
- test(unit): align contracts with current api behavior (1bd76e8)
- ci(tests): update artifact actions to v7 (7008a6e)
- fix(smoke): support direct integration helper imports (d5fa4f8)
- test(ci): fix system collection and smoke assumptions (cda5feb)
- test(suite): tighten api contracts and fix smoke helpers (f377831)
- test(suite): extract shared borg and job helpers (62e4554)
- test(backend): use real borg in restore integration logs (2737e54)
- docs(readme): remove stale smoke workflow badge (3ffaf0e)
- fix(ci): stabilize ssh archive download and coverage upload (1a3fe4b)
- fix(backend): use ssh env for restore browsing (5a105a1)
- fix(backend): use ssh env for archive operations (4133e32)
- fix(ci): correct ssh smoke target permissions (7fe1088)
- fix(smoke): harden ssh and delete cancel flows (becc560)
- fix(ci): stabilize ssh and extended smoke flows (c1d4000)
- ci(tests): split backend and frontend coverage uploads (ecc4b52)
- fix(backend): stabilize ssh secret handling in ci (10e045c)
- test(backend): expand filesystem and restore route coverage (5f44f90)
- Fix smoke workflow frontend artifact extraction (d5e04b3)
- ci(tests): gate coverage uploads and harden cancel flows (2420302)
- ci(tests): reuse frontend build across smoke lanes (ddbf5b4)
- ci(tests): run ssh smoke on pr and push (107bce4)
- ci(tests): parallelize backend and rename lanes (f3f0dbb)
- test(smoke): add localhost ssh coverage and fix permissions checks (f62c2d1)
- ci(tests): fold smoke lanes into main workflow (6d3b37b)
- Fix backup page repository callback typings (de21a13)
- test(smoke): expand borg production flow coverage (389f4f8)
- Fix frontend lint failures in dashboard and announcements (0f71f93)
- test(smoke): add live smoke runners and docs (d5e2f8d)
- Fix account tab render loop in settings test (e652ccf)
- ci(tests): split smoke workflows from coverage lanes (9dc4119)
- test(backend): cover borg cancel and encrypted delete flows (12f88c5)
- Refine README testing confidence callout (be3c620)
- Fix frontend lint annotations and CI workflow warnings (9c55055)
- test(backend): expand borg api coverage and docs (b2b142c)
- Remove misleading coming-soon state from plan features (c86aa61)
- Add upcoming Pro dashboard analytics teaser (e1bc6f9)
- test(backend): expand coverage across borg workflows (c588aed)
- fix(frontend): clean up repository wizard typecheck (5d9eb52)
- test(frontend): speed up repository wizard coverage (486a856)
- fix(frontend): stop account settings test render loop (ad66a43)
- test(frontend): reset leaked fake timers (35ad9c4)
- fix(backend): restore legacy api contracts (4da44a2)
- test(frontend): stabilize auth provider retry coverage (392d2ba)
- fix(frontend): remove stale is_admin auth references (d2c5d00)
- test(frontend): align sidebar and scripts tests with permissions (1f7c285)
- refactor(frontend): tighten shared action surfaces (262f337)
- feat(frontend): harden app shell analytics and password flow (a967d79)
- fix(frontend): surface forbidden-action errors (2929988)
- feat(frontend): gate repository actions by exact permissions (4230fe0)
- feat(frontend): restrict system settings by exact permissions (1bf9b03)
- feat(account): separate personal and deployment profiles (1d90988)
- feat(frontend): simplify repository access management (f35d739)
- feat(backend): add persistent all-repositories access scope (a2c8e55)
- fix(backend): preserve role-based users across legacy auth paths (5771ec9)
- refactor(frontend): simplify app header account menu (15e58ee)
- fix: harden auth user response (ce4b707)
- chore(frontend): sync locale keys for roles and permission errors (798b760)
- test(backend): fix activity API test fixtures (104c21c)
- feat(backend): enforce repository-scoped access across backup APIs (1988321)
- feat(backend): require operator access for schedules and mounts (7988540)
- refactor(backend): centralize route authorization policy (e6bf972)
- feat(backend): add repository permission management API (c5100aa)
- feat(backend): add API token endpoints (b5b1743)
- feat(backend): add user profile and deployment metadata (2879a61)
- feat(backend): expose authorization model and user permissions (a254bf3)
- refactor(backend): define central authorization model (2009f8d)
- refactor(frontend): derive admin state from auth role (9cfd3c4)
- chore: prettier fix (c03f902)
- refactor(frontend): decompose settings page tabs (d1e0154)
- feat(frontend): update sidebar branding and role-aware sections (aa0373e)
- refactor(frontend): refresh sidebar navigation states (6f99152)
- refactor(frontend): extract app header from layout (15c2734)
- fix: stabilize repository wizard coverage (dd922e5)
- chore: update favicon with new borg logo (602e1a0)
- chore: simplify dev environment - make Redis optional (eef9e7c)
- test: expand app auth and settings coverage (2fe1f11)
- test: cover announcement and ssh wizard flows (d7d77bc)
- test: harden frontend behavior coverage (870ca7e)
- fix: centralize download authentication (10aaaaa)
- test: cover auto theme mode and appearance picker (0350889)
- feat: add auto theme mode and redesign appearance settings (434178d)
- chore: require explicit local announcements override (0942fca)
- docs: publish announcements manifest to pages (c8e9c8a)
- feat: default announcements to remote manifest (2b6a8a3)
- feat: add announcement modal system (442e4ae)
- Refine plan drawer roadmap and fix startup volume permissions (71d99aa)
- test(frontend): stabilize analytics-related suites and shared test harness (09c9e71)
- test(analytics): update analytics coverage and mocks (4105b4a)
- refactor(analytics): centralize repository payload shaping and add app_version (34291e1)
- feat(analytics): expand structured telemetry coverage across the frontend (79d0717)
- refactor(analytics): complete matomo to umami migration and consent handling (1db5c71)
- refactor: wire i18n into DashboardV3, wizard, and plan components (3833130)
- feat: add i18n keys for plan features, dashboard, and wizard across all locales (b3c2521)
- feat: add plan badge, drawer, and upgrade prompt components (561396c)
- chore: ignore .worktrees directory (f1f3990)
- chore: remove redundant frontend unit test step in CI (64524f4)
- feat: add Docker-based dev environment with isolated prod/dev setup (09dc903)
- chore: prettier fix (90f690e)
- fix: resolve CI annotation warnings (c27f6b9)
- fix: update tests broken by recent component and hook changes (a87723d)
- fix: scope backend CI to unit tests only; remove archive deletion guard (8ce85c7)
- chore: prettier fix (3baf1d4)
- fix: never-run check/compact is critical; clean up card status logic (1939e88)
- fix: resolve Python 3.9 incompatible type syntax and ignore superpowers docs (22c1c2f)
- refactor: merge dashboard bottom row into unified bento grid (34a85fc)
- test: add and update tests for borg v2 and plan gating (c3ce6ca)
- chore: add i18n keys for borg v2 and plan features (4eddfda)
- feat: add frontend plan gating infrastructure (ffd4132)
- refactor: extract AppSidebar from Layout.tsx (0e8b83f)
- feat: extract sidebar components and add borg v2 version chip (24b58cb)
- feat: add version-aware repository stats with plan gating (c11f123)
- feat: add borg v2 support and plan gating to repository wizard (344fa92)
- chore: extend repo capability helpers and type definitions (0345928)
- feat: add plan feature gating infrastructure (d977b99)
- refactor: adopt RepoSelect in all repository selector consumers (d912e31)
- refactor: extract du-based directory size calculation into shared utility (170d796)
- docs: add account page and nav restructure design spec (a496347)
- feat: extract BorgVersionChip for consistent borg version badge rendering (7c11306)
- chore: replace all local Repository interface definitions with shared type (2ef7391)
- fix: prevent negative elapsed duration in time formatting (b42b382)
- chore: extend Repository type and remove dead/duplicate type definitions (6b48b43)
- feat: introduce BorgApiClient and migrate version-aware API calls (c2dd3a6)
- chore: remove dead borg imports from v1 API and service files (06fac37)
- refactor: route version-aware operations through BorgRouter (8086cac)
- chore: gitignore .claude/worktrees/ (5afb8a1)
- chore: add borg-live-debug Claude Code skill (4ce45d8)
- feat: add Borg 2 repository support with versioned /api/v2/ routes (be50a5f)
- feat: hide write actions for observe-only repositories (0455054)
- docs: use theme-aware star history chart for light/dark mode (97af990)
- docs: add star history graph to README (2287e1b)
- fix: replace dynamic Discord badge with static badge to fix invalid server error (bfe688e)
- fix: update mock_backup to accept skip_hooks kwarg in integration test (507db08)
- feat: replace dashboard with DashboardV3 ops command center (b8cab13)
- fix: prevent double execution of repo scripts in multi-repo schedules (d22f08e)
- fix: wrap migrations 075 and 078 with PRAGMA foreign_keys = OFF/ON (aab77c2)
- fix: set BORG_REMOTE_PATH env var in borg mount command (#378) (20ca20b)
Docker Images
Published to Docker Hub:
docker pull ainullcode/borg-ui:2.0.0
docker pull ainullcode/borg-ui:latest
Full Changelog: v1.78.0...v2.0.0