📈 GH Trending Explorer 🎲 Surprise me

← all repos

excalidraw / cli

git clone https://github.com/excalidraw/cli.git

Official Excalidraw CLI for humans and agents

+0
stars, 24h · #35,038
+~0
stars, 7 days · #35,513
+200
stars, 30 days · #2,644
202
★ total
7
forks · 2 open issues

Star history (as recorded here)

2026-10-20 · 200 ★ 2026-10-22 · 202 ★
LanguageTypeScript
LicenseMIT
Created2026-10-08 (13d ago)
Last push13d ago
Watchers2
OwnerOrganization

Links

README excerpt
# Excalidraw CLI
Manage your Excalidraw+ workspace from the terminal, and render any `.excalidraw` file to PNG. Rendering runs locally and needs no account.
 [code] 
Output is JSON by default, so it works with `jq`, shell scripts and AI agents.
## Install
 [code] 
Or try it without installing: `npx @excalidraw/cli --help`. Requires Node.js 22 or newer.
To update, run `excalidraw update`. It installs the latest version with the package manager you installed the CLI with: npm, pnpm, yarn, bun or Volta. `excalidraw update --check` only reports whether a newer version is out.
Commands you run in a terminal check for a newer version at most once a day, while the command runs, and mention it after the output. Set `EXCALIDRAW_NO_UPDATE_NOTIFIER=1` to turn this off.
## Quick start
Workspace commands need an Excalidraw+ API key. The authentication docs explain how to create one.
 [code] 
Every command has `--help` with examples, for instance `excalidraw scenes content patch --help`.
## Render to PNG
`render` turns a local file into a PNG, no API key needed. `scenes render` does the same for a scene in your workspace.
 [code] 
With a file path, the command prints the PNG's path and dimensions as JSON. Pass `--out -` to write the PNG to stdout instead, for example to pipe it into another program:
 [code] 
Rendering uses a browser that's already installed: Chrome, Edge or Chromium, or Firefox (slower) if none of those is. The CLI doesn't download one. If it can't find yours, pass `--browser-path` or set `EXCALIDRAW_BROWSER_PATH`.
| Option | Default | Notes |
| --- | --- | --- |
| `--out ` | required | File path, or `-` for stdout. |
| `--frame-id ` | | Render just this frame. |
| `--scale ` | `1` | Resolution multiplier, up to 16. |
| `--max-width`, `--max-height` | `2048` | Size limits in pixels, up to 16384. Raise them along with `--scale`. |
| `--padding ` | `20` | Ignored for frames. |
| `--theme ` | scene setting | |
| `--transparent` | off | Transparent background. |
| `--timeout ` | `30000` | How long a render may take. |
- Images must be embedded in the file. Image URLs and website embeds aren't loaded.
- The output keeps the scene's aspect ratio and stays under 64 megapixels.
- Chinese, Japanese and Korean text in the hand-drawn font needs a font that's downloaded the first time a scene uses it, then cached. Without network access, that text uses a system font. `--fonts-url` sets other download locations, or `none` to turn downloads off.
- Emoji come from your system's fonts.
## Commands
| Command | What it does |
| --- | --- |
| `login` | Check an API key and save it for later commands |
| `logout` | Remove the saved API key |
| `whoami` | Show the workspace, key type, credential source and API origin in use |
| `scenes` | List, create, rename, move, pin and trash scenes |
| `scenes content` | Read, replace or patch a scene's drawing |
| `scenes render` | Render a workspace scene to PNG |
| `render` | Render a local file to PNG |
| `collections` |