How StreetComplete handles edits
2021-07-10, 15:00–15:20 (UTC), Track 1 - Talks

A deep dive into how StreetComplete stores edits and syncs them with OpenStreetMap, including persistence, solving conflicts and allowing users to revert their edits.


StreetComplete is known as an app to easily contribute selected data to OSM on the go.

The simple interface could make it appear that the technical implementation is equally simple. It is maybe a common misconception that things that look easy to the user are also lighter in terms of code complexity. But under the hood, it is anything but.

For example, amongst other things, the app has a unique way to avoid and to automatically resolve conflicts when uploading data to OSM. For an app that promises its users to work completely offline and thus automatically stores unsynced edits for any duration before upload, this is very useful to have.

Furthermore, it comes with the ability to undo edits in any order (not just the last) and even undo most edits after they have been synced with OSM already.

This talk shall give you an architectural overview over how StreetComplete enables its users to do these things.
It could serve other editor developers as inspiration, however, most technical concepts in this app are probably not well applicable to be used in a general OSM editor, as StreetComplete vastly limits its users what they can do and therefor we can make certain assumptions about how the app is used.


Talk keywords

StreetComplete, Architecture, Undo, Conflict-Resolution

I am an open-source software developer based in Hamburg, Germany.

You may know me as the author and maintainer of StreetComplete, osmapi (Java library) and some others.

Before OpenStreetMap, I was involved in the development of the Indie game "Clonk" and later "OpenClonk". Both are still around, and free now, check those out!