30817:places
Places
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.
Related events
This NIP relies on existing NIPs rather than defining new mechanisms:
- External identifiers.
itags 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
Lnamespace andltags, either on their own place events or in akind:1985label event referencing the place with anatag. - Collections. Users MAY group places into NIP-51 sets referencing places with
atags. 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.