Manage your servers from one desktop app.

Connect over SSH, browse remote files with Monaco, inspect Docker and Compose logs, run deploy presets, and open an integrated terminal — all in one workspace.

Open source · macOS, Windows, Linux builds

Everything in one workspace

Built for developers who live in terminals and compose files — with optional AI-assisted deploy suggestions and Tor/SOCKS support when you need it.

SSH servers

Add servers with host, username, and private key or password. Optional project path and working directory for commands. Test connection before you commit.

Remote file tree

Browse the server filesystem from the sidebar: open Dockerfiles, compose files, env files, and edit them in the editor area with familiar keyboard shortcuts.

Monaco editor

Same editor engine as VS Code for syntax highlighting and a comfortable editing experience on YAML, Dockerfiles, shell scripts, and more.

Docker overview

List containers from docker ps -a, inspect status, and jump into logs or terminal workflows for the selected server.

Compose logs

Tail Docker Compose logs in the bottom panel with optional service filter and line count. Stream logs over SSH when you need live output.

Deploy & presets

Run deploy commands such as git pull && docker compose up -d --build with one click. Save time with sensible presets for common flows.

Integrated terminal

Full xterm.js terminal over SSH: resize-aware, fit-to-panel, and ready for interactive sessions on the remote host.

Proxy & Tor

Optional global SOCKS proxy (e.g. Tor on 9050 or Tor Browser on 9150). Per-server toggle to connect directly when the host is clearnet-only.

Groq-powered assist

Optional Groq API key (stored locally) for AI-suggested deploy commands and helpers in the deploy flow — your key never leaves your machine except to Groq’s API.

Config generators

Scaffold nginx, Docker Compose snippets, and related config from structured forms — paste the output straight into your server tree.

Local workspace mode

Open a real folder from your own machine and use Server Operator against local files, local Docker, compose logs, databases, terminal workflows, and project shortcuts.

Voice input (optional)

Voice-to-text via Groq Whisper where supported — handy for long deploy notes or command dictation from the desktop app.

Built with modern tooling

The same stack you already use for web apps — packaged as a fast desktop experience.

  • Electron 33
  • React 18
  • TypeScript
  • Vite 5
  • Tailwind CSS v4
  • Monaco Editor
  • xterm.js
  • ssh2
  • electron-builder

From the README

Clone the repo, install dependencies, and run the desktop shell with Vite hot reload, or open the web UI alone for layout work.

View on GitHub
$ git clone https://github.com/everest1508/server-operator.git
$ cd server-operator && npm install
$ npm run electron:dev

Project shortcuts for AI agents

Server Operator supports project-local command shortcuts in .server-operator/*.serop. Use the initializer to scaffold this folder, then let coding agents maintain these files in each repository.

Initialize a project

Creates deploy.serop, ops.serop, custom.serop, and AI context files so humans and agents follow the same structure.

$ curl -fsSL https://server-operator-zeta.vercel.app/init-server-operator.sh | sh
PS> iwr https://server-operator-zeta.vercel.app/init-server-operator.ps1 -UseBasicParsing | iex
$ npm run serop:init -- --path /path/to/project
$ serop .
$ npx server-operator-init --interactive --path .
$ npm i -D server-operator && npx server-operator-init --path .
# Add/update shortcuts in .server-operator/*.serop

What’s New in 2.6.0

Mark your production servers so they show in red and ask you to type their name before anything risky runs. Deploys now really run in the background, with a live panel that follows them on every screen and a system notification when they finish. The server sidebar is reworked too.

v2.6.0

Red Ink

2026-10-13

Production mode

  • Mark any server as production from its settings, or with the shield button on its row in the sidebar. You turn it on and off yourself, and turning it off asks you to type the server name.
  • On a production server, risky actions ask you to type its name before they run: deploy, rollback, Docker kill and remove, firewall changes, database wipe and import, deleting rows and files, stopping nginx, and removing the server.
  • Production servers are marked in red: a line under the title bar with a Production badge, red server tabs, and red cards on the Servers page and in the deploy panel.

Live deploys

  • Deploys started from a .serop shortcut still stopped when you switched servers, because the background part of 2.5.1 was not finished. They now run in the background and keep going whatever screen or server you are on.
  • A deploy panel in the bottom-right corner shows every running deploy with its server, a timer and live output, on every screen. Expand it to read the last 300 lines, or cancel a shortcut deploy.
  • The Git deploy shows in the panel too, so its output is no longer lost when the terminal closes.

Server sidebar

  • Production servers are grouped at the top. Each server shows its connection type, whether it is open in a tab, and a Deploying indicator while a deploy runs on it.
  • A search box appears once you have more than five servers, and the row buttons can be reached with the keyboard.
  • Removing a server from the sidebar deleted it straight away. It now asks first.

View full changelog →

Frequently asked questions

Short answers about what Server Operator does and how it works. More detail is in the changelog and on GitHub.

What is Server Operator?

Server Operator is an open source desktop app for managing servers over SSH. It combines a remote file tree with the Monaco editor, Docker and Compose logs, deploy presets and an integrated terminal in one workspace.

Which operating systems does it run on?

Server Operator has builds for macOS (Apple Silicon and Intel), Windows (installer and portable) and Linux (.deb). Builds are published on the GitHub releases page.

How does it connect to a server?

You add a server with its host and username, then sign in with a private key or a password over SSH. A global SOCKS proxy such as Tor can be switched on, and each server can opt out of it.

Can I use it without a remote server?

Yes. Local workspace mode opens a folder on your own machine, with file browsing, terminal, Docker, compose logs, database tools, deploy commands and .serop shortcuts. No SSH is involved.

Where is my Groq API key stored?

The optional Groq API key is stored locally on your machine and is sent only to the Groq API, to power deploy suggestions and voice input. The app works without it.

What are .serop shortcut files?

They are project-local command shortcuts kept in .server-operator/*.serop. The initializer scaffolds deploy.serop, ops.serop and custom.serop so people and coding agents share one structure.

Is Server Operator free and open source?

It is open source under the Apache License 2.0, and the source and releases are on GitHub.

Download

Grab a build for your platform. Assets are published with each GitHub release (macOS dmg/zip, Windows installer + portable, Linux .deb). Version numbers follow package.json.

macOS · dmg / zip

Apple Silicon & Intel

Download the build optimized for your Mac's processor type.

Windows · x64

NSIS installer

Setup wizard, choose install directory, Start Menu shortcut.

Download Setup.exe
Windows · x64

Portable

No installation — run the executable from any folder or USB drive.

Download portable
Linux · deb

Debian / Ubuntu

Install with sudo dpkg -i *.deb then launch from the app menu.

Download .deb
macOS "App is damaged" Warning: Because the macOS build is currently unsigned, Gatekeeper may flag it as damaged. To fix this, copy the app to your Applications folder, open Terminal, and run: xattr -cr /Applications/Serop.app
Prefer the release page? All artifacts and checksums live on GitHub Releases. If a direct link 404s after a version bump, open the latest release and download the matching filename. You can change the repo URL in website/index.html if your fork lives elsewhere.