A simple, fast, and concurrent command-line tool for generating secure, URL-friendly unique string IDs using the NanoID Go implementation.
- Customizable Length: Specify the length of the generated Nano ID.
- Custom Alphabet: Define your own set of characters for ID generation.
- Multiple ID Generation: Generate multiple IDs in a single command.
- Verbose Mode: Enable detailed logs during ID generation.
Cosign is used to sign releases for integrity verification.
To verify the integrity of the nanoid-cli
source, first download the target version and its signature file
from the releases page and then run the following commands:
# Fetch the latest release tag from GitHub API (e.g., "v1.29.0")
TAG=$(curl -s https://api.github.com/repos/sixafter/nanoid-cli/releases/latest | jq -r .tag_name)
# Remove leading "v" for filenames (e.g., "v1.29.0" -> "1.29.0")
VERSION=${TAG#v}
# Verify the release tarball
cosign verify-blob \
--key https://raw.githubusercontent.com/sixafter/nanoid-cli/main/cosign.pub \
--signature nanoid-${VERSION}.tar.gz.sig \
nanoid-${VERSION}.tar.gz
# Download checksums.txt and its signature from the latest release assets
curl -LO https://github.com/sixafter/nanoid-cli/releases/download/${TAG}/checksums.txt
curl -LO https://github.com/sixafter/nanoid-cli/releases/download/${TAG}/checksums.txt.sig
# Verify checksums.txt with cosign
cosign verify-blob \
--key https://raw.githubusercontent.com/sixafter/nanoid-cli/main/cosign.pub \
--signature checksums.txt.sig \
checksums.txt
If valid, Cosign will output:
Verified OK
git clone https://github.com/sixafter/nanoid-cli.git
cd nanoid-cli
make build
This command compiles the main.go
file and produces an executable named nanoid
in the ./out
directory.
brew tap sixafter/tap
brew install --cask nanoid
For casks to work, you'll need curl installed. If you don't have it, you can install it with:
brew install curl
🔐 Note for macOS users: If you see a killed error when running nanoid, macOS may have quarantined the binary due to it being unsigned or unnotarized. To resolve:
sudo xattr -d com.apple.quarantine /opt/homebrew/bin/nanoid
Run the CLI to Generate a Default Nano ID:
nanoid generate
Output:
V1StGXR8_Z5jdHi6B-myT
Generate a Nano ID with a Custom Length:
nanoid generate --length 30
Output:
mJzY8fK3Lq7B9sR2dT4hV5nG1aC0eX
Generate a Nano ID with a Custom Alphabet:
nanoid generate --alphabet "abcdef123456"
Output:
1a2b3c4d5e6f1a2b3c4d5e6f1a2b3c4
Generate Multiple Nano IDs with verbose output:
nanoid generate --count 10 --verbose
Output:
_OKhyfsfINNfokJZxyj4j
HZUZ7sTHlLpub0rryyLsr
_agY2S55BoYSdipGVaL4P
FgrdoVAzzFZWS2bc42bre
saM2-PnvwIIyt312rkGbS
RCdECZCOr7VTkGXx5CoQo
bCX2GTzXJ22Azn0MAYkQ3
Fh7-65FYU9Higp7scLBht
uC87QtpSLb8ZX5oENCHJP
bTPg9AynQtzldZazM-wKV
Start Time..............: 2025-04-14T16:30:03-05:00
Total IDs generated.....: 10
Total time taken........: 46.959µs
Average time per ID.....: 4.695µs
Throughput..............: 212951.72 IDs/sec
Estimated output size...: 220 B
Estimated entropy per ID: 126.00 bits
Memory used.............: 0.32 MiB
Contributions are welcome. See CONTRIBUTING
This project is licensed under the Apache 2.0 License. See LICENSE file.