Loading...
Loading...
Deploy and manage censorship-resistant static websites on the Nostr network using nsyte CLI. Covers installation, project setup, configuration, authentication (NIP-46 bunkers), deployment to Blossom servers, CI/CD automation, and troubleshooting. Use when the user mentions nsyte, nsite, Nostr site hosting, Blossom uploads, or decentralized web publishing.
npx skill4agent add sandwichfarm/nsyte nsytensyte --versioncurl -fsSL https://nsyte.run/get/install.sh | bash/usr/local/bin/nsytesudodeno install -A -f -g -n nsyte jsr:@nsyte/clihttps://github.com/sandwichfarm/nsyte/releases%USERPROFILE%\bin\/usr/local/bin~/.bashrc~/.zshrcsudodeno upgradecd /path/to/your/project
nsyte initwss://https://.nsite/config.json.nsite/config.json| Field | Type | Description |
|---|---|---|
| | Nostr relay URLs ( |
| | Blossom server URLs ( |
| Field | Type | Description |
|---|---|---|
| | 64-char hex pubkey for NIP-46 bunker. Pattern: |
| Field | Type | Default | Description |
|---|---|---|---|
| | | |
| | — | Site title for manifest event |
| | — | Site description for manifest event |
| | — | 404 fallback HTML path (e.g., |
id| Field | Type | Description |
|---|---|---|
| | Publish kind 0 profile metadata. Requires non-empty |
| | Publish kind 10002 relay list |
| | Publish kind 10063 Blossom server list |
| | Publish NIP-89 handler. Requires |
| Field | Type | Description |
|---|---|---|
| | Nostr profile: |
| | NIP-89 config: |
| | Gateway hostnames (default: |
{
"relays": ["wss://relay.damus.io", "wss://nos.lol"],
"servers": ["https://cdn.hzrd149.com"]
}{
"relays": ["wss://relay.damus.io"],
"servers": ["https://cdn.hzrd149.com"],
"id": "blog",
"title": "My Blog",
"description": "A blog about decentralized applications"
}{
"relays": ["wss://relay.damus.io", "wss://nos.lol"],
"servers": ["https://cdn.hzrd149.com"],
"publishProfile": true,
"publishRelayList": true,
"publishServerList": true,
"profile": {
"name": "Alice",
"display_name": "Alice",
"about": "Decentralization enthusiast",
"picture": "https://example.com/avatar.jpg",
"nip05": "alice@example.com",
"lud16": "alice@getalby.com"
}
}{
"relays": ["wss://relay.damus.io"],
"servers": ["https://cdn.hzrd149.com"],
"publishAppHandler": true,
"appHandler": {
"kinds": [1, 30023],
"name": "My Nostr Viewer",
"description": "A viewer for notes and articles",
"icon": "https://example.com/logo.png"
}
}nsyte config↑↓Entersrq.nsite/config.jsonnsyte validatensyte bunker connectnsyte bunker connect 'bunker://pubkey?relay=wss://relay.example.com&secret=xxx'?&nsyte bunker use [pubkey]bunkerPubkeybunkerPubkey| Command | Purpose |
|---|---|
| Connect interactively (QR or URL) |
| Connect via bunker URL |
| Import existing nbunksec |
| Export stored bunker as nbunksec |
| List stored bunkers |
| Set project to use a bunker |
| Remove a bunker from storage |
| Rebuild keychain index |
NSYTE_FORCE_ENCRYPTED_STORAGE=truensyte deploy ./dist--secnsyte deploy ./dist --sec "nsec1..."
nsyte deploy ./dist --sec "${NBUNK_SECRET}"nsec1...nbunksec1...bunker://....nsite/config.jsonbunkerPubkey| Flag | Purpose |
|---|---|
| Provide signing key/credential |
| Re-upload all files (skip diff) |
| SPA fallback for 404s |
| CI mode — no prompts, fail fast |
{N} files uploaded successfully ({size}){uploaded}/{total} files uploadedFailed to upload any fileshttps://{npub}.nsite.lol/nsyte ci
# or with bunker URL:
nsyte ci 'bunker://pubkey?relay=wss://relay.example.com&secret=xxx'nbunksec1...nsyte deploy ./dist --non-interactive --sec "${NBUNK_SECRET}"--sec--nbunksecjobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: denoland/setup-deno@v1
- run: nsyte deploy ./dist --non-interactive --sec "${{ secrets.NBUNK_SECRET }}".nsite/config.jsonNBUNK_SECRETnbunksec1...--non-interactivensyte validate| Command | Purpose |
|---|---|
| List published files |
| Interactive TUI file browser with relay/server propagation tracking |
| Download published files |
| Local dev server |
| Start resolver server with npub subdomains |
| Debug nsite setup (relays, servers, integrity) |
| Validate config (exit 0 = valid, 1 = invalid) |
| Remove published files from relays/servers |
| List available sites (root + named) |
--secnsyte bunker usebunkerPubkeynsyte bunker use [pubkey]'bunker://...'relayswss://--use-fallback-relaysserversnsyte confignsyte initnsyte validatepublishAppHandler: trueappHandler.kindspublish*nsyte bunker use