nsite-cli は、NIP-5A / nsite 静的Webサイトを 作成・ローカル確認・ビルド・Blossomアップロード・Nostr公開 するための小さなGo製CLIです。
Vimユーザーが vim とCLIだけで小さな静的サイト/ミニアプリを作り、ローカルで確認し、そのままNIP-5A形式で公開できる体験を目指しています。
mattnさんの algia を参考に、以下の方針で作っています。
- Go製の単一バイナリ
~/.config/nsite-cli/config.jsonに設定を置く- JSONでリレー、秘密鍵、Blossom server、nsite hostを設定
- サブコマンド中心のシンプルなCLI
- Nostr / Blossom / NIP-5A の細かい処理をCLIで隠蔽
Caution
privatekey に本番アカウントの nsec を直接入れる場合は十分注意してください。テスト中は専用の開発用鍵を使うことを推奨します。
git clone https://github.com/tami1A84/nsite-cli.git
cd nsite-cli
make buildまたは:
go build -o nsite-cli ./cmd/nsite-cli設定ファイルの場所:
~/.config/nsite-cli/config.json雛形を作成:
./nsite-cli config init例:
{
"relays": {
"wss://relay-jp.nostr.wirednet.jp": {
"read": true,
"write": true,
"search": false
}
},
"privatekey": "nsecXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"blossom": {
"servers": [
"https://blossom.example.com"
]
},
"nsite": {
"host": "nsite.example.com"
}
}簡易形式も利用できます。
{
"relays": {},
"privatekey": "nsec...",
"blossomServers": ["https://blossom.example.com"],
"nsite": {
"host": "nsite.example.com"
}
}設定ファイルのパスを確認:
./nsite-cli config pathnsite hostを設定:
./nsite-cli config set nsite.host nsite.example.com確認:
./nsite-cli config get nsite.host削除:
./nsite-cli config unset nsite.hostBlossom serverを設定:
./nsite-cli config set blossom.servers https://blossom.primal.net複数指定:
./nsite-cli config set blossom.servers https://blossom.primal.net,https://example.com秘密鍵を設定:
./nsite-cli config set privatekey nsec1...プロジェクト作成:
./nsite-cli init vim-cheat --d vimcheat
cd vim-cheatローカル確認:
../nsite-cli devデフォルトでは以下で起動します。
http://localhost:3128
NIP-5A manifest previewを生成:
../nsite-cli build出力:
.nsite/manifest-preview.json
公開:
../nsite-cli publish確認を省略する場合:
../nsite-cli publish -yinit 新しいnsiteプロジェクトを作成
dev public/ をローカルHTTPサーバーで配信
build ファイルのSHA-256を計算し、NIP-5A manifest previewを生成
publish ファイルをBlossomへアップロードし、kind 15128 / 35128をNostrリレーへpublish
inspect event id / nevent からNIP-5Aイベントを確認
doctor config、プロジェクト、リレー、Blossom取得可否を確認
config config.jsonの作成・参照・更新
nsite-cli は以下のNIP-5Aイベントを生成します。
- root site:
kind: 15128 - named site:
kind: 35128
named siteでは d tagを使います。
["d", "vimcheat"]静的ファイルは path tagとしてmanifestに入ります。
["path", "/index.html", "<sha256>"]Blossom serverは server tagとして入ります。
["server", "https://blossom.example.com"]NIP-5A named siteのcanonical host labelは以下です。
<pubkeyB36><dTag>
pubkeyB36 は、32-byte raw pubkeyをbase36に変換し、50文字にゼロ埋めした値です。
publish や inspect では以下を表示します。
canonical:
pubkeyB36: ...
host label: <pubkeyB36><dTag>
url: https://<pubkeyB36><dTag>.<nsite.host>/
nsite.host が未設定の場合は、以下で設定できます。
./nsite-cli config set nsite.host nsite.example.com公開済みイベントを確認:
./nsite-cli inspect <event-id-or-nevent>raw JSONを表示:
./nsite-cli inspect <event-id-or-nevent> --json一時的にhostを指定:
./nsite-cli inspect <event-id-or-nevent> --host nsite.example.com./nsite-cli doctor確認内容:
- config path
privatekeyが有効なnsecか- read/write relay
- Blossom server
nsite.json- manifest生成
- relay接続
- Blossom上で各blobを取得できるか
ネットワーク確認を飛ばす場合:
./nsite-cli doctor --online=falsensite-cli/
cmd/nsite-cli/ CLI entrypoint
internal/config/ config.json読み書き
internal/project/ nsite.jsonとプロジェクト雛形
internal/nip5a/ NIP-5A manifest生成
internal/blossom/ Blossom upload/check
docs/ 設計書・計画
examples/ config例
nsite-cli is a small Go CLI for creating, testing, building, and publishing NIP-5A / nsite static websites.
It is intentionally modeled after mattn's algia: simple JSON config under ~/.config, small subcommands, and Nostr-first publishing.
git clone https://github.com/tami1A84/nsite-cli.git
cd nsite-cli
make build
./nsite-cli config init
./nsite-cli init vim-cheat --d vimcheat
cd vim-cheat
../nsite-cli dev
../nsite-cli build
../nsite-cli publishCreate ~/.config/nsite-cli/config.json:
{
"relays": {
"wss://relay-jp.nostr.wirednet.jp": {
"read": true,
"write": true,
"search": false
}
},
"privatekey": "nsecXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"blossom": {
"servers": [
"https://blossom.example.com"
]
},
"nsite": {
"host": "nsite.example.com"
}
}Shortcut form is also accepted:
{
"relays": {},
"privatekey": "nsec...",
"blossomServers": ["https://blossom.example.com"],
"nsite": {
"host": "nsite.example.com"
}
}init: create a minimal static app projectdev: serve project locallybuild: hash files and generate a NIP-5A manifest previewpublish: upload files to Blossom and publish kind15128or35128inspect: inspect a NIP-5A event by event id or neventdoctor: check config, project, relays, and Blossom availabilityconfig: create, read, and update config values
See docs/DESIGN.md and docs/PLAN.md.