Skip to content

App registry and app manager

CrossPad apps live in repos of their own. The registry lists them, the app manager adds them to your firmware project, and the build finds them by itself. For the steps, see Install and remove apps; to list your own app, see Publish an app.

The registry is one file, registry.json in CrossPad/crosspad-apps: every official app with its repo, version, description and the platforms it runs on. The app manager reads it over plain HTTPS, with no GitHub account, and keeps a copy for an hour. The App catalog is the same list as a page.

An installed app is a git submodule in the firmware project, under components/crosspad-<name>/. The app manager runs as idf.py commands, or as CP Tools, a full-screen menu with the same functions:

CommandWhat it does
idf.py app-listapps that run on this platform (--all for every app)
idf.py app-install --app <id>add an app (--ref for a version or branch)
idf.py app-remove --app <id>take an app out
idf.py app-update --app <id>update an app (--all for every app)
idf.py app-statuswhat each app follows, and its state on disk
idf.py app-track --app <id> --mode <mode>what an app follows (below)
idf.py app-configthe firmware’s feature flags
idf.py app-profileapply a named set of apps and flags, such as lite
idf.py app-backup, idf.py app-restoresnapshot an app’s local work, and bring it back
idf.py app-devicewhat the connected CrossPad runs, against your checkout

An app registers itself with REGISTER_APP, or REGISTER_APP_PL for an app with pad logic. At build time the platform scans every app’s sources for these macros and generates the list of apps. Nothing is added to a list by hand. After you install or remove an app, run a clean build so the list is generated again.

The versions of the installed apps are built into the firmware. Settings → Info on the CrossPad lists them, and idf.py app-device compares them with your checkout.

ModeThe app follows
registrythe newest release
branchthe newest commit of a branch
pinnedone commit, which stays
localyour own copy, which the app manager leaves alone

The app manager never runs over local work. An update skips an app with uncommitted or unpushed changes, an app on an unexpected branch and an app on a fork. With --force it goes ahead, but saves the work first under .crosspad/backups/<app>/, and idf.py app-restore brings it back.

crosspad.config.json in the firmware project holds your choices: what each app follows and the feature flags. Only the flags you change from their defaults go into the build, so an untouched project builds exactly as the headers say. A profile, such as lite, is a named set of apps and flags that idf.py app-profile applies in one go.