Operate every Linux server from one local window.
Open source server management for macOS and Linux, built around SSH.
Website · Download · Get started · Development · Issues · Sponsor
Oars brings terminals, files, logs, monitoring, deployments, backups, and remote desktops into one desktop app. Connect to your Linux servers over SSH, keep connection credentials in your OS credential store, and move between daily tasks without leaving your workspace.
Use it to investigate a slow server, move files, deploy an application, run scripts across your fleet, or open a remote desktop when you need a graphical interface.
- One workspace for your fleet. Save server profiles, organize groups, and keep up to 16 server views open, with up to four panes per scroll section.
- Start with SSH. Connect with a password, private key, or SSH agent, including through a jump host. Review host fingerprints before trusting a new server.
- See what is happening. Inspect CPU, memory, disks, and processes, then search or follow logs without installing a monitoring agent.
- Work with files and terminals. Open interactive shells and browse, transfer, edit, and manage remote files over SFTP.
- Run repeatable operations. Save scripts, run them across servers, review deployment plans, and schedule rclone-backed backups.
- Manage server access. Work with SSH keys, authorized users, key rotation, and onboarding or offboarding from the same workspace.
- Open a remote desktop. Connect to VNC through an SSH tunnel, with clipboard controls, scaling, and full-screen mode.
- Bring your own AI provider. Ask about server context and review proposed commands before execution.
- Keep a local record. Search command history and audit events, review outcomes, and export your configuration.
Download for macOS (Apple Silicon) · Download for macOS (Intel) · Download for Linux (x86_64)
These links download the latest release files directly. Public release downloads do not require a GitHub account. See release notes and checksums for more details.
On macOS (Apple Silicon or Intel) and Linux x86_64, you can also install Oars with Homebrew:
brew install --cask onyedikachi-david/tap/oarsRun brew update and brew upgrade --cask onyedikachi-david/tap/oars to update. The Homebrew tap selects the package for your operating system and CPU. The macOS security instructions below still apply.
Linux requires a graphical desktop, GTK4, and WebKitGTK 6.0. On Ubuntu 24.04, install the runtime libraries before launching oars:
sudo apt install libgtk-4-1 libwebkitgtk-6.0-4Ubuntu may also require the Oars-specific AppArmor profile supplied by the cask. Follow the Linux runtime setup before launching.
The Linux release is tested on Ubuntu 24.04 x86_64. Other distributions need compatible system libraries; Linux ARM builds are not published.
In updater-enabled macOS builds, open Settings → Updates to control automatic checks and background downloads. Updates install on quit or after a restart that does not interrupt active work. Linux builds notify you when a release is available and direct Homebrew installations through Homebrew.
Older versions need one normal upgrade to receive the updater. See update setup and release signing.
- Choose your operating system from the download links above, or build from source.
- Open Oars and select Add server. Enter the host, SSH user, and authentication method.
- Check the server's host fingerprint against a trusted source, then connect.
- Open Monitor, Terminal, Logs, or Files, or choose another tool from the server's menu.
Oars runs on macOS and Linux and connects to Linux servers. Windows is not currently supported. Some tools need software on the remote server, such as rclone for backups or a VNC server and desktop environment for remote desktop access.
macOS packages are currently unsigned and not notarized. If macOS blocks a download you trust, follow Apple's instructions for opening an unidentified app.
For newer builds, successful CI runs provide oars-macos-arm64, oars-macos-x86_64, and oars-linux-x86_64 artifacts. These are release-optimized builds; downloading workflow artifacts requires a GitHub account.
Server profiles, settings, command history, and audit records are stored on your device. Connection passwords and provider credentials use the OS credential store. Configuration exports exclude stored credentials and can be encrypted with a password.
AI features send the context you choose to the provider you configure. Review that context before sending it. History redaction is best effort: unknown secrets can remain in command text or output. Interactive shell history capture is optional and requires shell integration.
Oars uses a Zig core, a React and TypeScript frontend, and the Native SDK desktop WebView. SSH and cryptography use vendored libssh2 and mbedTLS sources.
- Zig 0.16.
- Node.js 24 and npm.
- Native SDK CLI 0.7.1.
- macOS: Xcode Command Line Tools (
xcode-select --install). - Linux: GTK4 and WebKitGTK 6.0 development packages. On Ubuntu, run
sudo apt install pkg-config libgtk-4-dev libwebkitgtk-6.0-dev.
git clone https://github.com/onyedikachi-david/oars.git
cd oars
npm install --global @native-sdk/cli@0.7.1
export NATIVE_SDK_PATH="$(npm root --global)/@native-sdk/cli"
npm ci --prefix frontend
zig build devThis starts the Vite development server and the native desktop shell. You can also point NATIVE_SDK_PATH at a local SDK checkout or pass -Dnative-sdk-path=/path/to/native-sdk.
| Command | Purpose |
|---|---|
zig build dev |
Run the frontend dev server and native shell |
zig build run |
Run the native shell with the built frontend |
zig build test |
Run the Zig tests |
npm --prefix frontend run typecheck |
Check frontend types |
npm --prefix frontend test |
Run the frontend tests |
zig build package -Dpackage-target=macos |
Build a macOS release package on macOS |
zig build package -Dpackage-target=linux |
Build a Linux release package on Linux |
native doctor --manifest app.zon |
Check desktop SDK and platform prerequisites |
Packages are written to zig-out/package/. Run each package command on its matching operating system; the target option does not provide the other platform's WebView dependencies.
Build options and diagnostics
Common build options (see build.zig):
zig build run -Dplatform=macos -Dweb-engine=chromium
zig build run -Dplatform=macos -Dweb-engine=chromium -Dcef-auto-install=true
zig build run -Dnative-sdk-path=/path/to/native-sdk
native doctor --web-engine chromiumDiagnostics:
NATIVE_SDK_LOG_DIR=/tmp/oars-logs NATIVE_SDK_LOG_FORMAT=jsonl zig build runProject layout and architecture
| Path | Contents |
|---|---|
src/ |
Zig core, SSH sessions, storage, and native bridge |
frontend/ |
React interface, terminal, and feature tabs |
website/ |
Product website and redacted screenshots |
third_party/ |
Vendored libssh2 and mbedTLS sources |
scripts/ |
Development helpers and integration test fixtures |
app.zon |
Application identity, permissions, and window configuration |
build.zig |
Native build, frontend steps, and packaging |
- One worker thread per SSH session owns every
libssh2call (the library is not thread-safe). The main thread never blocks on the network. - Bridge RPC (
oars.*insrc/bridge.zig) isinvoke/responseonly — no native-to-JS push. The frontend pollsoars.ssh.poll(and feature-specificpollendpoints) with per-channel cursor deltas (cursor,dropped,rewind, 4 MB cap). - Streaming reuse — logs tail, deploy output, broadcast, and backup progress all reuse the same cursor-delta protocol.
- Persistence — local JSON/JSONL stores (
servers.json,history.jsonl,audit.jsonl, …) written atomically viatemp+renamewith0600file permissions; corrupt files are quarantined, not silently discarded. - WebView origins —
zero://app(packaged) andzero://inlineplushttp://127.0.0.1:5173in dev; external navigation is denied. VNC's WebSocket upgrade validates the packaged origin and theSec-WebSocket-Keyhandshake.
Release process
Release Please reads Conventional Commits on main and automatically maintains a release pull request containing the next SemVer version and a detailed CHANGELOG.md. Merge that release PR when it is ready. The same workflow then creates the vX.Y.Z tag and GitHub Release, builds and launches the packages on Apple Silicon macOS, Intel macOS, and Linux x86_64, and attaches the macOS ZIPs, Linux tarball, and SHA-256 checksums. Do not create release tags manually.
The Homebrew tap checks for completed stable releases hourly and updates its cask after verifying all three packages and their checksums. Its Update Oars workflow can also be run manually after the release assets finish uploading. This uses the tap's own GitHub token and requires no additional secret in this repository.
The application version is synchronized through version.txt, app.zon, and build.zig. Repository settings must allow the release bot to write and open pull requests: Settings → Actions → General → Workflow permissions → Read and write permissions, then enable Allow GitHub Actions to create and approve pull requests.
Use Conventional Commit prefixes so the version and changelog category are calculated correctly: feat: for a minor release, fix: for a patch, and feat!:/fix!: or a BREAKING CHANGE: footer for a major release.
Bug reports and pull requests are welcome. For a bug, include your operating system, Oars version, reproduction steps, and relevant logs with credentials and private server details removed.
For code changes, explain the problem and the resulting behavior, and run the checks relevant to your change. Use Conventional Commit titles such as fix: or feat: so releases can generate the changelog.
If Oars helps you manage your servers, consider sponsoring its development on GitHub. Your support helps fund maintenance and continued development.
You can also help by starring Oars on GitHub, reporting bugs, contributing fixes, or sharing it with other developers.
Oars is licensed under the MIT License. Vendored dependencies retain their own licenses.