A hyper-fast, extensible application launcher and command palette for Wayland. (Spotlight alternative)
Traditional launchers are often slow or clunky. Vanta is a fast, Wayland-native command palette built with Rust and Svelte. It starts instantly, stays out of your way, and is fully themeable with plain CSS. With the Extension SDK v2 engine, anyone can build custom commands and full UI screens using TypeScript and Svelte.
yay -S vanta-binDownload the latest .deb from Releases.
sudo dpkg -i vanta_5.21.0_amd64.debDownload the latest .rpm from Releases.
sudo rpm -i vanta-5.21.0-1.x86_64.rpm- Added a performance-first visual runtime with automatic tiering (
full,balanced,degraded) to keep the UI responsive under heavier load. - Added graceful degradation rules for low-end or battery-constrained systems, reducing blur/animation overhead while preserving usability.
- Added stricter CI visual hotspot budgets that block
transition: allregressions and excessive layout-affecting dynamic style directives.
- Added adaptive appearance profiles with environment-aware controls for lighting, density, performance tier, and accessibility presets.
- Added deterministic runtime adaptation that safely adjusts blur, opacity, radius, spacing, text scale, and motion without unpredictable drift.
- Added strict compatibility guards plus migration-safe defaults so profile-specific styling remains stable across restarts and imports.
- Fast fuzzy search powered by Rust +
nucleo-matcher. - Extension SDK v2: Build custom commands and full UI screens with TypeScript/Svelte.
- Vanta Store (v2.1): Browse and install extensions from the built-in store. Search "store" or "install" in the launcher.
- 10 Default Extensions: Weather, Smart Calculator, Color Picker, Process Manager, Network Test, Timer, System Info, Spotify, Clipboard Tools, and Password Generator.
- Auto-refresh (v2.2): Settings changes, new app installations, and new extensions take effect immediately without restarting.
- Commands section: Sleep, Lock, Shutdown, Restart, Log Out, and Go to BIOS available out of the box.
- Clipboard-first:
--clipboardlaunch andSuper+Vopen the clipboard view. - File search with filters: Include/exclude globs, extension allowlist, and type filters.
- Window switcher: Grouped by app/class, ordered by recency, with focus and close actions.
- Math & calculator: Type
2^10 + 5to copy the result. - Fully themeable: Everything is CSS in
~/.config/vanta/themes/. - Workflow macros: Chain system commands and extension actions into automated sequences.
git clone https://github.com/Misiix9/vanta.git
cd vanta
npm install
cargo tauri devFlags:
--hiddenorVANTA_HIDDEN=1: start minimized/hidden.--clipboardor-c: open directly to clipboard mode on launch.- Hotkeys:
Alt+Space(toggle),Super+V(clipboard).
Run these before opening a release PR:
cargo test --manifest-path src-tauri/Cargo.toml
npm run check
npm run check:visual-budgets
npm run extensions:validateVanta Extension SDK v2 replaces the old JSON script system with a full Raycast-style extension engine. Extensions live in ~/.config/vanta/extensions/ and can declare multiple commands with custom UI.
SDK v2 authoring toolkit (in this repo):
vanta-extensions/templates/view-template/starter extensionnpm run extensions:validatemanifest lintingnpm run extensions:harnessextension bundle/command harness checksvanta-extensions/compatibility-matrix.jsoncompatibility + deprecation lifecycle contractvanta-extensions/ratings.jsonshared rating snapshot consumed by Vanta Store
~/.config/vanta/extensions/my-extension/
manifest.json # Metadata, commands, permissions
dist/
index.js # Compiled IIFE bundle
style.css # Optional scoped styles
{
"name": "my-extension",
"title": "My Extension",
"schema_version": 1,
"version": "1.0.0",
"description": "What this extension does",
"author": "your-name",
"icon": "<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2'><polygon points='12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2'/></svg>",
"permissions": ["Network", "Shell"],
"commands": [
{
"name": "quick-action",
"title": "Quick Action",
"subtitle": "Does something fast",
"mode": "no-view",
"icon": "fa-solid fa-bolt"
},
{
"name": "browse-items",
"title": "Browse Items",
"subtitle": "Opens a searchable list",
"mode": "view",
"icon": "fa-solid fa-list"
}
]
}no-view: Runs a handler function (e.g., toggle playback, copy text), shows a toast, and optionally closes the window.view: Mounts a Svelte component inside the extension host for full custom screen rendering.
Extensions compile to IIFE bundles that register via window.__vanta_host:
(function(vanta) {
const sdk = window.__vanta_sdk;
vanta.registerExtension('my-extension', {
commands: {
'quick-action': {
handler: async (api) => {
api.toast({ title: 'Done!', type: 'success' });
await api.closeMainWindow();
}
},
'browse-items': {
component: sdk.List // Use a pre-built SDK component
}
}
});
})(window.__vanta_host);Extensions can use pre-built Svelte components via window.__vanta_sdk:
| Component | Description |
|---|---|
sdk.List |
Searchable, keyboard-navigable list with sections |
sdk.Form |
Form with text, password, dropdown, checkbox, and date fields |
sdk.Grid |
Visual grid layout with images/icons |
sdk.Detail |
Detail view with content and metadata sidebar |
sdk.ActionPanel |
Action panel overlay with keyboard shortcuts |
Every command handler and view component receives a VantaAPI object:
api.navigation.push(component, props) // Push a new view
api.navigation.pop() // Go back
api.clipboard.copy(text) // Copy to clipboard
api.network.fetch(url, { method }) // HTTP request (proxied through Rust)
api.shell.execute(command, args) // Run a shell command
api.storage.get(key) // Read from per-extension storage
api.storage.set(key, value) // Write to per-extension storage
api.toast({ title, message, type }) // Show a toast
api.closeMainWindow() // Hide the launcher
api.environment.extensionName // Current extension name// vite.config.ts
import { defineConfig } from 'vite';
import { svelte } from '@sveltejs/vite-plugin-svelte';
export default defineConfig({
plugins: [svelte()],
build: {
lib: {
entry: 'src/index.ts',
formats: ['iife'],
name: 'MyExtension',
fileName: () => 'index.js',
},
outDir: 'dist',
rollupOptions: {
external: ['@vanta/sdk'],
output: { globals: { '@vanta/sdk': 'window.__vanta_sdk' } },
},
},
});The v1.x JSON script system (~/.config/vanta/scripts/) has been fully removed. To migrate:
- Create a new extension directory in
~/.config/vanta/extensions/your-script/ - Write a
manifest.jsonwith your command metadata - Convert your script logic to a JavaScript handler
- Build to
dist/index.js(or write the IIFE directly)
- Search APIs: prefer
search_v3andget_suggestions_v3. - Result/action execution: use typed
command.kindwhen present, otherwise fall back to legacyexec. - Extension manifests:
schema_versionis required for new manifests; legacy manifests are auto-migrated to current schema on scan. - Config/workflows:
schema_versionandworkflows.schema_versionare maintained automatically on load or by runningrun_contract_migration.
All styling lives in ~/.config/vanta/themes/. A default theme is seeded on first launch.
Key CSS variables:
--vanta-width/--vanta-height: window size--vanta-accent: accent color--vanta-blur,--vanta-radius,--vanta-opacity: glass look
Configuration lives at ~/.config/vanta/config.json, created automatically on first run.
View Default Configuration
{
"schema_version": 4,
"general": {
"hotkey": "Alt+Space",
"max_results": 8,
"launch_on_login": false
},
"appearance": {
"blur_radius": 40,
"opacity": 0.85,
"border_radius": 24,
"theme": "default",
"colors": {
"background": "#000000",
"surface": "#0a0a0a",
"accent": "#ffffff",
"accent_glow": "rgba(255,255,255,0.1)",
"text_primary": "#f5f5f5",
"text_secondary": "#888888",
"border": "rgba(255,255,255,0.05)"
}
},
"extensions": {
"directory": "~/.config/vanta/extensions",
"dev_mode": false
},
"files": {
"include_hidden": false,
"max_depth": 3,
"file_manager": "default",
"file_editor": "default",
"open_docs_in_manager": false,
"include_globs": [],
"exclude_globs": [],
"allowed_extensions": [],
"type_filter": "any",
"indexed_at": null
},
"workflows": {
"schema_version": 1,
"macros": []
}
}| Key | Action |
|---|---|
Alt + Space |
Toggle window |
Super + V |
Open clipboard history |
Ctrl + , |
Open settings |
Esc |
Close window / Back (in extensions) |
Enter |
Launch / Execute |
Arrow Up / Down |
Navigate results |
Tab |
Autocomplete / Next result |