Minimalistic cross-platform screen recorder built with Tauri v2, SvelteKit, and Rust.
Wraps FFmpeg with a clean native UI — select a source, hit record, get an MP4. No bloat, no accounts, no cloud.
Ctrl+Shift+R to start/stop recording from anywhereRelease builds bundle FFmpeg — no separate install needed. For development, you'll need FFmpeg on your PATH:
macOS: brew install ffmpeg
Windows: choco install ffmpeg or download from ffmpeg.org and add to PATH
Linux: sudo apt install ffmpeg
# install dependencies
npm install
# run in development mode
npm run tauri dev
# build for production
npm run tauri build
| Command | Description |
|---|---|
npm run tauri dev |
Start the app in development mode with hot reload |
npm run tauri build |
Build a production binary/installer |
npm test |
Run all checks (format + lint + type check + clippy + rust tests) |
npm run format |
Format all files with Prettier |
npm run format:check |
Check formatting without writing changes |
npm run lint |
Run ESLint |
npm run lint:fix |
Run ESLint with auto-fix |
npm run check |
Run svelte-check (TypeScript + Svelte type checking) |
npm run test:rust |
Run cargo clippy and cargo test |
slop-screen-recorder/
├── src/ # SvelteKit frontend
│ └── routes/
│ └── +page.svelte # Main recording UI
├── src-tauri/ # Tauri + Rust backend
│ └── src/
│ ├── lib.rs # Tauri app setup and command registration
│ └── recorder.rs # FFmpeg process management and platform logic
├── eslint.config.js # ESLint config (Svelte + TypeScript)
├── svelte.config.js # SvelteKit config (static adapter for SPA)
└── package.json
The Rust backend spawns FFmpeg as a child process with platform-specific capture arguments:
| Platform | Capture | Encoder |
|---|---|---|
| macOS | avfoundation |
h264_videotoolbox (hardware) |
| Windows | gdigrab |
libx264 |
| Linux | x11grab |
libx264 |
Recording starts by sending the appropriate FFmpeg command and stops by writing q to stdin for a graceful shutdown that finalizes the MP4 file.