#p2p #content-sharing

app scp2p-cli

Interactive command-line client for the SCP2P peer-to-peer network

6 releases

Uses new Rust 2024

new 0.3.2 Mar 4, 2026
0.3.1 Mar 4, 2026
0.2.1 Mar 3, 2026
0.1.0 Mar 2, 2026

#1776 in Network programming

MPL-2.0 license

785KB
18K SLoC

scp2p — Interactive CLI

scp2p is the reference command-line client for the SCP2P protocol. It is a fully interactive shell: no long lists of subcommands or flags to memorise — simply launch the binary and navigate through arrow-key menus.


Installation

One-line install (Linux / macOS)

curl -fsSL https://raw.githubusercontent.com/techartdev/scp2p/main/install.sh | sh -s -- --tool cli

One-line install (Windows PowerShell)

$env:SCP2P_TOOL="cli"; irm https://raw.githubusercontent.com/techartdev/scp2p/main/install.ps1 | iex

From crates.io

cargo install scp2p-cli

From source

cargo install --path crates/scp2p-cli

Quick start

# Start with defaults (database = scp2p.db, TCP = 7001, QUIC = 7000)
scp2p

# Explicit database, TCP/QUIC ports, and bootstrap peer
scp2p --db ~/mynode.db --port 7002 --quic-port 7001 --bootstrap 10.0.0.1:7001

# Multiple bootstrap peers
scp2p --bootstrap 10.0.0.1:7001,10.0.0.2:7001

Startup flags

Flag Env variable Default Description
--db <PATH> SCP2P_DB scp2p.db SQLite state database path
--port <PORT> SCP2P_PORT 7001 TCP port for incoming peer connections
--quic-port <PORT> SCP2P_QUIC_PORT --port - 1 QUIC port (set 0 to disable QUIC)
--bootstrap <IP:PORT> SCP2P_BOOTSTRAP (empty) Comma-separated bootstrap peer addresses

All flags can also be supplied as environment variables — useful in scripts or containers.


Interactive shell

On launch the node opens (or creates) the database, restores its identity, starts background TCP/QUIC listeners (if enabled), and presents the main menu:

  ╔══════════════════════════════════════════╗
  ║        SCP2P Interactive Shell           ║
  ╚══════════════════════════════════════════╝
  Node ID  : <hex>
  Share ID : <hex>
  Database : scp2p.db
  TCP port : 7001
  Network  : 1 bootstrap peer(s)

  What would you like to do?
> 📋  Status
  📤  Publish files
  📁  Publish folder
  📚  Browse / inspect a share
  🔔  Subscriptions
  🏘  Communities
  🔍  Search
  ⬇   Download by content ID
  ⬇   Download share
  🔄  Sync now
  🔑  Generate new keypair
  ❌  Quit

Navigate with ↑ ↓ arrow keys and Enter. Press Escape or Ctrl+C at any nested prompt to cancel and return to the main menu.


Menu reference

📋 Status

Displays the current node ID, share ID, database path, listening port, subscription count, cached manifest count, and partial download count.

📤 Publish files

Prompts for:

  • Share title
  • File paths (comma-separated)
  • Visibility (private / public)

Prints the share ID and manifest ID on success.

📁 Publish folder

Prompts for a directory path, a title, and visibility. Publishes all files under that directory as a single share.

📚 Browse / inspect a share

Presents a picker of all locally cached manifests for quick selection, or lets you enter a share ID manually. Lists every item in the share with its name, size, and content ID.

🔔 Subscriptions

Sub-menu with three options:

Option Description
List subscriptions Print all active subscriptions with latest sequence number and manifest ID
Subscribe to a new share Enter a share ID (hex) and optional public key
Sync subscriptions now Trigger an immediate network sync (same as Sync now)

🏘 Communities

Sub-menu for:

  • Create a new community
  • Join a community
  • Leave a community
  • Browse a community (participants and public shares)

Prompts for a text query, runs it against the local subscription-scoped search index, and shows ranked results with score, share ID, content ID, and item name.

⬇ Download by content ID

Prompts for:

  • Content ID (64 hex chars)
  • Output file path
  • Optional extra peer addresses

Downloads and cryptographically verifies the content from the peer swarm.

⬇ Download share

Prompts for a share ID and output directory. Lists all items and lets you select specific ones by number (or type all). Reports progress while transferring.

🔄 Sync now

Syncs all subscriptions over the DHT using configured bootstrap peers. If none are configured, prompts for peer addresses before syncing.

🔑 Generate new keypair

Generates a fresh Ed25519 keypair and prints:

  • Private key (hex) — store it securely
  • Public key (hex)
  • Node ID
  • Share ID

Tips

  • Offline use: search and browsing work without any network connection as long as you have locally synced manifests.
  • Persistent identity: the node key is stored in the database; the same Node ID and Share ID appear on every launch against the same --db.
  • Scripting: set SCP2P_DB, SCP2P_PORT, SCP2P_QUIC_PORT, and SCP2P_BOOTSTRAP environment variables to avoid repeating flags in scripts.
  • Multiple nodes: point different instances at different --db paths to run multiple independent identities on the same machine.

Dependencies

~54–91MB
~1.5M SLoC