Skip to content

Last updated: 2026-10-20

A build is one immutable version of an app. Change version in app.json before uploading new code. Use create for the first build and upload for later versions.

Commands that target an app read its package ID from app.json, or accept --package-id <id>. The exceptions are ls <package_id> and rm --app <package_id>, which take the ID directly.

evenhub pack ​

Run your project's build script, then package its output:

bash
npm run build
evenhub pack app.json dist -o my-app.ehpk
Argument or optionDescription
<manifest>Path to app.json
<project>Built output directory, such as dist
-o, --output <file>Package path; defaults to out.ehpk
--no-ignoreInclude hidden files
-c, --checkCheck whether the package ID is available; requires login
--sdk-ver <version>SDK release used to derive the minimum app version
--enforce-manual-versionUse the manifest's minimum app version, even below the SDK floor

Ordinary packing needs no credentials. The optional --check makes an authenticated availability request. A failed pack exits non-zero.

Minimum app version ​

The CLI reads the SDK release's minAppVersion from npm and stamps it into the packaged manifest. It keeps a higher value from app.json and raises a lower value to the SDK floor. The source app.json is unchanged.

Without --sdk-ver, the lookup uses the SDK's npm latest tag. Pass the release your project uses to make the selection explicit:

bash
evenhub pack app.json dist --sdk-ver 0.0.16

If npm is unavailable, the CLI warns and uses its bundled mapping. An SDK absent from that mapping falls back to a default floor, which may be wrong. Inspect the warning and repack online before distribution if the floor could not be verified.

--enforce-manual-version requires min_app_version in the manifest. A value below the SDK requirement can allow installation on a phone app that lacks APIs your build needs.

See Packaging & Deployment for the manifest schema.

evenhub upload ​

Adds a version to an existing app. Update the manifest version, build and pack before uploading.

bash
evenhub upload my-app.ehpk -m "Swipe up restores the last entry"
OptionDescription
-m, --changelog <text>Required changelog, up to 500 characters
--package-id <id>Override the package ID read from app.json
--new-draftUpload again instead of reusing a cached draft

An existing version exits 4. Each new build starts Private. The owner can install it from Me → Apps → Private builds in the Even Realities app; see Private Testing.

evenhub promote and evenhub delist ​

Assign an uploaded build to beta, or remove a channel assignment:

bash
evenhub promote 1.0.1 --to beta
evenhub delist --from beta
OptionCommandDescription
--to betapromote <version>Point beta at this version
--from <channel>delistClear beta or public
--package-id <id>BothOverride the package ID read from app.json

Promotion to public is refused locally. Submit for review and publish in the portal. delist --from public can remove the public channel assignment; it keeps the builds.

A tester can install a beta build when their membership is Active. See Testers for invitation and installation checks.

evenhub ls for builds ​

bash
evenhub ls com.example.myapp
evenhub ls com.example.myapp --verbose

Replace the package ID with your own. Read STATUS for review state and CHANNEL for distribution. Use --verbose to include review details.

Build states ​

StatusMeaning
PrivateUploaded; available to its owner and to Active testers when assigned to beta
In reviewSubmitted in the portal and awaiting a decision
ApprovedReview passed; ready to publish
PublishedPublished to the store
RejectedReview declined; use --verbose for the reason

Status and channel are separate fields. A Private build can be assigned to beta.

evenhub download ​

Download a version's package:

bash
evenhub download 1.0.1 -o ./build.ehpk
OptionDescription
-o, --output <path>Output file; defaults to <package_id>-<version>.ehpk
--package-id <id>Override the package ID read from app.json

The CLI requests a fresh signed storage URL, then downloads from it without forwarding account credentials to the storage host.

evenhub rm ​

Remove one version, or an entire app:

bash
evenhub rm 1.0.1
evenhub rm --app com.example.myapp
OptionDescription
--package-id <id>App containing the version to delete
--app <package_id>Delete the whole app, its builds and memberships
--yesSkip the app-deletion confirmation

A version still assigned to a channel cannot be deleted. Exit 5 identifies the channel; delist it first.

App deletion is permanent. Use --app by itself with the package ID; do not combine it with a version or --package-id. In scripts, add --yes only after verifying the target.

Resuming an interrupted upload ​

create and upload upload a package into a draft, then commit that draft. The CLI attempts to save the draft ID, package hash, API base and account identity in state.yaml in the config directory.

SituationBehaviour
Same package, account and environment; draft still validReuse the cached draft
Draft older than 30 minutes, or identity/manifest changedUpload the package again
--new-draft suppliedUpload again
Cache unavailable or unsafe to useWarn on stderr and continue without reuse

Cache failures alone do not change the API result or exit code. A failure's draft_cached: false means automatic reuse is unavailable.

Check server state before retrying a write with an uncertain outcome. Use the exit-code guidance to distinguish unchanged state, partial completion and network failures.