Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/permissionlesstech/bitchat/llms.txt

Use this file to discover all available pages before exploring further.

Location channels are geographically scoped public chat rooms carried over the Nostr relay network. Unlike the Bluetooth mesh, they require an internet connection and connect you with anyone in the same geographic area who is also using Bitchat — including people far outside Bluetooth range.

What Is a Geohash?

A geohash encodes a geographic area as a short string of characters. Longer strings represent smaller, more precise areas; shorter strings cover wider regions. Bitchat uses geohash precision to define channel scope:
LevelPrecision (characters)Approximate areaExample
Block7~150 m × 150 m#dr5rsj7
Neighborhood6~1.2 km × 0.6 km#dr5rs
City5~5 km × 5 km#dr5r
Province4~40 km × 20 km#dr5r
Region2~2500 km × 1250 km#dr
Every location channel is named by its geohash prefix. The block channel #dr5rsj7 is a sub-room of neighborhood #dr5rs, which is itself a sub-room of city #dr5r, and so on up to region #dr. Joining a coarser channel does not automatically show you messages from finer channels — each geohash is a distinct room.

Joining a Location Channel

1

Grant location permission

Bitchat needs location access to determine which geohash channels are available to you. Enable location access when prompted, or go to Settings → Privacy → Location Services → Bitchat.
2

Tap the location icon

In the channel list or the composer toolbar, tap the location icon. Bitchat calculates your current geohash and lists the available channel levels.
3

Select a precision level

Choose the geographic scope you want:
  • Block — your immediate surroundings (a street corner, a venue)
  • Neighborhood — your district or area of the city
  • City — the whole city and its immediate surroundings
  • Province — your state, province, or county
  • Region — a continental or country-scale area
Tap the channel to join it and subscribe to its Nostr event stream.
Location channels require an active internet connection. Bitchat connects to geographically nearby Nostr relays selected from a directory of 290+ relays ranked by distance to your geohash center. If you are offline or no nearby relays are reachable, the channel will be unavailable.

Ephemeral Keys

Bitchat derives a fresh secp256k1 key pair for each geohash area you participate in. This key pair is used to sign your Nostr events and to receive events addressed to you in that channel. Using a different key per geohash area means your activity in a neighborhood channel is not cryptographically linkable to your activity in a city channel — or to your Bluetooth mesh identity. Presence heartbeats (Nostr kind 20001) are sent periodically to region, province, and city precision levels only. Block and neighborhood levels are excluded from presence broadcasts to limit how precisely your location can be inferred by passive observers.

Relay Selection

Bitchat maintains a directory of Nostr relays with GPS coordinates (online_relays_gps.csv) bundled with the app and refreshed periodically over the network (or over Tor, if enabled). When you join a channel, Bitchat queries the directory for the relays geographically closest to your geohash center and connects to those. Relay selection is deterministic for a given directory and geohash: every device with the same relay directory picks the same set of relays for a given channel, which means publishers and subscribers reliably converge on the same relay pool.

Privacy Considerations

Location channels offer community reach in exchange for some geographic disclosure. Before joining, be aware of what is visible to relays and observers:
What Nostr relays can see:
  • Your ephemeral Nostr public key (not your mesh identity, but still a persistent identifier for the duration of your key’s use in that area)
  • The geohash tag of each event — this reveals which geographic cell you are in
  • Event kind numbers and timestamps (though actual message timestamps are encrypted inside the envelope for private messages; public channel posts use the real time)
  • The fact that you are using the Nostr relay
What relays cannot see:
  • Your Bluetooth mesh identity, Noise public key, or nickname
  • Your precise GPS coordinates (only the geohash cell, which is an area, not a point)
  • Private message content (encrypted inside BitChat’s envelope format)
A 7-character block geohash covers roughly a 150 × 150 meter square. Anyone who knows which block geohash you are publishing to can narrow your location to that cell. Use a coarser precision level (city or region) if tighter geographic privacy is important.

/drop — Leaving a Location Note

From any channel context, the /drop <message> command pins a short text note to your building-level geohash (7-character precision) with a 24-hour NIP-40 expiry. Anyone who passes through that location and views area notes will see it until it expires.
/drop laptop charger left at the information desk
📍 note left here — it fades in 24h
/drop requires both location permission and location notes to be enabled in the Info screen. If no geo relays are reachable, the note is not posted.

IRC-Style Commands in Location Channels

Most slash commands work in location channels. A few are restricted because they depend on Bluetooth mesh features:
CommandAvailable in location channels
/who✅ Lists visible channel participants
/block / /unblock✅ Blocks by Nostr public key
/msg✅ Opens a private chat
/hug / /slap✅ Emote actions
/drop✅ Drops a note at current location
/pay⚠️ Requires explicit public flag (bearer-token risk)
/fav / /unfav❌ Favorites are mesh-only
/group❌ Groups are mesh-only
/ping / /trace❌ Mesh diagnostics only

Build docs developers (and LLMs) love