An embeddable operating system framework in Rust
Renders a skinnable shell — scene-graph UI, browser engine, 90+ terminal commands — anywhere you can provide a pixel buffer. 37 crates, 6,600+ tests.
One codebase, four deployment targets. Trait-based backends keep core code platform-agnostic.
SDL3-based backend for Linux, macOS, Windows, and Raspberry Pi with hardware-accelerated rendering.
Canvas 2D + Web Audio. Runs entirely in the browser with no server required.
Native PSP rendering via sceGu with full SDI scene-graph integration. TLS 1.3 via embedded-tls with RSA certificate support and automatic HTTP→HTTPS fallback. In-memory MP4 streaming with AAC hardware decode for TV Guide.
Software RGBA framebuffer exposed via C-ABI FFI for embedding in UE5 projects.
Direct /dev/fb0 rendering for headless or kiosk deployments without a display server.
18 skins ship out of the box. Switch at runtime or define your own in TOML.




























































A complete operating system shell, not just a UI toolkit. 16 built-in apps including TV Guide and Internet Radio.
Full HTML/CSS/Gemini rendering engine with DOM parser, CSS cascade, flex/grid/table layout, calc(), full 2D CSS transforms (rotate/scale/skew), Canvas 2D path API, SVG paths with fill-rule/linecap/linejoin and <g> groups, light compositor (display list with batched rect+text submission, occlusion culling, clip intersection, granular animation dirty tracking, sticky element scroll caching), animations, hover-triggered CSS transitions, form elements (select dropdown, label association), soft hyphens, bidi text, @supports, cookies, CSP, link navigation, reader mode, and JavaScript execution.
Embedded QuickJS-NG runtime across every backend — desktop, WASM, UE5, and real PSP hardware — with console API, inline <script> execution, DOM manipulation, full event dispatch (click, keydown/keyup, mousedown/mouseup/mousemove with detail properties), document.cookie, history.pushState/replaceState, persistent localStorage, and fetch(). The PSP build compiles QuickJS-NG’s C sources through the pspdev cross-toolchain (psp-gcc wired into the cc crate) and provides ~40 hand-written libc/libm shim symbols instead of linking newlib. DOM bindings are shared code with the other backends, and the engine is instantiated lazily the first time the user opens the browser app so boot-time cost is zero. See journal entry 09 for the bring-up story (originally boa_engine, later migrated to QuickJS-NG for the ~10× speed-up).
Draggable, resizable overlapping windows with hit testing, minimize/maximize/close decorations, and window snapping.
90+ commands across 17 modules. Variable expansion, glob patterns, aliases, history, and piping. A real shell inside the shell.
32 reusable widgets: Button, Card, TabBar, Panel, InputField, ListView, ScrollView, ProgressBar, Toggle, NinePatch, ColorPicker, DatePicker, SpinBox, Table, RichText, SplitPane, TreeView, Accordion, and flex layout.
Background MP3 and WAV playback with playlists, shuffle/repeat modes, ID3 tag parsing, and per-channel mixing.
18 skins (18 built-in + 14 external TOML) with theme derivation from 9 base colors. Runtime switching without restart.
MemoryVfs (in-RAM), RealVfs (disk), and GameAssetVfs (UE5 pak with overlay writes). Platform-agnostic file access.
Runtime-extensible plugin architecture with VFS-based IPC and event bus publish/subscribe. Install plugins via the built-in package manager.
TCP networking with PSK authentication. Connect to OASIS_OS instances remotely and execute commands over an encrypted channel.
Internet Archive-powered TV channels with a 1980s Prevue Channel aesthetic. Browse channels, view schedules, and watch video — progressive streaming decode on desktop (no ffmpeg required) with CDN failover and A/V sync, in-canvas on WASM, in-memory streaming with AAC hardware decode on PSP.
Stream MP3 audio from curated Internet Archive collections. Background playback with channel browsing and real-time metadata display.
Resolution-independent scene graph with path-based drawing, Altimit-style dashboard icons, and frame-driven animations via the oasis-vector crate.
Pure Rust TLS 1.3 via embedded-tls with RSA certificate support. On PSP, wraps raw TCP sockets with custom PRNG entropy and automatic HTTP→HTTPS fallback — enabling HTTPS streaming on hardware whose firmware only supports SSL 3.0. Includes a DNS endianness fix for correct IP resolution on MIPS little-endian.
35 workspace crates with a clean trait-based backend abstraction.
oasis-types (Color, Button, InputEvent, backend traits, error types) ├── oasis-vfs (virtual file system: MemoryVfs, RealVfs, GameAssetVfs) ├── oasis-platform (platform service traits: Power, Time, USB, Network, OSK) ├── oasis-sdi (scene display interface: named objects, z-order) ├── oasis-net (TCP networking, PSK auth, remote terminal, FTP) ├── oasis-audio (audio manager, playlist, MP3/WAV decode, ID3 parsing) ├── oasis-ui (32 widgets: Button, Card, TabBar, ListView, flex layout) ├── oasis-wm (window manager: drag/resize, hit testing, decorations) ├── oasis-skin (TOML skin engine, 18 skins, theme derivation) ├── oasis-terminal (90+ commands, 17 modules, shell features) ├── oasis-browser (HTML/CSS/Gemini: DOM, CSS cascade, flex/grid layout, 2D transforms, Canvas 2D paths, SVG groups, light compositor + text batching + sticky scroll, JS bindings) ├── oasis-js (JavaScript engine: QuickJS-NG via rquickjs across all backends incl. real PSP hardware; console, DOM, event dispatch, fetch) ├── oasis-video (MP4/H.264+AAC decode: StreamingBuffer, progressive playback) ├── oasis-vector (vector graphics: scene graph, path ops, icons, animations) ├── oasis-shader (GPU shader wallpapers: voronoi, city lights, ocean waves) └── oasis-core (coordination: 16 apps, dashboard, agent, plugin, script) ├── oasis-app-* (11 extracted app crates: calculator, clock, games, etc.) ├── oasis-backend-sdl → oasis-app (desktop binary) ├── oasis-backend-wasm (browser Canvas 2D) ├── oasis-backend-ue5 → oasis-ffi (UE5 C-ABI) └── oasis-backend-psp (PSP sceGu)
Core code never calls platform APIs directly. All rendering, input, networking, and audio
flow through five backend traits defined in oasis-types.
The rendering trait is split into two tiers:
SdiCore — 13 required methods (clear, fill_rect, blit, draw_text, load_texture, etc.) — the minimum viable backendSdiBackend — 39 optional accelerated primitives across 8 extension traits (shapes, gradients, alpha, styled text, textures, clip/transform, vector paths, batching) — each with a software fallback defaultInputBackend — unified input polling (buttons, mouse, touch, text)NetworkBackend — TCP client/server with optional TLS providerAudioBackend — track-based playback with streaming PCM supportBackends are leaf nodes in the dependency graph — they depend on core; core never depends on them. A new backend starts with 13 methods (~280 LOC) and the entire OS runs. Read the full architecture deep dive →
From C homebrew to Rust framework.
OASIS_OS was built from scratch in Rust in early 2026, inspired by PlayStation Portable homebrew shells like PSIX. The native 480×272 UI targets the PSP's 4.3" LCD and d-pad navigation.
The modern Rust rewrite preserves that heritage with a two-binary PSP architecture: an EBOOT.PBP standalone shell and a kernel-mode PRX overlay that hooks into game framebuffers for in-game UI and background audio.
The PSP backend features full SDI scene-graph integration, TLS 1.3 via
embedded-tls with RSA certificate support and automatic HTTP→HTTPS fallback
(pure Rust, enabling HTTPS streaming on 2008-era firmware that only speaks SSL 3.0),
and in-memory MP4 streaming with AAC hardware decode for TV Guide
video playback supporting both HTTP and HTTPS CDN nodes. The desktop backend
features progressive streaming video via a sliding-window
StreamingBuffer with deferred tail probe, CDN failover, and
PTS-based A/V sync — no ffmpeg required.
Deep technical write-ups on the hardest problems we solved.
Reverse engineering the PSP's undocumented H.264 coprocessor — 22 command IDs, 47 NIDs, hardware-accelerated video decode from Rust.
Pure Rust TLS 1.3 on bare metal MIPS — replacing Sony's 2008 SSL stack to stream HTTPS from archive.org.
Firmware decryption, OHCI/MUSB discovery, custom USB device driver in Rust, and a hardware adapter design.
TCP command server, remote input injection, WiFi deploy, and a physical actuator for hard reboot — AI-agent-driven hardware development.
Build OASIS_OS for your target platform.
# Install build deps (Ubuntu/Debian) -- SDL3 is compiled from source sudo apt install cmake g++ make libxtst-dev libx11-dev libasound2-dev # Build and run cargo build --release -p oasis-app cargo run -p oasis-app # Run tests cargo test --workspace
# Install wasm-pack curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh # Build ./scripts/build-wasm.sh --release # Serve locally python3 -m http.server 8080 # Visit http://localhost:8080/www/
# Requires Rust nightly + cargo-psp cargo install cargo-psp # Build EBOOT.PBP cd crates/oasis-backend-psp RUST_PSP_BUILD_STD=1 cargo +nightly psp --release # Build PRX overlay (kernel mode) cd crates/oasis-plugin-psp RUST_PSP_BUILD_STD=1 cargo +nightly psp --release
# Build the C-ABI shared library cargo build --release -p oasis-ffi # Output: target/release/liboasis_ffi.so (or .dll / .dylib) # Link into your UE5 project and call oasis_create(), oasis_tick(), etc.