MapComplete is a webapp which allows to use and update OpenStreetMap within thematic maps. This repository contains all of the source code.
  • TypeScript 57.5%
  • Svelte 38.8%
  • CSS 3.1%
  • HTML 0.4%
  • Shell 0.2%
Find a file
2026-06-10 00:09:26 +02:00
.forgejo Scripts: remove 'omit-dev' again 2026-06-08 03:42:37 +02:00
.reuse Chore: Remove more GH references (#2374) 2025-04-07 19:10:11 +02:00
.vscode Chore: Enable file nesting 2025-08-05 13:05:25 +02:00
android@b187154dd0 Scripts: attempt to fix ssh actions: don't use cd 2026-05-30 16:04:57 +02:00
app Refactoring: use correct method 2026-02-21 04:00:42 +01:00
assets Themes(infrastructure): improve wording, add start date and ref to 'data_center' 2026-06-09 18:48:44 +02:00
Docs Scripts: add email to caddy file 2026-06-09 18:48:22 +02:00
langs Themes(infrastructure): improve wording, add start date and ref to 'data_center' 2026-06-09 18:48:44 +02:00
LICENSES Fix: SPDX-compliance 2023-07-27 14:34:05 +02:00
public UX: split 'settings' into a profile and settings pane on desktop 2026-06-04 03:13:01 +02:00
scripts Scripts: fix dbtile script 2026-06-10 00:09:26 +02:00
src Fix: fix download panel 2026-06-09 23:46:43 +02:00
test Fix: don't offer to save a non-showable default, add test for this 2026-06-04 02:12:32 +02:00
.editorconfig feat: add prettier config 2022-09-08 20:57:11 +02:00
.eslintignore chore: refactoring, linting, removing obsolete files 2025-06-18 22:31:50 +02:00
.eslintrc.cjs Misc: ESLint now ignores unused variables if they start with "_" 2026-04-06 00:15:09 +02:00
.git-blame-ignore-revs chore: add prettier to blame ignore 2022-09-09 21:55:39 +02:00
.gitignore Chore: update .gitignore 2026-01-06 23:22:16 +01:00
.gitmodules Update submodule home 2025-04-28 13:19:44 +02:00
.nvmrc Use later node version 2025-02-06 19:16:51 +01:00
.prettierignore chore: automatic fix some linting errors, update lint config 2025-06-18 21:52:03 +02:00
.prettierrc.json Prettier: Fix new line setting 2023-06-15 06:04:39 +02:00
.tool-versions Use node16 and asdf 2021-09-22 18:56:51 +02:00
.versionrc.json Add feature section to versionrc 2025-04-19 23:40:52 +02:00
404.html Drop goatcounter 2025-06-19 16:08:29 +02:00
ARCHITECTURE.md Docs: update the readme 2026-06-08 03:23:26 +02:00
capacitor.config.ts Chore: formatting, auto code 2026-05-28 21:49:15 +02:00
CHANGELOG.md chore(release): 0.61.2 2026-06-03 17:10:41 +02:00
CODE_OF_CONDUCT.md Create CODE_OF_CONDUCT.md 2022-10-05 01:13:18 +02:00
config.json CI: add extra config file for easier per-deployment veriations, add hetzner deploy script 2023-09-25 03:14:41 +02:00
CONTRIBUTING.md Docs: add hints on how to do pull requests 2026-05-25 01:58:31 +02:00
index.html Feature: offline: more features to be able to work fully offline 2025-08-03 16:35:38 +02:00
inspector.html Drop goatcounter 2025-06-19 16:08:29 +02:00
issues.html Feature: add 'issues'-redirecting page 2025-07-15 15:55:24 +02:00
land.html Chore: update to OAuth 2.0, fix #1548 2023-09-01 21:36:39 +02:00
package-lock.json chore(release): 0.61.2 2026-06-03 17:10:41 +02:00
package.json chore(release): 0.61.2 2026-06-03 17:10:41 +02:00
postcss.config.cjs 🚧 First svelte component 2023-02-08 01:18:56 +01:00
privacy.html Drop goatcounter 2025-06-19 16:08:29 +02:00
README.md Docs: update the readme 2026-06-08 03:23:26 +02:00
SECURITY.md Misc: add security policy and security.txt, see #2627 2026-01-13 00:00:33 +01:00
statistics.html Drop goatcounter 2025-06-19 16:08:29 +02:00
status.html Drop goatcounter 2025-06-19 16:08:29 +02:00
studio.html Drop goatcounter 2025-06-19 16:08:29 +02:00
style_test.html Fix: css-generate script; loading of stylesheet in style_test, add small buttons to style_test 2023-09-16 02:27:29 +02:00
svelte.config.js Cleanup vite.config.js and fix scripts in package.json 2023-02-09 14:06:23 +01:00
tailwind.config.cjs Refactoring: fix statistics in onwheels theme 2025-03-04 22:21:24 +01:00
test.html Chore: add 'hfull' to test html 2025-12-15 02:08:28 +01:00
theme.html Android: add inset spacers for android 2025-07-18 14:15:37 +02:00
tsconfig.json Merge develop 2025-01-22 01:26:12 +01:00
tslint.json chore: refactoring, linting, removing obsolete files 2025-06-18 22:31:50 +02:00
vite.config.js Merge develop 2025-01-22 01:26:12 +01:00
vitest.config.ts Fix: exclude android repo from tests, increase timeout 2025-06-18 21:36:26 +02:00

MapComplete

Let a thousand flowers bloom

Liberapay Matrix

MapComplete is an OpenStreetMap viewer and editor. The main goal is to make it trivial to see and update information on OpenStreetMap, also for non-technical users. This is achieved by showing only features related to a single topic on the map. MapComplete contains many thematic maps, each built for a certain community of users, showing data and questions that are highly relevant for this topic. By showing only objects on a single topic, contributors are not distracted by objects that are not relevant to them. Furthermore, this allows to show (and ask for) attributes that are highly specialized (e.g. a widget that determines tree species based on pictures) but also by reusing common attributes and elements (such as showing and adding opening hours or pictures).

The design goals of MapComplete are to be:

  • Easy to use, both on web and on mobile
  • Easy to deploy (by having a limited, non-critical backend)
  • Easy to set up a custom theme
  • Easy to fall down the rabbit hole of OSM

The basic functionality is to show some map features and then ask certain questions. Answers (and new point data) are sent back directly to OpenStreetMap.

Furthermore, it shows images if present in the panoramax, image tag or, if a wikidata or wikimedia_commons-tag is present, it follows those to get these images too.

An explicit non-goal of MapComplete is to modify geometries of ways, especially generic geometry editing. If adding geometry would be supported, we'd also have to show all geometries (to avoid accidental intersections). This would invite showing and editing other geometries as well, resulting in a general-purpose editor. However, we already have an excellent, web-based general purpose editor. (Splitting roads is possible though - with respect for relations if it is part of a relation; in some restricted themes, geometry conflation is also possible).

**More about MapComplete: ** Watch Pieter's talk on the 2021 State Of The Map Conference (YouTube) about the history, vision and future of MapComplete.

How is it different from StreetComplete?

This is the repository of Map Complete. Street Complete is an Android-only application where the contributor is shown some questions to solve, after which the pin will disappear from the map.

StreetComplete can thus be seen as a Todo-list for contributors who go on a stroll, whereas MapComplete is a website showing relevant information and which allows adding or updating information.

The codebases are separate, even though many ideas and some artwork are copied from the StreetComplete app.

Documentation

More documentation can be found on the documentation website *docs.mapcomplete.org

Dev

To develop or deploy a version of MapComplete, have a look to the guide.

Creating your own theme

It is possible to quickly make and distribute your own layer/theme. This can be done with MapComplete Studio. You can also code your own, please read the documentation on how to do this.

The main developer is currently not fullfilling requests for new themes (unless you are paying him). There are simply too many good thematic maps to make. We do however encourage you to try to create your own theme yourself - we'll gladly accept it as an official theme if it meets the criteria.

Some history

The first ever (testing) changeset https://www.openstreetmap.org/changeset/85856178 (27th may 2020) and first proper changeset one day later: https://www.openstreetmap.org/changeset/85903433

Statistics

To see statistics, consult OsmCha or the statistics page.

User journey

MapComplete is set up to lure people into OpenStreetMap and to teach them while they are on the go, step by step.

A typical user journey would be:

  1. Oh, this is a cool map of my specific interest! There is a lot of data already...

  2. The user clicks that big tempting button 'login' in order to answer questions and creates an account.

  3. The user answers a question! Hooray! The user is now transformed into a contributor.

  4. The user adds a new POI somewhere

  5. At various number of changesets, some more features become available, e.g. a link to the changeset, tags, ...

License

GPLv3.0 + recommended pingback.

I love it to see where the project ends up. You are free to reuse the software (under GPL) but, when you have made your own change and are using it, I would like to know about it. Drop me a line, give a pingback in the issues,...

Translating MapComplete

See translating mapcomplete for more information.

Android

The website is also packaged into an Android App, but there are no major differences between the web version and the Android App.

The Android version is available online, the source code is here

Get it on Google PlayGet it on F-DroidGet on obtainium

Architecture overview

See ARCHITECTURE.md

Privacy

Privacy is important, we try to leak as little information as possible. See the privacy policy for more information

Attributions and Copyright

The code is available under GPL; all map data comes from OpenStreetMap (both foreground and background maps).

Background layer selection: curated by https://github.com/osmlab/editor-layer-index

Icons are attributed in various 'license_info.json'-files and can be found in the app.

This project was funded through NGI0 Entrust, a fund established by NLnet with financial support from the European Commission's Next Generation Internet program. Learn more at the NLnet project page.

NLnet foundation logo NGI Zero Logo