Important
We’re unifying OBS into one hybrid Rust/C/C++ build. Prioritize migrating code to Rust and retiring the C/C++ implementations it replaces. Each completed port becomes part of the application, with compatibility and parity checks supporting the transition.
This is an independent rewrite of the obsproject's obs-studio.
Same obs studio, but without the bugs. AI generated issues and PRs welcome.
Got an idea? Start a conversation.
Want to help port OBS to Rust? Paste this into your AI agent:
PROMPT="/loop 10m https://raw.githubusercontent.com/obs-rust/obs-studio/refs/heads/master/.claude/skills/obs-worker/SKILL.md"
claude --dangerously-skip-permissions "$PROMPT"Using another agent? Paste this instead:
You are a worker in obs-rust/obs-studio, the Rust rewrite of OBS Studio.
Take exactly one issue from claim to an open pull request, then stop.
1. Clone https://github.com/obs-rust/obs-studio if you are not in it.
Read AGENTS.md, then .claude/skills/obs-worker/SKILL.md, and follow it.
It sends you to docs/rust-port/coordination.md and
docs/rust-port/testing-policy.md: read both before you code.
2. Pick one open issue from label:ready (fall back to
label:needs-investigation). Skip any with a recent "Claiming:" comment
or an open PR that names it. Comment "Claiming: #N" with a short plan.
3. Branch from master. Commit a failing test first (RED), then the fix
that makes it pass (GREEN). Run ./lint. One PR per issue.
4. Open the PR against master, describing RED and GREEN.
5. Do not merge, never push to master, and never commit secrets.
Report the PR URL and stop. Maintainers queue PRs; you don't.
Stuck? Ask in the Discord linked in the README, or in Discussions.
OBS-Studio-Rust is a beta. Every package is attached to a release in
releases, named
OBS-Studio-Rust-<version>-<os>-<cpu>.<ext>: take the newest
obs-studio-rust-v* release and the file for your OS and CPU. Each release
also ships a SHA256SUMS file.
It installs and runs beside upstream OBS Studio. It has its own app
identity and keeps its settings in an obs-studio-rust folder inside the
usual per-user config directory, so neither program overwrites the other. On
its first start it copies upstream OBS's settings, profiles, scenes and
plug-in settings without changing the originals; later upstream changes are
not imported again. Windows and macOS are a new app identity, so the OS may
ask for capture permissions again.
- AppImage — any distribution:
chmod +x OBS-Studio-Rust-*-linux-x86_64.AppImage, then run it. The AppImage is tested on AlmaLinux 8 (the glibc 2.28 floor), Ubuntu 22.04, Ubuntu 24.04, Arch Linux and NixOS. On NixOS, see the AppImage entry in the Q&A below. - .deb — Ubuntu 26.04:
sudo apt install ./OBS-Studio-Rust-*-ubuntu-26.04-x86_64.deb. It installs the GUI asobs-studio-rust-gui;obs-studio-rustis the obs-websocket command-line client. It keeps its settings in~/.config/obs-studio-rust. - Flatpak bundle:
flatpak install --user ./OBS-Studio-Rust-*-linux-x86_64.flatpak, thenflatpak run io.github.obs_rust.OBSStudioRust. It gets the Freedesktop runtime from Flathub and does not update itself yet: install the next release's bundle the same way. It is not on Flathub (com.obsproject.Studiothere is upstream OBS Studio), so it installs asio.github.obs_rust.OBSStudioRust, beside upstream's rather than over it. Its settings are in~/.var/app/io.github.obs_rust.OBSStudioRust/config/obs-studio, and its plug-ins go in~/.var/app/io.github.obs_rust.OBSStudioRust/data/obs-studio/plugins/. To bring your scenes over from upstream's Flatpak, copy~/.var/app/com.obsproject.Studio/config/obs-studioto that config folder.
Open the .dmg for your CPU (macos-arm64 on Apple silicon, macos-x86_64
on Intel), copy OBS-Studio-Rust.app to Applications, and start it.
Packages are signed and notarized when the project's release credentials are
configured. For an unnotarized download, try opening the app once, then allow
it in System Settings → Privacy & Security → Open Anyway; for a download
you trust, the Terminal alternative is
xattr -dr com.apple.quarantine /Applications/OBS-Studio-Rust.app, which
removes quarantine from that app only (see
Apple's guidance). Its settings are in
~/Library/Application Support/obs-studio-rust.
Unpack the .zip for your CPU, then start bin\64bit\obs64.exe from the
unpacked folder. SmartScreen warns on the first start: choose More info,
then Run anyway if you trust the download. The -symbols.zip files are
only for decoding crash dumps. Its settings are in %APPDATA%\obs-studio-rust.
How much of libobs is Rust — the part that has to be ported. The rest of the app can stay C++ in the hybrid build. Measured by tools/conversion/measure.py; click the card for the full breakdown.
Tip
Come talk to us on Discord. We're a new project, and the people building it are there. Ask a question, tell us what works or breaks on your setup (AppImage, .deb, Flatpak, your plug-ins and capture devices), suggest an idea, or follow the port as it lands. No question is too small.
What OBS-Studio-Rust does differently from upstream OBS Studio, for a user: new features, changed behavior and fixed upstream bugs, by area, with links to the issues and pull requests. See the features ledger.
Want to fix one yourself? Contributors, human or AI-assisted, chat about ports and pull requests on Discord.
preview_small.mp4
4.3× faster to the main window and 19% less memory on an NVIDIA streaming rig (#1168, #1170, #1171, #1172).
The top five, ranked by merged PRs only, credited to the original author even when a maintainer re-landed the work (counted once). Updated every 4 hours.
Lots of people and AI agents work on this repo at the same time, so CI is built to do as little repeated work as possible:
- Every pull request gets a quick check. It runs the Rust and C tests on Linux, plus macOS or Windows only when your change touches those platforms. It does not build every app package.
- The full build runs before each release. Once a day, and before anything is published, CI builds and tests everything: every platform, the full app, a Flatpak build check and the release packages. A beta only ships if all of it passes.
- You can prove your change locally first. One command (
ci-lint local-gate run) runs the same Linux checks on your machine and signs your commit. CI sees the signature and skips the checks you already ran. This applies to a pull request from a branch of this repository whose author has write access; a fork PR runs every check anyway, so stamping saves you nothing there. - Builds are cached and shared. Rust builds go through
soldr, which reuses compiled code across branches and machines.
The full guide, with the tools, rules and commands, is in docs/ci-tooling.md. If you're contributing, please read it before you push: it explains how to avoid overloading the shared machines and CI.
Where can I get help, or report something that isn't quite a bug?
Join us on Discord: it's the quickest way to reach the people working on OBS Rust. For a reproducible bug, please also file an issue; for longer ideas, start a discussion.
Does OBS Rust support all of the plug-ins?
Yes. OBS Rust is fully backwards compatible with OBS Studio — the plug-ins you already have should work as-is. If you find one that doesn't, that's a bug: please file an issue and link it here so we can track it.
How do I install it on Linux?
See Install above: the AppImage, the .deb and the Flatpak
bundle, and where each one keeps its settings.
How do I run the AppImage on NixOS?
The simplest way is appimage-run (programs.appimage.enable = true;, then
appimage-run ./OBS-Studio-Rust-*.AppImage). It gives the AppImage the
paths a regular distribution has, and OBS renders on your GPU and finds NVENC.
Running the AppImage directly works through nix-ld. Your configuration needs
hardware.graphics.enable = true;, programs.nix-ld.enable = true; and
Wayland among nix-ld's libraries:
programs.nix-ld.libraries = with pkgs; [ wayland ];Without Wayland there, the AppImage stops at start and says so. You don't
need to add /run/opengl-driver/lib or the keyboard layouts: the AppImage
finds the driver libraries (for NVENC) and /etc/X11/xkb itself.
How do I install plug-ins for the AppImage?
The AppImage loads plug-ins from the same per-user folders as OBS Studio on Linux, so a plug-in you already installed for your own account is picked up as-is. To add one, unpack its Linux build into either of these folders:
~/.local/share/obs-studio/plugins/<plugin>/, with the module at<plugin>/<plugin>.soand its files under<plugin>/data/(the current layout).~/.config/obs-studio/plugins/<plugin>/, with the module at<plugin>/bin/64bit/<plugin>.soand its files under<plugin>/data/(the older layout that many plug-in downloads still use).
Then restart OBS Rust. Tools → Plugin Manager lists what loaded.
Plug-ins installed system-wide by a distribution package (under
/usr/lib/obs-plugins or /usr/lib/<arch>/obs-plugins) are not loaded.
They were built against that distribution's OBS and libraries, not the ones
inside the AppImage. Use the plug-in's own Linux download instead.
A plug-in with its own Qt windows must be built for a Qt 6 release no newer than the one in the AppImage. If a plug-in sits in one of those folders but doesn't load, run the AppImage from a terminal and the log will say why. Then file an issue as above.
Want to see the original README from OBS Project? Click here.
Bugs they confirmed, then closed. Features you relied on, then removed. Twelve upstream threads where users showed up in numbers and were turned away anyway. Six of them were closed as stale on a single afternoon.
| Issue | 💬 | Fate | |
|---|---|---|---|
| 🥇 | Preview Stutter that appears in Streams/Recordings | 184 | locked (off-topic) |
| 🥈 | OBS Virtual Camera may affect built-in webcams | 87 | closed not planned, locked |
| 🥉 | Removal of --disable-shutdown-check breaks automated background workflows | 64 | closed not planned, locked |
| 4 | Dock Sizes are Reset the next time you open OBS. | 34 | closed not planned |
| 5 | Pause and Resume Recording Doubles or Triples CPU usage | 34 | closed not planned |
In their own words:
“No amount of "I don't like your answer" will change it.” — #9285, to a user who said a downgrade fixed their dropped frames
“However, if you refuse to follow the process, there is nothing we can do, and this report is not actionable.” — #13685, in the same comment that admitted 32.2 had raised the driver minimum
“[…] that decision has already been made.” — #12650, on removing a flag users' setups depended on



