Runnable examples demonstrating core ScreenCaptureKit APIs.
cargo run --example 01_basic_capture| # | Example | Description | Features |
|---|---|---|---|
| 01 | basic_capture |
Simplest screen capture | - |
| 02 | window_capture |
Capture specific window | - |
| 03 | audio_capture |
Audio + video capture | - |
| 04 | pixel_access |
Read pixel data from frames | - |
| 05 | screenshot |
Single screenshot, HDR capture | macos_14_0, macos_26_0 |
| 06 | iosurface |
Zero-copy GPU buffer access | - |
| 07 | list_content |
List displays/windows/apps | - |
| 08 | async |
Async/await API, async picker | async, macos_14_0 |
| 09 | closure_handlers |
Closures as handlers | - |
| 10 | recording_output |
Direct video recording | macos_15_0 |
| 11 | content_picker |
System content picker UI | macos_14_0 |
| 12 | stream_updates |
Dynamic config/filter updates | - |
| 13 | advanced_config |
HDR, presets, microphone | macos_15_0 |
| 14 | app_capture |
Application-based filtering | - |
| 15 | memory_leak_check |
Memory leak detection with leaks |
- |
| 16 | full_metal_app |
Full Metal GUI application | macos_14_0 |
| 17 | metal_textures |
Metal texture creation from IOSurface | - |
| 18 | wgpu_integration |
Zero-copy wgpu integration | - |
| 19 | ffmpeg_encoding |
Real-time H.264 encoding via FFmpeg | - |
| 20 | egui_viewer |
egui screen viewer integration | - |
| 21 | bevy_streaming |
Bevy texture streaming | - |
| 22 | tauri_app |
Tauri 2.0 desktop app with WebGL | macos_14_0 |
| 23 | client_server |
Client/server screen sharing | - |
# Basic examples (no features needed)
cargo run --example 01_basic_capture
cargo run --example 02_window_capture
cargo run --example 12_stream_updates
cargo run --example 14_app_capture
# Async example
cargo run --example 08_async --features async
# Async with picker
cargo run --example 08_async --features "async,macos_14_0"
# macOS 14+ examples
cargo run --example 05_screenshot --features macos_14_0
cargo run --example 11_content_picker --features macos_14_0
# macOS 15+ examples
cargo run --example 10_recording_output --features macos_15_0
cargo run --example 13_advanced_config --features macos_15_0
# macOS 26+ HDR screenshot
cargo run --example 05_screenshot --features macos_26_0
# Metal GUI example
cargo run --example 16_full_metal_app --features macos_14_0
# Metal textures (no features needed)
cargo run --example 17_metal_textures
# wgpu integration
cargo run --example 18_wgpu_integration
# FFmpeg encoding (requires: brew install ffmpeg)
cargo run --example 19_ffmpeg_encoding
# egui viewer
cargo run --example 20_egui_viewer
# Bevy streaming
cargo run --example 21_bevy_streaming
# Tauri app (separate project, use npm)
cd examples/22_tauri_app && npm install && npm run tauri dev
# Client/server screen sharing
cargo run --example 23_client_server_server # Terminal 1
cargo run --example 23_client_server_client # Terminal 2
# All features
cargo run --example 08_async --all-features- Examples are numbered by complexity - start with
01 - Each example focuses on one API concept
- Check source code for detailed comments
Example 16 (16_full_metal_app) is a complete macOS application showcasing the full ScreenCaptureKit API:
- Metal GPU Rendering - Hardware-accelerated graphics with runtime shader compilation
- Screen Capture - Real-time display/window capture via ScreenCaptureKit
- Content Picker - System UI for selecting capture source (macOS 14.0+)
- Audio Visualization - Real-time waveform display with VU meters
- Screenshot Capture - Single-frame capture with HDR support (macOS 14.0+/26.0+)
- Video Recording - Direct-to-file recording (macOS 15.0+)
- Microphone Capture - Audio input with device selection (macOS 15.0+)
- Bitmap Font Rendering - Custom 8x8 pixel glyph overlay text
- Interactive Menu - Keyboard-navigable settings UI
# Basic (macOS 14.0+)
cargo run --example 16_full_metal_app --features macos_14_0
# With recording support (macOS 15.0+)
cargo run --example 16_full_metal_app --features macos_15_0
# With HDR screenshots (macOS 26.0+)
cargo run --example 16_full_metal_app --features macos_26_0Initial Menu (before picking a source):
↑/↓- Navigate menu itemsEnter- Pick Source / Quit
Main Menu (after picking a source - capture auto-starts):
↑/↓- Navigate menu itemsEnter- Select item (Stop/Start Capture, Screenshot, Record, Config, Change Source, Quit)Esc/H- Hide menu
Direct Controls (when menu hidden):
P- Open content pickerSpace- Start/stop captureS- Take screenshotR- Start/stop recording (macOS 15.0+)W- Toggle waveform displayM- Toggle microphoneC- Open config menuH- Show menuQ/Esc- Quit
The example shows proper Rust/Metal data alignment using #[repr(C)]:
// Rust struct matching Metal shader vertex input
#[repr(C)]
struct Vertex {
position: [f32; 2], // 8 bytes - matches packed_float2
color: [f32; 4], // 16 bytes - matches packed_float4
}
// Uniforms with explicit padding for 16-byte alignment
#[repr(C)]
struct Uniforms {
viewport_size: [f32; 2], // 8 bytes
time: f32, // 4 bytes
_padding: f32, // 4 bytes (16-byte alignment)
}