Open Recorder is now a macOS-only screen recorder, screenshot tool, and lightweight editor built as a native Swift app backed by a Rust service.
The product uses a small native stack: Swift owns the macOS experience, capture UI, recording controls, screenshot flow, playback, and Finder/privacy integrations. Rust owns durable local service work such as app paths, project metadata, recording registration, screenshot indexing, and export bookkeeping.
- Record a display, window, or interactive selected area on macOS
- Capture screenshots from displays, windows, or selected areas
- Choose microphone input, system audio, camera capture, cursor visibility, and click recording before capture
- Save recordings under
~/Movies/Open Recorder - Save screenshots under
~/Pictures/Open Recorder - Automatically create
.openrecorderproject metadata - Browse projects in the native project library
- Preview recordings with the native AVKit player
- Export recordings through the Rust service
- Open Screen Recording privacy settings from inside the app
Open Recorder includes a native editor for turning raw captures into shareable videos and screenshots without leaving the app.
- Backgrounds - place recordings on transparent, solid color, gradient, or bundled wallpaper backgrounds.
- Framing - adjust stage padding, background blur, shadow strength, and recording corner roundness.
- Inset styling - add an inset treatment around the recording with configurable amount, color, opacity, and balance.
- Crop and aspect controls - crop recordings visually and preview/export them in automatic or fixed aspect layouts.
- Cursor overlays - show or hide the captured cursor path, loop cursor motion, tune cursor size and smoothing, and choose from system, touch, and emphasis cursor styles.
- Timeline playback - use transport controls, frame stepping, hover scrubbing, preview speed controls, and timeline zooming while editing.
- Zoom sections - add manual zoom regions from the timeline, set zoom depth, and adjust X/Y focus. The app can also generate automatic zooms from recorded click telemetry.
- Clip splitting and speed changes - split the recording at the playhead, select clips, set clip speeds from 1x to 2x, merge adjacent split points, and delete selected clips while preserving at least one playable segment.
- Camera clips - when a camera track was recorded, split the camera layer independently, show or hide camera segments, place the facecam in a 3x3 position grid, and adjust camera size and border width per segment.
- Autosaved edits - video styling, crop selection, cursor settings, facecam settings, and timeline edits are saved into the
.openrecorderproject metadata.
- Composed screenshots - place screenshots on the same background system used by the video editor.
- Layer styling - adjust background padding, background roundness, background shadow, image roundness, and image shadow separately.
- PNG output - export the composed screenshot to a file or copy it directly to the clipboard.
- Project persistence - screenshot styling is autosaved with the project so the composition can be reopened later.
- Export styled video projects as MOV or MP4 files, or as animated GIFs.
- Choose 480p, 720p, 1080p, or 4K output presets for movie exports.
- Choose Low, Medium, or High MP4 quality presets.
- Choose Medium, Large, or Original GIF sizing, 15/20/25/30 FPS, and looping behavior.
- Exported videos and GIFs include the selected crop, background styling, inset styling, cursor overlay, timeline speed/deletion edits, zoom effects, and camera clip settings.
apps/macos- native SwiftUI macOS appapps/rust-service- Rust JSON-lines service and one-shot command backendapps/landing- Next.js landing page for the project
Requirements:
- macOS
- Xcode command line tools with Swift 6.2+
- Rust 1.93+
Install locked JavaScript dependencies and prefetch Rust crates:
pnpm run setupBuild everything:
make build-macosPackage a local .app bundle:
make package-macosRun the native app:
make dev-macosDevelopment runs as a separate macOS app:
make dev-macosbuilds, installs, and launches/Applications/Open Recorder Dev.app- The development bundle identifier is
dev.openrecorder.app.dev - Production packaging remains
/Applications/Open Recorder.appwith bundle identifierdev.openrecorder.app - Script entrypoints spell out their role: development scripts use
development, production/release scripts useproduction, and shared helpers useshared. - Development signing prefers a real development certificate when one is available. Without one, the dev bundle is ad-hoc signed with a stable designated requirement for
dev.openrecorder.app.dev, so macOS privacy grants are not pinned to each rebuilt executable hash.
This keeps development and production installs from sharing macOS app identity, window state, and privacy permission records.
Run verification:
make test-macosThe root pnpm dev, pnpm build, and pnpm test aliases now call those same macOS Swift/Rust targets.
Run the landing page locally:
pnpm dev:landingThe Rust service can run as a long-lived JSON-lines process:
printf '%s\n' '{"id":1,"method":"health","params":{}}' | apps/rust-service/target/debug/open-recorder-serviceIt also supports one-shot calls used by the Swift app:
apps/rust-service/target/debug/open-recorder-service --oneshot paths '{}'Primary methods:
healthpathsprepareRecordingFileregisterRecordingsaveProjectlistProjectsloadProjectforgetProjectrememberScreenshotexportRecording
Screen recording requires macOS Screen Recording permission for the app process. In development, the Swift app can open the relevant privacy pane from Settings. After granting access, restart the app so macOS refreshes the permission state.
Open Recorder is licensed under the Apache License 2.0.
