The project's README from github.com/namannn04/Veronica. As one markdown file: README.md.
A native desktop control center for Ubuntu. Veronica replaces a shelf of single-purpose utilities with one application.
Free and open source under the GPL-3.0. Every feature is in the one app. No licence key, no account, no paid tier.
Veronica is a port of Edith, a macOS control center, to Linux. It keeps Edith's models — the capability map, the extension catalogue, the rate-limit maths, the usage schema — and reimplements the platform layer against Linux services. The usage collector is shared verbatim, so the numbers are identical on both platforms.
Requires Ubuntu 24.04 or later on x86_64, with GNOME Shell 46 through 50.
See docs/RUNNING.md for how to run it, use the notch, and troubleshoot.
The Debian package is the recommended route on Ubuntu. This command downloads
the latest GitHub release, verifies its published SHA-256 checksum, and installs
it through apt (which may ask for your sudo password):
curl -fsSL https://namannn04.github.io/Veronica/install | bash
It also turns on the GNOME Shell extension and opens Veronica. GNOME only loads new extensions at login, so log out and back in once to see the notch. Running the same command again later updates to the newest release.
See screenshots, shortcuts and download choices on the Veronica website.
To install a package you downloaded yourself instead:
sudo apt install ./Veronica_0.1.19_amd64.deb
That installs the app, the vr command line tool, the desktop entry, the
AppStream metadata and the tray icon, and pulls in jq, which the usage
collector needs, plus curl for the on-demand update check.
An AppImage is also published for other distributions:
chmod +x Veronica_0.1.19_amd64.AppImage
./Veronica_0.1.19_amd64.AppImage
Ubuntu 24.04 and later no longer ship the FUSE 2 runtime an AppImage needs to
mount itself. Either install it once with sudo apt install libfuse2t64, or run
the image without it:
./Veronica_0.1.19_amd64.AppImage --appimage-extract
./squashfs-root/AppRun
The AppImage is the desktop app only. It does not install the vr command or
the GNOME Shell extension, so the compact top-bar notch, clipboard capture,
Focus Dim, keystroke display and paste-in-place are unavailable. It also relies
on host tools such as jq and Bun or Node for usage collection. Use the Debian
package for Veronica's complete Ubuntu integration.
Veronica is also published as a Flatpak from its own signed repository:
flatpak install --user https://namannn04.github.io/Veronica/flatpak/veronica.flatpakref
flatpak run io.github.namannn04.Veronica
flatpak update picks up new releases from then on. Each release also attaches
Veronica_<version>_x86_64.flatpak for offline installs
(flatpak install --user ./Veronica_0.1.19_x86_64.flatpak).
Veronica controls the computer it runs on, so the Flatpak is not a confined
app: it has access to your home directory and runs PipeWire, GNOME Shell, apt,
ssh and your terminals on the host through flatpak-spawn --host. On first
launch it copies its GNOME Shell extension into
~/.local/share/gnome-shell/extensions; log out and back in once, then enable
it from Veronica. The process list only shows processes inside the sandbox.
Agent usage
Alerts
Quinjet
vr quinjet open prints the exact command for a terminal you already have.
Quinjet stays the owner of the review.Site Audit
robots.txt, then /sitemap.xml, then the page you gave
it, following a sitemap index into its children.og:image and forty read differently.Herdr
This computer
Calendar
Media
~/Music is indexed without uploading it,
searchable by title, artist or album, and plays directly with queue, seeking,
volume and hardware media-key support.Machines
ssh, so your
config aliases, keys, agent and jump hosts apply unchanged, and Veronica never
handles a key or a passphrase.~/.ssh/config are offered as one-click additions.Global shortcuts
Ctrl+Alt+V opens Veronica, Ctrl+Alt+B opens Clipboard, Ctrl+Alt+M
toggles the microphone, Ctrl+Alt+P picks a colour, Ctrl+Alt+E opens the
emoji picker, and Ctrl+Alt+K enters keyboard-cleaning mode. GNOME Shell
performs compositor-only actions.Clipboard
Color Picker
rgb(), rgba(), hsl() and a GdkRGBA
literal, from one pick. Choose which one lands on the clipboard.Emoji Picker
Keystroke Highlight
Audio
Database
KEYS *
is never sent; Redis is scanned.query never writes — the check recognises the verbs that read and
refuses everything else, so a statement type nobody thought of fails closed.
Comments cannot hide a second statement.vr database mcp offers exactly two read-only
tools. An agent learns which databases you have and what each can do; it never
learns a host, a username or a credential.App Maintenance
pkexec, so the desktop's own dialog asks you to authenticate;
Veronica never wraps anything in sudo on your behalf.Disk cleaner
node_modules, target, .venv and the rest inside any
folder you point at.Presenter
Focus Dim
Appearance
appearance setting themes the
desktop window and the GNOME shelf, so the two never disagree, and anything
Veronica launches with a theme of its own gets the light-or-dark answer
rather than the theme's name.#000 page for OLED panels.Getting around
Top bar
Media
Notch
Installing Veronica installs vr, which reaches the same operations as the UI.
vr diagnose the resolved session, capabilities and extensions
vr usage summary the same totals the dashboard shows
vr usage projects --chats spend by project, with its chats
vr usage calendar --days 30 the spend calendar in the terminal
vr usage refresh --progress run the collector
vr usage limits rate-limit gauges, with pace and countdowns
vr usage export --card activity branded PNG cards, safe to post
vr media status what is playing, on any MPRIS player
vr media toggle play or pause; also next, previous, stop
vr media players every player registered on the session bus
vr calendar list your agenda, grouped by day, with join links
vr calendar next the next event and how long until it starts
vr machines ls the fleet, with live CPU, memory and disk
vr machines stats <id> one machine's vital signs in full
vr machines add <ssh-host> add a machine; discover finds config aliases
vr machines containers <id> Docker or Podman containers; logs tails one
vr machines power <id> restart --confirm restart or shut down a machine
vr machines wake <id> a Wake-on-LAN packet, for a machine that is off
vr clipboard list the clipboard history, searchable
vr clipboard get <id> one entry's full text, for piping onward
vr usage alerts what the notifier would post right now, as a dry run
vr alerts test post one banner, to check notifications arrive
vr alerts state what the notifier is comparing against
vr color pick sample a pixel; copies and records it
vr color list the swatch history
vr color show <id> one swatch in every format
vr presenter status the blur state, and what detection sees
vr presenter start blur now; also stop, enable, disable, dismiss
vr focus-dim on dim behind the focused window; also off, intensity
vr keystroke-highlight on show key presses on screen; also off, duration
vr emoji list shrug search the catalogue; copy puts one on the clipboard
vr emoji recents the emoji you reach for most
vr system audio list the per-application mixer, with volumes
vr system bluetooth adapters and devices, with their batteries
vr system ps running processes, by CPU or memory
vr power lid-awake on --for 30m keep running with the lid shut for 30 minutes
vr herdr board the live agent board, in Edith's lanes
vr quinjet projects Quinjet's review workspaces; open prints the command
vr audit site example.com crawl a sitemap and check every page's metadata
vr companion list your notes and voice memos, searchable
vr media library the local music library under ~/Music
vr maintenance updates what apt, snap and flatpak could update
vr maintenance remove <pkg> what removing it would take with it
vr database connections your saved databases; add takes a password on stdin
vr database query <c> "…" run a statement that reads; a write is refused
vr database mutations preview what a change would do, and a one-shot token
vr database mcp two read-only tools for an agent, over stdio
vr cleaner scan what could be reclaimed, per category
vr cleaner clean --yes move it to the Trash; --root sweeps a project tree
vr backup export back up settings and persistent app data
vr backup inspect <file> verify and describe an archive without restoring
vr backup import <file> --confirm validate and restore an archive atomically
vr extensions what can run on this session, and why not
vr tools the command line programs the extensions need
vr tools install <tool> fetch one, when there is a route Veronica can drive
vr config set <key> <value> every setting the UI exposes
Every read command takes --json, stdout is exactly one document, logs go to
stderr, and exit codes are reliable, so an agent can drive Veronica headlessly.
Veronica resolves each of its 31 capabilities against the running session and
reports the result, with the service it talks to, on the Diagnostics page and in
vr diagnose. Nothing is silently disabled.
Compositor-owned features ask for permission or the GNOME extension when the session requires it. Local music, keyboard cleaning and Companion all have native Linux implementations and no longer need external integration.
A note on the calendar: GNOME's calendar server expands recurring events but does not pass an event's location or description through, so Veronica reads those per event from Evolution Data Server to recover join links. That costs one D-Bus call per event, which is why the notch's agenda skips it and the Calendar page does not.
Clipboard history and Focus Dim were restricted until the shell extension existed. Capture and dimming now happen inside the compositor, which is the only thing a Wayland session lets read the selection or place one window behind another. Veronica reports a capability it has not built as needing integration rather than as available, so the Extensions page never shows "Ready" for a switch that would do nothing.
Companion is local-first: notes and searchable voice-memo metadata are stored under the XDG data directory, recordings use PipeWire, and the complete folder is included in Veronica backup/restore. It needs no Docker service or account.
Keystroke Highlight, the emoji picker's insert-in-place and paste-in-place all run through the shell extension for the same reason clipboard capture and dimming do: on Wayland only the compositor may observe or synthesise input for a window it does not own. Each says so on the Diagnostics page rather than appearing to work and doing nothing.
Everything else has a working route: PipeWire for audio, the per-application mixer and mic mute, BlueZ for Bluetooth, logind for prevent-sleep and lid-awake, MPRIS for media, Evolution Data Server for calendar, and the desktop portal for colour picking, camera, global shortcuts and screen-share detection.
Usage history never leaves this computer. Provider rate-limit checks go straight
from this machine to the provider, using the OAuth token your agent CLI already
holds, and nothing is proxied through Veronica. There is no Veronica account and
no telemetry. Network access otherwise happens only for features that inherently
need it or that you explicitly run: checking GitHub for an update, auditing a
website, connecting to a remote machine or database, and downloading a tool you
asked Veronica to install. Background provider checks run only when their alert
switches are enabled.
Veronica reads your local agent history from ~/.claude, ~/.codex,
~/.cursor and ~/.commandcode, and writes its own state under the XDG
directories, which vr diagnose prints.
Needs Rust, Bun and the Tauri system dependencies:
sudo apt install libwebkit2gtk-4.1-dev libgtk-3-dev librsvg2-dev \
libayatana-appindicator3-dev libjavascriptcoregtk-4.1-dev \
libsoup-3.0-dev libxdo-dev patchelf
cargo test --workspace
cd apps/desktop && bun install && bunx tauri build --bundles deb
See docs/ARCHITECTURE.md for the crate layout, the capability model, and why this is a reimplementation rather than a Swift port.
Veronica is free software licensed under the GNU General Public License v3.0, matching Edith, from which its models are derived.