// Build your OS in onReady()
<script>
WebOSKernel.onReady(kernel => {
// register your OS services
kernel.register('storage', myStorageService);
kernel.register('display', myDisplayService);
// read real hardware info
const hw = kernel.hardware.snapshot;
console.log(hw.cpu.logicalCores, hw.gpu.renderer, hw.memory.deviceRAM);
// spawn a process
const pid = kernel.process.spawn('my-os');
// use the syscall interface
kernel.syscall.call('uptime').then(console.log);
// query a permission
kernel.permissions.query('camera').then(state => console.log(state));
// add a route your OS exposes
kernel.router.get('/os/status', (req, res) => { res.body = { ok: true }; });
// mount your UI — the kernel is done, OS takes over
document.body.innerHTML = `<div id="desktop">...</div>`;
});
</script>
1 — EventBuson · once · off · emit · listeners
Pub/sub event bus. Returns an unsubscribe function from on(). Errors in listeners are caught and logged so one bad handler can't kill the bus.
2 — Router:param · query · all()
URL router with :param segment matching and query string parsing. Supports GET, POST, PUT, DELETE, and wildcard all().
3 — Middlewareasync (req, res, next)
Ordered async middleware pipeline. Runs before every route handler. Add with kernel.use(fn).
4 — Service Containerregister · resolve · has · list
Named service registry. Services expose version metadata. Overwriting a service emits a warning. Resolving a missing service throws WK_E005.
5 — Process Managerspawn · kill · get · list · running
Lightweight process registry. Each process gets a PID. The kernel itself runs as the first process at boot.
6 — Syscall Interfaceregister · call · list
OS-style syscall table. Built-in syscalls: getpid · spawn · kill · ps · uptime · services · hardware · handle · emit · perm.
7 — Permission Layerquery · queryAll
Wraps the browser Permissions API. Caches results and sets up live change listeners. Gracefully degrades on unsupported browsers.
8 — AppStoreregister · unregister · get · list
Local app registry keyed by app ID. Validates required metadata fields on registration. No external CDN.
9 — Hardware Inspectorcollect() · snapshot
Collects CPU cores & arch, RAM, JS heap, GPU vendor/renderer/GL version, battery, network type & downlink, storage quota, display info, and codec support — all via browser APIs. Available as kernel.hardware.snapshot.
10 — Plugin Systemkernel.plugin({ name, install })
Plugins receive the full kernel object and can register services, routes, and middleware. Boot log prints load status for each.
GET/kernel/infoKernel name, version, uptime, PID
GET/kernel/servicesAll registered services + metadata
GET/kernel/appsAll registered apps
GET/kernel/routesAll registered routes
GET/kernel/processesRunning process list + count
GET/kernel/syscallsList of registered syscalls
GET/kernel/logFull boot log
GET/kernel/permissionsAll queried browser permissions
GET/kernel/hardwareFull hardware snapshot
GET/kernel/hardware/cpuCPU cores, arch, platform
GET/kernel/hardware/gpuGPU vendor, renderer, GL version, max texture
GET/kernel/hardware/memoryDevice RAM, JS heap used/limit
GET/kernel/hardware/batteryLevel, charging state, time remaining
GET/kernel/hardware/networkType, effective type, downlink, RTT
GET/kernel/hardware/displayResolution, DPR, color depth, orientation
GET/kernel/hardware/storageStorage quota and usage estimate
GET/kernel/hardware/codecsVideo & audio codec support matrix
GET/kernel/hardware/browserBrowser name, version, language, UA
✓ Simple has
Text boot log — every subsystem line-by-line as it starts
Hardware inspector — CPU, GPU, RAM, battery, network, storage, codecs, display
Process manager — PIDs, spawn, kill, list
Syscall interface — register & call OS-style syscalls
Zero dependencies — fully self-contained, works offline
✗ Simple lacks
Fastboot mode — no shortcut boot path
Loading spinner — text only, no animated circle
Firebase / cloud — no Firestore, no cloud app loading
Global app store — local registry only, no cross-OS sharing