Updates
Every layer of the platform updates independently, but all of them are coordinated by two things: the device's release channel and the Supervisor.
Channels and the version manifest
A device follows one of three channels — dev, beta, or stable. The channel is stamped into the OS image at build time and stored in the Supervisor's updater configuration (updater.json on the data partition); at boot the OS re-seeds the channel if the file is missing or invalid, so dev/beta devices never silently fall back to stable.
For each channel, a JSON manifest is published at:
https://version.apexinfosys.in/<channel>.json
The manifest advertises the current version of every managed component for that channel — the Supervisor, ApexOS Core, the plug-ins, and the OS version per board (e.g. .apexos.ova, .apexos.rpi4-64). The Supervisor polls this manifest and surfaces available updates. Channel-specific AppArmor profile sets are published alongside it (apparmor_<channel>.txt).
Supervisor, Core, and plug-in updates (containers)
The Supervisor, ApexOS Core, and the plug-ins (dns, audio, cli, multicast, observer) are all container images pulled from the platform registry:
registry.apexinfosys.in/apexos/<arch>-apexos-supervisor
registry.apexinfosys.in/apexos/... (core and plug-in images)
Updating any of them means pulling the version named in the channel manifest and recreating the container — the Supervisor handles this for Core, the plug-ins, and itself.
The Supervisor has an OS-level safety net: the host service that launches it detects a corrupted or non-starting Supervisor container (via a startup marker the Supervisor must clear), wipes the local image, and re-pulls the version currently advertised by the device's channel. If even the recorded version cannot be pulled, the updater state is reset so the next attempt starts clean.
OS updates (RAUC bundles)
The operating system itself updates atomically through RAUC A/B slots. OS builds are published as signed RAUC bundles (verity format) at:
https://ota.apexinfosys.in/
The flow:
- The Supervisor learns the target OS version for the device's board from the channel manifest.
- The RAUC bundle for that board and version is downloaded from the OTA server.
- RAUC verifies the bundle signature against the keyring shipped in the OS, checks the board compatibility string (per-board, e.g.
apexos-rpi4-64), and runs the bundle's install-check hook. - The bundle's boot, kernel, and root filesystem images are written to the inactive slot.
- The bootloader (GRUB, U-Boot, or the Raspberry Pi 5 tryboot backend) is switched to the new slot and the device reboots. If the new slot fails to boot, the bootloader automatically falls back to the previous slot after three attempts.
Updates can be driven from the UI or from the console CLI (apex os update, optionally with --version). Because bundles are ordinary signed files, offline updates are also supported — the same bundle can be applied without the device fetching it from the OTA server. Development builds are listed on the public index at https://ota.apexinfosys.in/index.html.
The user's data is untouched by OS updates: both slots share the same data partition, and host configuration persists on the overlay partition.
Add-on updates
Add-ons (Apps) come from add-on store repositories — git repositories where each add-on directory carries its config.yaml (version, supported architectures, options schema, ports, mounts). The Supervisor refreshes the store metadata and offers an update when an add-on's version changes.
Add-ons in the platform store are prebuilt: their config.yaml names a registry image per architecture, e.g.
image: registry.apexinfosys.in/apexos/{arch}-addon-whisper
so an add-on update is a container image pull at the new version tag rather than a local build. Add-on data marked as backup-excluded (typically large downloadable model files) is re-fetched by the add-on itself rather than shipped in the image.
Summary of update sources
| What | Where it comes from |
|---|---|
| Version/channel state | version.apexinfosys.in/<channel>.json |
| AppArmor profiles | version.apexinfosys.in/apparmor_<channel>.txt |
| Supervisor, Core, plug-ins | registry.apexinfosys.in (container images) |
| Operating system | ota.apexinfosys.in (signed RAUC bundles, per board) |
| Add-ons | Store repositories (metadata) + registry.apexinfosys.in (prebuilt images) |