Skip to content

Releases: EarthstormSoftware/juggle-os

Juggle OS v1.0.0

Choose a tag to compare

@github-actions github-actions released this 01 Nov 01:33

Juggle OS 1.0: images for older Raspberry Pis (32-bit, armhf; tested on a Pi 2), and Juggle Flash for Windows and Linux (x64), which writes them. Flash a card with Juggle Flash or juggle flash v1.0.0, or update a Pi already on Juggle OS from Juggle Flash or with juggle update <pi> v1.0.0. They download the image and check it against SHA256SUMS.

Based on Raspberry Pi OS Lite, Trixie (Debian 13), armhf. It's built with pi-gen's 2026-10-06-raspios-trixie-armhf release, with packages as of the build day. Linux kernel 6.18.50, Python 3.13.

What's new

  • The app contract is frozen at 1.0. What an app can rely on (how it's installed and run, the files it may write, the hardware it may use, and the requests it may make) only grows from here: an app made for Juggle 1.0 runs unchanged on every 1.x release, and anything that would break one waits for 2.0.
  • Apps must say which Juggle OS they need, with "juggle": "1.0" in their app.json, as Juggle Hello and the apps built on App Base already do. An app without it isn't installed, and one already installed isn't started: the login screens say why. Add the line and install the app again: it's the same app, and keeps its settings and everything else it has saved.
  • Juggle Flash and juggle are as in v0.8.0, now versioned 1.0.0.

Tested

  • In QEMU: two boots and an update to the other slot, on a card with an old data partition where the new one goes, with apps that don't say which Juggle OS they need (or need a later one) refused, and an app from before 1.0 installed again keeping its state. This image, as published, in one boot.
  • On a Pi 2, with this release's code and Juggle Hello: updated over Wi-Fi and kept, with all the checks passing; a kernel panic and a hang during trial updates each went back to the OS before, by itself; and the power pulled during a trial boot, while running and early in a boot, with the Pi back each time and nothing to recover.

Juggle OS v0.8.0

Choose a tag to compare

@github-actions github-actions released this 31 Oct 20:03

Images for older Raspberry Pis (32-bit, armhf; tested on a Pi 2), and Juggle Flash, a new app for Windows and Linux (x64) that writes them. Flash a card with Juggle Flash or juggle flash v0.8.0, or update a Pi already on Juggle OS from Juggle Flash or with juggle update <pi> v0.8.0. They download the image and check it against SHA256SUMS.

Based on Raspberry Pi OS Lite, Trixie (Debian 13), armhf. It's built with pi-gen's 2026-10-06-raspios-trixie-armhf release, with packages as of the build day. Linux kernel 6.18.50, Python 3.13. The image itself is as in v0.7.0: this release is about setting Pis up.

What's new

  • Juggle Flash. One window that takes you through flashing a card: the image (the latest release, another version, or a file), the card (only cards in card readers are offered, with their size and name), the Pi's settings (checked as you type), a last check naming the card, then writing and checking it with a progress bar. It also sets up a card that already has Juggle OS, and lists the Pis you've set up, each to update (with the same trial as juggle update), forget, or use as the default. Download juggle-flash-v0.8.0-win-x64.zip or juggle-flash-v0.8.0-linux-x64.tar.gz: one program each, with juggle beside it. They aren't code-signed, so Windows' SmartScreen warns the first time. On Linux it needs a desktop's usual libraries and pkexec. If your SSH key has a passphrase, add it to ssh-agent (ssh-add) for updates from Juggle Flash.
  • Administrator rights only to write the card. Juggle Flash and juggle ask everything first, as you (the card, the settings, then the confirmation, so nothing is asked once writing starts), and only writing the card asks for administrator rights: Windows asks through UAC, with no extra window, and Linux through pkexec (Juggle Flash) or sudo (juggle). The card is checked again just before writing, to be sure it's still the one you chose. Your settings, SSH key and known_hosts are written as you.
  • The card is ejected safely when it's done, so the settings are on it before you take it out. --no-eject leaves it in.
  • A default Pi. New Pis start from its settings, whichever Pi you set up last: choose it with Use as default in Juggle Flash or juggle default <name>.
  • Ethernet only with Wi-Fi saved: type - for the Wi-Fi network in juggle flash and juggle setup (Enter takes the saved one).
  • Clearer messages from juggle update when a Pi can't be reached (check it's on and on the network), when it doesn't take your SSH key, and when ssh doesn't know its host key.

Tested

  • In QEMU: two boots and an update to the other slot, on a card with an old data partition where the new one goes. This image, as published, in one boot.
  • On Windows: cards flashed and set up with juggle and with Juggle Flash (through UAC), checked and ejected, and booted in a Pi 2; Pis updated over SSH with juggle and from Juggle Flash. On Linux (Debian 13 in WSL2, with a USB card reader): cards flashed with juggle (through sudo) and with Juggle Flash (through pkexec). Juggle Flash's packages for both, as published, run.

Juggle OS v0.7.0

Choose a tag to compare

@github-actions github-actions released this 30 Oct 21:33

Images for older Raspberry Pis (32-bit, armhf; tested on a Pi 2). Write one with juggle flash v0.7.0, or update a Pi already on Juggle OS with juggle update <pi> v0.7.0. Both download the image and check it against SHA256SUMS.

Based on Raspberry Pi OS Lite, Trixie (Debian 13), armhf. It's built with pi-gen's 2026-10-06-raspios-trixie-armhf release, with packages as of the build day. Linux kernel 6.18.50, Python 3.13.

What's new

  • ApplPi OS is now Juggle OS. The command is juggle, you log in as ssh juggle@<pi>.local, and the setup hotspot is Juggle-SETUP. Nothing reads the old names, so a Pi on ApplPi OS is flashed again with this release rather than updated. To keep your saved Pis, copy %APPDATA%\ApplPi\devices.json to %APPDATA%\Juggle first: a reflashed Pi then keeps its name, Wi-Fi and SSH host key.
  • juggle runs on Linux too. Build it as one self-contained file (dotnet publish src/Juggle.Cli -r linux-x64 or linux-arm, see the README). It flashes cards from a USB card reader or SD slot, never the disk the system runs from, and needs no desktop.
  • Apps say which Juggle OS they need. "juggle": "1.0" in app.json, and the OS gives apps its own version in JUGGLE, so an app that needs something newer is refused with a clear message instead of failing later. It's optional until v1.0. Apps made for ApplPi OS change "applpi" to "juggle" in their app.json.
  • An update that hangs goes back too. If a new OS on trial hangs before it has checked itself, the Pi restarts into the old one after 15 minutes, and says on the next boot that the trial restarted before it could check itself. juggle update waits long enough to report it.
  • A card flashed again starts clean. Its data partition is formatted on the first boot, so an old app, its settings and old Wi-Fi details don't come back.
  • The screen shows the new logo at boot, one icon per CPU core on the console, and the Pi's model on the login screens.

Tested

  • In QEMU: two boots and an update to the other slot, on a card with an old data partition where the new one goes. This image, as published, in one boot.
  • On a Pi 2: a kernel panic and a hang during a trial update both went back to the old OS; the power pulled during a trial boot, while running, early in a boot and while settings were being written, with nothing lost; flashed with this release's code, checked on its screen and over SSH, and flashed again to start with an empty data partition. A card flashed and the Pi updated from Linux (Debian 13). A second Pi flashed from ApplPi OS with its app redeployed.

ApplPi OS v0.6.0

Choose a tag to compare

@github-actions github-actions released this 29 Oct 11:05

Images for older Raspberry Pis (32-bit, armhf; tested on a Pi 2). Write one with applpi flash v0.6.0, or update a Pi with applpi update <pi> v0.6.0. Both download the image and check it against SHA256SUMS.

Based on Raspberry Pi OS Lite, Trixie (Debian 13), armhf. It's built with pi-gen's 2026-10-06-raspios-trixie-armhf release, with packages as of the build day. Linux kernel 6.18.50, Python 3.13.

What's new

  • Apps can change the Pi's Wi-Fi. app-request wifi <network> [<country>], with the password on its input, sets a new Wi-Fi network from the next start. It's on trial: if the Pi can't connect within 5 minutes, it puts the network it had before back and restarts, so a mistyped password can't leave a Pi off the network.
  • Apps can scan for networks. app-request networks lists the Wi-Fi networks in range, strongest first, for the app's page to offer.
  • The Wi-Fi fallback waits longer. After a power cut a router can take a while to come back, so a Pi now waits 6 hours without a network by default (up to a day can be set) before starting setup mode. Wi-Fi settings it has never connected with, which may be mistyped, still get 5 minutes.
  • Wi-Fi settings count as working only once they give an address. The Wi-Fi check now waits up to a minute for an IPv4 address before taking new settings as proven.

Tested

  • In QEMU: two boots and an update to the other slot.
  • On a Pi 2, updated over SSH from v0.5.0: the scan, a wrong Wi-Fi password put back in about 6 minutes, and the right one kept. The same on a second Pi through an app's page (App Base), after updating it from v0.4.0.

ApplPi OS v0.5.0

Choose a tag to compare

@github-actions github-actions released this 28 Oct 08:00

Images for older Raspberry Pis (32-bit, armhf; tested on a Pi 2). Write one with applpi flash v0.5.0, or update a Pi with applpi update <pi> v0.5.0. Both download the image and check it against SHA256SUMS.

Based on Raspberry Pi OS Lite, Trixie (Debian 13), armhf. It's built with pi-gen's 2026-10-06-raspios-trixie-armhf release, with packages as of the build day. Linux kernel 6.18.50, Python 3.13.

What's new

  • Setup mode. A Pi with no settings starts a Wi-Fi hotspot, ApplPi-SETUP. Join it from a phone or laptop and the setup page opens. There you set the Pi's name, its Wi-Fi, the time zone and the SSH keys, so a Pi can be set up without applpi.
    • The page is HTTPS. Its certificate's fingerprint is shown on the Pi's screen and on the page at http://192.168.4.1, so you can check you're talking to your Pi.
    • It lists the Wi-Fi networks it can see. It can keep, paste or upload an SSH key, or make one for you to download.
    • When done, it shows the Pi's host key, and a known_hosts line to add, then restarts.
  • The Wi-Fi fallback. If Wi-Fi doesn't connect after a while, the Pi restarts in setup mode for a while, then tries again. It's a setting, wifi_fallback: on or off, after how many minutes (5 by default) and for how many (10 by default). Set it in applpi.json or from the app.
  • Apps can ask for setup mode through app-request:
    • setup restarts the Pi in setup mode, to rename it or change its Wi-Fi;
    • factory-reset forgets the Pi's settings and starts setup mode (the app and its settings are kept);
    • wifi-fallback changes the fallback setting.

Tested

  • In QEMU: two boots and an update to the other slot, and a Pi with no settings set up through the setup page.
  • On a Pi 2: the hotspot from a phone, the setup page, the Wi-Fi fallback, and setup mode started from an app's page.

ApplPi OS v0.4.0

Choose a tag to compare

@github-actions github-actions released this 27 Oct 19:36

Images for older Raspberry Pis (32-bit, armhf; tested on a Pi 2). Write one with applpi flash v0.4.0, or update a Pi with applpi update <pi> v0.4.0. Both download the image and check it against SHA256SUMS.

What's new

  • Apps can ask the OS for a few things through app-request, and nothing else:
    • install a new version of themselves, on trial: if the new version doesn't stay up for 30 seconds, the old one comes back;
    • set the time zone and time server;
    • restart the Pi.
  • Each app has its own watchdog. If an app turns it on and then stops responding, it is restarted.
  • rpi_ws281x is in the image for LED apps. An app that uses the PWM hardware sets "pwm": true in app.json, and the onboard audio is left off for it.
  • Images are published: applpi flash and applpi update accept a release name or latest.

Tested

  • In QEMU: two boots and an update to the other slot.
  • On a Pi 2 with an app, including an OS update that broke the app, which went back to the old slot.