{"id":49257898,"url":"https://github.com/leapmux/leapmux","last_synced_at":"2026-06-08T03:00:54.052Z","repository":{"id":337537989,"uuid":"1151167922","full_name":"leapmux/leapmux","owner":"leapmux","description":"AI Coding Agent Multiplexer","archived":false,"fork":false,"pushed_at":"2026-05-31T18:08:47.000Z","size":12912,"stargazers_count":45,"open_issues_count":0,"forks_count":7,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-05-31T20:04:00.269Z","etag":null,"topics":["acp","ai-agent","ai-agent-tools","ai-agents","claude-code","codex","copilot","copilot-cli","cursor","cursor-ai","cursor-cli","gemini-cli","goose","kilo","kilo-code","kilocode","multi-agent","opencode","opencode-ai","pi-coding-agent"],"latest_commit_sha":null,"homepage":"https://leapmux.dev","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/leapmux.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":"NOTICE.md","maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-02-06T06:07:09.000Z","updated_at":"2026-05-31T13:00:56.000Z","dependencies_parsed_at":null,"dependency_job_id":"a25f6eb1-253e-4abc-b772-ce9810f716e2","html_url":"https://github.com/leapmux/leapmux","commit_stats":null,"previous_names":["leapmux/leapmux"],"tags_count":39,"template":false,"template_full_name":null,"purl":"pkg:github/leapmux/leapmux","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/leapmux%2Fleapmux","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/leapmux%2Fleapmux/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/leapmux%2Fleapmux/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/leapmux%2Fleapmux/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/leapmux","download_url":"https://codeload.github.com/leapmux/leapmux/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/leapmux%2Fleapmux/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34046003,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-08T02:00:07.615Z","response_time":111,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["acp","ai-agent","ai-agent-tools","ai-agents","claude-code","codex","copilot","copilot-cli","cursor","cursor-ai","cursor-cli","gemini-cli","goose","kilo","kilo-code","kilocode","multi-agent","opencode","opencode-ai","pi-coding-agent"],"created_at":"2026-04-25T05:03:48.227Z","updated_at":"2026-06-08T03:00:54.044Z","avatar_url":"https://github.com/leapmux.png","language":"TypeScript","funding_links":[],"categories":["Miscellaneous","Used By"],"sub_categories":["Manual Install"],"readme":"\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"icons/leapmux-icon.svg\" alt=\"LeapMux\" width=\"128\" height=\"128\"\u003e\n\u003c/div\u003e\n\n# LeapMux\n\n[![Docs](https://img.shields.io/badge/docs-leapmux.dev-0d9488)](https://leapmux.dev/)\n[![Release](https://img.shields.io/github/v/release/leapmux/leapmux?include_prereleases\u0026label=release)](https://github.com/leapmux/leapmux/releases)\n[![Container](https://img.shields.io/badge/container-ghcr.io%2Fleapmux%2Fleapmux-2496ED?logo=docker\u0026logoColor=white)](https://github.com/leapmux/leapmux/pkgs/container/leapmux)\n[![License: FSL-1.1-ALv2](https://img.shields.io/badge/License-FSL--1.1--ALv2-blue.svg)](LICENSE.md)\n\n\nA terminal works fine for one or two coding agents side-by-side. At three or four — one refactoring, one on tests, one chasing a failing build — shell tabs stop helping: you lose track of which one owns which branch, the agents clobber each other's working tree, and a stray tmux crash or dev-box reboot means re-launching each agent with `--resume` and rebuilding the layout by hand.\n\nLeapMux is a workspace for running several coding agents and shell terminals at once, each in a git worktree and branch you pick, tiled or floating, on a local or remote machine. Sessions stay attached across restarts, and Frontend↔Worker traffic is end-to-end encrypted. Runs in the browser or as a native desktop app.\n\n## Supported Agents\n\n\u003cp\u003e\n  \u003ca href=\"https://claude.com/product/claude-code\"\u003e\u003cimg src=\"icons/agents/claude-code.svg\" width=\"64\" height=\"64\" title=\"Claude Code\"\u003e\u003c/a\u003e\u0026nbsp;\n  \u003ca href=\"https://openai.com/codex/\"\u003e\u003cimg src=\"icons/agents/codex.svg\" width=\"64\" height=\"64\" title=\"Codex\"\u003e\u003c/a\u003e\u0026nbsp;\n  \u003ca href=\"https://geminicli.com/\"\u003e\u003cimg src=\"icons/agents/gemini-cli.svg\" width=\"64\" height=\"64\" title=\"Gemini CLI\"\u003e\u003c/a\u003e\u0026nbsp;\n  \u003ca href=\"https://cursor.com/cli\"\u003e\u003cimg src=\"icons/agents/cursor.svg\" width=\"64\" height=\"64\" title=\"Cursor\"\u003e\u003c/a\u003e\u0026nbsp;\n  \u003ca href=\"https://github.com/features/copilot/cli\"\u003e\u003cimg src=\"icons/agents/github-copilot.svg\" width=\"64\" height=\"64\" title=\"GitHub Copilot\"\u003e\u003c/a\u003e\u0026nbsp;\n  \u003ca href=\"https://opencode.ai/\"\u003e\u003cimg src=\"icons/agents/opencode.svg\" width=\"64\" height=\"64\" title=\"OpenCode\"\u003e\u003c/a\u003e\u0026nbsp;\n  \u003ca href=\"https://pi.dev/\"\u003e\u003cimg src=\"icons/agents/pi.svg\" width=\"64\" height=\"64\" title=\"Pi\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://kilo.ai/cli\"\u003e\u003cimg src=\"icons/agents/kilo.svg\" width=\"64\" height=\"64\" title=\"Kilo\"\u003e\u003c/a\u003e\u0026nbsp;\n  \u003ca href=\"https://block.github.io/goose/\"\u003e\u003cimg src=\"icons/agents/goose.svg\" width=\"64\" height=\"64\" title=\"Goose\"\u003e\u003c/a\u003e\u0026nbsp;\n\u003c/p\u003e\n\n\u003e **📖 Want to use LeapMux?**\n\u003e\n\u003e Read the docs and grab a download at **[leapmux.dev](https://leapmux.dev)**. The rest of this README covers building and developing LeapMux from source.\n\n## Table of Contents\n\n- [Architecture](#architecture)\n- [Prerequisites](#prerequisites)\n- [Quick Start](#quick-start)\n- [Development](#development)\n- [Technology Stack](#technology-stack)\n- [Project Structure](#project-structure)\n- [Contributing](#contributing)\n- [License](#license)\n- [Disclaimer](#disclaimer)\n\n## Architecture\n\nLeapMux is a single Go binary (`leapmux`) plus a SolidJS frontend and a Tauri desktop shell, organized into three components:\n\n- **Frontend** — SolidJS web app that renders the workspace UI (tiling layout, agents, terminals, file browser); also embedded in the desktop app.\n- **Hub** — Go service for login, workspace management, and worker registration, and an authenticated **relay** for end-to-end-encrypted Frontend↔Worker traffic. Storage is pluggable: SQLite (default), PostgreSQL, MySQL, CockroachDB, YugabyteDB, or TiDB.\n- **Worker** — Go process that runs agents, PTYs, file browsing, and git operations; keeps its own SQLite and connects **outbound** to the Hub, so it can live behind a NAT.\n\nThe binary runs in several modes:\n\n| Command | Description |\n|---------|-------------|\n| `leapmux solo` | Hub + Worker on `127.0.0.1:4327`, no login, single-user |\n| `leapmux hub` | Central service only (auth, relay, database) |\n| `leapmux worker` | Connects to a remote Hub |\n| `leapmux dev` | Hub + Worker on all interfaces, login required |\n| `leapmux admin` | CLI for orgs, users, workers, OAuth, encryption keys, and the database |\n\nFrontend↔Hub uses ConnectRPC; Frontend↔Worker uses hybrid post-quantum Noise_NK multiplexed over a single Hub-relayed WebSocket; Worker↔Hub uses gRPC. The Hub routes traffic but can't read Frontend↔Worker content. The wire format is Protocol Buffers in [`/proto/leapmux/v1/`](proto/leapmux/v1/).\n\nFor the full architecture, deployment modes, and threat model, see the **[Concepts](https://leapmux.dev/docs/getting-started/concepts/)** and **[Security \u0026 Threat Model](https://leapmux.dev/docs/operating/security/)** chapters at [leapmux.dev](https://leapmux.dev).\n\n## Prerequisites\n\nThe rest of this README is for people building LeapMux from source or hacking on it. To just run LeapMux, grab a desktop app or server build from the [releases page](https://github.com/leapmux/leapmux/releases), or read the docs at [leapmux.dev](https://leapmux.dev).\n\nBefore you begin, ensure you have the following installed:\n\n- **Go** 1.26.1 or later\n- **Node.js** 24 or later\n- **Bun** (latest version) - JavaScript runtime and package manager\n- **Task** - Task runner (replaces Make)\n- **buf** CLI - Protocol Buffer code generation ([authentication](https://buf.build/docs/bsr/authentication/) recommended to avoid rate-limit errors)\n- **protobuf** (`protoc`) - Protocol Buffer compiler (required by Tauri's `prost-build`)\n- **SQLite** (usually pre-installed on most systems)\n- **Docker** - Required for building Docker images (on macOS, [Rancher Desktop](https://rancherdesktop.io/) is recommended)\n- **mprocs** - Multi-process runner (required for `task dev`, `task dev-solo`, and `task dev-desktop`)\n- **Rust toolchain** - For the Tauri desktop app (built by `task build`)\n- **Tauri desktop prerequisites** - WebView/system packages required by Tauri on your platform\n\nGo-based build tools — `sqlc`, `golangci-lint`, and `gotestsum` — are declared as `tool` dependencies in `backend/go.mod` and `desktop/go/go.mod`, and invoked automatically via `go tool \u003cname\u003e`. You don't need to install them separately.\n\n### macOS\n\nInstall [Bun](https://bun.sh/) by following the instructions at https://bun.sh/.\n\nInstall the remaining dependencies with [Homebrew](https://brew.sh/):\n\n```bash\nbrew install buf go go-task mprocs node protobuf rust\n```\n\nFor building Docker images, install [Rancher Desktop](https://rancherdesktop.io/) (or any Docker-compatible runtime such as Docker Desktop or OrbStack) separately.\n\n### Arch Linux\n\nInstall the official repository packages with [pacman](https://wiki.archlinux.org/title/Pacman):\n\n```bash\nsudo pacman -S buf bun go go-task nodejs npm protobuf rust\n```\n\nThe Arch `go-task` package installs the binary as `go-task`. Add a shell alias so that `task` works:\n\n```bash\n# Add to your ~/.bashrc or ~/.zshrc\nalias task=go-task\n```\n\nInstall the remaining dependencies from the [AUR](https://wiki.archlinux.org/title/Arch_User_Repository) (using [yay](https://github.com/Jguer/yay) or your preferred AUR helper):\n\n```bash\nyay -S mprocs-bin\n```\n\nFor desktop app builds, install the [Tauri prerequisites for Arch Linux](https://v2.tauri.app/start/prerequisites/#linux) plus GStreamer (bundled into the AppImage by `bundleMediaFramework`) and `dpkg` (its `dpkg-deb` builds the `.deb` bundle; not installed by default on Arch):\n\n```bash\nsudo pacman -S webkit2gtk-4.1 libayatana-appindicator librsvg patchelf dpkg \\\n  gstreamer gst-plugins-base gst-plugins-good gst-plugins-bad-libs gst-libav\n```\n\n### Windows\n\nInstall dependencies with [winget](https://learn.microsoft.com/en-us/windows/package-manager/winget/):\n\n```powershell\nwinget install --id Microsoft.PowerShell --source winget\nwinget install --id GoLang.Go --source winget\nwinget install --id OpenJS.NodeJS.LTS --source winget  # or OpenJS.NodeJS for the current (non-LTS) release\nwinget install --id Oven-sh.Bun --source winget\nwinget install --id Task.Task --source winget\nwinget install --id bufbuild.buf --source winget\nwinget install --id pvolok.mprocs --source winget\nwinget install --id SUSE.RancherDesktop --source winget  # or any other Docker-compatible runtime (e.g. Docker.DockerDesktop, Podman.Podman)\nwinget install --id Rustlang.Rust.MSVC --source winget\nwinget install --id Google.Protobuf --source winget\nwinget install --id Microsoft.VisualStudio.BuildTools --source winget  # or Microsoft.VisualStudio.2022.Community if you prefer the full IDE\n```\n\nAfter `Microsoft.VisualStudio.BuildTools` installs, open the Visual Studio Installer and modify the installation to enable the **\"Desktop development with C++\"** workload — winget installs the bootstrapper but does not select any workloads automatically.\n\nFor the remaining Tauri Windows prerequisites (WebView2, etc.), see the [Tauri Windows prerequisites](https://v2.tauri.app/start/prerequisites/#windows).\n\n## Quick Start\n\nGet LeapMux running locally:\n\n```bash\n# 1. Clone the repository\ngit clone https://github.com/leapmux/leapmux.git\ncd leapmux\n\n# 2. Generate code and download assets (protobuf, sqlc, and spinner JSON — not checked into git)\ntask generate\n\n# 3. Start all services (requires mprocs)\ntask dev\n```\n\nOnce all services are running, open your browser to:\n```\nhttp://localhost:4327\n```\n\nEach `dev` target generates code and builds prerequisites, then launches `mprocs` to run the processes concurrently:\n\n| Command | Processes | Description |\n|---------|-----------|-------------|\n| `task dev` | Go backend (`leapmux dev`) + Bun frontend dev server | Full-featured dev mode on all interfaces, login required |\n| `task dev-solo` | Go backend (`leapmux solo`) + Bun frontend dev server | Localhost-only, no login, single-user |\n| `task dev-desktop` | Bun frontend dev server + Tauri desktop app | Desktop app development (builds sidecar first) |\n\n## Development\n\n### Building\n\nBuild all components:\n```bash\ntask build\n```\n\nBuild individual components:\n```bash\ntask build-backend    # Build leapmux binary (Go)\ntask build-frontend   # Build frontend assets\ntask build-desktop    # Build desktop app for current platform (Tauri v2 + Rust)\n```\n\nThe `leapmux` binary is output to the repository root. Tauri emits the desktop bundles under `desktop/rust/target/`, and the final artifacts (`.dmg` on macOS, `.AppImage`/`.deb` on Linux, `.msi`/`.exe` on Windows) are also copied to the repository root.\n\n### Testing\n\nRun all tests (except E2E):\n```bash\ntask test\n```\n\nRun specific test suites:\n```bash\ntask test-backend       # Backend tests\ntask test-frontend      # Frontend tests (Vitest)\ntask test-desktop       # Desktop Go sidecar + Tauri Rust shell tests\ntask test-e2e           # End-to-end tests (Playwright)\n```\n\nRun specific tests by passing arguments after `--`:\n```bash\n# Backend tests: -run \u003cregex\u003e \u003cpackages\u003e\ntask test-backend -- -run TestMyFunction ./internal/hub/...\n\n# Frontend unit tests: pass a file path to Vitest\ntask test-frontend -- src/lib/validate.test.ts\n\n# E2E tests: pass a file path or --grep \u003cpattern\u003e to Playwright\ntask test-e2e -- tests/e2e/040-chat-message-rendering.spec.ts\ntask test-e2e -- --grep \"should persist theme\"\n```\n\n### Linting\n\nRun all linters:\n```bash\ntask lint\n```\n\nRun specific linters:\n```bash\ntask lint-proto      # Lint Protocol Buffer definitions\ntask lint-backend    # Lint Go code (hub + worker)\ntask lint-frontend   # Lint frontend code (TypeScript typecheck + ESLint)\ntask lint-desktop    # Lint desktop Go sidecar (golangci-lint) + Tauri Rust shell (clippy)\n```\n\nAuto-fix lint violations:\n```bash\ntask lint-fix            # Fix all (Go, frontend, desktop)\ntask lint-fix-backend    # Fix Go code (golangci-lint --fix)\ntask lint-fix-frontend   # Fix frontend code (ESLint --fix)\ntask lint-fix-desktop    # Fix desktop Go code + Tauri Rust code (clippy --fix)\n```\n\n### Desktop Prerequisites\n\nDesktop builds use [Tauri v2](https://v2.tauri.app/start/prerequisites/):\n- macOS: Xcode Command Line Tools, Rust, WebKit (system)\n- Linux: Rust plus the WebKitGTK/Tauri native dependencies for your distro (see [Tauri Linux prerequisites](https://v2.tauri.app/start/prerequisites/#linux)) and GStreamer (see the Arch Linux section above)\n- Windows: Rust MSVC toolchain plus WebView2\n\n### Code Generation\n\nRegenerate all generated code and downloaded assets (Protocol Buffers, sqlc, and spinner JSON):\n```bash\ntask generate\n```\n\nYou can also run each generator individually:\n```bash\ntask generate-proto      # Generate Protocol Buffer code (Go and TypeScript)\ntask generate-sqlc       # Generate type-safe SQL code (hub and worker)\ntask generate-spinners   # Download spinner verb JSON files from awesome-claude-spinners\n```\n\nTask uses checksums to skip generation when source files haven't changed. To force regeneration, use `task --force generate`.\n\nAlways run `task generate-proto` after modifying `.proto` files in `/proto/leapmux/v1/`.\nAlways run `task generate-sqlc` after modifying `.sql` files in `/backend/internal/hub/store/*/db/queries/` or `/backend/internal/worker/db/queries/`.\n\n### Preparation\n\nPrepare every module for builds (code generation, frontend install, asset generation, icon generation, and embedding the frontend into the backend):\n```bash\ntask prepare\n```\n\nYou can also run each step individually:\n```bash\ntask prepare-frontend   # Generate proto/spinners, run bun install, generate icons, copy NOTICE.html\ntask prepare-backend    # Generate proto/sqlc, build the frontend, and embed it into the backend\ntask prepare-desktop    # Generate proto, build the frontend, prepare the backend, and generate desktop icons\n```\n\nNote: Build targets automatically run their required preparation steps, so `task build` works without running `task prepare` first.\n\n### Third-Party License Notice\n\nGenerate `NOTICE.md` and `NOTICE.html` with all third-party dependency licenses:\n```bash\ntask generate-notice\n```\n\nRun this manually after changing dependencies; regular build targets do not trigger it. The task fails if any dependency is missing a license file or if a vendored override's license identifier no longer matches the upstream package.\n\n### Cleaning\n\nRemove all build artifacts and generated code:\n```bash\ntask clean\n```\n\nClean a specific module:\n```bash\ntask clean-backend    # Remove leapmux binaries and generated/ directories\ntask clean-frontend   # Remove .output, .vinxi, node_modules, and generated/ directories\ntask clean-desktop    # Remove desktop binaries, bundles, and Rust target/\n```\n\n### Docker images\n\nBuild Docker images containing the full LeapMux stack:\n\n```bash\n# Build both Alpine and Ubuntu images\ntask docker-build\n\n# Build only Alpine\ntask docker-build-alpine\n\n# Build only Ubuntu\ntask docker-build-ubuntu\n```\n\nBy default this builds for `linux/amd64` and `linux/arm64`. You can override the platform and tag:\n\n```bash\ntask docker-build-alpine PLATFORM=linux/amd64 TAG=leapmux:dev\n```\n\nThe image uses a multi-stage build (buf, Bun, Go). Tool and base image versions are centralized in `versions.env` at the repository root.\n\n### Documentation site\n\nThe site at [leapmux.dev](https://leapmux.dev) is a [Hugo](https://gohugo.io/) + [Hextra](https://imfing.github.io/hextra/) project under `site/`. Hugo is declared as a `go tool` dependency (see `site/go.mod`), so there's nothing extra to install.\n\n```bash\ntask site        # Build the static site into site/public/\ntask dev-site    # Live-reload dev server at http://localhost:1313\n```\n\n## Technology Stack\n\n### Frontend\n\n- **[Bun](https://bun.sh/)** - Runtime and package manager\n- **[ConnectRPC](https://connectrpc.com/)** - RPC client for browser\n- **[Noble](https://paulmillr.com/noble/)** - Cryptographic primitives for E2EE (X25519, ML-KEM-1024, SLH-DSA, ChaCha20-Poly1305, BLAKE2b)\n- **[Lucide](https://lucide.dev/)** - Icon library\n- **[Milkdown](https://milkdown.dev/)** - Markdown editor\n- **[Oat](https://oat.ink/)** - Classless CSS framework\n- **[Playwright](https://playwright.dev/)** - End-to-end testing\n- **[Shiki](https://shiki.style/)** - Syntax highlighting\n- **[Solid DnD](https://solid-dnd.com/)** - Drag-and-drop support\n- **[SolidJS](https://www.solidjs.com/)** - Reactive UI framework\n- **[SolidStart](https://start.solidjs.com/)** - Solid meta-framework (routing, build)\n- **[Vanilla Extract](https://vanilla-extract.style/)** - Type-safe CSS-in-JS\n- **[Vinxi](https://vinxi.vercel.app/)** - Build framework (Vite-based)\n- **[Vitest](https://vitest.dev/)** - Unit testing\n- **[xterm.js](https://xtermjs.org/)** - Terminal emulator\n\n### Hub (Central Service)\n\n- **[ConnectRPC](https://connectrpc.com/)** - Modern gRPC-compatible RPC framework (Frontend communication)\n- **[Go](https://go.dev/)** - Primary language\n- **[Goose](https://pressly.github.io/goose/)** - Database migrations\n- **[gRPC](https://grpc.io/)** - Standard gRPC (Worker communication)\n- **[koanf](https://github.com/knadh/koanf)** - Layered configuration (defaults, file, env)\n- **[Protocol Buffers](https://protobuf.dev/)** - Service and message definitions\n- **Pluggable database** - SQLite, PostgreSQL, MySQL, CockroachDB, YugabyteDB, or TiDB (see [Architecture](#architecture))\n- **[sqlc](https://sqlc.dev/)** - Type-safe SQL code generation (per-backend: SQLite, PostgreSQL, MySQL)\n\n### Worker (Agent Wrapper)\n\n- **[CIRCL](https://github.com/cloudflare/circl)** - Post-quantum cryptographic primitives (ML-KEM, SLH-DSA) for E2EE channel handling\n- **[Git](https://git-scm.com/)** - Repository info and worktree management\n- **[Go](https://go.dev/)** - Primary language\n- **[gRPC](https://grpc.io/)** - Communication with Hub\n- **[SQLite](https://sqlite.org/)** - Embedded database for agent and terminal state\n\n### Desktop\n\n- **[Tauri v2](https://v2.tauri.app/)** - Desktop application framework (Rust + native WebView)\n\n### Site (Documentation)\n\n- **[Hugo](https://gohugo.io/)** - Static site generator for [leapmux.dev](https://leapmux.dev)\n- **[Hextra](https://imfing.github.io/hextra/)** - Hugo theme, imported as a Hugo module\n\n### Build Tools\n\n- **[buf](https://buf.build/)** - Protocol Buffer tooling\n- **[ESLint](https://eslint.org/)** - TypeScript/JavaScript linting\n- **[golangci-lint](https://golangci-lint.run/)** - Go linting\n- **[mprocs](https://github.com/pvolok/mprocs)** - Multi-process runner for development\n- **[Task](https://taskfile.dev/)** - Build orchestration with checksum-based caching\n\n## Project Structure\n\n```\nleapmux/\n├── backend/             # Go backend: the unified `leapmux` binary (hub + worker)\n│   ├── cmd/leapmux/     # Entry point, subcommand routing, and the admin CLI\n│   └── internal/\n│       ├── hub/         # Hub: auth, channel relay, pluggable store, keystore, OAuth\n│       └── worker/      # Worker: agents, terminals, file browser, git, E2EE channel\n├── desktop/             # Tauri v2 desktop app (Rust shell + Go sidecar)\n├── docker/              # Dockerfile and s6-overlay service definitions\n├── frontend/            # SolidJS web app\n│   └── src/components/  # UI: chat (+ per-agent renderers), terminal, files, shell\n├── icons/               # App and agent-provider SVG icons\n├── proto/leapmux/v1/    # Protocol Buffer service and message definitions\n├── scripts/             # Utility scripts (NOTICE generation, ICO builder, ...)\n├── site/                # Hugo + Hextra documentation site (leapmux.dev)\n│   └── content/docs/    # The user manual\n├── go.work              # Go workspace (backend + desktop/go)\n├── Taskfile.yaml        # Build orchestration (go-task.dev)\n└── versions.env         # Version string and tool/image versions\n```\n\n## Contributing\n\nWe don't accept code contributions yet. The reason is licensing: LeapMux is under FSL-1.1-ALv2, which automatically converts to Apache 2.0 over time, and that relicensing is only possible if we hold the rights to every line of code. Without a Contributor License Agreement (CLA) in place, accepting outside contributions now would make that switch extremely hard — we'd have to track down every past contributor for their consent. Once a CLA is ready, we expect to open up to external contributions.\n\nIn the meantime, please feel free to create issues, preferably with a plan generated by a frontier model; we will follow them up.\n\n## License\n\nLeapMux is licensed under the **Functional Source License, Version 1.1, Apache 2.0 Future License (FSL-1.1-ALv2)**.\n\nThis means:\n- You can use, modify, and distribute the software\n- There are certain limitations on competitive use\n- The license automatically converts to Apache 2.0 two years after each release is first made available\n\nSee the [LICENSE](LICENSE.md) file for full details.\n\n## Disclaimer\n\nAll product names, logos, and trademarks are the property of their respective owners. LeapMux is not affiliated with, endorsed by, or sponsored by Anomaly, Anthropic, Anysphere, Apple, Block, Cognition, Don Ho, Earendil, GitHub, Google, JetBrains, Kilo Code, Microsoft, OpenAI, Sublime HQ, Zed Industries, or any other third party. Coding agent, editor, and IDE icons are used solely to indicate compatibility and are reproduced here for identification purposes only.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fleapmux%2Fleapmux","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fleapmux%2Fleapmux","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fleapmux%2Fleapmux/lists"}