Dave Kempe 799cdefd57 v1.0.0: H.264 passthrough, per-entry toggle, Docker fix
H.264 passthrough for RDP via guac_display worker integration:
- Raw H.264 NAL units from xrdp x264 pass through to browser
  WebCodecs VideoDecoder, bypassing server-side decode/re-encode
- Frame queue preserves all H.264 frames across deferred flushes
- Per-entry toggle in address book (enable_h264 field)
- Keyframe gate ensures decoder initializes correctly
- Per-connection callback (no static global concurrency bug)
- Queue capped at 120 frames to prevent unbounded growth

guacd patch (004-h264-display-worker):
- display-priv.h: h264 frame queue on guac_display_layer
- display-plan.c: flush h264 queue during plan_apply, skip IMG ops
- display-layer.c: set_h264 API with queue append and cap
- rdpgfx.c: SurfaceCommand wrapper saves NAL before GDI handler
- settings.c/h: enable-h264 connection parameter, conditional GfxH264

Other changes:
- Docker: fix FreeRDP plugin path for drive/audio channels (#87)
- contrib/setup-xrdp-gfx.sh: full xrdp x264 rebuild from Debian sid
- docs/rdp-video-performance.md: H.264 passthrough documentation
- Address book UI: H.264 checkbox with dependency descriptions
2026-03-28 21:52:28 +11:00
2026-03-28 12:27:42 +11:00
2026-02-06 14:38:53 +11:00
2026-02-06 14:38:53 +11:00
2026-02-06 14:38:53 +11:00
2026-02-06 14:38:53 +11:00
2026-02-06 14:38:53 +11:00
2026-02-06 14:38:53 +11:00
2026-02-06 14:38:53 +11:00
2026-02-06 14:38:53 +11:00
2026-02-06 14:38:53 +11:00
2026-02-07 09:32:05 +11:00

rustguac

A lightweight Rust replacement for the Apache Guacamole Java webapp. Provides browser-based SSH, RDP, VNC, and web browsing sessions through guacd (the Guacamole protocol daemon).

rustguac sits between web browsers and guacd, proxying the Guacamole protocol over WebSockets. It manages session lifecycle, authentication (API keys and OIDC SSO), session recording, and a Vault-backed address book.

Features

  • SSH sessions — browser-based SSH terminal via guacd, with password, private key, or ephemeral keypair auth
  • RDP sessions — connect to Windows/RDP hosts with auto-fit display resize, Kerberos NLA, and RemoteApp/RAIL support
  • VNC sessions — connect to any VNC server (KVM/IPMI consoles, remote desktops, VM displays)
  • Web browser sessions — headless Chromium on Xvnc, streamed to the browser via VNC, with native autofill and per-entry domain allowlisting
  • Multi-hop SSH tunnels — chain SSH jump hosts/bastions to reach isolated targets for any session type
  • OIDC single sign-on — authenticate users via any OpenID Connect provider (Authentik, Google, Okta, etc.)
  • Role-based access — admin, poweruser, operator, and viewer roles for both API key and OIDC users
  • Vault-backed address book — connection credentials stored in HashiCorp Vault / OpenBao, never reach the browser
  • Per-entry clipboard control — disable copy and/or paste per address book entry for data loss prevention
  • Kerberos NLA — RDP Kerberos authentication via FreeRDP 3.x (no NTLM required)
  • Session recording — all sessions recorded in Guacamole format with playback UI
  • Session sharing — share tokens for read-only or collaborative access
  • Encrypted file transfer — LUKS-encrypted per-session drive storage for RDP, SFTP for SSH
  • Themeable UI — 8 built-in themes with CSS gradient backgrounds, or configure your own
  • TLS everywhere — HTTPS for clients, TLS between rustguac and guacd
  • API key auth — SHA-256 hashed keys with IP allowlists and expiry
  • SQLite storage — no external database server needed
  • Single binary — just rustguac + guacd, no Java stack

Architecture

Browser (HTML/JS)
    |
    | WebSocket over HTTPS
    v
rustguac (Rust, axum)
    |
    | TLS (Guacamole protocol)
    v
guacd (C, from guacamole-server)
    |
    +---> SSH server (for SSH sessions)
    +---> RDP server (for RDP sessions)
    +---> VNC server (for VNC sessions)
    +---> Xvnc display (for web browser sessions)
              |
              +---> Chromium (kiosk mode)

Quick start

Debian 13 (.deb) — download from Releases:

sudo apt install ./rustguac_*.deb

Docker:

docker pull sol1/rustguac:latest
docker run -d -p 8089:8089 sol1/rustguac:latest

RPM (Rocky/RHEL 9):

sudo dnf install ./rustguac-*.rpm

After install, create an admin API key to get started:

/opt/rustguac/bin/rustguac --config /opt/rustguac/config.toml add-admin --name admin

API keys are intended for machine access and initial setup. Once you configure OIDC authentication, you can delete the API key — no credentials are stored in the database.

See the Installation guide for full details including bare-metal install, Docker Compose, TLS setup, and development builds.

Documentation

Commercial support

Commercial support for rustguac is available from Sol1.

License

Apache License 2.0 — see LICENSE for details.

S
Description
Lightweight Rust replacement for Apache Guacamole — browser-based SSH, RDP, VNC, SPICE/PVE and web sessions via guacd with SSH jump hosts, Kerberos NLA, Vault address book, and OIDC SSO
Readme Apache-2.0 13 MiB
Languages
Rust 40.7%
JavaScript 26.1%
HTML 23.8%
Shell 6%
Dockerfile 1.2%
Other 2.2%