Skip to main content

CLI Reference

Install and use the linkdown CLI to upload, update, and share decks.

Quickstart

  1. 1. Install

    Pipe the install script to your shell:

    curl -fsSL https://lnkdwn.com/install.sh | sh

    Verify: linkdown --version

  2. 2. Authenticate

    One-time login opens your browser and pairs the CLI with your account.

    linkdown login
  3. 3. 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:

curlcurl -fsSL https://lnkdwn.com/install.sh | sh
sourcecargo install --path apps/cli
clonegit clone https://github.com/0451-software/linkdown && cd linkdown/apps/cli && cargo build --release

Authentication

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 login

Authenticate via your browser using the OAuth2 device flow (RFC 8628).

Example

linkdown login
linkdown logout

Clear the stored credential from your OS keyring.

Example

linkdown logout
linkdown whoami

Show the authenticated user, tier, storage usage, and deck count.

Example

linkdown whoami
linkdown 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-deck
linkdown 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 list

List all decks owned by the authenticated user.

Example

linkdown list
linkdown delete <name>

Delete a deck by its display name. Prompts for confirmation unless --force is passed.

Example

linkdown delete my-deck
linkdown 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 secret
linkdown unshare <name>

Revoke all share links for the named deck.

Example

linkdown unshare my-deck
linkdown set-default <name>

Save a deck name as the default for `create` when --name is omitted.

Example

linkdown set-default my-deck

Configuration

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 via linkdown 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.