Skip to content

Releases: pierrejochem/pikiosk

pikiosk v0.3.0

Choose a tag to compare

@pierrejochem pierrejochem released this 25 Oct 10:52

Settings sections and Wi-Fi from the touchscreen.

Settings

  • Network and Controls moved into Settings, which now has four sections behind a segmented control: Display, Network, Touch and System. The tab bar has three tabs: Home, Apps, Settings. The Home Network tile opens Settings > Network. kiosk-ui --page takes display, network, touch or system.
  • Wi-Fi from the touchscreen. Settings > Network lists the networks in range. Joining one uses an on-screen keyboard and the admin PIN; saved networks can be reconnected or forgotten, and hidden networks can be added. Networks are saved in /data/store/wifi.json and merged into the WPA config at boot, so they survive reboots. WIFI_SSID in kiosk.conf is now optional: wpa_supplicant always runs, so the list works on an image with no WiFi configured.
  • kioskd: new requests wifi_scan, wifi_status, wifi_connect and wifi_forget (the last two need the admin PIN), and kioskd wifi-conf, which prints the saved networks as wpa_supplicant.conf blocks.
  • kiosk-config.service now waits for the /data mount, and kioskd gives wpa_cli a socket directory outside its private /tmp. Both were found by testing on a Pi 3B.

Known limits

  • Tested on a Pi 3B: scanning, a wrong password, a right password and the merge after a reboot. Hidden networks, Change password and Forget are covered by unit tests only. The Pi 4 and Pi 5 images are still built by CI and not run on hardware.
  • A board with no WiFi chip would wait for wlan0 on boot, because wpa_supplicant now always starts.

Full Changelog: v0.2.0...v0.3.0

pikiosk v0.2.0

Choose a tag to compare

@github-actions github-actions released this 21 Oct 18:28

Full Changelog: v0.1.0...v0.2.0

pikiosk v0.1.0

Choose a tag to compare

@pierrejochem pierrejochem released this 19 Oct 20:05

First release of pikiosk: a read-only Raspberry Pi 3B kiosk OS built with Buildroot 2026.08. It boots straight into kiosk-ui, a fullscreen Rust/egui touchscreen app with a liquid-glass interface, drawn through DRM/KMS and OpenGL ES 2. There's no X11 or Wayland.

kiosk-ui home screen

Download and flash

  1. Download pikiosk-v0.1.0-rpi3-sdcard.img.xz (46 MB, 404 MB unpacked).
  2. Optional: check it with sha256sum -c pikiosk-v0.1.0-rpi3-sdcard.img.xz.sha256.
  3. Flash it with Raspberry Pi Imager ("Use custom", it reads .img.xz directly), or with
    xz -dc pikiosk-v0.1.0-rpi3-sdcard.img.xz | sudo dd of=/dev/sdX bs=4M conv=fsync.
  4. Before the first boot, edit kiosk.conf on the KIOSKBOOT partition to set WiFi, hostname and timezone. For SSH, add your public key as authorized_keys. Without that file SSH stays off, and there are no passwords at all.

Hardware

  • Raspberry Pi 3B (64-bit)
  • Tested with the Waveshare 5inch HDMI LCD (B): 800×480 with resistive USB touch. The touch calibration for this panel ships in the image.
  • Other HDMI displays work. kiosk-ui switches to a roomier layout from 1280×720 up.

What's included

  • kiosk-ui with four pages:
    • Home: clock, network, uptime, CPU temperature, memory
    • Network
    • Controls: glass look, wallpapers, brightness on panels that have a backlight
    • Settings
  • On-device touch calibration (Settings → Calibrate): tap five crosses, then check the result and keep it. Without Keep it reverts after 15 s. The calibration is saved on the data partition, so it survives re-flashing the root filesystem.
  • Finger taps work on resistive panels: up to 20 px of wobble during a tap still counts as a click.
  • Read-only root filesystem, logs in RAM, and a persistent /data partition that grows to fill the card.
  • Hardware watchdog, app auto-restart, reboot on a crash loop.
  • Ethernet and WiFi (DHCP or static), NTP, mDNS (kiosk.local).

Known limitations

  • The Pi 3B has no RTC, so the clock is only correct after NTP sync.
  • WPA3-only networks don't work (the WiFi chip has no SAE). WPA2 and WPA2/WPA3 mixed mode work.
  • Glass refracts the wallpaper, not other UI elements underneath it.

Build it yourself with ./build.sh (Docker). See the README.