open source OS for the stars

A tiny, fast embedded Linux for the Raspberry Pi 2 Model B and a 3.5" SPI touchscreen. It boots straight into a touch UI with a big clock, weather, a swipe launcher and ORION AI. No desktop, no X11, no bloat.

status

[ PRE-RELEASE ] v0.1.0 builds reproducibly and passes its automated tests. It has not been tested on a physical Raspberry Pi or display yet. Flash it if you want to help test, and expect rough edges.

features

BOOT

ASCII boot splash

No kernel spam. The ORION logo and a progress bar appear on the TFT from the first second, then fade into the UI.

HOME

Clock + weather

A huge clock with 12/24 h, seconds and date, and Open-Meteo weather that is cached for offline use. Tap the logo to talk to ORION AI.

UI

Swipe launcher

Home → AI → Weather → Terminal → Files → System → Settings, then back to Home. Animations are tuned for SPI speeds.

AI

ORION AI

An offline step-by-step equation solver, calculator and summarizer. It can also use a local llama.cpp server or the Claude API, only if you opt in for that host.

SETUP

First-boot wizard

Language, display and touch calibration, Wi-Fi, time zone, weather city, device name, SSH and AI, all from the touchscreen.

CORE

Read-only root

The system partition is never written at runtime, so power cuts can't break it. Settings live on a separate /data partition.

screenshots

Home screen with clock and weather
home // 480x320
ORION AI chat
orion ai // offline summarizer
Weather app
weather // 5-day forecast
Setup wizard
first-boot wizard
Settings menu
settings
Terminal app
terminal

Rendered by the headless UI simulator at the panel's native resolution. Portrait (320x480) is supported too.

download

orion-os-0.1.0-rpi2.img.xz
SD-card image · Raspberry Pi 2 Model B · build in progress
building…

Always check the SHA-256 checksum before flashing. The source is MIT licensed; third-party parts keep their own licenses.

installation

  1. Get the hardware

    A Raspberry Pi 2 Model B, a 5 V / 2 A micro-USB supply, a microSD card of 1 GB or more (8 GB+ recommended) and a 3.5" SPI TFT HAT (Waveshare "3.5inch RPi LCD (A)" type: ILI9486 + XPT2046). The Pi 2 has no Wi-Fi: use Ethernet or a supported USB Wi-Fi adapter.

  2. Download and verify

    bash
    $ wget https://orionos.orbitastudios.eu/downloads/orion-os-0.1.0-rpi2.img.xz
    $ wget https://orionos.orbitastudios.eu/downloads/orion-os-0.1.0-rpi2.img.xz.sha256
    $ sha256sum -c orion-os-0.1.0-rpi2.img.xz.sha256
    orion-os-0.1.0-rpi2.img.xz: OK
  3. Flash the SD card

    Easiest: in Raspberry Pi Imager or balenaEtcher, choose Use custom and pick the .img.xz file; they decompress it themselves. Linux CLI (check the device with lsblk first, because this overwrites the whole card):

    bash
    $ lsblk                                       # find your card, e.g. /dev/sdX
    $ xz -dc orion-os-0.1.0-rpi2.img.xz | sudo dd of=/dev/sdX bs=4M conv=fsync status=progress
  4. Optional: choose your display before first boot

    The default is a 3.5" (A)-type panel in landscape. To change it, open config.txt on the ORIONBOOT partition and edit only the managed block:

    /boot/config.txt
    # >>> orion-display (managed)
    # profile=tft35a
    dtoverlay=orion-tft35a,speed=24000000,rotate=0      # rotate=90 → portrait
    # <<< orion-display

    Other profiles: dtoverlay=piscreen,drm,… (OzzMaker PiScreen), dtoverlay=pitft35-resistive,… (Adafruit PiTFT 3.5"), or remove the line for HDMI only. You can change all of this later in Settings › Display.

  5. Optional: headless preseed

    Create orion-preseed.txt on the boot partition to skip typing on the touchscreen. ORION imports it on first boot and then deletes it from the card, because it holds passwords.

    ORIONBOOT/orion-preseed.txt
    ui.lang=en
    device.name=orion
    time.zone=Europe/Rome
    wifi.ssid=MyNetwork
    wifi.psk=my wifi passphrase
    ssh.password=a-long-root-password
    ssh.enabled=1
    weather.city=Rome, Italy
    weather.lat=41.8919
    weather.lon=12.5113
    setup.done=1            # skip the on-screen wizard
  6. Boot

    Insert the card and power on. You'll see the ORION ASCII logo and a progress bar. The first boot enlarges the data partition, which takes a few extra seconds. Then the setup wizard starts: calibrate touch by tapping the centre of each cross; the 4th cross checks the result.

  7. Use it

    Swipe left and right to move between apps. Tap the ORION logo on the home screen to open the assistant. To log in over SSH, set a root password and enable SSH in Settings › Device & SSH; the IP is shown in the System app. A serial console runs at 115200 baud on GPIO 14/15.

    bash
    $ ssh root@<device-ip>

supported displays

None of these has been tested on real hardware yet. "Expected" means the kernel driver and pinout match the vendor's design.

BoardController / touchProfileStatus
Waveshare 3.5" RPi LCD (A)ILI9486 + XPT2046tft35aexpected
Generic "3.5 inch RPi LCD" / MPI3501 / Kuman / ElegooILI9486 + XPT2046tft35aexpected
OzzMaker PiScreen 3.5"ILI9486 + XPT2046piscreenexpected
Adafruit PiTFT 3.5" resistiveHX8357D + STMPE610pitft35expected
Waveshare 3.5" (C) / MHS-3.5ILI9486 (high-speed)tft35aunverified
Waveshare 3.5" (B) IPSILI9486, different init-not yet
ILI9488 boardsILI9488 (18-bit SPI)-not yet
HDMI monitorfirmware framebufferhdmiexpected
pinout // orion-tft35a
SPI0 MOSI  GPIO10 (pin 19)    LCD CS    CE0 GPIO8  (pin 24)
SPI0 MISO  GPIO9  (pin 21)    TOUCH CS  CE1 GPIO7  (pin 26)
SPI0 SCLK  GPIO11 (pin 23)    LCD DC        GPIO24 (pin 18)
TOUCH IRQ  GPIO17 (pin 11)    LCD RESET     GPIO25 (pin 22)

faq

Does ORION AI send my data anywhere?
Not by default. The Offline backend runs entirely on the Pi. The Local and Remote backends ask for your explicit consent, tied to the destination host, before anything is sent. Changing the server address asks again. There is no telemetry and there are no automatic update checks.
Can the Pi 2 run an LLM by itself?
Technically yes, but barely: only a ~0.5B model fits in 1 GB of RAM, and it is expected to run at about 1 token per second or less (an estimate, not a benchmark). The recommended setup is llama-server on a PC on your network, used through the Local backend.
The screen is white or garbled.
Lower the SPI clock: set speed=16000000 in the managed block of config.txt. If your board isn't an ILI9486 type, check the compatibility table above.
Touch is offset or mirrored.
Run Settings › Touchscreen › Calibrate. Calibration also starts automatically after changing the orientation.
How do I update?
v0.1 updates by reflashing, which erases /data (settings, Wi-Fi, history). Back it up first: ssh root@<ip> 'tar czf - -C /data .' > backup.tgz.
I tested it on real hardware!
Great, that's the most useful contribution right now. Please share your board model, whether the boot logo appears, the highest stable SPI clock, how well calibration works, and the output of dmesg | grep -iE 'ili9486|ads7846|spi|drm'.