Location-based social networking has had some incredible successes. Foursquare pioneered the concept of social check-ins, gamifying exploration of cities and discovery of new places. Swarm, its spiritual successor, still maintains a dedicated community of users who love sharing their adventures and competing for mayorships. These platforms proved thereās genuine demand for location-aware social experiences.
Yet location features have remained surprisingly fragmented across the broader social media landscape. Each platform has its own approach, its own limitations, and its own reasons for prioritizing or de-emphasizing location features.
Photo by Nick Hillier on Unsplash
Now, as developers migrate to Bluesky and the AT Protocol, thereās an opportunity to rethink location-based social networking from the ground up. The question is: how do you add geolocation to a protocol that was designed to be extensible, decentralized, and future-proof?
More importantly, could we recreate the magic of early Foursquare and Swarm, but in an open, federated way where users control their location data instead of it being locked in corporate silos? For many developers and users who care about data ownership and platform independence, this represents exactly the kind of future worth building toward.
The answer, it turns out, is both elegant and complex ā and itās happening right now through a grassroots effort led by developers who believe location should be a first-class citizen in the decentralized social web.
The Current State: Bluesky Has No Location Features
As of mid-2025, the official AT Protocol lexicons maintained by Bluesky include zero location-related fields. You canāt tag your location in a post. User profiles have no ālocationā field. Thereās no built-in way to find nearby users or content.
This isnāt an oversight ā itās by design. The AT Protocol was built with extensibility at its core through a system called Lexicon, which allows developers to define custom record types and schemas. Rather than baking every possible feature into the core protocol, ATProto enables innovation at the edges.
But this philosophical choice left an obvious gap. Location is fundamental to how we experience the world, and social platforms without location feel incomplete. So the community stepped up.
Enter the Lexicon Community: Standardizing Location Data
The catalyst for the current location work was Foursquareās release of their open source Places dataset, which suddenly made high-quality venue data freely available to developers. This breakthrough, combined with growing demand for location features on ATProto, prompted Bluesky to fund community research through their AT Protocol Community Fund.
The most significant work on ATProto geolocation is happening through theĀ Lexicon CommunityĀ initiative, spearheaded by Nick Gerakines, creator ofĀ Smoke SignalĀ (an events app built on ATProto). This community-funded effort is developing standardized location schemas under theĀ `community.lexicon.location.*`Ā namespace, ensuring that all ATProto applications can share a common vocabulary for representing places and positions.
The community has defined four core location types that can represent virtually any place or position:
Geographic Coordinates (`community.lexicon.location.geo`)
The foundation of digital mapping: latitude and longitude stored as strings to preserve precision, with optional altitude and a human-readable name field.
{
Ā "$type": "community.lexicon.location.geo",
Ā "latitude": "40.785091",
Ā "longitude": "-73.968285",
Ā "name": "Central Park"
}
Street Addresses (`community.lexicon.location.address`)
Structured postal addresses with fields for country, locality (city/town), region (state/province), street, postal code, and an optional name.
{
Ā "$type": "community.lexicon.location.address",
Ā "street": "350 5th Ave",
Ā "locality": "New York",
Ā "region": "NY",
Ā "country": "US",
Ā "postalCode": "10118",
Ā "name": "Empire State Building"
}
Foursquare Venues (`community.lexicon.location.fsq`)
References to places in Foursquareās open POI dataset, storing aĀ `fsq_place_id`Ā with optional coordinates and name. This provides access to a massive, curated database of venues without requiring apps to duplicate that data ā a direct benefit of Foursquareās open source release.
H3 Geocells (`community.lexicon.location.hthree`)
Represents locations using H3, a hexagonal geospatial indexing system. Perfect for describing areas or regions rather than specific points ā think ādowntown Manhattanā rather than a specific address.
Photo by Aranxa Esteve on Unsplash
How Projects Are Using Location Data Today
The beauty of the community lexicon approach is that itās already being deployed in real applications. Hereās how different projects are tackling location:
Smoke Signal: Events With Rich Location Context
Smoke SignalĀ was the pioneer, creating event records that include aĀ `locations`Ā array containing any combination of the location types above. An event might have both specific coordinates and a street address, or reference a Foursquare venue for a restaurant while including a backup address.
{
Ā "$type": "community.lexicon.calendar.event",
Ā "title": "Coffee & Code Meetup",
Ā "locations": [
Ā Ā {
Ā Ā Ā "$type": "community.lexicon.location.fsq",
Ā Ā Ā "fsq_place_id": "4b8c3d1af964a5201f5633e3",
Ā Ā Ā "name": "Blue Bottle Coffee"
Ā Ā },
Ā Ā {
Ā Ā Ā "$type": "community.lexicon.location.address",
Ā Ā Ā "street": "66 Mint St",
Ā Ā Ā "locality": "San Francisco",
Ā Ā Ā "region": "CA",
Ā Ā Ā "country": "US"
Ā Ā }
Ā ]
}
ATProto Geo Marker: Location as Content
The experimentalĀ atgeo-markerĀ project takes a different approach, creating dedicated āmarkerā records that tie content to locations. Think of it as creating a location-based content aggregation system where you could mark Central Park and then associate multiple posts with that place.
InĀ this followup article about the Geo Marker vs. the Anchor approachĀ iāve written a bit more on the pros and cons of each.
NoshDelivery: Business Location Records
For commerce applications, projects likeĀ NoshDeliveryĀ create separate record types for merchant locations, reusing the community lexicon types internally. This creates a database of places that can be referenced across the platform.
Two Architectural Approaches Emerge
As these projects mature, two distinct patterns are emerging for how to structure location data:
Embedded Location Objects
Most social applications embed location data directly within their records. A post about visiting a restaurant might include location objects inline, making the post self-contained with all its context.
Separate Location Records
Some use cases create dedicated records for locations that can then be referenced by URI in posts. This works well for business directories, venue databases, or when the same location will be referenced frequently.
Both approaches use the same underlying community lexicon types, ensuring interoperability while allowing flexibility in how data is structured.
Experimenting with Anchor: Testing the Waters
This is where our location-based check-in app, Anchor, comes into the picture ā not as a finished solution, but as an experiment to test how well the community lexicon standards work in practice and identify whatās still missing.
Anchor is currently more of a research project than a consumer app. The reality is that location-based social networking needs official client support to gain real traction. But by building with the community lexicon standards now, we can discover gaps in the schemas, test integration patterns, and be ready when broader location support arrives.
Our experimental approach embeds location data in standard Bluesky posts using the community lexicon types. We post normalĀ `app.bsky.feed.post`records so check-ins appear in everyoneās feed, but embed rich location data using a customĀ `app.dropanchor.checkin`Ā record.
Hereās what an Anchor check-in looks like under the hood:
{
Ā "$type": "app.bsky.feed.post",
Ā "text": "Dropped anchor at CafĆ© de Plek š»",
Ā "createdAt": "2025ā06ā07T14:05:00Z",
Ā "embed": {
Ā Ā "$type": "app.bsky.embed.record",
Ā Ā "record": {
Ā Ā Ā "uri": "at://did:example/app.dropanchor.checkin/123",
Ā Ā Ā "cid": "bafyreigh2akiscaildcā¦"
Ā Ā }
Ā }
}
The embedded check-in record contains the structured location data:
{
Ā "$type": "app.dropanchor.checkin",
Ā "text": "CafĆ© de Plek š»",
Ā "createdAt": "2025ā06ā07T14:05:00Z",
Ā "locations": [
Ā {
Ā Ā "$type": "community.lexicon.location.geo",
Ā Ā "latitude": "52.0705",
Ā Ā "longitude": "4.3007",
Ā Ā "name": "Voorburg"
Ā },
Ā {
Ā Ā "$type": "community.lexicon.location.address",
Ā Ā "street": "Julianalaan 1",
Ā Ā "locality": "Voorburg",
Ā Ā "region": "ZH",
Ā Ā "country": "NL",
Ā Ā "postalCode": "2273JA",
  "name": "Café de Plek"
Ā }
Ā ]
}
This experimental approach is helping us understand several things:
Schema completeness: Whether the community lexicon types cover real-world check-in scenarios
Integration patterns: How location data should be embedded vs. referenced in social posts
User experience gaps: What breaks when location data exists but clients donāt support it
Performance implications: How location-rich records affect sync and storage
The goal isnāt to build the definitive check-in app, but to stress-test the emerging location infrastructure and contribute learnings back to the community standards.
The Power of `$type`: Self-Describing Data
One of the most elegant aspects of the ATProto location ecosystem is how it usesĀ `$type`Ā fields to create self-describing data. Every location object includes aĀ `$type`Ā that points to its lexicon definition, allowing any client to understand and validate the data structure.
This means a photo-sharing app could read location data from an Anchor check-in, or a map application could aggregate location data from multiple different ATProto apps, all without requiring specific integrations or API negotiations.
In fact, developers are already experimenting with this interoperability. Community members likeĀ Brian MĀ have shared experiments embedding location data directly in posts, demonstrating how the schemas work in practice and paving the way for broader adoption.
Photo by Ellena McGuinness on Unsplash
Whatās Missing (And Whatās Coming)
While the community has made impressive progress, there are still gaps:
No official Bluesky client support: The main Bluesky app doesnāt yet recognize or display location data
Limited tooling: Developers need better libraries and debugging tools for location schemas
Discovery mechanisms: We need ways to find location-enabled content and apps
Privacy controls: Granular location sharing permissions and privacy settings
But these gaps represent opportunities. As more developers build location-aware ATProto applications, the ecosystem will mature rapidly.
Why This Matters
The approach being taken by the ATProto community represents something fundamentally different from how location has been handled on previous social platforms. Instead of a top-down decision by a platform owner, weāre seeing organic standardization driven by developer needs and user demand.
This bottom-up approach has several advantages:
Innovation without permission: Developers can experiment with location features without waiting for platform approval
Interoperability by design: Apps using community lexicons automatically work together
Resistance to platform changes: Location data exists in the protocol itself, not just in one companyās API
Extensibility: New location types can be added as needs evolve
Photo by Jakob Owens on Unsplash
The Road Ahead
As someone experimenting in this space, Iām optimistic about where location on ATProto is heading. The community lexicon approach provides a solid foundation, and projects like Smoke Signal, the various geo marker experiments, and experimental apps like Anchor are proving that rich location features are possible on the decentralized web while helping identify what still needs to be built.
The next year will be crucial. If enough developers adopt these standards and build compelling location-based experiences, we could see official client support from Bluesky. More importantly, we might finally get the location-aware social web that users have been wanting for over a decade ā but this time built on open protocols where users own their data.
Imagine recreating the best parts of Swarmās social discovery and friendly competition, but in a federated system where your check-in history isnāt trapped in one companyās database. Where location-based apps can interoperate freely, where you can switch clients without losing your data, and where innovation happens at the edges rather than waiting for platform approval.
Whether youāre a developer curious about building on ATProto, a user frustrated with corporate control over your location data, or just someone interested in how decentralized systems evolve, the location work happening in the ATProto community is worth watching.
Because for the first time in social media history, location isnāt just a feature that a platform decides to build or abandon ā itās becoming infrastructure that no single company can control.
This is a re-post of an article I published on Medium earlier.
ā -
Want to read more about AT Proto and geolocation?Ā InĀ this followup article about the Geo Marker vs. the Anchor approachĀ iāve written a bit more on the pros and cons of each. And inĀ this more high level story iāve written up what it would take to make a full open source Foursquare clone.
ā -
If youāre interested in following our research or contributing to ATProto location standards,Ā find us on Bluesky at @dropanchor.app
All code examples and schemas referenced in this article are available in theĀ Lexicon Community repositoryĀ and theĀ ATProto documentation.