Dear Bilbo,
What a calamity! Just this morning, I attempted to properly document Sandyman’s Mill in OpenStreetMap—you know, the watermill where they grind all the Shire’s grain—and I discovered to my absolute horror that OSM has no proper tagging schema for Shire watermills! Oh, they have man_made=watermill for those dreadfully generic watermills elsewhere in Middle-earth, but nothing that captures the essential hobbitish details: the number of grinding stones, the undershot versus overshot wheel configuration, or most importantly, the weekly flour production capacity (measured in seed-cake equivalents, naturally). I sat there at my mapping desk, GPS coordinates at the ready (SY 1234 5678, if you must know), completely flummoxed—rather like the time Bilbo tried to explain his Elvish poetry to the Gaffer. Looks up with determined gleam in eye
I realize I must take matters into my own furry-footed hands! If the wider OpenStreetMap community hasn’t created proper specifications for Shire watermills, then by the Green Dragon’s best ale, I shall create them myself.
“By Elbereth! A proper preset definition for hobbit watermills!” I exclaimed, nearly spilling my tea over the JSON structure before me. This beautifully formatted file would let any mapper document our mills properly—but first, I needed Sam’s expertise to determine which fields truly mattered. Next: I rush to Bag Shot Row, waving my GPS device at a bewildered Sam in his garden!
This is the json object that same and I came up with.
{
"name": "Hobbit Water Mill",
"terms": ["mill", "waterwheel", "Sandyman's Mill", "Hobbiton mill", "grain mill", "flour mill"],
"tags": {
"man_made": "watermill",
"theme": "hobbit"
},
"geometry": ["point", "area"],
"fields": [
"name",
"operator",
"wheel_type",
"grinding_stones",
"flour_output_daily",
"description"
],
"moreFields": [
"start_date",
"building_area_yes",
"address",
"water_source",
"operational_status"
]
}
Next: Now I need to clone the id-tagging-schema repository from GitHub to properly integrate this preset!
“Right then, time to fetch the official iD tagging schema repository!” I muttered, typing carefully: git clone https://github.com/openstreetmap/id-tagging-schema.git. The magical Elvish mirror (my computer screen, as Gandalf calls it) began downloading the repository, and within moments I had the entire schema structure at my furry fingertips!
“Aha! Here we are: id-tagging-schema/data/presets/” I exclaimed, peering at the neatly organized folders. I created my hobbit_watermill.json file right there amongst the other presets, carefully pasting in the JSON structure Sam and I had crafted together.
Now, all I have to do is run this: ~~~ npm install npm run build ~~~
Oh dear! This is what I found: ~~~ > @openstreetmap/[email protected] build > node scripts/build.js 🏗 Validating and building for development… Unknown preset field “wheel_type” in “fields” array of preset “hobbit_windmill” (undefined) ~~~

The field files referenced in the hobbit_windmill preset don’t exist in the schema. The missing fields are:
- wheel_type
- grinding_stones
- flour_output_daily
- operational_status
The Solution
I needed to create actual field definition files for each of these in the data/fields/ directory. Here’s what we did:
wheel_type.json
I examined existing field files like water_source.json to understand the structure, then created a combo field (dropdown) with proper watermill wheel types.
File location: data/fields/wheel_type.json
{
"key": "wheel_type",
"type": "combo",
"label": "Wheel Type",
"strings": {
"options": {
"overshot": "Overshot",
"undershot": "Undershot",
"breastshot": "Breastshot",
"pitchback": "Pitchback",
"horizontal": "Horizontal"
}
}
}
Wheel type explanations:
- Overshot: Water falls from above onto the wheel
- Undershot: Water flows beneath the wheel (like Sandyman’s Mill!)
- Breastshot: Water hits at mid-height
- Pitchback: Reverse overshot design
- Horizontal: Wheel spins flat (rare in the Shire)
grinding_stones.json
A simple number field to count how many grinding stones the mill has. Most Shire mills have 2, but Sandyman boasts he has 3!
File location: data/fields/grinding_stones.json
{
"key": "grinding_stones",
"type": "number",
"label": "Number of Grinding Stones",
"placeholder": "2"
}
operational_status.json
A combo field tracking the mill’s condition.
File location: data/fields/operational_status.json
{
"key": "operational_status",
"type": "combo",
"label": "Operational Status",
"strings": {
"options": {
"active": "Active",
"inactive": "Inactive",
"abandoned": "Abandoned",
"restored": "Restored",
"ruins": "Ruins"
}
}
}
Status options:
- Active: Currently grinding grain
- Inactive: Temporarily not operating
- Abandoned: No longer in use
- Restored: Fixed up after abandonment
- Ruins: Fallen into disrepair (like that old mill near the Brandywine)
flour_output_daily - SKIPPED
You wisely told me to skip this one—too complicated to standardize!
Final Fix
I removed flour_output_daily from the hobbit_windmill.json fields array:
File location: data/presets/hobbit_windmill.json
{
"name": "Hobbit Water Mill",
"terms": ["mill", "waterwheel", "Sandyman's Mill", "Hobbiton mill", "grain mill", "flour mill"],
"tags": {
"man_made": "watermill",
"theme": "hobbit"
},
"geometry": ["point", "area"],
"fields": [
"name",
"operator",
"wheel_type",
"grinding_stones",
"description"
],
"moreFields": [
"start_date",
"building_area_yes",
"address",
"water_source",
"operational_status"
]
}
Success!
After creating all the required field files and updating the preset, npm run build succeeded! The hobbit watermill preset was now ready for use in iD Editor.
Build Process Summary
- Created
hobbit_windmill.jsonpreset indata/presets/man_made - Ran
npm run buildand received errors about undefined fields - Created three field definition files in
data/fields/:wheel_type.jsongrinding_stones.jsonoperational_status.json
- Removed
flour_output_dailyfrom preset fields array - Ran
npm run buildsuccessfully - Schema ready for integration with iD Editor!
Setting up your Local ENV
You need to clone the ID tool and in 20 minutes of fiddling with a pesky LLM, I could create my own custom objects!

Discussion
Comment from JennyHen on 23 October 2025 at 12:28
Gandalf is sitting next to me now, and he wants to let you know that he doesn’t like all this digital stuff! All we have to decide is what to do with the time that is given to us. That’s it.
Comment from FrodoMappins on 23 October 2025 at 20:00
Most profound. Gandalf is very wise. It is important that one doesn’t cultivate a mind for metals and wheels. We all know how that turns out.
Comment from bryceco on 25 October 2025 at 22:21
https://opengeofiction.net needs you.