Skip to content

The Street is a terminal based Rust program that allows users to interact and engage with one another in an environment mimicking Neal Stephenson's, The Street.

Notifications You must be signed in to change notification settings

ikoide/thestreet

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

22 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

The Street

Terminal-first social world inspired by Snow Crash. Walk the ring, chat by proximity, buy rooms, and ride the monorail. The MVP is a Rust WebSocket relay with a TUI client.

The Street client

What it is

  • A single authoritative relay server (no federation).
  • An ASCII world: a ring-shaped street, rooms behind doors, and a fast monorail.
  • A local-chat experience: talk to nearby players or whisper at close range.
  • An economy prototype with mock XMR balances behind a wallet interface.

Tech at a glance

  • Rust workspace with separate crates for client, relay, protocol, world, and shared common types.
  • WebSocket relay that owns world state and persists data on the server.
  • TUI client for rendering, input, and network messaging.
  • Signed client actions using a persistent keypair (ed25519).
  • Tor/SOCKS5 support (optional for dev).

Quick start (dev)

  1. Start the relay:
cargo run -p street-relay -- --config config/relay.toml
  1. Start the client:
cargo run -p street-client -- --config config/client.toml
  1. Optional second local client:
cargo run -p street-client -- --config config/client2.toml

Configuration

  • Relay config: config/relay.toml
  • Client config: config/client.toml
  • Client identity key: config/identity.key (auto-generated on first run)

Running the client without --config will create config/client.toml and a new identity key using the default relay ws://89.125.209.155:9001.

For multiple local clients, each needs a unique identity_key_path. Use config/client2.toml as a template.

Controls

  • Move: arrow keys or WASD
  • Input: press / for commands, Enter to type chat, Tab to cycle chat modes
  • Info: press i to cycle info panels
  • Quit: Esc or Ctrl+Q

Commands

  • Chat: /say <msg>, /whisper <user> <msg>
  • Presence: /who
  • Rooms: /buy, /room_name <name>, /door_color <color>, /access <open|whitelist|blacklist> [user|pubkey...], /access show
  • Identity: /claim_name <name>
  • Economy: /pay <user> <amount>, /balance, /faucet [amount]
  • Monorail: /board <north|east|south|west>, /depart <north|east|south|west>
  • Help: /help, /exit

World model (MVP)

  • The street is an infinite ASCII ring with doors every few columns.
  • Rooms are separate maps with ownership and access controls.
  • The monorail runs through the center of the street; stations are marked with M.
  • Movement is grid-based with wall collisions.

Networking

  • Relay is a WebSocket server; the client connects via relay_url.
  • Tor/SOCKS5 can be enabled with tor_enabled = true and socks5_proxy.
  • For LAN play, bind the relay to 0.0.0.0:9001 and point clients at your IP.

Project layout

  • crates/common: shared types, config, crypto helpers
  • crates/protocol: message types, serialization, signature verification
  • crates/world: map generation, physics, doors
  • crates/wallet: wallet trait and mock implementation
  • crates/relay: WebSocket server, authoritative state, persistence
  • crates/client: TUI, input handling, networking, rendering

Notes

  • The wallet and XMR integration are mocked in the MVP.
  • The relay never stores private keys.

Docs

  • Protocol: docs/PROTOCOL.md
  • Data model: docs/DATA_MODEL.md
  • Workspace: docs/WORKSPACE.md

About

The Street is a terminal based Rust program that allows users to interact and engage with one another in an environment mimicking Neal Stephenson's, The Street.

Topics

Resources

Stars

Watchers

Forks

Contributors

Languages