The platform

The platform

peko login     # opens a browser, receives a code on a loopback server
peko whoami    # who is signed in
peko logout    # clear the session

Login binds a random localhost port and opens a consent page. The platform mints a single-use five-minute code, delivers it to the loopback callback, and the CLI exchanges it for a session stored in the OS keychain. No token ever appears in a browser-visible URL.

Signing out on the web revokes the session, so a later command reports that you were signed out and asks you to log in again.

Publishing and app distribution both need a verified email, which is a browser step.

Apps

peko apps                  # list what this account owns
peko apps show app_1a2b3c  # one app, with its capabilities
peko link app_1a2b3c       # write [project].app_id
peko link                  # show the current link

An app is created on the dashboard, and its capabilities are fixed then: server allows deploy server, distribution allows deploy app. Check before deploying rather than after a failure.

peko link is a local edit to peko.toml. It needs no login and no network.

apps show distinguishes an app that does not exist from one owned by someone else, which tells a stale link apart from being signed in as the wrong account.

Deploying a server

peko deploy server

Requires [ui].framework set to an SSR id and a linked app id. The CLI builds the web app, packages the framework's output into a Docker artifact, and hands it over; the platform builds and runs the container and serves it at <slug>.serve.pekoui.com.

On success the assigned host is written back into peko.toml, so the next native build bakes it in.

--health-path matters when the app does not answer 2xx on /. --no-wait starts the deploy and exits instead of polling.

Deploying an app

peko deploy app

Builds every target platform twice: a demo build the device farm drives to capture store assets, and a signed release build for submission. Both are packed into a .pkdeploy under build/deploy/ and uploaded.

--no-upload builds the bundle without shipping it. --yes skips the prompts, including the one that opts into packaging source for a remote Apple build.

Apple targets build locally on a Mac. On another host they need the remote Apple builder, and the signing material travels encrypted to that host's key.

The bridge token

peko bridge token

Mints a short-lived token for a device to connect to a hosted app's bridge. A shipped app does not use this: the platform provisions the app's own credential at deploy time. This is for manual use and the development device.

Remote build keys

A build host that signs Apple targets on your behalf holds an age key. The signing material is sealed to it, so it is never readable in transit.

peko deploy runner-keygen        # create the key, print the public recipient
peko deploy runner-pubkey        # print the public half again
peko deploy unseal --sealed ...  # decrypt on the build host

Replacing the key makes every already-sealed bundle undecryptable, which is why keygen refuses to overwrite without --force.