Datatypes

Metadata

Name (metadata.name)

the name of the guidebook

Examples

Valid values for a Metadata's name attribute.

"New River Gorgeous"
...

Description (metadata.description)

a sentence or two about what the guidebook covers.

Examples

Valid values for a Metadata's description attribute.

"all the crashpad-protectable boulders in Joshua Tree"
for a generic Joshua Tree Bouldering guide
"The highest quality, most accessible routes in Yosemite"
for a generic Select Yosemite Climbs book

Contributors (metadata.contributors)

people who have contributed to the catalog

Examples

Valid values for a Metadata's contributors attribute.

[
  "Jane Doe",
  "John Doe"
]
simple, married couple authors
[
  "Name "
]
if email is desirable, use RFC 5322
[
  "Bob (maintainer 2010-present)",
  "Sally (maintainer 1999-2010)",
  "Joe",
  "Glenda"
]
mention all contibutors, maintainers at the top with notes.

UUID (metadata.uuid)

A universally unique identifier. Under nearly all circumstances, this should be autogenerated at creation and never changed.

Examples

Valid values for a Metadata's uuid attribute.

"c5ae7ddd-243d-47bf-8a6e-aa456d2f54c2"
[no description]
"4c7efeb1-aa50-4ddc-ae6d-84a908ae8a15"
[no description]

See Also

License (metadata.license)

a SPDX identifier for the license of the catalog

Examples

Valid values for a Metadata's license attribute.

"CC-BY-4.0"
Indicates the Creative Commons Attribution 4.0 International license. lets anyone share and adapt a work for any purpose, including commercially, as long as they give appropriate credit, link to the license, and indicate if changes were made.

See Also

Climb

Name (climb.name)

the name of the climb

Examples

Valid values for a Climb's name attribute.

"Mañana"
[no description]
"Biographie"
[no description]

Alternate Names (climb.alternate_names)

A list of alternate names for the climb. When there is history, confusion, or disagreement in the community, alternate names keep climbs discoverable and reinforce a common idea moving forward. This issue comes up most frequently when different guides use different names or more rarely more direct naming conflicts (e.g., , Realization vs. Biographie Rastaman SDS vs. Lucid Dreaming Veritas Right Project becoming Hypnotized Minds)

Examples

Valid values for a Climb's alternate_names attribute.

[
  "Realization"
]
a non-empty list of names for "Biographie"
[
  "S.S.S.",
  "SSS",
  "Shipley's Shivering Shimmy"
]
a non-empty list of names for Triple S" at Seneca

See Also

Project Status (climb.project_status)

This indicates whether this is a known climb awaiting an ascent. for areas where ethics support the idea of closed/reserved projects, this should include relevant info. it's a good idea to make the first word "open" or "closed". null is invalid, presence of the this attribute implies project status and that status should be clarified

Examples

Valid values for a Climb's project_status attribute.

"open"
the climb is established as a project but anyone may attempt it
"closed for equipper John Smith until 2055"
recommended pattern for closed projects gives the community context to respect the reservation. It identifies who, why, and adds a limit (however distant).
"closed"
the climb hasn't been redpointed, but attempts from the community are discouraged

Rating (climb.rating)

a concise summary of what it takes to climb a route or problem.

Examples

Valid values for a Climb's rating attribute.

{
  "difficulty": "5.14c",
  "style": "sport"
}
Just Do It in Smith Rocks, OR
{
  "difficulty": "E11"
}
Rhapsody on Dumbarton Rock in Scotland
{
  "difficulty": "5.7",
  "protection": "R",
  "style": "trad"
}
Snake Dike on Half Dome in Yosemite
{
  "style": "boulder"
}
a boulder-problem project with no established difficulty rating or relevant safety rating
{
  "difficulty": "V11",
  "protection": "X",
  "style": "boulder"
}
Ambrosia on Bishop's Grandpa Peabody boulder

Context

these are encapsulated into a single unit becausue they can't be cleanly separated. protection always depends on the style of climbing, and difficlty grading systems like the aid scales and the british adjectival grade also take protection into account Furthermore, when a certain climb is done in a different discipline, (aiding vs freeing the nose) (top roping or bouldering too big to flail) all three of these aspect tend to change together.

See Also

Location (climb.location)

The GPS location for the start of climb. In addition to the longitude and latitude (in decimal degrees), an accuracy measure (in meters) can specify an margin of error for the coordinates

Examples

Valid values for a Climb's location attribute.

{
  "latitude": 37.728367,
  "longitude": -119.637183,
  "meter_radius": 5
}
The Nose in Yosemite

See Also

Length (climb.length)

Length answers a single question about a climb: how far does a climber travel from start to finish? Length can be imagined as if a climber dragged a tape measure along the wall from start to finish. This is not the height of a climb; a 7 meter traverse that stays a few feet off the ground has a length of 7 meters.

Examples

Valid values for a Climb's length attribute.

{
  "lower_estimate": 20,
  "upper_estimate": 25,
  "unit": "meters"
}
a rough guess at a climb
{
  "lower_estimate": 30,
  "upper_estimate": 30,
  "unit": "feet"
}
an accurate of a short route

See Also

Steepness (climb.steepness)

this respresents the steepness of the wall as the climber progresses. this is a rough sketch of the climb and is treated stepwise. the "from" value can be anything from 0 to 1 and each segment must be in order

Examples

Valid values for a Climb's steepness attribute.

[
  {
    "from": 0.0,
    "degrees_overhung": 45
  },
  {
    "from": 0.1,
    "degrees_overhung": 25
  },
  {
    "from": 0.25,
    "degrees_overhung": 10
  },
  {
    "from": 0.8,
    "degrees_overhung": -5
  }
]
starts steep, eases up to slightly overhung, and finishes as slab
[
  {
    "from": 0,
    "degrees_overhung": 0
  },
  {
    "from": 0.75,
    "degrees_overhung": 90
  },
  {
    "from": 0.8,
    "degrees_overhung": 0
  }
]
perfectly vertical to a perfect roof and back to vertical
[
  {
    "from": 0,
    "degrees_overhung": 5
  }
]
slightly overhung the whole way

Terrain (climb.terrain)

this respresents the type of rock climbing as a climber progresses the "from" value increases from 0 (the start of the climb) towards 1 (the end of the climb) and each segment must be in order

Examples

Valid values for a Climb's terrain attribute.

[
  {
    "from": 0,
    "description": "crack, 3in"
  }
]
a continuous 3" crack from start to finish
[
  {
    "from": 0.0,
    "description": "pockets"
  },
  {
    "from": 0.25,
    "description": "jugs"
  },
  {
    "from": 0.75,
    "description": "crimps"
  }
]
an imaginary climb that you might find at The Red
[
  {
    "from": 0.0,
    "description": "corner, right-facing, 5cm"
  },
  {
    "from": 0.5,
    "description": "crack, 2cm"
  },
  {
    "from": 0.6,
    "description": "seam"
  },
  {
    "from": 0.8,
    "description": "face"
  }
]
a disappearing corner

Tags (climb.tags)

a tag is a single word or phrase to highlight _something unique_ about the climb. that isn't covered by other features. In many bouldering areas, it might be worth having a `highball` tag. In Bishop though, it might be better to have `fluttering-heart` field. useful labels help climbers identify climbs with unique aspects.

Examples

Valid values for a Climb's tags attribute.

[
  "manufactured"
]
a climb with chipping or glued-on holds
[
  "area classic",
  "crimpy"
]
for Slash And Burn at the New River Gorge
[
  "classic",
  "exposed"
]
for Zoo View at Moore's Wall in North Carolina
[
  "top-out crux",
  "bad fall",
  "slick"
]
these imaginary tags describe an usettling problem

Notes (climb.notes)

plain text descriptions about various aspects of the climb. notes are divided into topics for easy organization and simple inclusion and exclusion in different publishing formats.

Examples

Valid values for a Climb's notes attribute.

[
  {
    "topic": "elevator pitch",
    "content": "unless you love unpleasant choss, don't climb it"
  }
]
must be a terrible climb
[
  {
    "topic": "Elevator Pitch",
    "content": "non-stop quality climbing with a stellar view and a rich history makes this one of Yosemite's greatest routes"
  },
  {
    "topic": "FFA Story",
    "content": "It was May 1975. John Bachar, John Long, and Ron Kauk were ..."
  }
]
for Astroman
[
  {
    "topic": "Elevator Pitch",
    "content": "a beautiful roof crack"
  },
  {
    "topic": "Recognizing It",
    "content": "this boulder is hard to find and looks tiny from the front ... "
  }
]
an imaginary boulder

Fields (climb.fields)

a set of fields and their values. fields are useful to describe the climb in a slightly-standard way.

Examples

Valid values for a Climb's fields attribute.

{
  "sun": "all day",
  "rain": "ok in light rain",
  "descent": "walk off"
}
an imaginary climb

History (climb.history)

Most commonly this will be a entry with the first free ascent. Depending on the area or history, the first ascent on aid, top-rope, lead, or any other significant first could be worth mentioning. Noting "FA" or "FFA" is almost always redundant and sometimes incorrect when earilier ascents are discovered.

Examples

Valid values for a Climb's history attribute.

[
  {
    "date": "1991-09-14",
    "event": "FA",
    "party": "Wolfgang Güllich"
  }
]
Action Directe, Frankenjura
[
  {
    "date": "1989",
    "event": "Started Equipping",
    "party": "Porter Jarrard"
  },
  {
    "date": "1997",
    "event": "Lead",
    "party": "Brian McCray"
  },
  {
    "date": "2008",
    "event": "Lead, onsight",
    "party": "Chris Sharma"
  },
  {
    "date": "2010",
    "event": "Lead",
    "party": "Porter Jarrard"
  },
  {
    "date": "2010",
    "event": "Trad",
    "party": "Brent Perkins"
  }
]
Proper Soul, at the NRG. Note the community's progression on style, a visiting pro, and especially Jarrard's return 30 years after equipping to get an ascent. It builds a history more than giving credit or ownership.
[
  {
    "date": "1967",
    "event": "Aid",
    "party": "John Stannard"
  },
  {
    "date": "1970",
    "event": "Free",
    "party": "John Stannard"
  }
]
Foops, The Gunks
[
  {
    "date": "1989",
    "event": "equipped",
    "party": "Jean-Christophe Lafaille"
  },
  {
    "date": "199?",
    "event": "middle anchor added",
    "party": "Arnaud Petit"
  },
  {
    "date": "1996",
    "event": "climbed to middle anchor",
    "party": "Arnaud Petit"
  },
  {
    "date": "2001",
    "event": "FA",
    "party": "Chris Sharma"
  },
  {
    "date": "2010",
    "event": "lower boulder problem breaks"
  }
]
Biographie, Ceuse
[
  {
    "date": "1957",
    "event": "Aid, siege",
    "party": "Warren Harding, Mark Powell, Bill \"Dolt\" Feuerer"
  },
  {
    "date": "1960",
    "event": "Aid, continuous",
    "party": "Royal Robbins, Joe Fitschen, Chuck Pratt, and Tom Frost"
  },
  {
    "date": "1993",
    "event": "Free",
    "party": "Lynn Hill, Steve Sutton (belay)"
  },
  {
    "date": "2005",
    "event": "Free",
    "party": "Tommy Caldwell and Beth Rodden"
  },
  {
    "date": "2019-11",
    "event": "Free, ground up",
    "party": "Sébastien Berthe"
  }
]
The Nose, El Cap. Highlight style of ascent
[
  {
    "date": "1957",
    "event": "Aid",
    "party": "Warren Harding, Mark Powell, Bill \"Dolt\" Feuerer"
  },
  {
    "date": "1993",
    "event": "Free",
    "party": "Lynn Hill"
  }
]
The Nose, El Cap. Condensed

See Also

Resources (climb.resources)

Offers an opportunity for developers to record info about where to find further info.

Examples

Valid values for a Climb's resources attribute.

[
  {
    "title": "2012 Trip Report",
    "resource": "https://southernsierraclimber.blogspot.com/2012/12/blog-post.html",
    "description": "From Southern Sierra Climber, this offers the only well-documented ascent of this obscure route"
  }
]
Potential links for the East Face Route on Moro Rock in Sequoia National Park
[
  {
    "title": "FA Video by Ben May",
    "resource": "https://www.youtube.com/watch?v=_VtpZ9GtNP4"
  },
  {
    "title": "Third Ascent Video by Matt",
    "resource": "https://www.youtube.com/watch?v=QnYS1x9t16Y",
    "description": "shows alternative, much more dynamic, beta"
  }
]
a boulder problem in San Diego

UUID (climb.uuid)

A universally unique identifier. Under nearly all circumstances, this should be autogenerated and never changed. It can be changed to align with another catalog's UUID for the same climb. Doing so breaks references from photos and any external tools keyed on the old value. Update those at the same time.

Examples

Valid values for a Climb's uuid attribute.

"0cf19a54-4af9-44db-9de3-dfecb700c3ce"
[no description]
"6833840f-d801-43c6-a2d7-7da71a6ed1c8"
[no description]

See Also

Area

Name (area.name)

the primary name of the area.

Examples

Valid values for an Area's name attribute.

"Yosemite"
...
"Éléphant"
a Fontainebleau area

Alternate Names (area.alternate_names)

A list of other names that the area can go by. This can be important to reduce confusion and/or to respect historical names.

Examples

Valid values for an Area's alternate_names attribute.

[
  "Underworld Boulder"
]
for the Spragueasorus Boulder in Rumney
[
  "Manure Pile Buttress"
]
for what is now Ranger Rock in Yosemite

Location (area.location)

GPS coordinates for the boundary of the area. The first and last points of a polygon must be identical to form a ring (like GeoJSON and WKT). It's recommended that the points should wind counterclockwise and the first point starts where the trail comes in. This can help make downstream judgements about rendering. The perimeter is a single ring. Unlike many geospatial polygon representations, an area doesn't contain holes and is not a multi-polygon.

Examples

Valid values for an Area's location attribute.

{
  "type": "approximation",
  "circle": {
    "longitude": -79.81768,
    "latitude": 39.63972,
    "meter_radius": 50
  }
}
The Mushroom boulder (Cooper's Rock) is a good candidate for approximation because the dense tree cover makes it hard to draw an exact perimeter. This circle can guide the construction of a hierarchy, but might require manual review.
{
  "type": "perimeter",
  "polygon": [
    {
      "longitude": -105.37592,
      "latitude": 41.15422
    },
    {
      "longitude": -105.37543,
      "latitude": 41.15382
    },
    {
      "longitude": -105.37363,
      "latitude": 41.15396
    },
    {
      "longitude": -105.37249,
      "latitude": 41.15498
    },
    {
      "longitude": -105.3706,
      "latitude": 41.15579
    },
    {
      "longitude": -105.36977,
      "latitude": 41.15683
    },
    {
      "longitude": -105.37095,
      "latitude": 41.15749
    },
    {
      "longitude": -105.37333,
      "latitude": 41.15657
    },
    {
      "longitude": -105.37507,
      "latitude": 41.15552
    },
    {
      "longitude": -105.37592,
      "latitude": 41.15422
    }
  ]
}
The Nautilus is a perfect use-case for a perimeter. it's oblong and easy to outline with satellite imagery. Climbs inside the polygon are undoubtedly on the Nautilus

Tags (area.tags)

a tag is a single word or phrase to highlight _something unique_ about the area. that isn't covered by other features. useful labels help climbers identify areas with unique aspects.

Examples

Valid values for an Area's tags attribute.

[
  "beginner friendly",
  "easy access"
]
for Sandstonia at the New River Gorge
[
  "moderate access",
  "good for groups"
]
this imaginary distant is less frequently traveled and has many routes close to one another
[
  "frequently crowded",
  "beginner friendly"
]
for The Black Corridor at Second Pullout in Red Rock

Notes (area.notes)

plain text descriptions about various aspects of the area. notes are divided into topics for easy organization and simple inclusion and exclusion in different publishing formats.

Examples

Valid values for an Area's notes attribute.

[
  {
    "topic": "elevator pitch",
    "content": "unless you love choss and poison ivy and getting lost don't bother hiking out"
  }
]
must be a terrible area
[
  {
    "topic": "Elevator Pitch",
    "content": "an excellent winter climbing destination in North Carolina. The granite/gneiss here provides any style of climbing you could ask for"
  },
  {
    "topic": "History",
    "content": "The first routes were established in the early 1970s ..."
  }
]
for Rumbling Bald in North Carolina
[
  {
    "topic": "Elevator Pitch",
    "content": "Solid, sticky rock with all clibing over 8,000'"
  },
  {
    "topic": "History",
    "content": "Developed almost entirely by Mike and Tommy Caldwell [...]"
  },
  {
    "topic": "Getting There",
    "content": "expect many turns: from the town of Drake, [...]"
  }
]
The Monastery in Colorado

Fields (area.fields)

a set of fields and their values. these names describe the area.

Examples

Valid values for an Area's fields attribute.

{
  "orientation": "north east",
  "water": "none nearby",
  "good season": "summer"
}
simple info for a backcountry area
{
  "dog friendly": "yes, on a leash",
  "time from car": "5 minutes",
  "shade": "afternoon"
}
a nice after-work crag

UUID (area.uuid)

A universally unique identifier. Under nearly all circumstances, this should be autogenerated and never changed.

Examples

Valid values for an Area's uuid attribute.

"93ef6423-2bf4-4b5b-929c-91f89e03d943"
[no description]
"580f443e-9593-4dd0-8bad-857eec248978"
[no description]

See Also

Photo

Tags (photo.tags)

a tag is a single word or phrase to highlight _something unique_ about the photo that isn't covered by other attributes. tags are well-suited to a photo's purpose, condition, or capture context. for properties that apply to most photos in a catalog and/or take a range of values, prefer `fields`. useful labels help authors and consumers find photos to fit a specific need.

Examples

Valid values for a Photo's tags attribute.

[
  "overview",
  "drone"
]
a wide shot of an area, captured from the air (important because it's a view a climber can never see)
[
  "historical"
]
a photo kept for record rather than current reference, e.g., a wall before a rockfall
[
  "needs-reshoot",
  "low-quality"
]
a placeholder photo flagged for replacement
[
  "topo"
]
this probably _shouldn't_ be used because in most catalogs, because it's the default assumption for stele1 photos

Fields (photo.fields)

a set of fields and their values. fields are useful to describe the climb in a somewhat-standard way.

Examples

Valid values for a Photo's fields attribute.

{
  "captured from": "air (via drone)",
  "credit": "Jane Doe"
}
credit to the photographer and info about where the photo was taken from
{
  "caption": "John Doe pulling through the crux",
  "credit": "Jane Doe"
}
a caption can be a good field when appropriate. most photos in a catalog will be documentation-quality and a caption would be clutter.

Climb Layers (photo.climb_layers)

a collection of lines it's suggested that the first point be the start of the climb

Examples

Valid values for a Photo's climb_layers attribute.

[
  {
    "climb_uuid": "0d3fdc6b-a4c3-4036-afe6-ed524a1b44f7",
    "path": [
      {
        "top_offset": 0.9,
        "left_offset": 0.1
      },
      {
        "top_offset": 0.3,
        "left_offset": 0.1
      }
    ]
  },
  {
    "climb_uuid": "b3422197-b4c4-4b07-bcdd-74a77d787941",
    "path": [
      {
        "top_offset": 0.9,
        "left_offset": 0.4
      },
      {
        "top_offset": 0.2,
        "left_offset": 0.4
      }
    ]
  },
  {
    "climb_uuid": "a4f519cb-4aeb-4814-aa52-4cdcc292402e",
    "path": [
      {
        "top_offset": 0.9,
        "left_offset": 0.7
      },
      {
        "top_offset": 0.1,
        "left_offset": 0.7
      }
    ]
  }
]
[no description]
[
  {
    "climb_uuid": "080c90a0-adbb-4a42-9bed-3008166530f9",
    "path": [
      {
        "top_offset": 0.1,
        "left_offset": 0.05
      },
      {
        "top_offset": 0.9,
        "left_offset": 0.05
      },
      {
        "top_offset": 0.9,
        "left_offset": 0.5
      }
    ]
  },
  {
    "climb_uuid": "8aa562cc-85c4-4f3d-a585-a7e31b546323",
    "path": [
      {
        "top_offset": 0.05,
        "left_offset": 0.75
      },
      {
        "top_offset": 0.8,
        "left_offset": 0.75
      }
    ]
  }
]
[no description]

Area Layers (photo.area_layers)

a collection of polygons that identify areas on a photo It's suggested that the first point be on or near the access trail, and that the points wind counterclockwise. first and last points are be identical, enforcing a ring

Examples

Valid values for a Photo's area_layers attribute.

[
  {
    "area_uuid": "c3056703-ee36-4312-8913-4ce8b444476f",
    "polygon": [
      {
        "top_offset": 0.9,
        "left_offset": 0.1
      },
      {
        "top_offset": 0.3,
        "left_offset": 0.5
      },
      {
        "top_offset": 0.9,
        "left_offset": 0.9
      },
      {
        "top_offset": 0.9,
        "left_offset": 0.1
      }
    ]
  }
]
[no description]

Capture Location (photo.capture_location)

The GPS coordinates for where the photo was taken from. It's useful to initialize this with an coordinates from an images EXIF data when available

Examples

Valid values for a Photo's capture_location attribute.

{
  "longitude": -121.142848,
  "latitude": 44.365012,
  "meter_radius": 1
}
A photo showing much of smith rocks, would be taken from across the river

See Also

Capture Time (photo.capture_time)

date, time or both

Examples

Valid values for a Photo's capture_time attribute.

"2000-02-01"
a photo taken on the first day of February 2000

Context

This can be useful for in giving a hint about shade and vegitation at certain times of the day or year. Usually this can be pulled straight from the photo's metadata.

See Also

UUID (photo.uuid)

A universally unique identifier. Under nearly all circumstances, this should be autogenerated and never changed.

Examples

Valid values for a Photo's uuid attribute.

"b644e46c-e690-4af0-ae25-80230ea23de1"
[no description]
"66a0bb80-1364-478c-8800-487d6d2efb86"
[no description]

See Also

Parking

Name (parking.name)

is there an official name for this parking area? if not then a concise, descriptive name works fine.

Examples

Valid values for a Parking's name attribute.

"Camp 4 Day Use Parking"
a section of the Camp 4 lot that doesn't allow overnight parking

See Also

Location (parking.location)

a point for the entrance to the parking area.

Examples

Valid values for a Parking's location attribute.

{
  "longitude": -74.200394,
  "latitude": 41.735855
}
the main parking area for the most popular climbing at The Gunks

Description (parking.description)

info about the parking area: - does it close at dusk? - are break-ins a concern? - do you need to pay? - is it hard to find? - is there a towing policy?

Examples

Valid values for a Parking's description attribute.

"this is a school bus turnaround; do not use on the weekdays"
"a gravel strip on the side of the road. rarely maintained, frequently covered in trash"

Capacity (parking.capacity)

the number of cars that the parking can hold.

Examples

Valid values for a Parking's capacity attribute.

200
a large parking area, like what you'd get for some of the bouldering areas in RMNP
5
a modest parking area
1
space to fit a single car, perhaps a small pullout at a local crag.

UUID (parking.uuid)

A universally unique identifier. Under nearly all circumstances, this should be autogenerated and never changed.

Examples

Valid values for a Parking's uuid attribute.

"23ff1c9b-43a0-41ce-88f3-385d8736b176"
[no description]
"24a899f8-a1e1-4d6f-a066-c1a3424eb13b"
[no description]

See Also

Trail

Name (trail.name)

is there an official name for this trail? if not then a concise, descriptive placeholder works fine.

Examples

Valid values for a Trail's name attribute.

"Billy Goat Trail"
for the rocks around Great Falls (near Washington D.C.)

Description (trail.description)

The description should be a concise overview. - is it a trail, access road, paved street, or something else? - what quality is the trail in? - it the trail quality unpredictable, e.g., does it wash out in heavy rain? does it get overgrown in the summer? - other noteworthy features...

Examples

Valid values for a Trail's description attribute.

"don't even bother from May through August, the \"trail\" is just thick jungle"
[no description]

Path (trail.path)

This is a list of coordinates, a GPS path for the trail.

Examples

Valid values for a Trail's path attribute.

[
  {
    "latitude": 44.3668,
    "longitude": -121.13623
  },
  {
    "latitude": 44.3672,
    "longitude": -121.13688
  },
  {
    "latitude": 44.36717,
    "longitude": -121.13726
  },
  {
    "latitude": 44.36697,
    "longitude": -121.13783
  },
  {
    "latitude": 44.3664,
    "longitude": -121.13804
  },
  {
    "latitude": 44.3664,
    "longitude": -121.13825
  },
  {
    "latitude": 44.36651,
    "longitude": -121.13823
  },
  {
    "latitude": 44.36642,
    "longitude": -121.13855
  },
  {
    "latitude": 44.3666,
    "longitude": -121.13849
  },
  {
    "latitude": 44.36742,
    "longitude": -121.13888
  },
  {
    "latitude": 44.36809,
    "longitude": -121.13928
  }
]
an access trail at smith rocks

See Also

UUID (trail.uuid)

A universally unique identifier. Under nearly all circumstances, this should be autogenerated and never changed.

Examples

Valid values for a Trail's uuid attribute.

"90c0ab19-b6ff-4645-b00c-0364042d77fe"
[no description]
"0393e141-7a63-44b2-95dc-4c5aa2410d93"
[no description]

See Also

On the Filesystem

stele1.json

machine-readable metadata for the specific stele1 catalog. Structured data describing the catalog as a whole. (follows the Metadata format)

stele1.txt

a human-oriented introduction to stele1 for someone who comes across the catalog without context. your tools should populate this with a file automatically. Add a README next to this file if you want a human-friendly intro tho the specific stele1 catalog.

climb

contains a file for each climb

climb/{climb.uuid}.json

a spec-conforming json object for a climb

area

contains a file for each area

area/{area.uuid}.json

a spec-conforming json object for an area

trail

contains a file for each trail

trail/{trail.uuid}.json

a spec-conforming json object for an trail

parking

contains a file for each parking

parking/{parking.uuid}.json

a spec-conforming json object for a parking

photo

contains a file for each photo

photo/{photo.uuid}.json

a spec-conforming json object for a photo

photo/{photo.uuid}_image.{extension}

the raw photo data. filetype (e.g., JPEG, HEIF, PNG, GIF) and extension (e.g. .JPG, .jpg, .JPEG) support are left to the implementation

extension

contains a directory for each extension used in the catalog

extension/{extension_name}

A self-contained directory for everything related to an extension. Its contents are at the discretion of the extension.

Notes on Open Text

Attributes like tags, fields, note.topic, and rating.difficulty, don't have a spec-enforced taxonomy. These fields are intentionally open.

Different climbing destinations have different needs, and local authors can make better judgement calls than this spec could.

The editor's has an extension to help keep words consistent. You can review the least used terms that appear in a catalog to catch drift.

Modeling Geometry

Geometry is modeled for each use case; this differs from what you'd get from GeoJSON. Areas might not be possible to draw on a map cleanly, so two representations apply. Climb location has a meter radius because it's not possible to always get perfect gps coordinates and the climber should to know how close the gap between a specific point and what and author intended. Parking is a specific point (no meterRadius) because it mark the last useful point for vehicle nav software. even 10m or 100m accuracy would be fine in most cases you're setting your nav software to route to the nearest point.. Trail .path does what it needs to, point a to b.

This diverges from other standards because these are significantly better-fit for the climbing community.

Area-Climb Relationships

stele1 stores no area-climb relationships, by design. A climb's location is a fact, but an area is often a judgment about how to organize. The judgment can change as developers get to know the place, as trails are built, or as new sectors are devloped. Recording membership directly would make every rethink a chore and harden a catalog around its earliest, least-informed choices. Instead, the catalog records locations and lets the map inform membership: redraw an area, and its climbs follow.

As stele1 is a foundation for publishing, it needs to respect that groupings change depending the publication target. Plucking climbs from a catalog for a small best-of guide demands a shallow hierarchy; marshalling everything for a comprehensive guidebook benefits from intermediate areas.

There's also the technical hurdle that areas aren't always exclusive. Suppose a canyon where the "lower canyon" is anything before the tunnel and the "upper canyon" is everything after. It's common to also say "middle canyon" for the rocks around the tunnel. The climbs just past the tunnel are both upper and middle canyon — depending on who's talking, or who's making the guidebook.

In practice, many areas (especially in the open terrain of the western US) work on geometry alone. Where tree cover and continuous cliff lines make the map a weaker guide, as across much of the east, a publication will usually want an explicit tree. The classic-area-organization extension holds it: geometry scaffolds a first draft, and the author massages it into finished shape: walls are ordered for the approach, splitting or collapsing groups to fit the guide. The tree comes from stable facts about location and the author's judgement. It's cheap to rebuild when the area or the publication changes.

During maintenance, an explicit hierarchy has turned out to be unnecessary: search and a map beat clicking through breadcrumbs. During publishing, editorial needs dictate the hierarchy's shape. Hard-coding a canonical series of parents would be a toss-up between saving effort and costing it.

UUIDs

Use lowercase when UUIDs appear in filenames.

Coordinates

Coordinates are expressed as decimal degrees. Assume WGS 84 (EPSG:4326) unless the catalog authors specifically state otherwise. This is the de facto standard for consumer mapping. GPS receivers, phones, CalTopo, and OpenStreetMap all use WGS 84.

Coordinates in stele1 use the named {latitude, longitude} instead of an ordered pair. Pair order is a widespread point of confusion. stele1's format is unconfusable.

Dates

Photo's capture_time or an event in a climb History's date are stored as a string.

For dates that software can sort and filter, use EDTF, an extension of ISO 8601. Level 0 is plain ISO 8601; Level 1 adds the coarse and uncertain forms that suit old photos and half-remembered events.

  • 2003-04-20 is April 20, 2025
  • 2025-03~ means around March 2025
  • 199X means in the 1990s
  • 1975-23 means Fall of 1975. (21 spring, 22 summer, 23 autumn, 24 winter)
  • 1988? means maybe 1988

Climb Length

A Climb's length gets a {lower,upper}_estimate, and a unit. This isn't the only choice, but it's better than its peers. Climbers rarely (if ever) measure each climb, so the format models the uncertainty that usually exists.

Units are included because a catalog should be able to use different units for boulders and routes.

lower_estimate and upper_estimate match how most climbers think. We say "20 or 30 feet" instead of "25±5 feet". (we might say "around 20 feet", but that can't be clearly modeled) It's natural to think "I know this is over 15'", or "definitely under 100'" and modeling endpoints aligns with this relative-thinking that we're prone to. It also happens to simplify code: consumers don't branch on an (imaginary) exactly key before checking the upper_estimate. Checking a catalog for climbs under 100 feet, requires a single check of whether upper_estimate is under 100'.

It could have been specified as flexible plain text, but the field exists to capture data, and a string gives up the re-usability of data. A user wanting text should use a "length" or "height" as a climb.field.

Versioning

stele1 is stable. the 1 is a compatibility commitment.

The spec is firm but not frozen. New attributes are possible but would have to clear a significant bar, and those changes will never break existing catalogs or tools. Specifically:

  • Top-level attributes defined in the spec will never change shape. climb.rating, area.location, photo.climb_layers, etc. are permanent as specified.
  • Top-level attributes can be added under a compelling case.
  • Top-level attributes will never be deprecated.
  • A reader that encounters an unknown top-level attribute preserves the value verbatim on write. Unknown nested keys (e.g. a custom attribute inside climb.notes[x]) are out of spec and fail loudly to ensure future compatiblity; extensions and top-level attributes are the points for growth.
  • A reader from 2060 loads a catalog from today. Today's readers load 2060 catalogs without erroring; unrecognized attributes are preserved.
  • Extensions are not covered. Anything under extensions/{name}/ is at the discretion of the extension's author.