• v0.1.0 579baae702

    v0.1.0
    All checks were successful
    Check / fmt + clippy + build + tests (push) Successful in 1m48s
    Build desktop (Windows) / Build desktop (Windows x86_64) (release) Successful in 5m28s
    Build desktop (Linux) / Build desktop (Linux x86_64) (release) Successful in 5m28s
    Build OCI container / Build and push vervain-web (push) Successful in 10m11s
    Build desktop (Windows) / Build desktop (Windows x86_64) (push) Successful in 15m5s
    Build desktop (Linux) / Build desktop (Linux x86_64) (push) Successful in 15m23s
    Stable

    David released this 2026-07-01 00:01:10 +02:00 | 71 commits to main since this release

    Changelog

    579baae Merge pull request 'Release v0.1.0' (#68) from release/v0.1.0 into main
    b073195 Release v0.1.0
    71e3b67 Merge pull request 'fix(ci): per-target locked cargo cache mounts for the desktop/web builds (VAPP-59)' (#67) from fix/VAPP-59-desktop-cargo-cache-race into main
    77331a2 fix(ci): move the syntax directive to line 1 so the frontend pin applies (VAPP-59 review)
    cb5e0df fix(ci): give each desktop/web build its own locked cargo cache mount (VAPP-59)
    4042ba4 Merge pull request 'feat(devices): uninstall the agent on delete, prompt to force when unreachable (VAPP-55)' (#66) from feat/VAPP-55-delete-uninstall-agent-prompt into main
    b20b251 fix(devices): wait longer than the server's uninstall timeout for the delete ack (VAPP-55 review)
    f34c5fa feat(devices): uninstall the agent on delete, prompt to force when unreachable (VAPP-55)
    3abf01e Merge pull request 'feat(desktop): let the user set and persist the server URL' (#65) from feat/VAPP-54-desktop-server-url-config into main
    5d5d28e feat(desktop): let the user set and persist the server URL
    eccf5e6 Merge pull request 'fix(desktop): embed and serve CSS/JS assets so the wry build renders styled' (#64) from fix/VAPP-53-desktop-embedded-css-assets into main
    41a689e fix(desktop): embed and serve CSS/JS assets so the wry build renders styled
    a51f880 Merge pull request 'feat(ci): cross-compile and publish a Windows desktop build' (#63) from feat/VAPP-56-desktop-windows-build into main
    518760e feat(ci): cross-compile and publish a Windows desktop build
    fe72256 Merge pull request 'feat(desktop): detach viewer into a Document Picture-in-Picture window' (#62) from feat/VAPP-50-desktop-detach-pip into main
    8e987f6 feat(desktop): detach viewer into a Document Picture-in-Picture window
    3ffa9cf Merge pull request 'fix(desktop): apply tiles in arrival order so drags never jump back' (#61) from fix/VAPP-48-ordered-tile-blit into main
    7de3227 fix(desktop): apply tiles in arrival order so drags never jump back
    b083d7a Merge pull request 'feat(desktop): optional pointer capture (Pointer Lock) with Esc-to-release hint' (#60) from feat/VAPP-49-desktop-pointer-capture into main
    6d64ee2 feat(desktop): optional pointer capture (Pointer Lock) with Esc-to-release hint
    a96bfcd Merge pull request 'feat(desktop): add Fit / Full size / Scaled viewport modes' (#59) from feat/VAPP-52-desktop-view-modes into main
    e4e696d feat(desktop): add Fit / Full size / Scaled viewport modes
    b8421f5 Merge pull request 'fix(apps): instrument desktop render path to localize blank-screen (VAPP-47)' (#58) from fix/VAPP-47-desktop-render-diagnostics into main
    8da2363 Merge branch 'main' into fix/VAPP-47-desktop-render-diagnostics
    39abd5b fix(apps): instrument desktop render path to localize blank-screen
    387cd4e Merge pull request 'fix(statusbar): show public origin, never the internal server address' (#57) from fix/VAPP-44-statusbar-public-origin into main
    aebc5b9 fix(statusbar): show public origin, never the internal server address
    829b9ff Merge pull request 'fix(live): surface control WebSocket construction failure' (#56) from fix/VAPP-45-surface-control-ws-error into main
    3e2a5e3 fix(live): surface control WebSocket construction failure
    66affbc Merge pull request 'fix(terminal): hand xterm an owned Uint8Array copy, not a wasm-memory view' (#55) from fix/VAPP-46-xterm-write-owned-copy into main
    8101f54 fix(terminal): hand xterm an owned Uint8Array copy, not a wasm-memory view
    54eab85 Merge pull request 'feat(about): add About page showing component versions' (#54) from feat/VAPP-43-about-page-versions into main
    90a9409 feat(about): add About page showing component versions
    81c6ecb Merge pull request 'fix(apps): surface relay/control WebSocket construction errors (VAPP-42)' (#53) from fix/VAPP-42-surface-ws-errors into main
    e465b94 fix(apps): surface relay/control WebSocket construction errors
    240d061 Merge pull request 'fix(apps): build browser relay/control URLs from public origin (VAPP-41)' (#52) from fix/VAPP-41-split-internal-public-url into main
    e31a7a7 fix(apps): build browser relay/control URLs from public origin
    a7f602b Merge pull request 'feat(new-device): mint mTLS enrollment bundle, drop legacy .vagent UI' (#51) from feat/vapp-38-mtls-enrollment-bundle-ui into main
    4abbbac feat(new-device): mint mTLS enrollment bundle, drop legacy .vagent UI
    9b8c4dd Merge pull request 'Derive OCI publish mode from trigger to end twin-publish race' (#48) from fix/GOV-15-twin-trigger-publish-mode into main
    6c5b32d Merge branch 'main' into fix/GOV-15-twin-trigger-publish-mode
    7d34a28 Merge pull request 'feat(install): download the agent from the API endpoint, drop the proxy (VAPP-35)' (#50) from feat/vapp-35-repoint-download-to-api into main
    0d6711a feat(install): download the agent from the API endpoint, drop the proxy
    c00e4bb Merge pull request 'fix(install): pass backend GroupServer through, never rewrite to frontend (VAPP-34)' (#49) from fix/vapp-34-no-loopback-rewrite-to-frontend into main
    2b3b2c4 fix(install): pass backend GroupServer through, never rewrite to frontend (VAPP-34)
    6576e15 fix(ci): derive OCI publish mode from trigger to end twin-publish race
    fe256a9 Merge pull request 'ci(oci): switch build cache from type=registry to type=gha' (#47) from fix/vapp-36-oci-gha-cache into main
    77c704f ci(oci): switch build cache from type=registry to type=gha
    e734f72 Merge pull request 'fix(settings): send agent fetcher ids as numbers, not strings' (#46) from fix/vapp-33-agent-ids-u32 into main
    77ebf78 fix(settings): send agent fetcher ids as numbers, not strings
    6a2e76c Merge pull request 'chore: Sync the checks and justfile recipes' (#45) from chore/sync-checks-justfile into main
    4a8ad23 chore: Sync the checks and justfile recipes
    67858b5 Merge pull request 'fix(settings): align agent-fetcher config to the VS-37 wire contract' (#44) from fix/vapp-agent-fetcher-settings-contract into main
    ab602d3 fix(settings): align agent-fetcher config to the VS-37 wire contract
    a2dd154 Merge pull request 'fix(ci): derive desktop publish version from trigger to kill twin-publish race' (#42) from fix/desktop-twin-trigger-publish into main
    2a581c0 Merge branch 'main' into fix/desktop-twin-trigger-publish
    d0956b5 Merge pull request 'refactor(apps): rename Mesh to Group and MeshCentral to Vervain' (#43) from feature/refactor-vervain into main
    b69d715 chore(apps): restore justfile separator comments changed by accident
    71478e7 docs(apps): reword "legacy" comments to reference the original SPA
    7ba2d38 refactor(apps): rename Mesh to Group and MeshCentral to Vervain
    7ae94b7 fix(ci): derive desktop publish version from trigger, not git describe
    cb26b92 Merge pull request 'feat(ci): cap native check.yml parallelism at nproc/2' (#41) from feat/GOV-10-native-check-nproc-cap into main
    78f5c8f feat(ci): cap native check.yml parallelism at nproc/2
    1dce76b Merge pull request 'fix(hooks): mount cargo target outside bind mount via CARGO_TARGET_DIR' (#40) from fix/dev-371-precommit-host-owned-target into main
    1ead376 fix(hooks): mount cargo target outside bind mount via CARGO_TARGET_DIR
    22ef2d8 Merge pull request 'feat(enroll): proxy agent binary download through the apps origin' (#39) from feat/proxy-agent-download-vapp-31 into main
    736a377 Merge branch 'main' into feat/proxy-agent-download-vapp-31
    68fa0a9 Merge pull request 'feat(settings): agent binary asset source card (view, edit, refresh)' (#38) from feat/settings-agent-binaries-vapp-30 into main
    8239eba feat(enroll): proxy agent binary download through the apps origin
    17f86ec feat(settings): agent binary asset source card (view, edit, refresh)
    71d44ec Merge pull request 'feat(ui): rename user-facing "Mesh" to "Device Group"' (#37) from feat/rename-mesh-to-device-group-vapp-28 into main
    333fbba Merge origin/main into feat/rename-mesh-to-device-group-vapp-28
    6687c2f Merge pull request 'build(css): run Tailwind build in Docker so host bun is not required' (#36) from feat/dockerize-build-css-vapp-27 into main
    31e3d54 Merge origin/main into feat/dockerize-build-css-vapp-27
    5fd125b Merge pull request 'fix(enroll): rewrite loopback server host to the browser-facing host' (#35) from fix/enroll-loopback-host-vapp-29 into main
    cc0677b feat(ui): rename user-facing "Mesh" to "Device Group"
    14b3ab8 build(css): run Tailwind build in Docker so host bun is not required
    9f07645 fix(enroll): rewrite loopback server host to the browser-facing host
    e6ac94f Merge pull request 'chore: add pre-commit hook recipes' (#32) from chore/pre-commit-hooks into main
    09d9721 Merge branch 'main' into chore/pre-commit-hooks
    457fc37 Merge pull request 'VAPP-7: Per-device file browser tab' (#34) from feat/file-browser-tab-vapp-7 into main
    a9ba3ca fix(files): cancel agent-side upload on local read failure
    cfc1942 feat(device): per-device file browser tab (Files tunnel)
    d321987 Merge pull request 'VAPP-6: Remote desktop viewer (KVM tile stream to canvas)' (#33) from feat/remote-desktop-viewer-vapp-6 into main
    67758a6 feat(device): remote desktop viewer (KVM tile stream to canvas)
    3afb99c chore: add install-hooks and pre-commit just recipes
    d5d84a2 Merge pull request 'VAPP-18: Settings read-only server URL; statusbar shows real server URL' (#31) from feat/settings-server-url-vapp-18 into main
    effc33e Merge remote-tracking branch 'origin/main' into feat/settings-server-url-vapp-18
    c919e56 Merge pull request 'VAPP-17: Plugin management: add, install, enable/disable, remove, reload' (#30) from feat/plugin-management-vapp-17 into main
    5e56fae Merge remote-tracking branch 'origin/main' into feat/plugin-management-vapp-17
    ecf8027 Merge pull request 'VAPP-23: Run one-shot commands on a device from the detail page' (#28) from feat/run-device-command-vapp-23 into main
    4803b0f Merge remote-tracking branch 'origin/main' into feat/run-device-command-vapp-23
    0b26e92 Merge pull request 'VAPP-20: Security settings: list and remove passkeys, TOTP backup codes' (#25) from feat/security-passkeys-backup-codes-vapp-20 into main
    b8c1745 Merge remote-tracking branch 'origin/main' into feat/security-passkeys-backup-codes-vapp-20
    301e7d9 Merge pull request 'VAPP-25: User groups: list, create, edit, delete, manage members' (#29) from feat/user-groups-vapp-25 into main
    63ca7ac Merge branch 'main' into feat/user-groups-vapp-25
    7e2e405 Merge pull request 'VAPP-24: Dashboard: replace hardcoded Alerts KPI with real error count' (#27) from feat/dashboard-alerts-kpi-vapp-24 into main
    b134279 Merge branch 'main' into feat/dashboard-alerts-kpi-vapp-24
    c42bf2b Merge pull request 'VAPP-21: User editing: real name, email, site admin toggle, clear 2FA, force password change' (#26) from feat/user-editing-vapp-21 into main
    40ba411 Merge branch 'main' into feat/user-editing-vapp-21
    4b2d777 Merge pull request 'VAPP-22: Device notes: view and edit per-device notes on the detail page' (#24) from feat/device-notes-vapp-22 into main
    4f33f85 Merge branch 'main' into feat/device-notes-vapp-22
    e2152e0 Merge pull request 'VAPP-19: Settings Diagnostics: wire log level to traceinfo and add server errors viewer' (#23) from feat/settings-diagnostics-vapp-19 into main
    592e96d Merge branch 'main' into feat/settings-diagnostics-vapp-19
    d05519d Merge pull request 'VAPP-26: Server administration page: version, config view, backup, server console' (#22) from feat/server-admin-page-vapp-26 into main
    3fc720e feat(settings): read-only server URL in Settings and statusbar
    80ae541 feat(plugins): manage full plugin lifecycle from the Plugins page
    c7e4ab0 feat(users): user-group management (list, CRUD, members)
    2f1693f feat(devices): run one-shot commands from the detail page
    a81733e feat(dashboard): derive Alerts KPI from real error events
    42b3336 feat(users): edit profile, site-admin, clear 2FA, force password change
    44b352c feat(security): list/remove passkeys and mint TOTP backup codes
    0651548 feat(device-detail): view and edit per-device notes
    c1ad819 feat(settings): wire diagnostics to traceinfo and server errors
    7742cda feat(admin): server administration page
    93e61e4 Merge pull request 'VAPP-12: Logout and own-password change' (#18) from feat/logout-password-change-vapp-12 into main
    820cf23 Merge remote-tracking branch 'origin/main' into feat/logout-password-change-vapp-12
    5156dd3 Merge pull request 'VAPP-10: Mesh management: create, edit, delete' (#19) from feat/mesh-management-vapp-10 into main
    ff945ca Merge branch 'main' into feat/mesh-management-vapp-10
    0b7ea81 Merge pull request 'VAPP-14: Live updates: persistent control connection with server push' (#20) from feat/live-control-connection-vapp-14 into main
    dc39a1c Merge branch 'main' into feat/live-control-connection-vapp-14
    c47cdb4 Merge pull request 'chore(build): bump rust-builder-glibc to v1.0.1' (#21) from chore/bump-rust-builder-glibc-v1.0.1 into main
    4eccd89 chore(build): bump rust-builder-glibc to v1.0.1
    0516278 feat(live): persistent control connection with server push
    289751b feat(meshes): create, edit, delete device groups (VAPP-10)
    7309f0a feat(auth): logout and own-password change
    10a30d5 Merge pull request 'VAPP-13: 2FA enrollment UI: TOTP and WebAuthn passkeys' (#11) from feat/2fa-enrollment-ui-vapp-13 into main
    2aaf111 Merge remote-tracking branch 'origin/main' into feat/2fa-enrollment-ui-vapp-13
    a133e7c Merge pull request 'VAPP-5: Browser terminal for devices over the agent relay' (#12) from feat/browser-terminal-vapp-5 into main
    1609cb9 Merge branch 'main' into feat/browser-terminal-vapp-5
    946d0f4 Merge pull request 'feat(lists): wire dead list controls (VAPP-15)' (#13) from feat/wire-list-controls into main
    ea19589 Merge branch 'main' into feat/wire-list-controls
    07278e2 Merge pull request 'VAPP-16: Agent install flow behind "+ New Device"' (#14) from feat/new-device-install-flow-vapp-16 into main
    f7d1a6d fix(new-device): emit ServerURL/GroupID so the sealed config boots
    0beac0b Merge branch 'main' into feat/new-device-install-flow-vapp-16
    a4de0e7 Merge pull request 'feat(device-detail): rename, delete, move devices (VAPP-9)' (#15) from feat/device-management-actions into main
    e431a84 Merge branch 'main' into feat/device-management-actions
    e97c777 Merge pull request 'feat(users): admin user lifecycle (VAPP-11)' (#16) from feat/user-management into main
    5248394 Merge branch 'main' into feat/user-management
    31d0e9a Merge pull request 'feat(device-detail): wire device power actions (VAPP-8)' (#17) from feat/device-power-actions into main
    5eec8d6 feat(device-detail): wire device power actions
    87d8913 feat(users): admin user lifecycle (create, reset, mesh, remove)
    f77d661 feat(device-detail): rename, delete, and move devices from the UI
    24ffccf feat(new-device): agent install flow behind "+ New Device"
    424b15b feat(lists): wire device/event filters, search, CSV export
    123b446 feat(device-detail): browser terminal over the agent relay
    93f7c4b feat(settings): 2FA enrollment UI for TOTP and WebAuthn passkeys
    990b0f2 Merge pull request 'chore: Sync .gitignore' (#10) from chore/sync-gitignore into main
    5765cee chore: Sync .gitignore
    8f71481 Merge pull request 'feat(device-detail): wire tabs to live per-device data' (#9) from feat/device-detail-tabs into main
    6f5d034 feat(device-detail): wire tabs to live per-device data
    d4d6958 Merge pull request 'feat(server-fns): wire pages to live vervain-server data' (#8) from feat/wire-live-server-data into main
    795c9fd feat(server-fns): wire pages to live vervain-server data
    6ddb5ac Merge pull request 'VAPP-4: Replace router debug route dump with friendly 404 page for unmatched paths' (#7) from feat/not-found-page-vapp-4 into main
    153a0d7 feat(router): friendly 404 page for unmatched paths
    e413130 Merge pull request 'VAPP-3: /setup onboarding drives first-user creation against VERVAIN_SERVER_URL' (#6) from feat/setup-onboarding-vapp-3 into main
    459ec86 feat(setup): /setup onboarding for first-user creation
    66f6fdb Merge pull request 'fix(ci): point web image ENTRYPOINT at /app/server' (#5) from fix/web-entrypoint-server-binary into main
    1f22450 fix(ci): point web image ENTRYPOINT at /app/server
    1b97d5f Merge pull request 'fix(ui): wire the Density toggle into the layout' (#4) from iterate/make-functional into main
    2893a5a Merge branch 'main' into iterate/make-functional
    8af456b Merge pull request 'fix(ci): generate release notes from commits since previous tag' (#3) from fix/release-notes-since-prev-tag into main
    3e135a0 fix(ci): generate release notes from commits since previous tag
    ab289e8 fix(ui): wire the Density toggle into the layout
    7a4946f Merge pull request 'feat(justfile): scaffold fj-driven create-release + group attrs (DEV-331)' (#2) from feat/justfile-fj-pr-create-DEV-331 into main
    116b46f feat(justfile): scaffold fj-driven create-release + group attrs (DEV-331)
    a5d7693 Merge pull request 'ci: build Tailwind CSS in Check workflow so asset! resolves (VAPP-1)' (#1) from fix/ci-tailwind-build into main
    96c4d74 ci: build Tailwind CSS in Check workflow so asset! resolves
    15f8663 rename: binary -> vervain-app, image -> vervain-web
    4febccd ci: add Check + desktop + OCI workflows per governance
    b70fe70 feat: initial Dioxus 0.7 console skeleton

    Downloads