Skip to main content

Global flags

These flags are accepted by every command that talks to the backend:

Auth (OTP)

Terminal-only signup and login. No browser, no dashboard. See cli/auth for the full flag reference and error-code table.

slideless auth signup-request

Email a 6-digit signup code to a brand-new address. Refuses (USER_ALREADY_HAS_ORGANIZATION) if the email already owns an organization.

slideless auth signup-complete

Verify the code; create user, organization, and a cko_ key; save it as the active profile. --first-name is required (stored as display name + used in onboarding emails); --last-name is optional. Without --company, the org defaults to "<first-name>'s workspace".

slideless auth login-request

Email a login code to an existing account. Returns USER_NOT_FOUND / USER_HAS_NO_ORGANIZATION if there’s nothing to log in to.

slideless auth login-complete

Verify the code; mint a fresh cko_ key for the existing organization; save it as the active profile.

Authentication

slideless login

Save an API key and verify it against the backend. Alias of slideless config set.

slideless whoami

Show the currently authenticated identity. Calls /verifyApiKey for fresh data; falls back to cached profile data on network error.

slideless verify

Focused identity check — prints ✓ API key valid and exits 0 on success, nonzero on failure. Convenient for CI pipelines and troubleshooting.

slideless use [name]

List saved profiles or switch the active one.

slideless logout [name]

Remove a profile. Without an argument, removes the active profile.

Presentations

Slideless v0.5 collapsed the CLI to eight verbs. Each does one thing: The old share <path>, update, revoke, and token add commands are gone.

slideless push [path]

Upload content — creates a new deck or updates an existing one based on whether slideless.json exists in the target folder.
Flags: The first successful push writes a slideless.json at the deck root. That’s how the CLI knows the folder is a Slideless deck — don’t delete or edit this file. It’s added to the built-in ignore list so it never uploads. JSON output (new):
JSON output (conflict on update):
A push does not mint a viewer URL anymore. Use slideless share <id> when you’re ready to publish.

slideless pull <presentationId> [path]

Download a presentation to a local folder. Writes slideless.json at the root so subsequent push commands update this presentation.
Owners and active dev collaborators can pull. Every byte is re-hashed on the client and the download aborts if any SHA-256 mismatches the manifest. JSON output:

slideless share <presentationId>

Mint a public viewer URL. Owner-only. Replaces the old token add command.
Flags:

slideless unshare <presentationId>

Revoke viewer URLs. The deck itself stays — you can mint new URLs later.

slideless invite <presentationId>

Invite a dev collaborator by email. Owner-only.
If Alice already has a Slideless account, she’s linked immediately (status=active). Otherwise the row is status=pending and auto-claims when she signs up. The invite email includes a CLI snippet and a dashboard link.

slideless uninvite <presentationId> <collaboratorId>

Revoke a dev collaborator. Symmetric with invite. Revocation is immediate.

slideless delete <presentationId>

Hard-delete a presentation. Removes the Firestore doc, every version, every asset, every collaborator row. Irreversible.

slideless share-email <presentationId>

Email an existing shared presentation to one or more recipients. Each recipient gets a unique named share link by default — the sender can then see per-recipient opens in the dashboard (or via slideless get).
Flags: JSON output (success):
failed[] contains per-recipient failures inside an otherwise-successful call — success: false only fires when zero emails could be attempted (auth, not-found, too-many-recipients, etc.). Error codes specific to share-email: See the share-via-email guide for worked examples.

slideless list

List every presentation you can access — decks you own and decks shared with you. Each row carries a role column (owner or dev).

slideless get <presentationId>

Show full metadata for a single presentation.
  • For owners: versions, tokens, collaborators, view counts.
  • For dev collaborators: a read-only view with a role: 'dev' marker.

slideless pin <presentationId> <tokenId>

Change a share token’s version mode — pin it to a specific version or put it back on auto-follow-latest. Only the presentation owner can pin.
Flags: Recipients cannot change their own version — there is no query-param override. Use slideless get <presentationId> to inspect every token’s current versionMode. See Versioning.

Marketplace

The marketplace is a public, npm-style catalog of remixable presentations. These verbs publish, browse, and remix listings:

slideless publish

Publish the presentation linked to the current folder as a marketplace listing, pinned to its current immutable version. Run from inside a linked deck folder (one with slideless.json). Owner-only. The active key needs the marketplace:publish scope.
Flags: The listing is created public. See the publishing guide.

slideless unpublish <slug>

Remove a listing from the marketplace. The underlying presentation is untouched. Owner-only.
unpublish prompts for confirmation before taking the listing down — mirroring slideless delete. Pass --yes to skip the prompt; it is required in --json / non-interactive mode, where there is no TTY to confirm on. You must unpublish a listing before you can slideless delete the presentation behind it.

slideless remix <slug> [path]

Download a listing’s files into a fresh local folder. No API key required. The folder is written with no slideless.json — it is not linked to any presentation. Increments the listing’s public remix count.
The destination must be empty or new. Alongside the deck files, remix writes a .slideless-remix.json marker recording the source slug, version, and title. The first slideless push from the folder reads that marker and stores the lineage on the new presentation permanently — so a listing you later publish shows “Remixed from <original>”. The marker is excluded from the uploaded deck; delete it before the first push if you want an uncredited copy. To turn the remixed folder into your own deck, run slideless push from inside it — that first push creates a brand-new presentation you own. See the remixing guide.

slideless search [query]

Browse the public marketplace catalog. No API key required.
Flags:

slideless listing get <slug>

Show full detail for one listing — README, tags, counters, file manifest. No API key required. Works for both public and unlisted listings.
The output includes all three public counters — stars (starCount), remixes (remixCount), and views (viewCount). If the listing was published from a remixed deck, it shows “Remixed from <original>” with the source slug (remixedFromSlug). If other listings were remixed from it, it lists them under “Remixes of this” (the descendants from GET /listMarketplaceRemixes). See Marketplace › remix lineage.

slideless listing update <slug>

Edit a listing you own — metadata, visibility, or version pin. Owner-only.
Flags:

slideless star <slug> / slideless unstar <slug>

Add or remove a star on a listing. A key is required (so stars are attributed to an account). Star count feeds slideless search --sort stars.

slideless stars

List the listings you’ve starred. Requires a key.

Config

slideless config show

List all saved profiles.

slideless config set

Save a profile. Same behaviour as slideless login.

slideless config clear

Remove config or a specific profile.

Error shape (--json)

Every command returns this shape on failure:
Common code values (share / presentations): Additional codes for the OTP auth flow (slideless auth ...): Every OTP error includes a nextAction string designed to be acted on programmatically (e.g. jq -r '.error.nextAction').