Configuration settings

You can control much of how FixMyStreet looks and behaves just by changing the config settings.

The general configuration file

You can look at a summary of the live configuration of your site by going to the Configuration page of your administration interface, at /admin/config.

The FixMyStreet code ships with an example configuration file: conf/general.yml-example.

As part of the installation process, the example file gets copied to conf/general.yml. You must edit this file to suit your needs.

When you edit this file, remember it must be in the YAML syntax. It’s not complicated but — especially if you’re editing a list — be careful to get the indentation correct. If in doubt, look at the examples already in the file, and don’t use tabs.

Config settings by topic

The following are all the configuration settings that you can change in conf/general.yml.

Database config

Site settings and behaviour

URLs and directories


Staging site (not production) behaviour

MapIt (admin boundary service)

Localisation and maps

Sundry external services

All the general settings

These are the PostgreSQL database details for FixMyStreet.


  • FMS_DB_HOST: 'localhost'
    FMS_DB_PORT: '5432'
    FMS_DB_NAME: 'fms'
    FMS_DB_USER: 'fmsuser'
    FMS_DB_PASS: 'aSecretWord'
The base URL of your site.


  • BASE_URL: ''
  • Use this if you're using the Catalyst development server:

    BASE_URL: 'http://localhost:3000'
If you are behind a proxy that is performing SSL termination, and so FixMyStreet is e.g. responding locally on a non-HTTPS connection, then you need to make your proxy set a custom HTTP header saying that the request was via HTTPS, and then set this value to a two-element list containing the trusted HTTP header and the required value.


  • SECURE_PROXY_SSL_HEADER: [ 'X-Forwarded-Proto', 'https' ]
The email domain used for emails, and the contact name and email for admin use.


    CONTACT_NAME: 'FixMyStreet team'
The address used for emails you don't expect a reply to (for example, confirmation emails). This can be the same as CONTACT_EMAIL, of course, if you don't have a special address.


Is this site a staging (or development) site?

On a staging site, templates/CSS modified times aren't cached. Staging sites also don't send reports to bodies unless explicitly configured to (see SEND_REPORTS_ON_STAGING) — this means you can easily test your site without really sending emails to the bodies' contacts that may be in your database.


  • If this is your live production server:


  • If this is a development or staging server:


There is a safety mechanism on staging sites (where STAGING_SITE is 1): your staging site will send reports to a convenient email address instead of the relevant body's contact address. This is very useful for testing!

The actual address used will vary on the version of FixMyStreet you're running, because we've recently changed this behaviour:

  • If you're running version 1.4 or later, the report will be sent to the reporter; that is, the email address you used to confirm the report.
  • If you're running version 1.3 or earlier, then the report will be sent to your site's CONTACT_EMAIL.

Note that this setting is only relevant on a staging server. On your production server (where STAGING_SITE is 0) it will be ignored.



    Any reports created will now be sent to the email of the reporter (or, for version 1.3 sites, the CONTACT_EMAIL) and not the body's. Great for testing!

The suggested input for a place name or names. By default, this appears as a placeholder in the text input on FixMyStreet's front page, and in alert emails. It defaults to displaying "High Street, Main Street".

You should ensure that the example places do return clear, relevant results if they're entered in the font page text input — this will probably depend on how you've set GEOCODING_DISAMBIGUATION.


  • The default behaviour is this, which you should certainly change:

    EXAMPLE_PLACES: [ 'High Street', 'Main Street' ]

  • EXAMPLE_PLACES: [ 'Iffley Road', 'Park St, Woodstock' ]
An array of languages the site supports, each in the following format:

<language code>,<pretty name>,<locale>

Some important things to note:

  • Put the default language as the first entry in the list.
  • Don't put any extra spaces in the strings (e.g., after the commas).
  • Remember that if you want your site to run in languages other than English, you'll also need to check that the translations are available, and your system supports the appropriate locales.

Just adding a language here does not necessarily mean FixMyStreet will always use it (for example, a language coded subdomain name or browser preference may be considered). See this page about languages and FixMyStreet for more information.


      - 'en-gb,English,en_GB'
      - 'de,German,de_DE'
      - 'en-gb,English,en_GB'
If you're running an installation that is being used in a different time zone from the server, set the time zone here. Use a standard time zone (TZ) string.


  • TIME_ZONE: 'Asia/Manila'
  • Leave the setting blank to use your server's default:

    TIME_ZONE: ''

The file locations for uploaded photos and cached geocoding results. Normally you don't need to change these settings from the examples.


  • UPLOAD_DIR: '../upload/'
    GEO_CACHE: '../cache/'
FixMyStreet uses the external service MapIt to map locations (points) to administrative areas: see this explanation of MapIt.

You must provide the URL of a MapIt server, and nominate what types of area from it you want to use. If you leave this blank, a default area will be used everywhere (a URL needs to be given for non-web things, like sending of reports, to function).

See also MAPIT_ID_WHITELIST to efficiently limit the areas you need (especially if you're using global MapIt).


  • If using the Catalyst development server, set to:

    MAPIT_URL: 'http://localhost:3000/fakemapit/'
    MAPIT_TYPES: [ 'ZZZ' ]

  • In the UK, you probably want, to cover all councils:

    MAPIT_URL: ''
    MAPIT_TYPES: [ 'DIS', 'LBO', 'MTD', 'UTA', 'CTY', 'COI', 'LGD' ]

    ...but perhaps MAPIT_TYPES: [ 'WMC' ] if you want to report on a per-constituency basis?

  • If our global MapIt (which is loaded with OpenStreetMap data) contains boundaries you can use:

    MAPIT_URL: ''

    And then specify whichever type code have the boundaries you want:

    MAPIT_TYPES: [ 'O06' ]

    OSM type codes consist of the letter O followed by two digits indicating the type of boundary. Typically, the higher the number, the more specfic (localised) the boundary type.

If you are using global MapIt (see MAPIT_URL), you might want to restrict FixMyStreet usage to only one or more areas, rather than all areas of the specified type (afer all, there are a lot of O04 boundaries in the whole world, for example). Provide a list of all the MapIt IDs that your FixMyStreet should recognise.

Note that you must still set MAPIT_TYPES to match the type or types of each of these areas. And we recommend you set MAPIT_GENERATION too.

We recommend you use this setting, because doing so can improves the efficiency of your site's calls to MapIt considerably.


  • If you don't specify a whitelist, all results (of the given area type) will be considered. This may be OK if you're using a MapIt server which is already only returning relevant results.


  • Otherwise, explicitly list the IDs (from the MapIt server you're using) of the areas you're interested in:

    MAPIT_ID_WHITELIST: [ 240838, 246176, 246733 ]

If you have set MAPIT_ID_WHITELIST, then you should also specify the generation of MapIt data you are using, especially if you are using our global MapIt service.

Global MapIt uses OpenStreetMap data. From time to time we import the latest data in order to pull in newly-added boundaries, or reflect changes to existing ones. When this happens, the area IDs may change, which means the values in your MAPIT_ID_WHITELIST might no longer be correct (because, by default, MapIt returns values from the latest generation of data). Use the MAPIT_GENERATION setting to lock the area IDs in your whitelist — and the geometry described by their boundary data — to the specific generation they belong to. MapIt's generations are numbered with an integer that we increment with each update.

To determine the generation of the data you're using, when you initially identify the area IDs look at the generation-high and generation-low values MapIt is returning. For example, here's the global MapIt data for a point within Thailand — the national border for Thailand is the top level returned ("OSM Administrative Boundary Level 2"). Look on that page for "Exists in generations" (or "generation-" in the JSON data, available by changing MapIt's .html URL to .json) to see the range of generations in which this area appears. You should probably use the highest number (that is, the most recent update).


  • In this example, the whitelist contains a single area ID from global MapIt's generation 4 for Thailand's national border (hence 507455 and area type O02):
    MAPIT_TYPES: ['O02']
    MAPIT_ID_WHITELIST: [507455]
  • If you're not using a MAPIT_ID_WHITELIST you usually don't need to specify a MAPIT_ID_GENERATION.
If your MapIt has the concept of council wards (subareas of councils, where people can sign up for alerts, but not report things), then you can give the MapIt type codes for them here.

You can leave this blank if your jurisidction doesn't use subareas.


  • It's OK to leave this setting blank:


  • In the UK we use something like:

    MAPIT_TYPES_CHILDREN: [ 'DIW', 'LBW', 'MTW', 'UTE', 'UTW', 'CED', 'COP', 'LGW' ]

Which geocoder service to use to look up results, for example, from front page "Enter your location" searches.

Possible choices are Google, Bing, or OSM. By default, FixMyStreet will use OSM, the OpenStreetMap geocoder.

For more information, see the page about geocoding.

It's also possible to add a new geocoder (for example, if your jurisdiction provides a custom one). This requires some coding work, but you can see exampes of supported geocoders in the FixMyStreet repo.

Whichever geocoder you use, check the terms of use for it — there may be restrictions. You may also need to provide an API key to use it: see GOOGLE_MAPS_API_KEY and BING_MAPS_API_KEY.

See also GEOCODING_DISAMBIGUATION for restricting geocoder service to specific places.


  • FixMyStreet defaults to OSM if you don't specify a geocoder:

    GEOCODER: ''

  • GEOCODER: 'Bing'
If you wish to use Google Maps or Bing Maps Geocoding, get the relevant key and set it here. See also the GEOCODER setting.


This setting provides parameters that are included in geocoding requests, to hopefully return more useful results. The options that will be applied vary depending on which geocoder you are using (although unwanted options will be ignored, so you can specify all of them, which might be convenient if you change geocoder).

Remember that you specify which geocoder you are using with the GEOCODER setting.

For OSM, which is the default, you can use:

  bounds: [ <min lat>, <min lon>, <max lat>, <max lon> ]
  country: <country code to restrict results to>
  town: <string added to geocoding requests if not already there>

If using Bing, you can use town and bounds, plus any of:

  centre: "<lat><lon>"
  bing_culture: <culture code: see Bing docs>
  bing_country: <country name: only accept results that match this>

If using Google, you can use:

  bounds: [ <min lat>, <min lon>, <max lat>, <max lon> ]
  google_country: <.ccTLD to restrict results to>
  lang: <language for results>


  • This limits geocoding requests to only return results in Mumbai, India:
      country: 'in'
      town: 'Mumbai'
The type of map you want to use. If left blank, the default is OSM for OpenStreetMap. Other options are GoogleOL for Google Open Layers, and other UK-specific values, including FMS for UK FixMyStreet.

Check the usage terms for the type of map you use — there may be restrictions.


FixMyStreet uses a templating cobrand system to provide different looks (and behaviour) for different installations. For example, if you create a cobrand called moon, then FixMyStreet will look for templates in the templates/web/moon directory and CSS in web/cobrands/moon. To make this work, set:
  - moon

If you specify only one cobrand in this way, your FixMyStreet site will simply run using that cobrand (so that would be moon in the example above). This is probably all you need!

However, it is possible for a FixMyStreet site to support more than one cobrand at the same time. Most installations don't need this, but if yours does, it's very useful: the server decides which cobrand to use by inspecting the hostname of the incoming request.

If you wish to use multiple cobrands, specify them in a list, optionally with hostname-matching regular expressions if the name of the cobrand is not enough. If the hostname of the current request does not match with any in the list, FixMyStreet will use the Default cobrand. For example:

  - moon
  - venus

Any hostname with "moon" in it will use the moon cobrand (for example,, any with "venus" will use the venus cobrand. Anything else (such as, which contains neither "moon" nor "venus") will use the Default cobrand.

Instead of using the cobrand's name as the matching string, you can specify an alternative string to match on (in fact, the string can be a regular expression):

  - moon: 'orbital'
  - venus

Here, any hostname with "orbital" in it will use the moon cobrand. Conversely, a request to won't match anything, so it would be served with the Default cobrand instead. This also allows development servers to map to different cobrands if needed, using DNS subdomains, for example.

If you're running a site with multiple cobrands, you'll never want to serve the Default cobrand on your production server, so make sure you've set ALLOWED_COBRANDS correctly.


  • Note that specifying a single allowed cobrand is a special, simple case: FixMyStreet will always use the mycobrand. This is probably all you need!

      - mycobrand
  • If there's more than one allowed cobrand, FixMyStreet uses string matching (described above) on the hostname to determine which one to use:

      - cobrand1
      - cobrand2: 'hostname_substring2'
      - cobrand3

    Make sure you've covered everything, because any requests to a hostname that don't match will be served using the Default cobrand, which isn't what you want.

This is used in "offensive report" emails to provide a link directly to the admin interface, and to make sure the admin can work through a proxy. It defaults to `/admin` in your installation.


How many items are returned in the GeoRSS feeds?


  • RSS_LIMIT: '20'
How many reports to show per page on the All Reports pages?


The default SMTP smarthost is localhost, a mail server on the same machine you are running FixMyStreet. If you wish to send email through a SMTP server elsewhere, change this and the other SMTP settings.


  • SMTP_SMARTHOST: 'localhost'
If your SMTP server supports SSL or TLS, set this variable to 'ssl' or 'tls', otherwise leave it as '' for unencrypted SMTP.
The default SMTP port is 25 for unencrypted, 465 for SSL and 587 for TLS. Leave as '' to use the default, otherwise set to your SMTP server port.
The username for authenticating with your SMTP server, if required.
The password for authenticating with your SMTP server, if required.
Should problem reports link to the council summary pages? Set to 0 to disable, or 1 to enable.


  • Disable links to the summary page:


Gaze is a world-wide service for population density lookups. You can leave this as is. It is used to provide the default radius for email/RSS alerts and to set the default zoom level on a map page (so in rural areas, you're more likely to get a slightly more zoomed out map).


  • GAZE_URL: ''
If you're using Message Manager, integrated with an SMS gateway, include the URL here. FixMyStreet does not usually use this, so you can leave it blank.

Providing a URL does not automatically enable the service — your cobrand must be explicitly coded to use it. Contact us if you need to use Message Manager with your FixMyStreet site.