Apps and tracks
How Flitz files every publish under an app and a track, what each link opens, who can download a build, and what archiving and deleting an app do.
Every flitz publish lands in your organization's history under an app and
one of its tracks. An app usually stands for one Flutter project, and a
track for one Git branch, so every branch gets a link that always opens its
newest build.
organization
└── app acme_app download access · live, archived, or deleted
└── track feature-login the branch feature/login · the track link
└── publish one build · landing page, deeplink, bundleThe portal shows the same tree, and the
flitz apps, flitz tracks, and
flitz publishes commands read and manage it. In a host with
the panel, teammates browse it on the
device.
Apps
An app has a key and a display name:
- The key is 1–100 letters, digits,
_, or-. It is what you type —app:inflitz.yaml,--app,flitz apps …— and it is part of every track link. By default it is thename:in yourpubspec.yaml. - The display name shows on landing pages, in the portal, and in the panel. A new app's name is its key until someone renames it.
The first publish under your pubspec name creates the app without asking. A key
you name yourself, with --app or app:, is created only after you confirm it,
or with --yes in CI — so a typo does not quietly start a new app.
Each app also has a download access setting and a state: live, archived, or deleted — see Archive, delete, and restore.
Pro includes one app. More than one app is part of Flitz Enterprise.
Tracks
A track is one line of builds within an app, normally your Git branch.
- A track is created by its first publish. Its name is the branch name.
Its key is the branch name with every character other than letters, digits,
_, and-replaced by-, sofeature/loginbecomesfeature-login. Branches whose names give the same key share one track. - Publishes made without a branch — from a detached checkout, as in most CI
jobs, or from a folder outside Git — land on the app's Unassigned track.
In CI, pass the branch with
--track. - You can name the track yourself with
--track, ortrack:inflitz.yaml.
flitz publish takes the app from --app, then app:, then the pubspec
name:, and the track from --track, then track:, then the current branch —
see App, track, and scheme.
Links
flitz publish prints four links:
| Link | What it opens |
|---|---|
| Landing page | A page for this build that opens in any browser. Its This build card shows the app, the build's title, track, versions, and comment, with a button and a QR code that open the build in your host. A second card opens the newest build on the track. |
| Deeplink | flitz://download?url=… — opens this build directly in a host that handles the scheme. See URL scheme. |
| Bundle | The .flitz file itself, over HTTPS. The deeplink points at it. |
| Track | The track's page, which always offers the newest complete build on that track. |
The first three belong to one publish. The track link follows the track, so you can share it once and teammates get every later build from it. When the newest build is deleted, the track link moves to the previous complete one.
- Links have no expiry date. They work as long as the publish and its app exist — after your license lapses, after the person who published leaves the organization, and after the API key rotates. Deleting the publish or the app stops them.
- Per-publish links end in a random suffix, and nothing lists them publicly. A track link is built from your organization, the app key, and the branch name, so someone who has seen one of your links can work it out.
- A new app key breaks track links. Renaming an app's key stops the track links shared before; per-publish links keep working.
Download access
Enterprise feature
Members only is part of Flitz Enterprise. Anyone with the link, the default, works on every plan.
Each app decides who can download its builds:
| Setting | Who can download the app's builds |
|---|---|
| Anyone with the link — the default for every app | Anyone holding a landing-page, track, or bundle link. |
| Members only | Only your host with sign-in, for a signed-in member of your organization. Browsers and apps without sign-in are refused, and so is an account from another organization. |
- The Owner and Admins change it on the app's page in the
portal. Members see it but cannot change it, and
the CLI cannot change it;
flitz apps list --jsonshows it. - It covers every publish of the app, links already shared included, and the app's track links. A change applies from the next download.
- Landing and track pages still open for anyone. For a Members only app they say the build opens only in the organization's own app, for a signed-in member.
- On a device, a refused build shows Members only or Can't open builds with this account — see Members only.
With Anyone with the link, share links the way you share a build of your app: a bundle runs with the full privileges of the host. Use Members only when an app's builds must stay inside your organization.
Archive, delete, and restore
Any member can change an app, from its page in the portal or with
flitz apps — signed in with flitz login, not with the
organization's API key.
| Action | What happens |
|---|---|
| Rename | Changes the display name, the key, or both. A new key stops the track links shared before, keeps every per-publish link working, and frees the old key: a later publish under it creates a new app. Update app: in flitz.yaml and your pipelines. A key another app holds is refused. |
| Archive | The app refuses new publishes. Its tracks, publishes, and links keep working, and the panel no longer lists it. |
| Unarchive | The app takes publishes again. |
| Delete | The app, its tracks, and its publishes leave every list, and all their links stop working at once. A publish under its key is refused. |
| Restore | Within 30 days of the delete, brings the app back with its tracks, publishes, and links unchanged — archived again if it was. After 30 days the app is gone for good and its key is free. |
Deleting a single publish is final: it leaves the history, its links stop working, and nothing restores it.