Oceanic is a modern ambient sound and scene player built as a desktop app with Tauri + React + TypeScript. It helps you focus, relax, and sleep with layered sound mixing, curated visual scenes, timers, fade-out controls, and tray-first playback controls.
- Real-time ambient mixer with grouped sounds and per-sound volume control
- Scene library with preview, search/filter, favorites, quick actions, and fullscreen playback modal
- Sleep timer with optional fade-out over configurable duration
- Auto-play on launch and persisted local preferences
- Native system tray integration (show/hide, play/pause, quit)
- Optional launch-on-startup support
- Multiple utility pages: Mixer, Scenes, Timer, and Settings
- Custom desktop titlebar and frameless Tauri window UX
Oceanic combines frontend state with native desktop controls:
- Playback state and preferences
- Frontend audio playback is managed in React (
src/App.tsx) with per-soundHTMLAudioElementinstances. - User preferences are managed via
useOceanicPreferencesand persisted locally.
- Tray-first workflow
- Rust backend creates tray menu actions for:
- show window,
- hide window,
- play/pause all sounds,
- quit app.
- Tray play/pause emits
oceanic://toggle-playbackwhich the React app listens to.
- Close-to-tray behavior
- Closing the main window does not quit when
minimizeToTrayis enabled. - The window hide behavior is handled in
src-tauri/src/lib.rs(WindowEvent::CloseRequested).
- Startup behavior
- Launch-on-startup is handled with
@tauri-apps/plugin-autostart. - If launched with autostart arg and
startMinimizedis enabled, the window starts hidden.
Mixer: Live ambient controls, categories, master volume, sleep timer, and fade out.
Scenes: Browse and play curated visual scenes with quick actions.
Settings: Startup, playback, interface, and accessibility preferences.
Navigation: Desktop-style top bar and routed pages.
src/
|-- components/ # Shared UI components (titlebar, scene player, cached video)
|-- hooks/ # Preferences/state hooks
|-- lib/ # Sounds, scenes, themes, types, video cache helpers
|-- pages/ # Mixer, Scenes, Timer, Settings pages
|-- App.tsx # App shell + routing + audio lifecycle
|-- main.tsx # React entry point
`-- index.css # Tailwind + app styling
src-tauri/
|-- src/
| |-- lib.rs # Tray, window lifecycle, native commands
| `-- main.rs # Tauri bootstrap
|-- tauri.conf.json # Window/build/bundle config
`-- Cargo.toml # Rust dependencies and crate config
- Node.js 18+
- pnpm
- Rust toolchain
- Tauri system dependencies for your OS
pnpm installpnpm devOpen:
http://localhost:1420
pnpm tauri devpnpm dev # Start Vite dev server
pnpm build # Type-check and build frontend assets
pnpm preview # Preview built frontend assets
pnpm tauri dev # Run desktop app in development
pnpm tauri build # Build desktop installers/bundles/-> Mixer (ambient controls)/scenes-> Scene browser and player launcher/timer-> Focus timer workspace/settings-> App configuration panels
- Scene thumbnails now use
.avif. - Scene videos are encoded to
.mp4(libx264,CRF 28) for app usage. - Source media lives under
public/images/scenesandpublic/videos.
Built by the Oceanic project team.




