DevGate is a local-first Developer Context Launcher. It discovers recent projects and development contexts, normalizes them into one model, ranks them, and opens the selected context with an editor, terminal, file manager, or custom command.
The MVP is core-first: the CLI and desktop launcher both reuse the same Rust core for discovery, diagnostics, ranking, cache refresh, and action execution.
Implemented now:
- Rust workspace with
devgate-coreand CLI binarydevgate. devgate list --jsondevgate doctordevgate refreshdevgate open <id> [--action code|cursor|terminal|file-manager]- Code-like recent provider for VS Code, Cursor, Kiro, VSCodium, and Code OSS on Linux.
- Filesystem scanner provider.
- Manual TOML config provider.
- SQLite local cache.
- Simple fuzzy ranking and path/URI deduplication.
- Basic Tauri 2 desktop launcher window.
Not in the MVP:
- Cloud sync.
- Plugin marketplace.
- AI agent orchestration.
- Complex settings UI.
crates/devgate-core Core models, config, providers, ranking, cache, actions
crates/devgate-cli Rust CLI binary named devgate
apps/desktop Tauri 2 + React desktop launcher
frontend Frontend notes and shared UI boundary
docs Project documentation
cargo fmt --all -- --check
cargo test
cargo run -p devgate-cli -- list --json
cargo run -p devgate-cli -- doctorDesktop launcher:
cd apps/desktop
npm install
npm run build
npm run tauri devThe desktop app exposes a searchable launcher window with provider diagnostics, refresh, and open action buttons. Its Rust commands call into devgate-core; the React UI does not duplicate provider discovery logic.
On Linux, DevGate reads:
~/.config/devgate/config.toml
If the file is missing, DevGate uses safe defaults. Example:
[app]
hotkey = "Super+Space"
default_action = "code"
[providers.filesystem]
enabled = true
roots = ["~/Workspace", "~/Projects"]
max_depth = 5
[providers.code_like]
enabled = true
[providers.manual]
enabled = true
[editors.code]
command = "code"
args = ["$path"]
[editors.cursor]
command = "cursor"
args = ["$path"]
[terminal]
command = "gnome-terminal"
args = ["--working-directory=$path"]
[file_manager]
command = "xdg-open"
args = ["$path"]
[[manual.contexts]]
title = "DevGate"
kind = "project"
path = "~/Workspace/sean2077/devgate"
tags = ["launcher", "rust"]The code-like provider checks Linux config directories for:
- VS Code
- Cursor
- Kiro
- VSCodium
- Code OSS
For each editor, it checks both:
User/globalStorage/state.vscdbUser/sharedStorage/state.vscdb
It reads SQLite key history.recentlyOpenedPathsList and supports URI entries represented as plain strings, { external = ... }, and { scheme, authority, path } objects. Missing databases are ignored; unreadable databases and parse errors appear in devgate doctor.
The filesystem provider scans configured roots and detects projects with markers such as:
.git.vscode*.code-workspacepackage.jsonpyproject.tomlCargo.tomlgo.modCMakeLists.txtcompile_commands.jsonpackage.xml
On Linux, the default root is ~/Workspace when it exists.
Manual contexts are configured in TOML under [[manual.contexts]]. If no actions are specified, DevGate attaches the configured editor, terminal, and file manager actions for path-backed contexts.
devgate refresh rebuilds a local SQLite cache at:
~/.cache/devgate/cache.sqlite3
The cache stores discovered context identity and metadata, but executable actions are intentionally stripped from cached rows. devgate list and devgate open may read cached metadata; actions are rehydrated from the current trusted config before they are displayed or executed, so local cache edits cannot become command execution policy.