Skip to content
/ nos Public

A beautiful command-line client for posting to Nostr, built with Go and Charm.sh. Features secure key storage, multi-relay posting, and an interactive terminal UI.

License

Notifications You must be signed in to change notification settings

11bDev/nos

Repository files navigation

nos logo

nos - Beautiful Nostr CLI Client

GitHub Release Go Report Card License winget

A beautiful command-line client for posting to Nostr, built with Go and Charm.sh.

πŸš€ Now available on Microsoft winget!

✨ Features

  • πŸ” Secure key storage using system keyring
  • 🎨 Beautiful terminal UI with Charm.sh
  • πŸ“‘ Posts to multiple relays for reliability
  • πŸš€ Simple one-command posting
  • βš™οΈ Customizable relay management
  • πŸ”„ Account switching with complete reset
  • πŸ“± Interactive menu-driven interface
  • βœ… Post verification across relays

πŸš€ Installation

Linux (Debian/Ubuntu)

Download and install the .deb package:

# Download the latest .deb package from releases
wget https://github.com/PlebOne/nos/releases/latest/download/nos_1.1.9_amd64.deb

# Install the package
sudo dpkg -i nos_1.1.9_amd64.deb

# If you encounter dependency issues, run:
sudo apt-get install -f

Alternative architectures:

  • ARM64: nos_1.1.9_arm64.deb
  • ARMv7: nos_1.1.9_armhf.deb

Linux (Snap Store)

Install from the Snap Store:

sudo snap install nos

The snap package provides automatic updates and works across all major Linux distributions.

Windows (Recommended)

Install via Microsoft winget (Windows Package Manager):

winget install PlebOne.nos

Note: If you encounter a security warning during winget installation, this is because the executable is not yet code-signed. You can:

  1. Alternative method: Download manually from releases and run:

    # Download the .exe file, then:
    Unblock-File -Path "path\to\nos-VERSION-windows-amd64.exe"
  2. One-liner install (PowerShell as Administrator):

    Set-ExecutionPolicy Bypass -Scope Process -Force; iex ((New-Object System.Net.WebClient).DownloadString('https://raw.githubusercontent.com/PlebOne/nos/main/install.ps1'))

Code signing is being implemented to resolve this issue permanently.

Manual Download

Download the latest release for your platform from the releases page:

  • Windows: Download nos-VERSION-windows-amd64.exe or nos-VERSION-windows-arm64.exe
  • Linux: Download nos_VERSION_linux_amd64.tar.gz or nos_VERSION_linux_arm64.tar.gz
  • macOS: Download nos_VERSION_darwin_amd64.tar.gz or nos_VERSION_darwin_arm64.tar.gz

Windows users: After downloading, right-click the .exe file β†’ Properties β†’ Check "Unblock" if present.

Using Go

go install github.com/PlebOne/nos@latest

Build from Source

git clone https://github.com/PlebOne/nos.git
cd nos
go build -o nos
# Linux/macOS: sudo mv nos /usr/local/bin/
# Windows: move nos.exe to a directory in your PATH

Usage

Interactive Menu Mode

Simply run nos without any arguments to enter the interactive menu:

nos

This opens a beautiful menu-driven interface where you can:

  • Setup your account (add nsec)
  • Post messages
  • Verify your posts on relays
  • Manage relays
  • Reset your account

Quick Command Mode

For faster posting, you can use command-line arguments or stdin:

# Post a message directly
nos "Hello Nostr world!"

# Post from stdin (best for hashtags and URLs)
echo "Check out #bitcoin at https://bitcoin.org" | nos

# Multi-line posts with stdin
echo "Line 1
Line 2
#hashtag https://example.com" | nos

# Using PowerShell (Windows)
"My #nostr post with https://example.com" | nos

πŸ’‘ Tip: Use stdin (echo "message" | nos) when your message contains special characters like hashtags (#) or URLs, as it avoids shell escaping issues.

First Time Setup

The first time you post, nos will prompt for your nsec (private key):

nos "My first post"
# Will prompt: "Enter your nsec key (starts with nsec1):"

Verifying Your Posts

Check if your posts are visible on relays:

nos verify

This will:

  • Show your npub (public key)
  • Connect to each relay and check for your recent posts
  • Display a summary of posts found on each relay

Managing Relays

Customize which relays to use through the interactive menu or commands:

# Interactive relay management
nos relay

# Or use direct commands:
nos relay list                      # List current relays
nos relay add wss://relay.example.com    # Add a new relay
nos relay remove wss://relay.example.com # Remove a relay
nos relay reset                     # Reset to default relays

Changing Accounts / Reset

To completely reset nos and change to a different Nostr account:

nos reset

This will:

  • Delete your stored nsec key
  • Remove any custom relay configuration
  • Allow you to set up nos with a different account

Security

Your nsec key is stored securely using your system's native keyring:

  • Linux: Secret Service API (GNOME Keyring, KWallet)
  • macOS: Keychain
  • Windows: Windows Credential Manager

Default Relays

The client posts to these relays by default:

  • wss://relay.damus.io
  • wss://nos.lol
  • wss://relay.nostr.band
  • wss://relay.current.fyi
  • wss://relay.snort.social
  • wss://relay.primal.net

πŸ”§ Development & Release Automation

This project features a fully automated release pipeline that:

Automated Releases

  • Multi-platform builds: Automatically builds for Windows (x64/arm64), Linux (x64/arm64), and macOS (x64/arm64)
  • GitHub Releases: Creates GitHub releases with pre-built binaries and checksums
  • Windows winget: Automatically generates and commits winget manifests for Microsoft Store distribution

Release Process

  1. Create and push a version tag: git tag v1.2.3 && git push --tags
  2. GitHub Actions automatically:
    • Builds binaries for all platforms using goreleaser
    • Extracts Windows .exe files for winget compliance
    • Uploads standalone .exe files alongside tar.gz archives
    • Generates winget manifests with correct SHA256 checksums
    • Commits manifests to the main branch for tracking

winget Integration

  • Windows users can install via: winget install PlebOne.nos
  • Automatic manifest generation ensures Microsoft compliance
  • Supports both x64 and arm64 Windows architectures
  • Silent installation switches for enterprise deployment

Contributing

When contributing new features or bug fixes:

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes with tests
  4. Submit a pull request
  5. Once merged, maintainers can create a new release tag to trigger automation

πŸ“‹ Requirements

  • Go 1.21+ for building from source
  • Windows Terminal or ANSI-capable terminal for best experience on Windows
  • System keyring for secure key storage (automatically available on all supported platforms)

πŸ“¦ Dependencies

πŸ“„ License

This project is licensed under the MIT License - see the LICENSE file for details.

🀝 Contributing

Contributions are welcome! Please feel free to submit a Pull Request. For major changes, please open an issue first to discuss what you would like to change.

πŸ“ž Support

About

A beautiful command-line client for posting to Nostr, built with Go and Charm.sh. Features secure key storage, multi-relay posting, and an interactive terminal UI.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 2

  •  
  •