app.attrails.route
{
"$type": "com.atproto.lexicon.schema",
"defs": {
"commute": {
"description": "Utility / commuting.",
"type": "token"
},
"cyclingDetails": {
"description": "Cycling-specific attributes of a route.",
"properties": {
"discipline": {
"knownValues": [
"app.attrails.route#road",
"app.attrails.route#gravelBike",
"app.attrails.route#mtb",
"app.attrails.route#touring",
"app.attrails.route#commute"
],
"type": "string"
}
},
"type": "object"
},
"gravelBike": {
"description": "Gravel / adventure cycling.",
"type": "token"
},
"main": {
"description": "A cycling, running, hiking, walking, etc. route shared by a user. The associated track file is stored as a blob.",
"key": "tid",
"record": {
"properties": {
"activity": {
"description": "The activity this route is intended for. Open enum; unknown values are allowed.",
"knownValues": [
"app.attrails.defs#cycling",
"app.attrails.defs#running",
"app.attrails.defs#hiking",
"app.attrails.defs#walking",
"app.attrails.defs#other"
],
"type": "string"
},
"createdAt": {
"format": "datetime",
"type": "string"
},
"description": {
"description": "Description of the route, as CommonMark markdown. Clients must not render raw HTML.",
"maxGraphemes": 3000,
"maxLength": 30000,
"type": "string"
},
"details": {
"description": "Activity-specific attributes. Open union: new activity detail types can be added later without breaking existing clients.",
"refs": [
"app.attrails.route#cyclingDetails"
],
"type": "union"
},
"difficulty": {
"description": "Author's subjective difficulty for the stated activity.",
"knownValues": [
"app.attrails.defs#easy",
"app.attrails.defs#moderate",
"app.attrails.defs#hard",
"app.attrails.defs#extreme"
],
"type": "string"
},
"images": {
"items": {
"ref": "app.attrails.defs#image",
"type": "ref"
},
"maxLength": 10,
"type": "array"
},
"labels": {
"description": "Self-label values for this route, e.g. to flag sensitive photos.",
"refs": [
"com.atproto.label.defs#selfLabels"
],
"type": "union"
},
"langs": {
"description": "Languages of this record's text (name, description, tags, image alt text), as BCP-47 tags. If absent, consumers should assume English ('en').",
"items": {
"format": "language",
"type": "string"
},
"maxLength": 3,
"type": "array"
},
"name": {
"description": "Name of the route.",
"maxGraphemes": 100,
"maxLength": 1000,
"minLength": 1,
"type": "string"
},
"surface": {
"description": "Predominant surface. Activity-neutral.",
"knownValues": [
"app.attrails.defs#paved",
"app.attrails.defs#gravel",
"app.attrails.defs#trail",
"app.attrails.defs#mixed"
],
"type": "string"
},
"tags": {
"description": "Free-form tags, stored without a leading '#'.",
"items": {
"maxGraphemes": 64,
"maxLength": 640,
"type": "string"
},
"maxLength": 20,
"type": "array"
},
"track": {
"accept": [
"application/gpx+xml",
"application/xml",
"text/xml"
],
"description": "The route's track, commonly as a GPX file. Subject to max size limitations imposed by the user's PDS, so large routes might need to be simplified or compressed to fit.",
"maxSize": 976563,
"type": "blob"
}
},
"required": [
"name",
"activity",
"track",
"createdAt"
],
"type": "object"
},
"type": "record"
},
"mtb": {
"description": "Mountain biking.",
"type": "token"
},
"road": {
"description": "Road cycling.",
"type": "token"
},
"touring": {
"description": "Multi-day touring / bikepacking.",
"type": "token"
}
},
"id": "app.attrails.route",
"lexicon": 1
}
Metadata
- DID
-
did:plc:q7v2r4sxk4pecbwmaucvb2vn - CID
-
bafyreic34gtsq4kkdhtvogel3h37hgllvxs5mp4i2rmtzrjjaisi3cjyq4 - Indexed At
- 2026-10-26 22:50 UTC
- AT-URI
-
at://did:plc:q7v2r4sxk4pecbwmaucvb2vn/com.atproto.lexicon.schema/app.attrails.route
Referenced Schemas (2)
Similar Lexicons
Lexicons whose schemas describe something close to this one. Check them before publishing a new one that overlaps.
-
world.treeline.route.record record
A curated trail guide, course, or route record published on Treeline.
-
rehab.syndrome.trailactivity record
One private GPS activity. Distance, duration, and elevation are derived by the app from the uploaded route file.
-
Width:height ratio so clients can lay out before the image loads.
-
at.mapped.trail record
A trail
-
app.kimbia.activity record
PROVISIONAL: activities are generic enough that they belong in a community-driven lexicon rather than an app namespace. When a community schema stabilizes, Kimbia will migrate to it and deprecate this one in its favor.