Cross-platform Electron GUI for the Sliver C2 framework, providing session and beacon dashboards, payload generation, listeners, loot, and cloud deployment management.
Sliver GUI is a cross-platform Electron desktop application for Sliver. It combines backend connections, live status views, dedicated workspaces, and a native Sliver console in a React interface built with HeroUI, HeroUI Pro, and Font Awesome.
The GUI does not implement every upstream command or option. Operator connections use mTLS; WireGuard operator configurations are recognized but cannot connect. See the operator parity report for tracked coverage and the feature documents below for specific boundaries.
npm run setup:rdp installs the pinned
Rust 1.94.1 toolchain and platform targets.The supported versions and locked dependencies are recorded in package.json and package-lock.json. Application code uses strict TypeScript; build helpers use Node.js ES modules.
npm ci --strict-allow-scripts
npx heroui-pro login
npx heroui-pro install --yes
npm run setup:rdp
npm run dev
The HeroUI login/install steps are needed for initial workstation setup; they
can be skipped when HEROUI_AUTH_TOKEN is already configured for installation.
Keep credentials out of tracked files.
npm run dev builds and launches the static application at
sliver://app/index.html, using the production content security policy.
It also builds the host RDP helper from the pinned IronRDP fork. Ordinary
TypeScript builds and unit tests do not require compiling Rust.
Restart the command after source changes; this workflow does not use HMR.
The TypeScript client is installed from the pinned sliver-script npm package.
An adjacent client checkout is not needed. Ordinary application development
does not require a Sliver source checkout; building the native console does.
The default Sliver client root is ~/.sliver-client; SLIVER_CLIENT_ROOT_DIR
can select another root. Application preferences, including Overview graph
options, are saved in gui/application-settings.json; workspace zoom is saved in
gui/workspace-zoom.json, and text editor preferences in
gui/text-editor-settings.json beneath that root. The GUI discovers existing
operator configs in configs/ and updates the
open selector when a valid config is saved there. It saves configs selected
through Import as private file references in gui/operator-configs.json.
Import and Forget do not copy or delete the source configs.
Remote Desktop profiles and endpoint certificate pins live in gui/rdp.json.
Passwords are omitted by default, can be retained until app exit, or can be
encrypted with the operating system's secure storage. Persistent passwords are
unavailable when Linux selects an unencrypted key store. Clipboard transfer is
explicit and limited to text; closing an RDP tab disconnects without logging
off the remote Windows account.
Settings → General → Appearance → Disable window transparency turns off native window glass immediately across the app. The switch is off by default, so transparency remains enabled where supported. It is saved with the other application preferences and takes precedence over terminal transparency.
Ghostty-compatible terminal colors are configured in Settings → Terminal and
saved to gui/ghostty/config. Custom themes belong in gui/ghostty/themes/;
installed native Ghostty themes are discovered automatically. See
terminal appearance and Ghostty themes for config
sharing, the Monaco editor, platform transparency support, and runtime limits.
| Command | Purpose |
|---|---|
npm run typecheck | Check the main/preload and renderer TypeScript projects. |
npm test | Run Vitest unit and component tests. |
npm run test:watch | Run Vitest interactively. |
npm run test:e2e:electron | Build and exercise Electron through its renderer, preload, and IPC. |
npm run protocol:check | Verify the pinned client, upstream baseline, and parity artifacts. |
npm run build | Typecheck and build application output in dist/. |
npm run build:console | Build the pinned native Sliver console. |
npm run build:rdp:host | Build and verify the RDP helper for this machine. |
npm run build:rdp | Build the RDP packaging target, including both macOS slices. |
npm run test:rdp:native | Run the Rust runtime tests. |
npm run package | Create an unpacked application under release/. |
npm run dist | Create platform installers under release/. |
npm run test:e2e:packaged | Verify and test an existing unpacked application against a local fixture. |
Unit and component tests live beside source files; Electron scenarios live in
src/e2e/. Actual-server tests are separate, opt-in checks requiring configured
disposable infrastructure. A fixture test does not establish live-server or
installed-package compatibility.