CLI Reference
Install and use the linkdown Rust CLI to upload and share decks from your terminal.
Installation
The CLI is a Rust binary. It is not published to npm, crates.io, or Homebrew — install it with the official installer, or build from source:
curl -fsSL https://lnkdwn.com/install.sh | shcargo install --path apps/cligit clone https://github.com/0451-software/linkdown && cd linkdown/apps/cli && cargo build --releaseVerify: linkdown --version
Authentication
Run linkdown login to authenticate via your browser (OAuth2 device flow). The token is stored in your OS keyring (macOS Keychain, Linux Secret Service, Windows Credential Manager).
Non-secret configuration (default deck name, output format) lives in ~/.config/linkdown/config.toml. You can override the config directory location with the global --config <path> flag.
Commands
linkdown loginAuthenticate via your browser using the OAuth2 device flow (RFC 8628).
Example
linkdown loginlinkdown logoutClear the stored credential from your OS keyring.
Example
linkdown logoutlinkdown whoamiShow the authenticated user, tier, storage usage, and deck count.
Example
linkdown whoamilinkdown create [PATH]Detect the slide framework in PATH (default: current directory), build it, zip the output, and upload it as a new deck. Supports --name, --framework (slidev|marp|revealjs), --build-cmd, and --skip-upload.
Example
linkdown create ./my-decklinkdown update [PATH]Re-upload an existing deck. Accepts the same --name, --framework, and --build-cmd flags as create. (Currently implemented as delete + recreate.)
Example
linkdown update .linkdown listList all decks owned by the authenticated user.
Example
linkdown listlinkdown delete <name>Delete a deck by its display name. Prompts for confirmation unless --force is passed.
Example
linkdown delete my-decklinkdown share <name>Generate a share link for an existing deck. --expiry accepts 7d, 30d, or 90d. --password adds password protection.
Example
linkdown share my-deck --expiry 30d --password secretlinkdown unshare <name>Revoke all share links for the named deck.
Example
linkdown unshare my-decklinkdown set-default <name>Save a deck name as the default for `create` when --name is omitted.
Example
linkdown set-default my-deckConfiguration
The CLI does not read any environment variables. The API host (https://api.lnkdwn.com) is hardcoded in the binary. The only CLI-level override is --config <path>, which moves the location of config.toml.
Defaults in config.toml
defaults.framework—"auto"(or slidev | marp | revealjs)defaults.output_format—"url"(or json | quiet)defaults.default_expiry—"never"(or 7d | 30d | 90d)defaults.default_deck— optional, set vialinkdown set-default
Supported Frameworks
The CLI auto-detects the framework from your project. Pass --framework to override, or --build-cmd to run a custom build.
Slidev
Auto-detected from package.json with "slidev" in scripts or dependencies. Built with `slidev build`.
Marp
Auto-detected from `@marp-team/marp-cli` in package.json, a `.marp/` config, or `_mp*.md` files. Built with `marp`.
Reveal.js
Auto-detected from an `index.html` containing a reveal.js script tag. Provide a build command via --build-cmd.
Unknown
Pass --framework to override detection, or --build-cmd to run a custom build.
Ready to share your first deck?
Install the CLI and share in under a minute.
Go to Dashboard