What's Changed
- 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-alpha.1
docker pull ainullcode/borg-ui:latest
Full Changelog: v1.78.0...v2.0.0-alpha.1