RPCortex Pulsar — v0.9.1
v0.9.1 | Codenamed Pulsar | β9
The β8 "Nebula" line graduates to Pulsar — a massive stability, polish, and feature release. The shell grows up: it's now faster, safer with large files, self-updating over the air, and introduces real pipes, conditional chaining, a scripting language, and task automation — RPCortex can now do things on its own, with no host computer attached.
Full feature reference: RPCortex Docs
Status
Beta. Runs on the Raspberry Pi Pico series (RP2040 / RP2350) and the ESP32 / ESP32-S2 / ESP32-S3. This is the first public release since v0.8.1 and supersedes it directly — everything staged internally as v0.9.0 is included here. Recommended upgrade for everyone on v0.8.x.
What's New in v0.9.1
Shell — pipes, chaining & scripting
- Pipes —
cmd1 | cmd2 | cmd3. The left command's output feeds the right one.grep,wc,sort,uniq,cat,head, andtailall read piped input when given no file:cat /Pulsar/Logs/latest.log | grep ERROR | wc. &&/||chaining —wifi connect && pkg updateruns the second command only if the first succeeded;ping host || echo offlineruns it only if the first failed. Mixes freely with;and|.- Scripting (
.rps) — Write scripts with variables (set name value,$name),if/else/end, andwhile/end, then run them withscript myjob.rps. Conditions are built-ins (eq,ne,exists,empty) or any shell command. Scripts run through the live shell, so pipes and chaining work inside them too.
Shell — quality of life
- Persistent aliases —
alias ll=ls -lnow survives reboots (stored in/Pulsar/Registry/aliases.cfg).unaliasremoves; barealiaslists. Critical built-ins can never be shadowed. watch [-n <secs>] <command>— re-run any command on a timer until Ctrl+C, e.g.watch -n 5 sysinfoorwatch meminfo. Clears the screen between runs.read/catmultiple files —cat boot.cfg notes.txtprints each with a==> name <==header.- Configurable prompt hostname — the
user@hostpart of your prompt is now yours:reg set System.Device_ID mypico→root@mypico:~>. Fresh installs default topulsar.
Automation — the device runs itself
- Startup tasks —
startup add <command>runs commands automatically after login, before the prompt.startup list/remove/clear/run. - Scheduled tasks —
task add <secs> <command>repeats a command on a timer (counted from uptime — no RTC needed).task runstarts the scheduler (pressq/ Ctrl+C to stop). - Headless mode —
startup add task runmakes the device boot straight into its scheduler: an unattended controller with no terminal required.
Filesystem — safer & friendlier
- Large-file
cp/mvno longer run out of memory — copies now stream in 1 KB chunks instead of loading the whole file into RAM.mvuses an instant same-filesystem rename when it can, and only falls back to copy-then-delete across filesystems. - Relative paths everywhere —
cp,mv, andrenameaccept relative paths now (cp notes.txt backup/), not just absolute ones. Identical source/destination is caught before any work happens. du [path]— total size of a file or an entire directory tree.
Clock, NTP & logs
ntp sync— sets the clock from an internet time server over WiFi — so timestamps anddateare correct even on boards with no battery-backed RTC.ntp statusshows the clock and server;ntp server <host>changes the default. Ships built-in; addstartup add ntp syncto re-sync on every boot. (Correctly handles MicroPython's 2000-01-01 epoch.)date set YYYY-MM-DD HH:MM:SS— manually set the real-time clock from the shell.- Session-log timestamps are now correct instead of counting from the boot epoch.
Over-the-air updates
update check— asks the update server whether a newer release exists and shows the changelog.update online— downloads and installs the latest release over WiFi, then reboots.update online --forcereinstalls even if you're current.update from-file <path.rpc>— apply a local archive (unchanged from before, still preserves all user data).- After any update the OS reports the running version on your next login, and the registry version/codename can never drift out of sync with the running code again.
Packages
fetch/neofetchandbenchare now real packages (PicoFetch and RPCMark). That means they update independently withpkg upgrade— no full OS flash to get a newer fetch.pkg upgradehandles built-in packages correctly and preserves their registry keys across the upgrade.- New packages (install with
pkg install <name>):- Calc — offline calculator:
calc 3 * (4 + 2), pluscalc hex 255/bin/oct/dec. - Gpio — drive pins from the shell:
gpio read|set|toggle|pwm|stop|adc <pin>. - I2CScan —
i2cscan [scl] [sda]finds I²C devices and names common parts (SSD1306, MPU6050, BME280, …).
- Calc — offline calculator:
Performance
- No more typing lag at 115200 baud — inline ghost-text completion now does a zero-I/O command-name lookup per keystroke; the filesystem is only touched when you actually press Tab.
- No more output lag — log writes are batched (flushed every 8 lines, or immediately on a warning/error), so rapid command output no longer stalls on flash writes.
Recovery & diagnostics
- New tools, available in the normal shell and in recovery mode (loaded from their own registry so they survive a damaged command table):
fscheck(verify core files),diag(RAM/flash/registry snapshot),logdump [n](print the session log),regreset(rebuild a corrupt registry, keeping accounts + WiFi),pkgdisable/pkgenable(quarantine a package without removing it).
Networking & personalisation
- Download progress bars —
wgetshows[####----] 47%using the server'sContent-Length. - Extended
curl—-X,-d,-H,-o,-s,-I,--timeout(the default GET-to-stdout behaviour is unchanged). - Owner & timezone —
reg set System.Owner <name>(shown insysinfo, asked at first-run setup) andreg set System.TZ_Offset <hours>(applied todate).
Branding
- Rebranded throughout from β8 Nebula to β9 Pulsar — boot banner, version strings, and registry codename. The name nods to the
pulseCPU-clock subsystem. Stale "Nebula" branding has also been cleared from thehelpbanner,sysinfo, and the HTTPUser-Agent.
Setup, packages & tooling (added during Beta)
- Guided first-run setup — the wizard now walks through root password, owner, device name, WiFi (scan → connect → save → autoconnect), timezone, and an optional NTP clock sync, so a fresh device is online and on-time before you reach the prompt. Every step is skippable; WiFi/clock steps self-skip on boards with no WiFi.
pkg reinstall <name>+ force-remove —pkg reinstallremoves the old copy first (clean repair), andpkg remove <name> --forcecan remove even a protected built-in for repair. The browser package installer re-installs cleanly too (it removes the existing copy first).- FileExp — a new TUI file explorer package (
pkg install FileExp, commandsfiles/fm/explorer): arrow-key navigation, view files, make folders, delete with confirm. - The Web Installer preserves your data by default — installing/updating from the browser now keeps your accounts, settings, WiFi, and packages (it removes only the old OS code,
/Core). A Clean install checkbox is there if you want a full factory wipe. - Copy files from the browser — the Install page can push any file straight to a connected device over USB (non-destructive, no REPL needed).
- RPCortex Communicator (
tools/rpc_comm.py) — a PC-side serial companion: change registry values, sync the clock, move files both ways, install local/online packages, and update/reinstall the OS from your computer.pip install pyserial.
Under the hood
- A new per-command exit-code + output-capture convention in
RPCortex.pyis what makes pipes,&&/||, and script conditionals possible —multi()is the captured data channel, while status messages stay visible like stderr. Commands signal failure simply by reporting an error, so the whole feature needed zero per-command rewrites. - The shell's command dispatch is now a single code path (
_run_line→_exec_pipeline→_dispatch_line) shared by the interactive prompt, recovery mode, startup tasks, scripts, andwatch. - Everything compiles cleanly with mpy-cross (the MicroPython compiler) and is unit-tested on CPython.
Bug fixes (since v0.8.1)
- Saved WiFi passwords actually work —
wifi connect <ssid>was still reading the old removed 2-slot registry keys and never found saved passwords; it now readsnetworks.cfgand connects without re-prompting. Docs corrected: saved WiFi networks are unlimited (not "up to 2"). - No more false "previous session ended unexpectedly" on every boot — the startup banner was reading the session-active sentinel that POST had just armed. It now reads the pre-POST value, so the warning only appears after a real crash (and the update-success / safe-mode banners finally appear when they should).
- Built-in packages show in
pkg listagain on fresh installs — the Launchpad and Editor package stubs were missing from the image. - Every password prompt is masked — account creation, removal, password change, and
wifi addnow echo•like login always did. compile.batships the full OS — it now includes the PicoFetch and RPCMark packages in compiled builds (they were silently left out before).
Not in this release (deliberately)
- True background tasks alongside an interactive prompt. Scheduled tasks run in their own foreground loop (
task run) or headless at boot; running them concurrently with a live prompt needs cooperative multitasking (uasyncio), which is the v1.0 milestone. The shell's input read is blocking by design. - Lazy / ephemeral module imports — a memory optimisation carried to a later v0.9.x.
Installation
Fresh install / reinstall: Web Installer — flash from your browser over USB, no software needed (Chrome/Edge). It now preserves your data by default (accounts, settings, WiFi, packages) and only replaces the OS code; tick Clean install for a full factory wipe.
Update from v0.8.x: run update check then update online from the shell, or use the OS Update page, or update from-file /path/to/os.rpc. User accounts, WiFi, settings, and installed packages are all preserved.
Manual: Flash MicroPython v1.25+ (v1.28 recommended), copy the image files, connect at 115200 baud, reboot. A compiled (.mpy) image is also available — it's ~44% smaller and imports faster; one architecture-neutral build runs on RP2040, RP2350, and ESP32. See BUILDING.md. Deploy it with mpremote.
Using rawrepl for a fresh install
If RPCortex is already installed and you want a completely fresh flash:
- At the shell prompt, run
rawrepl - The MicroPython REPL (
>>>) becomes active in your terminal - Open rpc.novalabs.app/install in Chrome or Edge
- Click Connect Device and flash as normal
No reinstall or full wipe needed — rawrepl just hands control back to MicroPython.
Known Limitations
- MemoryError after heavy use — run
freeup;rebootclears it completely. (Usually heap fragmentation, not low memory.) - The real-time clock is not battery-backed on a bare Pico — set it with
ntp sync(ordate set) after boot; it resets on power loss. - ESP32-S3 temperature reads ~300–450 °C — a hardware calibration quirk, not a bug.
- HTTPS on Pico 1 W needs ~9.5 KB contiguous heap — run
freeupfirst if a TLS request fails. - WiFi passwords are stored in plaintext (
networks.cfg) — this hardware has no secure enclave. - The text editor needs a real serial terminal (PuTTY) — Thonny's REPL won't render it.
Author: dash1101. Issues and PRs welcome.