Multi-machine file manager

Every machine. One tab.

SidecarX connects any number of remote servers to a single browser tab. Copy files on machine A, paste them on machine B — no SCP, no rsync, no terminal. Inside each machine, drag and drop behaves like your desktop. All of it from one Rust binary.

tiny · zero dependencies · high performance — Rust + Axum, Apache-2.0

terminal :3000 LISTENING
$ curl -fsSL \
    https://raw.githubusercontent.com/pgmi-builds/sidecarx/main/install.sh \
    | bash
$ ./sidecar
→ SidecarX listening on http://localhost:3000
admin_cfg.json 2 MACHINES ONLINE
{
  "machines": [
    { "name": "workstation", "url": "https://10.0.0.2:3000" },
    { "name": "gpu-box",     "url": "https://10.0.0.7:3000" }
  ]
}
curl -fsSL https://raw.githubusercontent.com/pgmi-builds/sidecarx/main/install.sh | bash
linux x86_64 linux arm64 macOS arm64 macOS x86_64 windows x86_64

The panel

Files, editor, terminal — in one tab.

A single-page admin panel served by the binary itself. Browse the filesystem, preview images, edit code in Monaco, and drive a real PTY in xterm.js — on any connected machine.

01 File manager — light
02 File manager — dark
03 Image preview

Features

Built for the multi-machine day.

Traditional file browsers manage one machine. SidecarX manages all of them — the X stands for cross-machine file operations.

01

Cross-machine clipboard

Select files on machine A, paste them on machine B — no SCP, no rsync, no terminal. A transfer queue tracks progress. Drag-and-drop itself stays within one machine — the panel shows a single machine at a time, so it behaves exactly like your desktop.

02

Unified workspace

Editors and terminals from different machines share one tab dock. Monaco handles code with syntax highlighting; xterm.js drives resize-aware PTY sessions over WebSocket.

03

Tiny. Zero dependencies.

The backend is a single statically-linked Rust binary — musl on Linux. High performance with no runtime, no database, no Docker required. Run ./sidecar and it is serving.

04

Multi-machine config

Define every server once in admin_cfg.json — per-machine authentication and session management included. Switch machines with one click, across HTTP and HTTPS origins.

05

Full file operations

Browse, search, upload, download, rename, delete. Drag-and-drop folder uploads, thumbnail previews for images and video, Markdown and HTML viewers, batch downloads as ZIP.

06

Secure by default

JWT (HS256) auth with HttpOnly cookies, root-directory jailing via SIDECAR_ROOT_DIR, path-traversal protection, and configurable upload size limits.

Quickstart

Running before your coffee is.

One command installs the binary for your platform. One more starts the server. Everything else is a browser tab.

  1. 01 install.sh | bashPulls the right prebuilt binary — or grab it directly from Releases.
  2. 02 ./sidecarServes the API and the admin panel on port 3000. Set SIDECAR_SECRET in production.
  3. 03 localhost:3000Log in, add your other machines to admin_cfg.json, start moving files.
.env CONFIGURED
# server
SIDECAR_PORT=3000
SIDECAR_HOST=0.0.0.0

# required in production — signs the JWTs
SIDECAR_SECRET=change_me_in_production

# jail all file operations to this directory
SIDECAR_ROOT_DIR=/srv/files

# upload size limit, in MB
SIDECAR_UPLOAD_LIMIT=1024

Deploy with Docker or systemd · build from source with cargo · full reference in the README

Open source

Read the code. Ship a PR.

SidecarX is developed in the open under Apache-2.0 — Rust + Axum on the backend, a vanilla-JS SPA with Lit, Monaco, and xterm.js in the panel. Issues and pull requests welcome.