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.

OASIS_OS Modern skin dashboard

Platform Targets

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

🖥

Desktop / Pi

oasis-backend-sdl

SDL2-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. Originally a 2006 homebrew shell, rewritten in Rust.

🎬

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, block/inline/table layout, link navigation, reader mode, and JavaScript execution.

JavaScript Engine

Embedded QuickJS-NG runtime with console API, inline <script> execution, and DOM manipulation — getElementById, createElement, textContent, attributes.

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

30+ reusable widgets: Button, Card, TabBar, Panel, TextField, ListView, ScrollView, ProgressBar, Toggle, NinePatch, ColorPicker, DatePicker, SpinBox, Table, RichText, and flex layout.

Audio System

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

Skin System

17 skins (7 built-in + 11 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 — software decode on desktop (no ffmpeg required), in-canvas on WASM, download-and-play on PSP.

Internet Radio

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

Architecture

19 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         (30+ widgets: Button, Card, TabBar, ListView, flex layout)
├── oasis-wm         (window manager: drag/resize, hit testing, decorations)
├── oasis-skin       (TOML skin engine, 17 skins, theme derivation)
├── oasis-terminal   (90+ commands, 17 modules, shell features)
├── oasis-browser    (HTML/CSS/Gemini: DOM, CSS cascade, layout engine, JS bindings)
├── oasis-js         (JavaScript engine: QuickJS-NG runtime, console, DOM)
├── oasis-video      (software MP4/H.264+AAC decode: streaming VideoSource API)
└── oasis-core       (coordination: 16 apps, dashboard, agent, plugin, script)
    ├── 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 four backend traits defined in oasis-types: SdiBackend, InputBackend, NetworkBackend, and AudioBackend. Each platform implements these traits, allowing the entire framework — UI widgets, browser engine, terminal, apps — to run unchanged on any target.

19 workspace crates · 2 excluded PSP crates

PSP Heritage

From C homebrew to Rust framework.

OASIS_OS started as a C homebrew shell for the PlayStation Portable in 2006–2008. The original 480×272 UI was designed for 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 Classic skin at 480×272 is a faithful recreation of the original C codebase, now running on a modern Rust toolchain with full safety guarantees.

Classic skin at PSP native resolution

Getting Started

Build OASIS_OS for your target platform.

# Install SDL2 dev libs (Ubuntu/Debian)
sudo apt install libsdl2-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.