Skip to content

Repository files navigation

Xe Launcher

A plugin-based desktop launcher built with Tauri. Part of the Xenon project. Compile exactly the tools you need with 0.9s incremental builds.

What is this?

A minimal desktop shell that hosts functionality through plugins. Instead of building monolithic apps, create focused plugins that compile into a custom launcher. Think of it as a bootloader for desktop tools.

Key features:

  • ⚡ 0.9s incremental builds
  • 🔌 Plugin-based architecture (compile only what you need)
  • 🤖 Built-in MCP server for AI agent integration
  • 📦 Native tool support via sidecars
  • 🎯 ~5MB base size, grows only with active plugins

About

Xe Launcher is part of the Xenon project ecosystem, developed by the Agent54 organization. It provides a modern, plugin-based approach to desktop tools and automation.

Repository: https://github.com/agent54/xe-launcher

Quick Start

# Prerequisites: Bun + Rust
bun install

# For fresh checkouts only: sync plugin binaries
bun manage-sidecars sync

# Run with specific plugins (fast builds)
bun dev:settings      # Just settings plugin
bun dev:none          # No plugins (minimal)
bun dev:tauri         # All plugins

# Create a new plugin (prompts for JS/TS)
bun create-plugin my-tool

Project Structure

├── apps/desktop/          # Tauri shell
├── plugins/               # Plugin modules
│   ├── registry.json      # Plugin manifest (source of truth)
│   └── tauri-plugin-*/    # Individual plugins
└── docs/                  # Documentation

Core Concepts

  • Plugins are Cargo features - Conditional compilation, not dynamic loading
  • Registry drives everything - One JSON file controls the entire system
  • Three-tier control - Registry → Build → Runtime

Documentation

Available Plugins

Core Plugins

Plugin Description Default Enabled Sidecar
settings Manage application settings ✓ -
system-info Display system information ✓ -

Tool Plugins

Plugin Description Default Enabled Sidecar
🍞 bun JavaScript runtime integration with Bun support ✓ ✓
☁️ cloudflare Manage Workers, KV, D1, R2, and DNS from the XE Launcher ✓ ✓
curl Make HTTP requests using curl ✓ ✓
🦕 deno Run Deno scripts with comprehensive permission management and developer tools ✓ ✓
iwa-tools Generate keys, create, bundle, and verify Isolated Web Apps (IWAs) ✓ ✓
mouse-trap Monitor mouse enter/leave events in screen regions for creating invisible triggers and hot corners ✓ ✓
🦙 ollama Local LLM integration with Ollama - chat, generate text, and manage models ✓ ✓
podman Container management with Podman ✓ ✓
🔌 usb-info View connected USB devices with vendor ID, product ID, and connection status ✓ ✓
⚡ workerd Cloudflare Workers runtime integration for local edge computing development ✓ ✓

Experimental Plugins

Plugin Description Default Enabled Sidecar
chrome-manager Manage Chrome browser instances and Isolated Web Apps - -

Development

# Plugin management
bun plugin:list               # Show all plugins
bun plugin:enable my-tool     # Enable in registry
bun manage-sidecars sync      # Sync native binaries

# Building
bun run build:tauri           # Production build

Releases

Creating a Release

We use a release script to automate version bumping and tagging:

# Bump version and create tag
./release.sh 0.2.11

# This will:
# 1. Update version in all config files
# 2. Commit the changes
# 3. Create a git tag
# 4. Push to GitHub (triggers release workflow)

The GitHub Actions workflow automatically:

  • Builds for all platforms (macOS, Windows, Linux)
  • Creates a draft release with artifacts
  • Generates update manifests for auto-updates

Publishing a Release

After the workflow completes (~10-15 minutes):

# Publish the draft release
gh release edit v0.2.11 --draft=false --latest

Auto-Updates

The app checks for updates automatically. Users can:

  1. Check for updates in Settings → Updates
  2. Download and install with one click
  3. App restarts automatically (or prompts to restart)

Update endpoint: https://github.com/Agent54/xe-launcher/releases/latest/download/latest.json

Why This Approach?

Traditional plugin systems require choosing between dynamic loading (security risks, performance overhead) or static compilation (inflexible). We chose a third way: conditional compilation with runtime control.

Result: The security and performance of static compilation with the flexibility of dynamic systems.


Built with Tauri + SvelteKit + Bun

About

v2 using svelte and with enhanced plugin management and mcp

Resources

Contributing

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages