world.treeline.route.record

treeline.world

{
  "$type": "com.atproto.lexicon.schema",
  "defs": {
    "externalIds": {
      "description": "Cross-references to public open mapping registries.",
      "properties": {
        "cotrexId": {
          "description": "Colorado Trail Explorer (COTREX) feature ID.",
          "type": "string"
        },
        "openTrailsId": {
          "description": "OpenTrails standard dataset feature identifier.",
          "type": "string"
        },
        "osmRelationId": {
          "description": "OpenStreetMap Relation ID.",
          "type": "string"
        },
        "osmWayId": {
          "description": "OpenStreetMap Way ID.",
          "type": "string"
        },
        "usfsTrailNumber": {
          "description": "US Forest Service official trail designation number (e.g., '514' for Hermosa Creek).",
          "type": "string"
        },
        "wikidataId": {
          "description": "Wikidata entity identifier.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "gradeStats": {
      "description": "Gradient statistics for climbs, descents, or trail segments.",
      "properties": {
        "averageGradePct": {
          "description": "Average slope gradient percentage (e.g. '7.5' for 7.5% climb, '-6.2' for descent).",
          "type": "string"
        },
        "climbCategory": {
          "description": "[Deprecated in v0.10: Use world.treeline.segment.record for competitive climb categorization.] Standard cycling/running climb category.",
          "knownValues": [
            "HC",
            "1",
            "2",
            "3",
            "4",
            "uncategorized"
          ],
          "type": "string"
        },
        "maxGradePct": {
          "description": "Maximum slope gradient percentage.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "main": {
      "description": "A curated trail guide, course, or route record published on Treeline.",
      "key": "tid",
      "record": {
        "properties": {
          "clonedFrom": {
            "description": "Optional reference to the activity or route this record was saved from (Save as Route). The AppView checks the source's reuse rules and hides this route when they are not met.",
            "ref": "com.atproto.repo.strongRef",
            "type": "ref"
          },
          "constituentTrails": {
            "description": "Ordered physical trails comprising this route guide.",
            "items": {
              "ref": "#routeTrailSegment",
              "type": "ref"
            },
            "type": "array"
          },
          "courseBlob": {
            "accept": [
              "application/gpx+xml",
              "application/vnd.ant.fit",
              "application/vnd.garmin.tcx+xml",
              "application/octet-stream",
              "application/xml",
              "text/xml"
            ],
            "description": "Downloadable GPX/FIT course file with turn-by-turn cue sheets.",
            "maxSize": 52428800,
            "type": "blob"
          },
          "createdAt": {
            "description": "Creation timestamp.",
            "format": "datetime",
            "type": "string"
          },
          "cuePoints": {
            "description": "Turn-by-turn navigational cues along the course.",
            "items": {
              "ref": "#routeCuePoint",
              "type": "ref"
            },
            "type": "array"
          },
          "description": {
            "description": "Detailed guide, route directions, access notes, seasonal conditions, and water availability.",
            "maxGraphemes": 5000,
            "maxLength": 50000,
            "type": "string"
          },
          "difficulty": {
            "description": "Technical and physical difficulty assessment.",
            "knownValues": [
              "easy",
              "moderate",
              "hard",
              "expert",
              "extreme"
            ],
            "type": "string"
          },
          "externalIds": {
            "description": "External open mapping identifiers (OSM, COTREX, USFS, OpenTrails, Wikidata).",
            "ref": "#externalIds",
            "type": "ref"
          },
          "geometry": {
            "description": "Simplified GeoJSON LineString geometry of the route path.",
            "ref": "#routeGeometry",
            "type": "ref"
          },
          "gradeStats": {
            "description": "Gradient profile and climb categorization for climbs or descents.",
            "ref": "#gradeStats",
            "type": "ref"
          },
          "location": {
            "description": "Geographical region or park name (e.g. White Mountains, NH).",
            "maxGraphemes": 200,
            "maxLength": 2000,
            "type": "string"
          },
          "parentRoute": {
            "description": "Reference to parent canonical trail or larger trail system if this route is a sub-segment or loop.",
            "ref": "com.atproto.repo.strongRef",
            "type": "ref"
          },
          "pointsOfInterest": {
            "description": "Generic strongRefs to any location-based pins, check-ins, summits, water sources, or hazard records across the ATmosphere.",
            "items": {
              "ref": "com.atproto.repo.strongRef",
              "type": "ref"
            },
            "type": "array"
          },
          "privacy": {
            "default": "public",
            "description": "Privacy visibility setting for this route or segment.",
            "knownValues": [
              "public",
              "unlisted",
              "followers",
              "private"
            ],
            "type": "string"
          },
          "rawBlob": {
            "accept": [
              "application/gpx+xml",
              "application/vnd.ant.fit",
              "application/vnd.garmin.tcx+xml",
              "application/octet-stream",
              "application/xml",
              "text/xml"
            ],
            "description": "High-resolution GPX/FIT course file blob.",
            "maxSize": 52428800,
            "type": "blob"
          },
          "relatedRecords": {
            "description": "Generic strongRefs to related network content (e.g. Bluesky trip report posts, photo records, gear lists).",
            "items": {
              "ref": "com.atproto.repo.strongRef",
              "type": "ref"
            },
            "type": "array"
          },
          "routeType": {
            "description": "Topological structure of the route.",
            "knownValues": [
              "loop",
              "out_and_back",
              "point_to_point"
            ],
            "type": "string"
          },
          "segmentType": {
            "description": "[Deprecated in v0.10: Competitive segments use world.treeline.segment.record. Retained for backward compatibility.] Functional classification of the route or segment.",
            "knownValues": [
              "trail",
              "loop",
              "climb",
              "descent",
              "sprint",
              "traverse"
            ],
            "type": "string"
          },
          "segments": {
            "description": "Ordered sub-segments or constituent trails that make up this composite route or loop.",
            "items": {
              "ref": "#routeSegmentItem",
              "type": "ref"
            },
            "type": "array"
          },
          "source": {
            "default": "user",
            "description": "Data provenance source.",
            "knownValues": [
              "user",
              "osm",
              "cotrex",
              "usfs",
              "opentrails",
              "community"
            ],
            "type": "string"
          },
          "sourceActivity": {
            "description": "StrongRef to the activity record from which this segment was extracted or initiated.",
            "ref": "com.atproto.repo.strongRef",
            "type": "ref"
          },
          "sport": {
            "description": "Applicable sports or disciplines for this route (e.g., hike, trail_run, gravel_ride).",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "stats": {
            "description": "Route distance and elevation profile metrics.",
            "ref": "#routeStats",
            "type": "ref"
          },
          "surface": {
            "description": "Surface composition types (e.g. singletrack, dirt_road, paved, rock_scramble, snow).",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "title": {
            "description": "Title or route name (e.g., Mount Rainier Wonderland Trail).",
            "maxGraphemes": 300,
            "maxLength": 3000,
            "type": "string"
          },
          "updatedAt": {
            "description": "Last updated timestamp.",
            "format": "datetime",
            "type": "string"
          },
          "waypoints": {
            "description": "References to waypoint records along this route.",
            "items": {
              "ref": "com.atproto.repo.strongRef",
              "type": "ref"
            },
            "type": "array"
          }
        },
        "required": [
          "title",
          "createdAt"
        ],
        "type": "object"
      },
      "type": "record"
    },
    "routeCuePoint": {
      "properties": {
        "coordinate": {
          "description": "Optional coordinate tuple [lon, lat, ele?] of the cue point.",
          "type": "unknown"
        },
        "distanceMeters": {
          "description": "Chainage offset along the route in meters.",
          "type": "integer"
        },
        "instruction": {
          "description": "Navigation instruction (e.g. Turn left at junction onto Colorado Trail).",
          "type": "string"
        }
      },
      "required": [
        "distanceMeters",
        "instruction"
      ],
      "type": "object"
    },
    "routeGeometry": {
      "description": "GeoJSON LineString representing the route path.",
      "properties": {
        "coordinates": {
          "description": "Simplified coordinate tuples array.",
          "items": {
            "type": "unknown"
          },
          "maxLength": 500,
          "type": "array"
        },
        "type": {
          "const": "LineString",
          "description": "GeoJSON geometry type.",
          "type": "string"
        }
      },
      "required": [
        "type",
        "coordinates"
      ],
      "type": "object"
    },
    "routeSegmentItem": {
      "description": "A constituent sub-segment or trail section in a composite route.",
      "properties": {
        "endKm": {
          "description": "Ending kilometer offset on the referenced route.",
          "type": "unknown"
        },
        "name": {
          "description": "Name or title of the constituent segment.",
          "maxGraphemes": 300,
          "type": "string"
        },
        "order": {
          "description": "1-based sequence order in the route traversal.",
          "minimum": 1,
          "type": "integer"
        },
        "reverseDirection": {
          "description": "True if the constituent segment is traversed in reverse direction.",
          "type": "boolean"
        },
        "route": {
          "description": "StrongRef to the route record representing this segment.",
          "ref": "com.atproto.repo.strongRef",
          "type": "ref"
        },
        "startKm": {
          "description": "Starting kilometer offset on the referenced route.",
          "type": "unknown"
        }
      },
      "required": [
        "order"
      ],
      "type": "object"
    },
    "routeStats": {
      "description": "Distance and elevation stats for the route.",
      "properties": {
        "distanceMeters": {
          "description": "Total route distance in meters.",
          "minimum": 0,
          "type": "integer"
        },
        "elevationGainMeters": {
          "description": "Total cumulative ascent in meters.",
          "minimum": 0,
          "type": "integer"
        },
        "elevationLossMeters": {
          "description": "Total cumulative descent in meters.",
          "minimum": 0,
          "type": "integer"
        },
        "estimatedDurationSeconds": {
          "description": "Estimated moving duration in seconds for an average pace.",
          "minimum": 0,
          "type": "integer"
        },
        "highestPointMeters": {
          "description": "Maximum elevation on the route in meters.",
          "type": "integer"
        },
        "lowestPointMeters": {
          "description": "Minimum elevation on the route in meters.",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "routeTrailSegment": {
      "properties": {
        "reverseDirection": {
          "default": false,
          "description": "Whether the trail is traversed in reverse direction.",
          "type": "boolean"
        },
        "sequenceOrder": {
          "description": "1-based order in traversal sequence.",
          "type": "integer"
        },
        "trailId": {
          "description": "Identifier of underlying physical trail.",
          "type": "string"
        }
      },
      "required": [
        "trailId"
      ],
      "type": "object"
    }
  },
  "id": "world.treeline.route.record",
  "lexicon": 1
}

Validate Record

Validate a record against world.treeline.route.record

Validation Options
Treat any remaining unresolved references as valid

Metadata

DID
did:plc:sjejpugpajgvxweilujzjcmq
CID
bafyreiaqxhwuswhru2u6fz2h5kaeroo22xtbg5w2i76uet5m5txuyosttm
Indexed At
2026-10-04 16:30 UTC
AT-URI
at://did:plc:sjejpugpajgvxweilujzjcmq/com.atproto.lexicon.schema/world.treeline.route.record

Version History (2 versions)

Similar Lexicons

Lexicons whose schemas describe something close to this one. Check them before publishing a new one that overlaps.

Lexicon Garden

@