nsite-cli v0.1.16
nsite-cli
This command line tool allows you to publish a static website on NOSTR in a anonymous and censorship resistant way.
- The website file listings are published as events (
Kind 34128) on NOSTR relays. - The binary files are uploaded to a blossom server ( https://github.com/hzrd149/blossom )
- All data is signed with your private key, so it can not be altered by anyone else.
Usage
There are two ways to use this tool.
When you run
npx nsite-cliwithout any subcommand, it will start an interactive dialog to set up a new project. Here you can also create a new private key (nsec) for signing, add custom relays and blossom servers. All settings will be saved in a.nsite/project.jsonfile in the current working directory.You can specify all settings on the command line or environment variables and use the
uploadcommand to upload a website.npx nsite-cli upload \ --relays 'wss://nos.lol,wss://relay.primal.net,wss://relay.nostr.band,wss://relay.damus.io' \ --servers 'https://cdn.satellite.earth,https://nostr.download' \ --privatekey <some secret nsec> \ www
Commands
Upload
Upload a folder to NOSTR and the configured blossom servers:
npx nsite-cli upload <folder>Download
Download a folder from NOSTR and the configured blossom servers:
npx nsite-cli download ./targetfolder npub1kjd4h3scfgzqmxn509a2fzuemps379rxnk7lkfh39jme3jdnfgDownload currently only works with a given public key (npub) and not with the private key or project configuratiom.
List
List all uploaded files of a specific public user (npub):
npx nsite-cli ls npub1kjd4h3scfgzqmxn509a2fzuemps379rxnk7lkfh39jme3jdnfgor list all uploaded files for the current private key (from the .nsite/project.json file):
npx nsite-cli ls ./targetfolderEnvironment variables
Setup your NOSTR relays through the NOSTR_RELAYS environment variable:
export NOSTR_RELAYS=wss://nos.lol,wss://relay.primal.net,wss://relay.nostr.band,wss://relay.damus.ioThe BLOSSOM_SERVERS can be used to specify the blossom servers:
export BLOSSOM_SERVERS=https://media-server.slidestr.net/,https://nostr.download/Set a NOSTR_PRIVATE_KEY that will be used to publish events (nsec or hex string) can be set as follows:
export NOSTR_PRIVATE_KEY=<nsec or hex nostr private key>Dynamic web app with browser based routing (e.g. React Browser Router)
For deep linking into web apps that use browser based routing there needs to be a way to redirect
requests to the root /index.html to start the web apps. nsite solves this by using a /404.html. You can either
upload a custom /404.html file or use the --fallback=/index.html option to "redirect" to a specific html file.
This instructs nsite-cli to upload a copy of the specified fallback file as /404.html.
npx nsite-cli upload dist --fallback=/index.htmlAnother way is to use the fallback option in the project config.
{
"privateKey": "xxxxxxxxxx",
"relays": [
...
],
"servers": [
...
],
"fallback": "/index.html"
}Connecting to Tor and I2P relays
nsite-cli supports ALL_PROXY and other proxy env variables here
Install Tor (Documentation) and I2Pd (Documentation)
Create a proxy.pac file
// SPDX-License-Identifier: CC0-1.0
function FindProxyForURL(url, host)
{
if (shExpMatch(host, "*.i2p"))
{
return "PROXY 127.0.0.1:4444; SOCKS5 127.0.0.1:4447";
}
if (shExpMatch(host, "*.onion"))
{
return "SOCKS5 127.0.0.1:9050";
}
return "DIRECT";
}Start the command with PAC_PROXY variable
PAC_PROXY=file://$(pwd)/proxy.pac npx nsite-cli .Troubleshooting
To enable debug logging, set the DEBUG environment variable to nsite* or even * to also see ndk:* logs
export DEBUG=nsite*
OR
export DEBUG=*Build
npm i
npm run build
bun i
bun run buildInstall or Run
By running
npm linkthe nsite-cli command can be installed to be run from command line from anywhere you like.
Otherwise it can also be run from source using bun
bun run src/cli.ts upload ./wwwOr from the built javascript files using node
node dist/cli.ts upload ./www