NodeJS server for TerriaJS, consisting of a CORS proxy, proj4 CRS lookup service, ogr2ogr conversion service, and express static server.
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.


Greenkeeper badge

Build Status

This is a basic NodeJS Express server that serves up a (not included) static TerriaJS-based site (such as National Map) with a few additional useful services:

  • /api/v1/proxy: a proxy service which applies CORS headers for data providers that lack them. Add URLs to config.json to enable them.
  • /api/v1/proj4def: a proj4 coordinate reference system lookup service.
  • /api/v1/convert: an ogr2ogr server-side conversion service.
  • /api/v1/proxyabledomains: return a JSON of domains the server is willing to proxy for
  • /api/v1/ping: returns 200 OK.
  • /api/v1/share/X-Y (GET): uses prefix X to resolve key Y against some configured JSON storage provider (Gist and Google URL Shortener implemented)
  • /api/v1/share (POST): stores a piece of JSON with a configured storage provider (Gist implemented)
  • /api/v1/serverconfig: retrieve (safe) information about how the server is configured.
  • All other requests are served from the wwwroot directory you provide on the command line, which defaults to ./wwwroot
  • If files [wwwroot]/404.html and/or [wwwroot]/500.html exist, they will be served for those HTTP error codes.
  • Supports very simple authentication via a single username/password included in requests using HTTP basic authentication.
  • Proxied services that require HTTP authentication can be proxied by adding credentials to a proxyauth.json file.
  • It can be run in HTTPS mode, although there are better ways of doing that in production.

Generally, you don't want to manually install TerriaJS-Server. It comes installed with TerriaMap (see below).

Stand-alone installation (without serving TerriaMap)


  1. git clone
  2. cd terriajs-server
  3. npm install


Copy serverconfig.json.example to serverconfig.json and configure as needed. See comments inside that file. (Comments are allowed; see

If you want to proxy authenticated layers, do the same for proxyauth.json.example.


  1. npm start -- [options] [path/to/wwwroot]
TerriaJS Server 2.6.0
node_modules/terriajs-server/lib/app.js [options] [path/to/wwwroot]

  --port         Port to listen on.                [default: 3001]
  --public       Run a public server that listens on all interfaces. [boolean] [default: true]
  --config-file  File containing settings such as allowed domains to proxy. See serverconfig.json.example
  --proxy-auth   File containing auth information for proxied domains. See proxyauth.json.example
  --verbose      Produce more output                  [boolean] [default: false]
  --help, -h     Show this help.                                       [boolean]```

For example, to run with port 3009:

npm start -- --port 3009

To run the server in the foreground, you can do this:

`node . [arguments as above]`

#### Tests

1. Run `npm test`

### Installation with TerriaMap

  Just [install TerriaMap]( TerriaJS-Server is installed to `node_modules/terriajs-server`, and you can run it manually as `node_modules/terriajs-server ./wwwroot`.