OASIS_OS

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.

Platform Targets

One codebase, four deployment targets. Trait-based backends keep core code platform-agnostic.

🖥

Desktop / Pi

oasis-backend-sdl

SDL3-based backend for Linux, macOS, Windows, and Raspberry Pi with hardware-accelerated rendering.

🌐

WebAssembly

oasis-backend-wasm

Canvas 2D + Web Audio. Runs entirely in the browser with no server required.

🎮

PlayStation Portable

oasis-backend-psp

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.

🎬

Unreal Engine 5

oasis-ffi

Software RGBA framebuffer exposed via C-ABI FFI for embedding in UE5 projects.

💻

Linux Framebuffer Planned

oasis-backend-fbdev

Direct /dev/fb0 rendering for headless or kiosk deployments without a display server.

Key Features

A complete operating system shell, not just a UI toolkit. 16 built-in apps including TV Guide and Internet Radio.

Browser Engine

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.

JavaScript Engine

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).

Window Manager

Draggable, resizable overlapping windows with hit testing, minimize/maximize/close decorations, and window snapping.

Terminal

90+ commands across 17 modules. Variable expansion, glob patterns, aliases, history, and piping. A real shell inside the shell.

Widget Toolkit

32 reusable widgets: Button, Card, TabBar, Panel, InputField, ListView, ScrollView, ProgressBar, Toggle, NinePatch, ColorPicker, DatePicker, SpinBox, Table, RichText, SplitPane, TreeView, Accordion, and flex layout.

Audio System

Background MP3 and WAV playback with playlists, shuffle/repeat modes, ID3 tag parsing, and per-channel mixing.

Skin System

18 skins (18 built-in + 14 external TOML) with theme derivation from 9 base colors. Runtime switching without restart.

Virtual File System

MemoryVfs (in-RAM), RealVfs (disk), and GameAssetVfs (UE5 pak with overlay writes). Platform-agnostic file access.

Plugin System

Runtime-extensible plugin architecture with VFS-based IPC and event bus publish/subscribe. Install plugins via the built-in package manager.

Remote Terminal

TCP networking with PSK authentication. Connect to OASIS_OS instances remotely and execute commands over an encrypted channel.

TV Guide

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.

Internet Radio

Stream MP3 audio from curated Internet Archive collections. Background playback with channel browsing and real-time metadata display.

Vector Graphics

Resolution-independent scene graph with path-based drawing, Altimit-style dashboard icons, and frame-driven animations via the oasis-vector crate.

TLS 1.3

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.

Architecture

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-sdloasis-app      (desktop binary)
    ├── oasis-backend-wasm                    (browser Canvas 2D)
    ├── oasis-backend-ue5oasis-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:

  • SdiCore13 required methods (clear, fill_rect, blit, draw_text, load_texture, etc.) — the minimum viable backend
  • SdiBackend39 optional accelerated primitives across 8 extension traits (shapes, gradients, alpha, styled text, textures, clip/transform, vector paths, batching) — each with a software fallback default
  • InputBackend — unified input polling (buttons, mouse, touch, text)
  • NetworkBackend — TCP client/server with optional TLS provider
  • AudioBackend — track-based playback with streaming PCM support

Backends 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 →

35 workspace crates · 2 excluded PSP crates · 5 backend traits

PSP Heritage

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.

Classic skin at PSP native resolution

Developer's Journal

Deep technical write-ups on the hardest problems we solved.

Read all journal entries View hardware blueprints

Getting Started

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.