30817:places

Places

Arno

published
2026-10-01

NIP-Places

draft optional

This NIP defines an addressable event for a place: a physical point of interest such as a restaurant, hotel, museum, shop or park. A place event carries a name, precise coordinates, a searchable geohash index, categories and optional descriptive attributes.

A place event is the author's record of a place. It does not claim ownership of the place, and several authors MAY publish records of the same real-world place.

Place event

A place is a kind:31300 addressable event. Its address is 31300:<pubkey>:<d>, so other events reference it with an a tag.

.content is an optional plain-text description of the place.

To edit a place, the author publishes a new event with the same d tag, which replaces the previous one. To remove a place, the author publishes a NIP-09 deletion request.

Tags

Tag Status Description
d required Unique identifier for this place, chosen by the author. A random UUID is RECOMMENDED so the place can be renamed without changing its address.
name required Display name of the place.
geo required Coordinates, as an RFC 5870 geo-path, see Coordinates.
g recommended Geohashes derived from geo, see Geohash.
location recommended Human-readable location, see Location.
t optional Category or label, lowercase. MAY be repeated.
r optional Website of the place.
i optional NIP-73 external identifier linking the place to an external registry. MAY be repeated, each with its k tag.
osm:<key> optional OpenStreetMap attribute, see OpenStreetMap attributes.

All tag values are strings. Clients MUST ignore tags they do not understand.

Coordinates

The geo tag is the authoritative position of the place, as geometric coordinates. Its value MUST be a geo-path as defined in RFC 5870, that is, a geo URI without its geo: scheme prefix. It gives latitude then longitude in decimal degrees, with . as the decimal separator. Positive values are north and east, negative values south and west. Coordinates MUST use the WGS84 datum, which is the RFC 5870 default: the value MUST NOT include a crs parameter other than wgs84.

["geo", "48.86004,2.32663"]

Geohash

Events SHOULD include g tags as defined in NIP-52, holding lowercase geohashes of the geo position at lengths 4, 6 and 9. They MAY include other lengths.

A g tag is consistent with geo if the geo position lies within or on the boundary of the geohash cell. If a g tag is inconsistent with geo, clients MUST use geo and SHOULD ignore that g tag.

Location

The location tag describes where the place is, as a single human-readable string. It is usually a postal address, but MAY be any description people use locally to find the place, such as a village, a landmark or a post office box where no street address exists. It SHOULD be written in the format customary where the place is. Events SHOULD include it when such a description is known, and SHOULD include at most one.

Clients SHOULD display location as-is and MUST NOT rely on parsing it. The place's position is always given by geo.

["location", "1 Rue de la Légion d'Honneur, 75007 Paris, France"],
["location", "Village de Sanankoroba near Kati, B.P. 88, Mali"]

OpenStreetMap attributes

OpenStreetMap is the largest open dataset of places, with an established vocabulary of attributes. The osm: prefix lets events carry those attributes without redefining them, and keeps them from colliding with other nostr tags.

A tag whose name starts with osm: carries an OpenStreetMap attribute. The rest of the tag name, after the first :, is the OSM key. The value MUST follow the OSM conventions for that key. For example, osm:addr:street carries the OSM key addr:street.

Any OSM key MAY be used, and clients decide which ones to support. For illustration, common keys for places include:

Tag Meaning
osm:amenity, osm:shop, osm:tourism, osm:leisure OSM category, e.g. restaurant, bakery, museum, park
osm:opening_hours Opening hours, in the OSM opening_hours syntax
osm:phone Phone number, international format
osm:cuisine Cuisine, OSM values, ;-separated
osm:wheelchair yes, limited or no
osm:addr:* Structured address

Clients that do not understand an osm: tag MAY display it as a generic key and value, or ignore it.

This NIP relies on existing NIPs rather than defining new mechanisms:

  • External identifiers. i tags follow NIP-73 and link a place to an entry in another registry. A place without any external identifier is fully valid; its identity is its Nostr address.
  • Application labels. Clients MAY attach their own labels using NIP-32, with an L namespace and l tags, either on their own place events or in a kind:1985 label event referencing the place with an a tag.
  • Collections. Users MAY group places into NIP-51 sets referencing places with a tags. Private entries MAY be encrypted as NIP-51 describes.
  • Comments and reviews. Clients MAY use NIP-22 comments on place events.

Example

{
  "kind": 31300,
  "pubkey": "<pubkey>",
  "created_at": 1727740800,
  "content": "Impressionist masterpieces in a former Beaux-Arts railway station.",
  "tags": [
    ["d", "a3f9c2e1-7b4d-4c8a-9e2f-1d6b8a0c5e7f"],
    ["name", "Musée d'Orsay"],
    ["geo", "48.86004,2.32663"],
    ["g", "u09t"],
    ["g", "u09tuy"],
    ["g", "u09tuywnq"],
    ["location", "1 Rue de la Légion d'Honneur, 75007 Paris, France"],
    ["t", "museum"],
    ["t", "art"],
    ["r", "https://www.musee-orsay.fr"],
    ["osm:tourism", "museum"],
    ["osm:opening_hours", "Tu-Su 09:30-18:00; Th 09:30-21:45"],
    ["osm:wheelchair", "yes"],
    ["osm:addr:housenumber", "1"],
    ["osm:addr:street", "Rue de la Légion d'Honneur"],
    ["osm:addr:postcode", "75007"],
    ["osm:addr:city", "Paris"],
    ["osm:addr:country", "FR"]
  ],
  "id": "<id>",
  "sig": "<sig>"
}

Cited links

Discussion

Connect a key to comment.