Vibemis is a gamepad-first, actively-maintained game-streaming client for SteamOS and Linux handhelds. It takes the best of both sides of the Moonlight/Artemis world — Moonlight Qt's solid Linux/handheld foundation and Artemis's support for Apollo's extended protocol — and pairs with Vibepollo, the Apollo-lineage host it's tuned for. Set up Vibepollo on your gaming PC, run Vibemis on your handheld, pair, and stream.
Built for SteamOS. The primary target is SteamOS Game Mode (Gamescope) on AMD handhelds; every release is hardware-verified on a Lenovo Legion Go S Z2 test device before it ships. It runs on any modern Linux desktop too.
Streaming clients in this world come in two flavors, and until now you couldn't get both on a Linux handheld:
- Moonlight Qt is the mainline open-source Qt client for PCs and handhelds — rock-solid and actively maintained — but it speaks only the base GameStream/Sunshine protocol. The extras that Apollo / Vibepollo hosts add (clipboard sync, server commands, OTP pairing, virtual display control, an in-stream Quick Menu, per-client permissions) simply don't work through it.
- Artemis is the client family that does speak those Apollo extensions. Artemis for Android comes from Apollo's own author, but the desktop/Linux build — wjbeckett/artemis ("Moonlight Noir"), which Vibemis is forked from — went dormant (Aug 2025) with an AppImage that no longer builds on current Mesa/glibc. That left no maintained Linux/handheld client with the Apollo features.
Vibemis takes the best of both: Moonlight Qt's current, well-supported Linux/handheld base plus the Apollo-protocol features from the Artemis lineage — actively maintained, fixed for current SteamOS/Mesa/AMD, gamepad-first, and tuned for the Vibepollo host.
- The Apollo features, on a maintained Linux handheld — clipboard sync, server commands, OTP pairing, virtual display, in-stream Quick Menu, and per-client permissions, all surfaced on-device
- Works on current SteamOS — VAAPI/Mesa compatibility fixes for AMD hardware; every cycle is verified on the Lenovo Legion Go S Z2 (including nested-Gamescope "Game Mode" runs)
- Tuned for Vibepollo — pairing flow, clipboard auth, and SSL handling built for the Vibepollo host specifically
- One-toggle VRR frame pacing — flip "Enable VRR (beta)" in Settings and everything else is automatic: V-Sync enables itself, the FPS target derives from your panel's refresh rate, and the Vulkan presenter is selected for you — no scripts, no env vars, no config editing; sessions that can't sustain VRR fall back to fixed pacing with a visible notice, and the whole feature is validated with real streaming sessions on device before every release
- Settings that make sense — every option lives where you'd look for it: display, decoding, and HDR together under Video, connection options under Streaming, app behavior under App & UI — reviewed item-by-item with an automated zero-drop check so reorganizations never lose a setting
- Clean, crackle-free audio on PipeWire handhelds — Vibemis ships a real SDL2 audio runtime (PulseAudio path) instead of the SDL3+sdl2-compat native-PipeWire stack other current builds use, and that difference is CI-guarded so upstream merges can't silently lose it
- Updates that can't brick your install — the self-updater stages the new AppImage beside the old one and swaps with an atomic rename (never rewriting the running file), keeps a rollback copy, and survives crashes mid-download
- Kept current — upstream moonlight-qt changes are pulled in through staged, device-verified quarterly rebases (see the release notes for what each cycle adopted), with a CI pipeline on every push
Clients vs. hosts: Vibemis, Moonlight Qt, and Artemis are clients (they run on your handheld/PC). They pair with a host on your gaming PC: Vibepollo (the counterpart Vibemis is tuned for), Apollo, or vanilla Sunshine. Apollo/Vibepollo are Sunshine-lineage hosts; their extended features light up automatically when the host supports them.
No building, no installer, no dependencies. Vibemis is a single self-contained file — download it and double-click it.
📲 Already have Vibemis installed? Skip the download — it updates itself. In the app open Settings → Advanced → Software updates, pick your channel (Stable recommended; Beta for the newest features), then Check for updates → Update now. Details in Downloads & updates.
- Switch to Desktop Mode. (Hold the power button → Switch to Desktop.)
- Open a web browser and go to the Releases page.
Download the latest
.AppImagefile (either a Release or the latest Pre-release — both work; the newest one is fine). - Find the downloaded file (usually in your Downloads folder) and double-click it to run.
- If double-clicking does nothing, right-click the file → Properties → Permissions → tick "Is executable" (or "Allow executing file as program"), then double-click again.
That's it — Vibemis opens and you can add your host PC.
If it still won't open and you see a FUSE error (common on SteamOS, which doesn't ship
libfuse2), open a terminal in the file's folder and run it in extract mode — no installation needed:./Vibemis-*.AppImage --appimage-extract-and-run
Same idea: download the latest .AppImage from
Releases, make it executable
(right-click → Properties → "Allow executing as program", or chmod +x Vibemis-*.AppImage),
then double-click or run ./Vibemis-*.AppImage.
Install the latest stable from the Releases page. The
.AppImageis Vibemis's distribution channel on every distro — download it, run it, and it keeps itself up to date in place (see Auto-updates). A Flathub (Flatpak) package was explored but declined under Flathub's policy on generative-AI-assisted projects, so there is no Flatpak build; the self-updating AppImage is the supported way to install and stay current.
To launch Vibemis from Game Mode:
Easiest: run scripts/install-vibemis-desktop.sh from a Desktop Mode terminal — it installs the
AppImage to a stable path with a clean Vibemis desktop entry, ready to Add to Steam. Or manually:
- In Desktop Mode, right-click the AppImage and select Add to Steam
- Open the shortcut's Properties and set the name to
Vibemis - Switch to Game Mode — Vibemis appears in your library under Non-Steam Games
The in-stream Quick Menu works in Game Mode: it is composited into the stream itself (OverlayManager surface), so it renders identically under Gamescope and on the desktop. Open it with
Select + L1 + R1 + Y; close with B, Back/Select, or Start ("Resume Game").
- Hardware-accelerated video decoding (VAAPI, VDPAU, NVDEC, CUDA)
- H.264, HEVC, and AV1 codec support
- YUV 4:4:4 chroma, HDR streaming, 7.1 surround sound
- 10-point multitouch, gamepad with force feedback and motion controls (up to 16 players)
- Pointer capture / direct mouse mode, system-wide keyboard shortcut passthrough
- Clipboard Sync — bidirectional clipboard between client and host
- Server Commands — trigger custom commands on the Apollo/Vibepollo host
- OTP Pairing — secure pairing via Vibepollo's "Pair Client" web UI
- Quick Menu — in-stream overlay for clipboard, commands, and stream controls
- Custom Refresh Rates — client-side custom refresh, including fractional rates (e.g. 59.94 Hz, 90 Hz, 120 Hz)
- Resolution Scaling — client-side scale factor for performance tuning
- Virtual Display Control — request a virtual display on the host
- UUID-Based App Launching — modern app identification with legacy fallback
- Permissions Viewer — inspect host-side client permissions from the app
- Game Mode Quick Menu — the in-stream menu is rendered offscreen and composited into the video (works under Gamescope, not just the desktop), with full gamepad navigation and a discoverable "Resume Game" exit (B / Back / Start). From it you can upload / fetch the host clipboard, paste clipboard text as keystrokes, type text to the host (on-screen text-send), run server commands, send special keys (Ctrl+Alt+Del, Alt+F4, Win/Super, Esc, Shift+Tab), view stream info, toggle performance stats / mouse & keyboard capture / fullscreen / the touch overlay, and disconnect or quit the game. Navigation feedback sounds are optional
- Touchscreen passthrough & touch modes — the handheld's touchscreen forwards native taps and drags to Apollo-lineage hosts, or acts as a virtual trackpad instead (switchable via "Use touchscreen as a virtual trackpad" in Input settings)
- On-screen touch controls (opt-in) — two translucent buttons composited into the stream: MENU (top-left) opens the Quick Menu, KBD (top-right) opens text-send. Finger taps only — mouse clicks in those corners pass through to the game
- Tailscale-first remote play — one-command
scripts/setup-tailscale.sh, an in-app setup button, and automatic preference for tailnet addresses when reaching a host - SteamOS one-click integration —
scripts/vibemis-setup.shguided setup (doctor → update → install → pair → add games to Steam), plus per-script helpers and a self-update command - Settings export / import — portable
.inibackup of the full configuration - In-app updates with channels — pick Stable / Release candidate / Beta / Alpha in Settings → Advanced → "Software updates", check for updates on demand, and (when running as an AppImage) install the new build in place with one tap — no browser or terminal needed
- Performance overlay controls — corner anchoring, text size, optional wall clock, and a data-usage estimate next to the bitrate slider
- Handheld quality-of-life — battery-saver bitrate, controller-rumble suppression, motion (gyro) capability detection, host software version & per-client permission surfacing, AV1 and native-resolution guidance, an HDR display-capability gate, and an HDR-to-SDR tone-map toggle
vibemis selftest— headless smoke test used by CI and on-device testing- Per-game stream profiles — save resolution/FPS/bitrate/HDR per game from the app tile's context menu; the profile applies automatically at launch without touching global settings
- Auto-reconnect (on by default) — a dropped stream retries in place (3 attempts with backoff) instead of dumping you back to the game grid; toggleable in Settings
- Wi-Fi power-saving control — a status row and toggle in Settings → Streaming that shows and flips your Wi-Fi radio's power-saving state. SteamOS silently re-enables Wi-Fi power management on every Game Mode session, which throttles the link and causes stream stutter; this surfaces the live state (green when off, amber warning when on) and turns it off in one tap
- Gamepad-first redesign — a full controller-first UI built on a unified dark design-token
system: a single teal accent (
#00CCCC) plus one surface / spacing / type scale and role-named semantic tokens (surface tiers, text hierarchy, status colors) applied consistently everywhere — one visual language, one place to theme. Every screen is restyled to match: the Computers list (rich status cards with a host-type badge — Vibepollo / Apollo / Sunshine — and a live host count), the app grid (a live RESUME badge on the running game — A resumes it, Y quits it), the Add-PC dialog, the Host-options side-sheet, Settings (a category sidebar with token-styled controls), the in-stream Quick Menu and Server Commands, and in-stream Help. A single header, per-screen chrome, line icons, a persistent gamepad hint bar, and the accent focus-ring keep focus unmistakable at arm's length. Seedocs/DESIGN_SYSTEM.mdfor the token language - First-run welcome — a token-styled welcome sheet greets you on first launch: the Quick Menu chord, the Add-to-Steam tip, and a pointer to Settings, then it never shows again. Gamepad-first — a single focused "Get started" action (A); B / Esc dismisses
Current known issues, limitations, and per-release changes -> see docs/KNOWN_ISSUES.md and the latest Release.
Vibemis streams over your LAN out of the box. To stream when the client and host are on different networks — without port forwarding or exposing your host to the internet — put both devices on the same Tailscale network. Tailscale is free for personal use, end-to-end encrypted (WireGuard), and handles NAT traversal automatically.
- On the host (the PC running Vibepollo/Apollo/Sunshine): install Tailscale and sign in.
- On the client (Steam Deck / handheld running Vibemis): install Tailscale and sign in with the same account. On SteamOS, Tailscale is available as a Flatpak or via the static binary.
- In Vibemis, add the host by its Tailscale address — either its
100.x.x.xIP or its MagicDNS name (hostname.your-tailnet.ts.net). Pair and stream exactly as you would on the LAN.
Notes
- No Vibemis configuration is required beyond using the Tailscale address as the host.
- For best latency, Tailscale will establish a direct peer-to-peer path when possible and fall back to an encrypted relay (DERP) otherwise. Expect LAN-class latency on a direct path; relayed paths add some overhead.
- The host's streaming ports do not need to be forwarded — Tailscale carries the traffic over the encrypted tunnel.
| Input | Shortcut |
|---|---|
| Keyboard | Ctrl + Alt + Shift + \ |
| Gamepad | Select + L1 + R1 + Y (default — configurable in Settings → Input) |
| Touch | MENU button, top-left (needs the opt-in on-screen touch controls) |
All shortcuts require Ctrl + Alt + Shift:
| Key | Action |
|---|---|
\ |
Toggle Quick Menu |
Q |
Quit stream |
E |
Quit stream and exit app |
S |
Toggle performance stats overlay |
X |
Toggle fullscreen |
M |
Toggle mouse capture |
Z |
Toggle input capture |
C |
Toggle cursor visibility |
V |
Paste clipboard text |
L |
Toggle pointer region lock |
D |
Minimize window |
= / - |
Zoom the video in / out |
0 |
Reset zoom (and re-center) |
| Arrow keys | Pan the video while zoomed |
| Combo | Action |
|---|---|
Select + L1 + R1 + Y (configurable) |
Toggle Quick Menu |
D-pad / A (while menu open) |
Navigate / activate menu item |
B, Back/Select, or Start (while menu open) |
Close menu / resume game |
Start + Select + L1 + R1 |
Quit stream |
Select + L1 + R1 + X |
Toggle performance stats overlay |
Long press Start |
Toggle mouse emulation mode |
| Input | Action |
|---|---|
| Tap / drag on the stream | Forwarded to the host as native touch — or moves the cursor when "Use touchscreen as a virtual trackpad" is on (Settings → Input) |
| MENU button (top-left) | Open the Quick Menu (opt-in on-screen touch controls) |
| KBD button (top-right) | Open "Send text to host" (opt-in on-screen touch controls) |
Each release ships a single .AppImage — download and double-click; nothing to extract.
The AppImage is Vibemis's distribution channel (there is no Flatpak/Flathub build — see
Any other Linux).
Vibemis keeps itself current — no re-download, no reinstall. Point it at a channel once and the app watches that channel's release feed and offers the new build in place when one appears:
📲 Already have a previous version installed? Update in-app. Open Settings → Advanced →
Software updates, pick the channel that matches the build you want (see the table below —
Stable for 0.x.y, Release candidate for -rc, Beta for -beta, Alpha for
-alpha), then Check for updates → Update now. When you're on Stable, Vibemis detects
a newer stable the moment one is published and offers to install it. The AppImage swaps itself
in place (the previous build stays alongside as .old for rollback) and relaunches. The
scripts/vibemis-update.sh helper does the same from a terminal or a Steam shortcut.
Versions follow Semantic Versioning 2.0.0 — pre-releases are
suffixed versions of the stable they precede (0.5.0-beta.007 → 0.5.0), with dense
zero-padded counters. The first stable is 0.1.0; its release-candidate lineage (0.1.0-rc.001..006, including the interim-scheme cuts) is preserved on the releases page.
| Channel | Tag shape | Built from | Use |
|---|---|---|---|
| ✅ Stable | 0.x.y (bare) |
Explicit release cuts | Recommended — hand-verified on device |
| 🎯 Release candidate | 0.x.y-rc.NNN |
Explicit rc cuts | The exact build proposed as the next stable, for on-device verification |
| 🧪 Beta | 0.x.y-beta.NNN |
vibemis-main |
Manual-testing channel — newest features |
| 🔬 Alpha | 0.x.y-alpha.NNN |
test<N>-* branches (on request) |
Automated CI artifacts |
→ Download the latest stable · 📅 build timeline — newest first, all channels · all releases · newest betas · newest alphas
ℹ️ GitHub's Releases and Tags pages sort by SemVer precedence, not date — and per SemVer,
alphapre-releases rank belowbetaones of the same version, so the newest alpha appears after all the betas (often on page 2). Use the filtered links above, or the in-app channel picker, to find the newest build of a specific tier.
The releases page lists the project's complete build history under the semver catalog —
every alpha, beta, and rc train through each stable. Historical entries are prerelease-flagged
markers without artifacts; see docs/RELEASE_HISTORY.md for the
full map (original tags, commits, CI runs, and the story of every stable number).
For development or debugging only. No need to build to use Vibemis — just download the AppImage above.
Ubuntu / Debian:
sudo apt install \
qt6-base-dev qt6-declarative-dev libqt6svg6-dev \
qml6-module-qtquick-controls qml6-module-qtquick-templates \
qml6-module-qtquick-layouts \
libegl1-mesa-dev libgl1-mesa-dev \
libopus-dev libsdl2-dev libsdl2-ttf-dev libssl-dev \
libavcodec-dev libavformat-dev libswscale-dev \
libva-dev libvdpau-dev \
libxkbcommon-dev wayland-protocols libdrm-devFedora / RHEL:
sudo dnf install \
qt6-qtbase-devel qt6-qtdeclarative-devel qt6-qtsvg-devel \
openssl-devel SDL2-devel SDL2_ttf-devel ffmpeg-devel \
libva-devel libvdpau-devel opus-devel \
pulseaudio-libs-devel alsa-lib-devel libdrm-develgit clone --recurse-submodules https://github.com/navyas321/vibemis.git
cd vibemis
qmake6 vibemis.pro CONFIG+=release
make -j$(nproc)
./app/vibemis# Requires linuxdeploy-x86_64.AppImage in PATH
bash scripts/build-appimage.sh
# Output: build/installer-release/Vibemis-<version>-x86_64.AppImage- Artemis (desktop / "Moonlight Noir") by wjbeckett — the C++/QML desktop client (a Moonlight-Qt-lineage build that speaks Apollo's extensions) that Vibemis is forked from; now dormant
- MobinYengejehi/Artemis by MobinYengejehi — a community fork of Artemis Android whose features served as a reference for Vibemis
- Moonlight Qt by the Moonlight Team — the upstream streaming client this is built on
- Apollo and Artemis Android by ClassicOldSong — the Sunshine fork and Android client whose protocol extensions this client speaks
- Sunshine by LizardByte — the original open-source game streaming server
- moonlight-common-c (ClassicOldSong's Apollo-lineage fork) — the protocol/codec library submodule
- Vibepollo by Nonary — the Apollo-lineage host Vibemis is built to pair with (the counterpart to this client)
GPL v3 — see LICENSE.




