Deploy static sites to the AT Protocol
The Wisp CLI is a command-line tool for deploying static websites directly to your AT Protocol account. Host your sites on wisp.place with full ownership and control, backed by the decentralized AT Protocol.
69de880e160a2f26e3c26b7c28030457913754dc wisp-cli-aarch64-darwin
026189f2c10077a2be4705102e169e66cb207f84 wisp-cli-aarch64-linux
4777cff07558906717402484a3313359880eae96 wisp-cli-x86_64-linux
d6bc789d7fd7c787e5520eb476cee70c97ccb3ce wisp-cli-x86_64-windows.exe
Deploy automatically on every push using Tangled Spindle:
when:
- event: ['push']
branch: ['main']
- event: ['manual']
engine: 'nixery'
clone:
skip: false
depth: 1
submodules: false
dependencies:
nixpkgs:
- nodejs
- coreutils
- curl
github:NixOS/nixpkgs/nixpkgs-unstable:
- bun
environment:
SITE_PATH: 'dist'
SITE_NAME: 'my-site'
WISP_HANDLE: 'your-handle.bsky.social'
steps:
- name: build site
command: |
export PATH="$HOME/.nix-profile/bin:$PATH"
# regenerate lockfile, https://github.com/npm/cli/pull/8184 makes rolldown not install
rm package-lock.json bun.lock
bun install @rolldown/binding-linux-arm64-gnu --save-optional
bun install
# run directly with bun because of shebang issues in nix
bun node_modules/.bin/vite build
- name: deploy to wisp
command: |
# Download Wisp CLI
curl https://sites.wisp.place/nekomimi.pet/wisp-cli-binaries/wisp-cli-x86_64-linux -o wisp-cli
chmod +x wisp-cli
# Deploy to Wisp
./wisp-cli \
"$WISP_HANDLE" \
--path "$SITE_PATH" \
--site "$SITE_NAME" \
--password "$WISP_APP_PASSWORD"
WISP_APP_PASSWORD as a secret in your Tangled Spindle repository settings.
Generate an app password from your AT Protocol account settings.
# Download and make executable
curl -O https://sites.wisp.place/nekomimi.pet/wisp-cli-binaries/wisp-cli-macos-arm64
chmod +x wisp-cli-macos-arm64
# Deploy your site
./wisp-cli-macos-arm64 deploy your-handle.bsky.social \
--path ./dist \
--site my-site \
# Your site will be available at:
# https://sites.wisp.place/your-handle/my-site
Download a site from the PDS to your local machine (uses OAuth authentication):
# Pull a site to a specific directory
wisp-cli pull your-handle.bsky.social \
--site my-site \
--output ./my-site
# Pull to current directory
wisp-cli pull your-handle.bsky.social \
--site my-site
Run a local server that monitors the firehose for real-time updates (uses OAuth authentication):
# Serve on http://localhost:8080 (default)
wisp-cli serve your-handle.bsky.social \
--site my-site
# Serve on a custom port
wisp-cli serve your-handle.bsky.social \
--site my-site \
--port 3000
# Downloads site, serves it, and watches firehose for live updates!
# Enable SPA mode (serve index.html for all routes)
wisp-cli serve your-handle.bsky.social \
--site my-site \
--spa
# Enable directory listing for paths without index files
wisp-cli serve your-handle.bsky.social \
--site my-site \
--directory