Skip to content

RPCortex β8X - Nebula

Choose a tag to compare

@dash1101 dash1101 released this 21 Feb 19:05
fb42710

RPCortex Nebula: RPC β8X

v0.8.0-rc | Codenamed Nebula

A CLI operating system for the Raspberry Pi Pico (RP2040 / RP2350) and compatible boards, written entirely in MicroPython. User accounts, WiFi networking, a package manager, a text editor, and a full boot sequence, all on hardware with 264KB of RAM.


Status

Stable. Core features are complete and tested. Ships in a clean factory-default state. Confirmed working on RP2040 (Pico W) and ESP32.

Primary interface: serial terminal at 115200 baud (PuTTY recommended)
Thonny's built-in REPL works but has quirks: no arrow key navigation, occasional double-printed input. Use PuTTY for the full experience.


What's in v0.8.0-rc

This release covers everything built across the Nebula β8X development cycle, from boot stub to complete OS.

Shell

A colored, interactive prompt (user@nebula:~>) with full cursor navigation. Left/right arrows, Home/End, Delete, and Ctrl+A/E let you edit anywhere in the line. Up/down arrows scroll the last 50 commands.

  • Commands are loaded via __import__() for built-ins; they stay in sys.modules permanently after first use. No re-reading or recompiling after a cache clear, which eliminates the memory fragmentation issue that previously crashed reboot and freeup under load.
  • MemoryError auto-recovery: the shell clears its cache, compacts the heap, and retries on failure
  • reboot, sreboot, freeup, and gc bypass the loader entirely and always work
  • Session logging to /Nebula/Logs/latest.log, rotated up to 10 logs
  • Recovery shell if the main boot sequence fails
  • Shell starts in the user's home directory; ~ shorthand in the prompt

Filesystem

ls, cd, pwd, mkdir, rm, touch, read, head, tail, mv, cp, rename, df, tree, exec

ls shows file type, size, modification timestamp, and name with colored output. cd ~ and cd ~/sub work as expected.

System commands

sysinfo, meminfo, uptime, date, ver, clear, fetch, reboot, sreboot, env, reg, pulse, bench, edit, echo, history, freeup, settings

fetch shows the RPCortex ASCII logo alongside board, CPU, RAM, flash, uptime, and UID. bench runs NebulaMark (integer, float, Mandelbrot, Pi).

Settings panel

settings opens an ANSI box-drawing panel with three sections:

  • System: Verbose Boot, Program Execution
  • Hardware: Boot Overclock, Beeper, SD Card Support
  • Network: WiFi Autoconnect

Title bar shows live CPU frequency, temperature, and free RAM. [1–6] toggle, [r] refresh, [q] quit.

User management

  • whoami, mkacct, rmuser, chpswd, logout, exit
  • Passwords use salted SHA256, with a unique random salt per account
  • Legacy unsalted hashes accepted and upgrade on next password change
  • Each account gets /Users/<username>/ created automatically
  • guest accepts any password including blank
  • Non-root users must verify the target's password before rmuser runs

First-run setup

On first boot a setup wizard runs: sets the root password, creates guest, optionally adds the official package repo. Runs once only.

Networking

WiFi support for any board with a network module: Pico W, Pico 2 W, ESP32.

WiFi: wifi status, wifi scan, wifi connect, wifi disconnect, wifi list, wifi add, wifi forget

Up to 2 networks saved. Autoconnect on boot via Settings.Network_Autoconnect (toggle in settings).

Downloads: wget streams directly to flash (no full-file RAM load), curl fetches to screen, runurl downloads and executes, ping, nslookup.

The HTTP client follows redirects iteratively (no recursion) with a 15-second socket timeout. HTTP and HTTPS both supported.

Package manager

Full package manager. Packages are .pkg files: standard ZIP archives with metadata.

pkg install, pkg remove, pkg list, pkg info, pkg available, pkg search, pkg update, pkg upgrade, pkg repo list/add/remove

  • pkg available lists everything in the cached repo index. No query needed.
  • Installed commands are live immediately after install
  • Removed commands vanish immediately. No reboot either way.
  • pkg upgrade compares installed versions against the cache and reinstalls newer ones
  • Built-in packages (Launchpad, Editor) show in pkg list and cannot be removed

Repo indexes are JSON files hostable anywhere. repo/make_pkg.py builds .pkg archives from a source directory on your PC. Packages must use ZIP_STORED (no compression); make_pkg.py handles this automatically.

Editor

A full terminal text editor via edit, nano, or vi. Supports find, go-to-line, cut/paste, and save. Requires a real terminal emulator: Thonny REPL won't render it.

Registry

INI-style config at /Nebula/Registry/registry.cfg. Sections: Networks, Hardware, System, Settings, Features, Globals. Created automatically from an embedded template if missing. Read/write with reg get/reg set, or use settings for the common ones.

POST

Every boot:

  • Registry check (creates from template if missing)
  • CPU arithmetic (float, int, comparison, bitwise)
  • RAM test: allocates a verification buffer, writes a pattern, confirms it, then frees. Fast on any platform.
  • Clock calibration on first boot: RP2040/RP2350 get 220 MHz as safe max
  • Optional boot overclock via Settings.OC_On_Boot
  • WiFi check with optional autoconnect
  • Beeper init (non-fatal)

Verbose boot is off by default. Enable in settings to see all POST output.


Installation

  1. Flash MicroPython firmware to your board (v1.20 or newer, v1.27+ recommended)
  2. Copy all files from this release to the root of the board's filesystem
  3. Connect via serial terminal at 115200 baud
  4. Reboot: main.py runs automatically
  5. Complete first-run setup and log in

Supported hardware

Board Status
Raspberry Pi Pico 2 W (RP2350 + WiFi) Recommended
ESP32-S3 Recommended
Raspberry Pi Pico (RP2040) Supported
Raspberry Pi Pico W (RP2040 + WiFi) Supported
Raspberry Pi Pico 2 (RP2350) Supported
ESP32 / ESP32-S2 Supported

Known limitations

  • MemoryError may occasionally occur in the shell due to heap fragmentation. freeup compacts the heap; reboot clears it fully. Being actively worked on.
  • ESP32-S3 temperature sensor reports unrealistic values (typically 300–450 °C) due to hardware calibration differences. Not an RPCortex bug — RP2040/RP2350 temperature is accurate.
  • No real-time clock on base Pico: date shows time since boot epoch until RTC is set
  • HTTPS on Pico 1 W needs ~9.5 KB contiguous heap: run freeup first if the heap is fragmented
  • WiFi passwords stored plaintext in the registry: no secure enclave on this hardware
  • The editor requires a real terminal emulator: Thonny REPL won't render it
  • /Nebula/Logs/ must be created manually if missing: log writes silently fail otherwise

What's next

  • Tab completion
  • Shell aliases
  • SD card support
  • Unified user system
  • Log directory auto-creation on first boot

Author: dash1101. Issues and PRs welcome.