The Rails application that powers OpenStreetMap


"The Rails Port"

Lint Tests Coverage Status

This is The Rails Port, the Ruby on Rails application that powers the OpenStreetMap website and API. The software is also known as "openstreetmap-website".

This repository consists of:

  • The web site, including user accounts, diary entries, user-to-user messaging.
  • The XML-based editing API.
  • The integrated version of the iD editors.
  • The Browse pages - a web front-end to the OpenStreetMap data.
  • The GPX uploads, browsing and API.

A fully-functional Rails Port installation depends on other services, including map tile servers and geocoding services, that are provided by other software. The default installation uses publicly-available services to help with development and testing.


This software is licensed under the GNU General Public License 2.0, a copy of which can be found in the LICENSE file.


The Rails Port is a Ruby on Rails application that uses PostgreSQL as its database, and has a large number of dependencies for installation. For full details please see


We're always keen to have more developers! Pull requests are very welcome.

More details on contributing to the code are in the file.


  • Redesign


    This pull request tracks work on a redesign of the header, sidebar, and main page map based on the presentation (video, slides, mock ups) at State of the Map Birmingham.

    Major components of the redesign include a new help page; new about page; moving navigation elements out of the sidebar; moving search results, export controls, changeset history, and feature details into the sidebar; and removal of the sidebar from "interior" pages such as the user profile and diaries.

    Test Deploy

    TODO List

    • [x] Design and implement about page
    • [x] Style sign up / log in
    • [x] Move edit button to 2nd position
    • [x] Clickable logo/project name
    • [x] Content width for interior pages
    • [x] Add call to action button to main sidebar
    • [x] Implement closing the sidebar
    • [x] Hook up interactivity for changeset view (load changesets for current view, update on map move)
    • [x] pushState-based navigation
    • [x] Restore "Where am I?"
    • [x] Include object in "Edit" links on browse pages
    • [x] Active states for all nav elements
    • [x] "Where am I?" needs to have own route
    • [x] Integrate/combine "Map Data" layer and browse pages
    • [x] Implement responsive design for header
    • [x] Reduce "Where am I?" lat/lon to 7 digits precision
    • [x] Fix map controls on user settings page
    • [x] Test FF, IE, RTL
    opened by jfirebaugh 121
  • Routing


    This is a basic routing interface for implemented in JavaScript. Routing is provided by external services (in this commit, OSRM, GraphHopper, and MapQuest Open).

    The initial aim is to provide A-B routing functionality with a coherent UI. There is much more that could be implemented, of course, but the focus has been on the simplest possible service for now.

    There are two obvious omissions:

    • Routes do not have permalinks and the URL history is never changed.
    • Directions are not translated.

    Both of these are some way outside my knowledge / comfort zone and I suspect others would be more efficient at coding them! Translation is expected to be done by the external service, so should be largely a matter of the routing engine passing the current locale.

    Otherwise this should largely be ready. Comments/suggestions within the existing scope welcome: "wouldn't it be nice if it did this..." requests are probably best left for after an initial launch.

    Thanks hugely to @apmon, @danstowell and @karussell for patches and suggestions so far.

    opened by systemed 91
  • Add Docker Compose Support for Development Environment

    Add Docker Compose Support for Development Environment

    This is a cleaned up version of PR #2406 which was built upon the work of @fazlerabbi37 in PR #2272.

    • Introduces the usage of docker-compose for creating a development environment for this project
    • Adds for Docker-specific installation instructions
    • ~Adds a Makefile for providing shortcuts for running common docker-compose commands~

    There is certainly still room for improvement here, including pruning unneeded dependencies in the top-level Dockerfile, but I propose merging this working version and iterating from that point (particularly since many of the changes will apply regardless of the installation method). I think we will benefit from feedback of a few people actually using this before making too many more changes.

    changes requested dx 
    opened by jalessio 80
  • Forbid anonymous comments for notes

    Forbid anonymous comments for notes

    We in Russia have encountered a person that is leaving anonymous one-letter comments to all of the notes. That got me thinking, why do we do that, allowing anonymous comments? I understand anonymous reports: people can help improving the map without registering. But comments cannot add anything helpful: reporters who commit, register.

    opened by Zverik 73
  • Add welcome page

    Add welcome page

    This pull request introduces a dedicated welcome page based on osmlab/welcome-osm. The welcome page is the landing page for newly confirmed accounts as well as a place where third party data consumers like Foursquare, MapBox, or Craigslist can direct users who have spotted a problem with the map and want to get started fixing it.

    The intent is to make the introduction of new users to OpenStreetMap gentler than simply linking to the /edit view, while simultaneously curbing the length of the confirmation email -- we can provide a better welcome message through the website than through a static email. The welcome page fills a gap in the existing introductory materials: existing 'Learn OSM' projects are either tilted towards case (HOT's is for field mappers, most YouTube videos are about JOSM), or more detailed and technical than is desirable for a first experience landing page.

    As part of this change, the account confirmation email has been reduced to a single confirmation link, which will then redirect to the welcome page.

    View the page on a test deployment

    opened by jfirebaugh 65
  • Add MAPS.ME authentication

    Add MAPS.ME authentication

    Please do not comment "I support this", use the reaction button in the top right corner instead.

    We, as in, have published the first alpha version of our own authentication service, (does not have the front page yet). The plan is to use it instead of oauth to authenticate users, and then register them on using that account.

    It would give us an independent profile storage and, more important, an option to use native SDKs for facebook and google on mobile devices. I could not negotiate that for (re: #1114 and mailing lists), so we decided to make an alternative service. It might be possible for other mobile apps to use the same service. That would be a benefit for other authors of OSM mobile editors, simplifying their sign-up workflow.

    Until it is possible to link multiple social accounts to a profile (see #1274), we plan to use this only for new users, directing existing users to for all kinds of linked accounts, including facebook and google. Nothing is changed for the osm side, besides a new icon on the login page.

    This pull requests adds two auth providers: mapsme for a regular web-based authentication via the passport site, and mapsme_token for a token-based authentication, which would allow skipping the passport site when logging in on a mobile device. The latter rewrites the provider string to mapsme, so there is no difference to the database which one of these is used.

    You can test this at

    opened by Zverik 64
  • Allow reporting of abusive users to moderators or admins

    Allow reporting of abusive users to moderators or admins

    Supersedes PR #1268 , see also issue #841 and this diary entry.

    This PR builds on the work by @sbagroy986, @zerebubuth, @woodpeck and @grischard as we try to shepherd this GSoC project through review and into production.

    I have cleaned up some aspects of this PR, purely to minimise the distractions when comparing diffs and trying to understand how it works. Please avoid nitpicking the code for now - we need to consider bigger questions first. For the avoidance of doubt, this PR not in a fit state for merging!

    opened by gravitystorm 64
  • Port to Leaflet

    Port to Leaflet

    I got so fed up with the poor two-finger zoom behavior of OpenLayers that I started to work on this. I have to say, it feels much nicer.

    I don't have a full port completed ("Browse Map Data" is the major missing piece), but I wanted to gauge interest and figure out what the requirements would be to cut over.

    opened by jfirebaugh 60
  • Idempotency for API 0.6

    Idempotency for API 0.6

    API 0.6 has no concept to prevent duplicate POST operations, which could happen as a client retries a failed network operation. As per RFC 7231, POST operations are not idempotent, which is quite unfortunate in particular for diff uploads: assuming the changeset consists of "create" operations only, those objects might be created multiple times on the database.

    I've created this issue to discuss different options (such as adding a downward-compatible HTTP Header "Idempotency-Key"), and find ways on how to implement it in the API.

    Some pointers:

    Link proposes as part of their RESTful API guidlines:

    • Should: Consider To Design POST and PATCH Idempotent [229]:

    A client specific idempotency key provided via Idempotency-Key header in the request. The key is not part of the resource but stored temporarily pointing to the original response to ensure idempotent behavior when retrying a request (see May: Consider to Support Idempotency-Key Header).

    opened by mmd-osm 59
  • Supporting multiple API versions

    Supporting multiple API versions

    I'd like to support multiple API versions, so that we can deploy API 0.7 in parallel to API 0.6. It's not something we've ever done before, but I think it's the only reasonable way to handle API version changes these days!

    I'm opening this PR just to receive any initial feedback on this proposed approach to the code changes. So far this approach demonstrates the basic concepts, including:

    • Supporting different scenarios, e.g. dropping old api calls, adding new api calls, api calls that are the same in each version, api calls that are similar but return different results (e.g. different response codes)
    • Optimised for the assumption that almost all api calls are the same between different versions.
    • Being able to choose which versions are deployed. This allows the codebase to support multiple API versions during development and when running the tests, and so it avoids long-running branches.
    • Only code that is different between api versions is in any way duplicated. Otherwise the same code is used for each api version.
    • Establishes a naming convention for controllers that behave differently in different API versions. The general idea is that old code lives in specific controllers, e.g. API::V06::CapabilitiesController, and new code lives in the normal place e.g. API::CapabilitiesController. This makes future upgrades easier, since the assumption is that new code will be used in version N+1 too.
    • It's all designed to allow multiple, non-contiguous versions. For example, if we yank a future version 0.8, it'll cope fine with e.g. deployed_versions = ["0.6", "0.7", "0.9"]

    If you are interested in seeing how it works, then the changes to "config/routes.rb" along with the output from "bundle exec rake routes" are the best way to see the overall idea.

    The biggest drawbacks so far are around the tests.

    First, I think it makes sense that every API version that the codebase knows about is fully tested, i.e. even if the result is expected to be the same, a given api test should run once for each api version. This leads to the indentation of all the tests changing, since we need to add a "all_api_versions" loop around almost every test. So the diffs and git blame are horrible.

    Secondly, the controller methods involve lots of changes like this:

    - get :show
    + get :show, :params => { :api_version => version }

    It leads to a lot of extra params => ... to skim read, which isn't ideal. I've tried working around this but the workarounds have their own drawbacks.

    The tests don't all pass yet, so this is not yet in shape to be committed, but I hope to get it there soon. In the meantime, and before I make any further changes that you might not be happy with, any feedback is very welcome!

    opened by gravitystorm 58
  • Ideas for dashboard page

    Ideas for dashboard page

    In #3167 I discussed splitting the original profile page in two - to keep the pubic-facing user profile information separate from stuff that other people don't see when viewing your profile (like your friends list). This was implemented in #3297 and we now have a dashboard that is private to each mapper and currently contains the stuff that was moved from the profile page.

    I have my own plans for things to add to the dashboard in the future, but I'd also like to hear suggestions from other people. In particular, I'd like to hear suggestions that are:

    • Focussed on mappers, or things that would encourage people to become mappers, or that would help or inspire existing mappers do more things.
    • Preferably don't involve integrating any third-party services at this stage.
    • Aren't just duplicating menu information. For example, having a box saying "you have 5 unread messages" duplicates the "My messages" menu item so doesn't need to go on the dashboard.
    opened by gravitystorm 1
  • Download link on a deleted object results in an HTTP error

    Download link on a deleted object results in an HTTP error

    On deleted nodes, please grey out the Download XML link, as clicking it will give an HTTP error.

    opened by jidanni 2
  • Show clear trace start and end points

    Show clear trace start and end points

    On we see a trace animation.

    Wouldn't it be nice to have a green icon at the start, and a red icon at the finish points?

    Else nobody can tell where the animation starts and finishes, because it loops so fast.

    Sure, you might say "Just click 'edit', then it won't be animated".

    But still, we are still far away from determining the start and end points.

    It is assumed that the user turned on her GPS, walked in a straight line, then turned it off. So the animation is simple to understand.

    Ah, but if they walked in a loop, and as the animation is a loop, the start and end points are lost!

    opened by jidanni 7
  • more convenient delete button

    more convenient delete button

    Many of my traces got re-uploaded by mistake. Several times over.

    It would be beneficial to unearth the delete button, and put it right alongside View Map and Edit Map.

    Case in point: image

    At some point I would also hope for checkboxes with a "Select All", but that would be a separate ticket, and NOT substitute for single-item instant delete.

    #RemoveDuplicates #MyTraces

    opened by klepsydra 0
  • Update en.yml

    Update en.yml

    Updated (simplified) map tile attribution requirement to be the same as for any use of OSM data (based on request to LWG)

    opened by mackerski 0
  • Warn upon trying to share features

    Warn upon trying to share features

    1. Visit
    2. Click Share button on right.
    3. Choose Image Download

    But when examining the download, the big orange way has disappeared.

    So maybe have some warning pop up saying don't expect to share that feature.

    opened by jidanni 0
  • Docker db problem

    Docker db problem

    I followed all of the instructions in and started both the web and db containers, but I get this error when first visiting the website:

    config/initializers/cors.rb:9:in `call'
    Started GET "/" for at 2021-09-05 15:10:06 +0000
    ActiveRecord::NoDatabaseError (FATAL:  role "openstreetmap" does not exist

    And therefore it cannot start. I just need some help to get it working.

    opened by lectrician1 11
  • Information on Map Layers - consistency and usefulness

    Information on Map Layers - consistency and usefulness

    I think there is significant room for improvement of the information on the meanwhile six map layers available on the website provided to the user. Right now in the layer selector we only have the title (which is not really that descriptive in many cases) and what is on the bottom right on the map. That consists of OSM attribution and Website and API terms plus a middle part which depends on the layer chosen, currently:

    • Standard: Make a Donation
    • CyclOSM: Tiles style by CyclOSM hosted by OpenStreetMap France
    • Cycle Map: Tiles courtesy of Andy Allan
    • Transport Map: Tiles courtesy of Andy Allan
    • ÖPNVKarte: Tiles courtesy of MeMoMaps
    • Humanitarian: Tiles style by Humanitarian OpenStreetMap Team hosted by OpenStreetMap France

    This seams to be very non-uniform and purely based on the interests of the technical tile providers and fairly non-ideal for the user experience and for supporting the reasons why we have these different map layers on the site (as reflected in the Guidelines for new tile layers).

    Specific suggestions on how this could be improved:

    • For the three layers which are based on open map styles (see here) link to the map style projects, this helps giving these projects publicity and this way support in their work:
    • Each map layer has a page on the OSM wiki - linking to that would be helpful as well:
    • For at least three of the layers there exists a hand curated map key that would be useful as well to link - useful map keys are a frequent request by website users, see also #982, #1307:
    • A short descriptive text for each layer (to be shown as tooltip or in the layer selector for the active layer if there is enough space on screen) would be very good as well. Of course i realize that this would be work to create and maintain. Important information (all part of the Guidelines for new tile layers) would be in particular:
      • Thematic significance of the layer and usefulness for the visitor
      • Update interval of the data
      • Any use of non-OSM data
    opened by imagico 3
  • Modify the way

    Modify the way "Friends" are added

    I recently received a message saying that "(A person that I've never heard of) has added you as a friend on OpenStreetMap", but when I clicked on the link to their user page, it said that that User does not exist.

    Following advice, I raised the matter with the DWG as I was concerned about spam, & they advised that that user would have already been deleted, probably after somebody else reported them for the same reason.

    I made some suggestions to prevent this from happening again, but they said I should raise them here.

    "Making friends" shouldn't only be controlled by one side of the proposed new arrangement. If I decide that I want to be friends with you, then instead of you just getting a message that Fizzie41 is now your friend, you should get a message saying that "Fizzie41 (link to user page) would like to become your friend - do you agree? - Yes / No". If you say Yes, then I get a response saying that you have agreed; if No, I either get nothing back at all, or I get a polite "Sorry, your Friend request has been declined" message.

    Further to that, is there any way for a User to see who has listed them as a friend?



    opened by Fizzie41 3
  • Automated mail about Note isn't very clearly from a no-reply

    Automated mail about Note isn't very clearly from a no-reply

    Some mails you get from can be replied to, others not. The ones sent related to Notes cannot be replied to, and this isn't very clear. Obviously the sender address has noreply in it, but it does not stand out very much and e-mail clients usually show the sender name (here "OpenStreetMap") more prominently than the e-mail itself.



    • change sender name to "Noreply OpenStreetMap"
    • add "Please do not reply to this e-mail" to the footer text. And perhaps change "for more info go to url" to "For more details, and to reply to this comment, please go to URL".

    Note: I believe replying to this kind of mail currently triggers receiving an empty mail back from [email protected]

    opened by joostschouppe 0
Sharetribe Go is a source available marketplace software, also available as a hosted, no-code SaaS product. For a headless, API-first marketplace solution, check out Sharetribe Flex:

Sharetribe Sharetribe develops advanced marketplace software for every business life cycle stage. Sharetribe Go gives you the complete feature set to

Sharetribe 2.2k Sep 24, 2021
Open Source multi-language/multi-currency/multi-store E-commerce platform for Ruby on Rails with a modern UX, PWA frontend, REST API, GraphQL, several official extensions, and 3rd party integrations.

Spree Commerce Success Stories Documentation Integrations Spree is a complete open source e-commerce solution built with Ruby on Rails. It was started

Spree Commerce 11.4k Sep 20, 2021
An agile project planning tool

Fulcrum Fulcrum is an application to provide a user story based backlog management system for agile development teams. See the project page for more d

null 1.5k Aug 13, 2021
A platform for community discussion. Free, open, simple.

Discourse is the 100% open source discussion platform built for the next decade of the Internet. Use it as a: mailing list discussion forum long-form

Discourse 34.1k Sep 24, 2021
NO LONGER MAINTAINED - Project management and time tracking should be easy. SprintApp is simple to setup, simple to use, and elegant - making you look like a hero in your organization.

SprintApp DEPRECATED This project has not seen any community contributions for a year now, and I have not had time for the project, or the need, for a

Matthew Millsaps-Brewer 304 Aug 12, 2021
A self-hosted data logger for your Tesla 🚘

TeslaMate A powerful, self-hosted data logger for your Tesla. Written in Elixir Data is stored in a Postgres database Visualization and data analysis

Adrian Kumpf 1.8k Sep 13, 2021
Create agents that monitor and act on your behalf. Your agents are standing by!

What is Huginn? Huginn is a system for building agents that perform automated tasks for you online. They can read the web, watch for events, and take

Huginn 32.2k Sep 15, 2021
Copycopter Server is open source. Run it as a web service.

Copycopter ABANDONED This software is no longer being maintained. Description Copycopter is a service for editing the copy text of a Rails application

null 688 Jul 29, 2021
:notebook: A simple self-hosted journaling app

About In a nutshell: a private self-hosted journal with sharing capabilities. This project is an attempt to make myself journal more consistently. I f

Isaac Noda 117 Sep 10, 2021
Professional network for software engineers

A community for developers to unlock & share new skills. Contributing & Getting Started IMPORTANT: Please see our /master/ for instruct 863 Sep 21, 2021
Time registration that doesn't suck

Hours Maintenance mode This project is now in maintenance mode. We will not accept new feature development or contributions other than dependency upda

Defacto 1k Sep 14, 2021
Helping to catalog, preserve and free the artifacts you need to produce music.

Musical Artifacts Helping to catalog, preserve and free the artifacts you need to produce music. Donate via Paypal Donate via Bitcoin Read the wiki Is

Lucas 60 Sep 3, 2021
A privacy-aware, distributed, open source social network.

diaspora* A privacy-aware, distributed, open source social network Project site | Wiki | Bugtracker | Discussions and Support | License | Authors Inst

diaspora* social network 12.8k Sep 19, 2021
Open source back-end server for web, mobile and IoT. The backend for busy developers. (self-hosted or hosted)

A scalable, multitenant backend for the cloud. Para is a scalable, multitenant backend server/framework for object persistence and retrieval. It helps

Erudika 408 Sep 20, 2021
Make any web page a desktop application

Nativefier You want to make a native wrapper for WhatsApp Web (or any web page). nativefier '' You're done. Introduction Nativefier is

null 28.5k Sep 17, 2021
Display and control your Android device

scrcpy (v1.17) Read in another language This application provides display and control of Android devices connected on USB (or over TCP/IP). It does no

Genymobile 54.9k Sep 23, 2021
Linux Application Launcher

Master: Dev: Application Launcher for Linux ?? Ulauncher is a fast application launcher for Linux. It's is written in Python, using GTK+. App Search F

Ulauncher 2.2k Sep 14, 2021
Personal CRM. Remember everything about your friends, family and business relationships.

Personal Relationship Manager Monica is a great open source personal relationship management system. Introduction Purpose Features Who is it for? What

Monica 13.3k Sep 24, 2021