Skip to content
heonnyPublic

About

A lightweight native desktop app for managing local dev servers. Start, stop, and restart projects, monitor live logs in split panes, and catch port conflicts. Built with Rust and egui for macOS and Windows.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

Campfire

A small, native desktop app for running and managing multiple local dev servers.

English · 한국어

Start, stop, and restart servers written in any language or framework, watch their logs live, and catch port clashes — all from one window. Built in Rust with egui, so it's a single lightweight binary (~9 MB) with no runtime to install.

Features

  • Any server — run anything via a shell command (npm run dev, ./gradlew bootRun, go run ., …)
  • Presets — Spring Boot, Flink, Next.js, Go, or a blank Custom entry that pre-fill the command and a default port
  • Folder detection — selecting a folder fills its name and default command: Node dev / start scripts with npm, pnpm, Yarn, or Bun; Gradle bootRun / run; Cargo binaries; and Go modules with a root main package (go run .). Edited commands and saved projects are preserved
  • Per-server config — working directory, port, environment variables, a .env file, and an optional shell override
  • Lifecycle — start / stop / restart with whole-process-tree shutdown (graceful SIGINT, a grace period, then SIGKILL), so nothing is orphaned; press Stop again to force-quit immediately
  • Reorder — drag project cards up or down to change their order; it's saved
  • Workspaces — drag a card into the log area to open its log; up to four logs in resizable panes, bundled into tabs. Open log arranges three or four panes in two rows; compact windows switch between logs without losing the layout
  • Live logs — ANSI colors rendered, plus search, follow (tail), wrap toggle, an unseen-lines badge, and clear, over a bounded 5 MiB ring buffer
  • Ready / crash notices — a server shows starting until its port is listening, then a banner says it's ready; a crash reports the exit code
  • Open in browser — click a project's :port to open localhost:port
  • Port awareness — warns when a port is already in use or assigned to two servers; injects both PORT and SERVER_PORT
  • Resource usage — per-server CPU and memory shown live on each project card, summed over the whole process subtree
  • Cross-platform — macOS and Windows
  • Local and private — everything runs on your machine; config is a plain TOML file

Download

Download the macOS Apple Silicon or Windows x64 ZIP from Releases. Extract it, then move bundle/Campfire.app to Applications on macOS or run campfire.exe on Windows. Rust is only needed to build from source.

The macOS binary requires macOS 11 or later. Downloads are not signed with a distribution certificate or notarized, so your OS may block or warn on first launch. SHA-256 checksums are included in each release.

Requirements (building from source)

  • Rust (stable)
  • macOS or Windows

Build and run

The sidebar, dialogs, and notifications use egui_glass with the wgpu renderer. They sample a static gradient uploaded once at startup; log panes stay opaque for readability. A wgpu-compatible graphics adapter is required.

# run in development
cargo run

# build an optimized release binary (-> target/release/campfire)
cargo build --release

Usage

  1. Click + Add and choose the working directory (Browse…).
  2. Review the detected name and command. Choose a script / binary when there are several targets, or enter a command / pick a preset manually.
  3. Optionally set a port, environment variables, or a .env file.
  4. Select the server and press Start. Watch the logs; Stop or Restart as needed.

The in-app Help button has the rest. A few notes:

  • Detection — reads local files only; it does not install dependencies or run Gradle/Cargo during registration. Gradle uses the local platform wrapper, falling back to gradle on PATH. Cargo respects default-run, explicit bins, and autobins; feature-gated targets require a manual command. Workspace members, Gradle subprojects, plugin aliases, and custom tasks are not discovered recursively: choose the runnable package folder or enter the command. Detection does not set a port. Go detection skips test files, build-tagged and OS/architecture-specific entry points; commands under cmd/ require manual input. Project runtimes and dependencies must already be available to launch.
  • Ports — the port you set is injected as both PORT (Node/Next) and SERVER_PORT (Spring Boot). If your framework reads neither, put the port in the command (e.g. --server.port=8080) or an env var.
  • Shell / PATH — commands run through your login shell. If a version manager (nvm, sdkman) isn't found, set the Shell field to zsh -lic so it sources ~/.zshrc.
  • Config — servers are saved under your OS app-config directory (com.heonny.campfire/servers.toml).

Uninstall

Campfire keeps only two files — your server list (servers.toml) and its running-state (running.json). Deleting the app leaves them behind; remove them too for a clean uninstall.

OS Where they live
macOS ~/Library/Application Support/com.heonny.campfire/
Windows %APPDATA%\heonny\campfire\ and %LOCALAPPDATA%\heonny\campfire\

The matching script clears them for you. It prints the paths and asks first; pass --yes (macOS) or -Yes (Windows) to skip the prompt.

# macOS
./scripts/uninstall-macos.sh

# Windows (PowerShell)
.\scripts\uninstall-windows.ps1

Then remove the app itself: move Campfire.app to the Trash (macOS) or delete the campfire binary (Windows). The scripts never touch the app — only its data.

Built with

Rust · egui / eframe · egui_extras · command-group · sysinfo · rfd

License

The application code is under the MIT License — see LICENSE.

The bundled Pretendard font is under the SIL Open Font License (assets/fonts/Pretendard-LICENSE.txt).

The Lucide icons are under the ISC License (assets/icons/LICENSE).

About

A lightweight native desktop app for managing local dev servers. Start, stop, and restart projects, monitor live logs in split panes, and catch port conflicts. Built with Rust and egui for macOS and Windows.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Contributors

Languages