Commands, settings, SDK functions, anything in the docs.

Publish

Updating your app

Ship new versions, take a submission back, and take an app out of the store.

On this page

A version never changes once it is published, so every change to your app ships as a new version. Displays keep the version they have until their owner moves them to a newer one.

Ship a new version

Raise version in ledable.json, then upload, try and submit it as the first one:

Terminal
ledable developer upload
ledable developer submit

The new version must be higher than every version that passed its checks before, and higher than the listed one to be submitted. Each version is reviewed. While it waits, the version the store lists stays listed; when it is approved, it takes that place.

Your share link shows the listed version once the app is listed, so to have people try the new version first, give them its number to install with store install, as Share links shows.

What people with your app see

Nothing changes on a display by itself. Each playlist entry keeps playing the version it was installed with, and its owner is offered the newer one:

  • In the LEDABLE phone app, the entry shows an update badge in the playlist, and its settings page says which version is available. Saving with Update chosen moves the entry to it and keeps its settings. The app's store page offers the update for each of their displays that has an older version.
  • With the CLI, store update moves every entry of the app on a display to the listed version, keeping their settings.
Terminal
ledable store update gitlab-todos --device 1234

So older versions keep running for as long as people keep them. Keep what they depend on working: the hosts they call, and the secrets they declare, which apply to every version of the app.

Change settings between versions

When an entry moves to a new version, its values carry over by each setting's key:

  • A setting the new version still has, under the same key, keeps its value.
  • A value for a setting the new version no longer has is dropped.
  • A new setting starts at its default. A new required setting without a default has to be filled in before the update can be saved, so store update stops with Still needed: and the setting's name.
  • A value the setting would now refuse, such as a choice it no longer offers, has to be changed before the update can be saved.

To change what a setting holds, such as its type, give it a new key rather than reusing the old one. The settings a version returns can also change while it runs: a render ignores values for settings that are no longer returned, and treats a choice that is no longer offered as unset.

Take a submission back

Terminal
ledable developer withdraw

developer withdraw takes back the submission waiting for review; it shows as withdrawn. Nothing is listed or changed, and you can submit another version straight away. With no submission waiting, the command fails with No submission is pending.

Take the app out of the store

Terminal
ledable developer unlist

developer unlist takes the app out of the store's pages and its search, and the store stops offering it to anyone. Displays that have it keep playing their version, and their owners can still change its settings, but no updates are offered while the app is unlisted. The share link shows the test version again, if there is one.

LEDABLE can also unlist an app, for example when it breaks the review guidelines; the reason is shown as unlisted_reason in developer status.

To list the app again, submit a version that passed its checks, such as the one that was listed. It is reviewed like any submission, and approval lists it.

When a version stops working

Published versions are never removed, so every installed version keeps loading. It can still stop drawing, for example when a service it reads changes its API or revokes its key. When a render fails, the display keeps showing the last image it received until that image's hardTtlMs runs out, and keeps asking for a new one; after that, it shows a loading indicator in the entry's turn until a render succeeds again.

You cannot move displays to another version yourself. If the fix is a new key, set it with secret set: every version reads the new value. Anything else needs a new version; once it is listed, people are offered the update.