CLI Reference
Install and use the linkdown CLI to upload, update, and share decks.
Quickstart
1. Install
Pipe the install script to your shell:
curl -fsSL https://lnkdwn.com/install.sh | shVerify:
linkdown --version2. Authenticate
One-time login opens your browser and pairs the CLI with your account.
linkdown login3. Share a deck
From the root of a Slidev / Marp / Reveal.js project:
linkdown create .The CLI prints a shareable URL. That URL is preserved across
linkdown update.
Installation paths
The CLI is a single static binary. It is not published to npm, crates.io, or Homebrew โ install with the curl one-liner, build from source, or clone the monorepo:
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 --releaseAuthentication
Run linkdown loginto authenticate via your browser (OAuth2 device flow). Tokens are stored in your operating system's secure credential storage โ the keyring on macOS, Linux, and Windows.
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|remark|custom), --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 | remark | custom)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.
remark
Generic Markdown via remark + rehype. Auto-detected from a single `.md` file with no slide framework markers.
Custom HTML
Any other pre-built static site. Provide the directory of the built output; no auto-detection, no build step.
Unknown
Pass --framework to override detection, or --build-cmd to run a custom build.
Ready to share your deck?
Install takes about a minute. The dashboard is there if you'd rather click.