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-bin
Download the latest .deb from Releases.
sudo dpkg -i vanta_4.1.0_amd64.deb
Download the latest .rpm from Releases.
sudo rpm -i vanta-4.1.0-1.x86_64.rpm
open zen then open foot).open settings then open store).intent_workflow command contract integration in launcher command handling.search_v3, get_suggestions_v3) with legacy exec fallback.schema_version) and automatic local migration.run_contract_migration).exec remains available during the v3 transition window.nucleo-matcher.--clipboard launch and Super+V open the clipboard view.2^10 + 5 to copy the result.~/.config/vanta/themes/.git clone https://github.com/Misiix9/vanta.git
cd vanta
npm install
cargo tauri dev
Flags:
--hidden or VANTA_HIDDEN=1: start minimized/hidden.--clipboard or -c: open directly to clipboard mode on launch.Alt+Space (toggle), Super+V (clipboard).Vanta 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:validate manifest lintingnpm run extensions:harness extension bundle/command harness checksvanta-extensions/compatibility-matrix.json compatibility + deprecation lifecycle contractvanta-extensions/ratings.json shared 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:
~/.config/vanta/extensions/your-script/manifest.json with your command metadatadist/index.js (or write the IIFE directly)search_v3 and get_suggestions_v3.command.kind when present, otherwise fall back to legacy exec.schema_version is required for new manifests; legacy manifests are auto-migrated to current schema on scan.schema_version and workflows.schema_version are maintained automatically on load or by running run_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 lookConfiguration lives at ~/.config/vanta/config.json, created automatically on first run.
{
"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 |