TerriaJS: a library for web geospatial data explorers
A library for building rich, web-based geospatial 2D & 3D data platforms.
At a glance
- What is it?
- TerriaJS is the TypeScript library behind a family of public mapping sites, including Digital Earth Australia Map and the NSW Spatial Digital Twin. It renders a 3D globe with Cesium, falls back to 2D with Leaflet, connects to dozens of geospatial file and service types, and can be deployed as a static website with no server at all.
- Who is it for?
- Adopt TerriaJS if you are building a public geospatial data explorer and want a proven answer for catalogues of tens of thousands of layers, time animation and shareable map URLs rather than inventing them, and start from the TerriaMap starting point instead of assembling the pieces yourself.
- Can I use it commercially?
- Yes. Apache-2.0 is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository received new commits within the last day.
- What is it written in?
- Mainly TypeScript, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 23, 2026, and from our analysis. They are not legal advice.
Editorial analysis
A library that other people's public sites are built on
TerriaJS is a library for building rich, web-based geospatial 2D and 3D data platforms, and the README gives the evidence of its use straight away. It drives Digital Earth Australia Map and the NSW Spatial Digital Twin, and many others, with a further list of sites under a heading that makes the distinction explicit: sites developed by Data61, which includes National Map, the NSW Spatial Digital Twin, Digital Earth Australia Map, Digital Earth Africa Map and the GeoGLAM Rangeland and Pasture Productivity map, and then a separate list of other sites, with the note that these are sites we are aware of and that they are not endorsements or testimonials.
That last framing is worth noting, because it is the mark of a project that is careful about what it claims. The library is not a demo and it is not a marketing page, it is the engine under several national and regional government map services, which is a fairly demanding set of users to keep working.
The scale claim in the same paragraph is concrete too. It can handle catalogs of tens of thousands of layers, with dozens of geospatial file and web service types supported, and it is almost entirely JavaScript in the browser, which means it can even be deployed as a static website, making it simple and cheap to host.
That last point is the one that changes the shape of a deployment. A map that needs a server for the map itself is a service to operate. A map that is a static build is a file on a CDN.
A 3D globe, with a 2D fallback that is not an apology
The rendering stack is two libraries, and the README is clear about the order. TerriaJS uses Cesium and WebGL for a full 3D globe in the browser with no plugins, and it gracefully falls back to 2D with Leaflet on systems that cannot run Cesium.
The fallback is what makes the platform usable at national scale. A government spatial service has to work on a locked-down machine in a council office with an old graphics stack, and a design where the 3D view is an enhancement rather than a requirement survives that. The same library also supports 3D objects in CZML format, so a dataset that is authored in the Cesium ecosystem can carry geometry that the 2D mode simply does not draw.
The technical section adds the constraints that matter for a browser platform. NodeJS v22 and later are supported. The code is built in TypeScript and ES2020+ JavaScript, compiled with Babel to ES5, and it supports modern browsers, meaning recent versions of Microsoft Edge, Mozilla Firefox and Google Chrome.
Compiling modern source down to ES5 is a deliberate choice for a library that ships to arbitrary pages, and it has a cost in bundle size and in the loss of some newer language features. It is the right call for a platform meant to be embedded in other people's sites, and it is a decision an adopter inherits.
The connector list is the real product
The features section is a list of data sources, and it is long enough to be the reason a team picks this library over assembling one.
Natively supported file types are GeoJSON, KML, CSV with point and region mapping, GPX, GeoRSS, CZML and zipped shapefiles. The web service types are WMS, WFS, WMTS, Esri MapServer, Esri FeatureServer, Bing Maps, Carto Maps, Cesium Ion Imagery, OpenStreetMap-style raster tiles, Mapbox, SDMX, 3D Tiles, GTFS and Sensor Observation Service items. And on top of that, the library can query WMS, WFS, Esri MapServer, CSW, CKAN, Socrata, OpenDataSoft and SDMX services for groups of items rather than one dataset at a time.
Two features stand out as being about workflow rather than formats. Time dimensions are supported for CSV, CZML and WMS, and layers can be animated automatically or the time control slid forward and backward. And files can be dragged and dropped from the desktop into the browser for instant visualisation, with no file upload to the server required, which is both a nice demo effect and a real data-handling decision about where a user's data goes.
The region mapping support is worth a note, because it is a distinctly Australian problem baked into a general library. All the Australian Statistical Geographic Standard region types are supported for CSV region mapping, LGA, SA2, commonwealth electoral district and the rest, along with several others such as Primary Health Networks, Statistical Local Areas and ISO three-letter country codes, with a table of active mappings in the documentation.
Catalogues, mashups and a URL that carries the map
The first feature in the list is a nested catalog of layers which can be independently enabled to create mashups of many layers, and the second half of the catalogue story is a small feature with a large consequence: users can generate a reusable URL link of their current map view, to quickly share mashups of web-hosted data.
A shareable URL is the difference between a map viewer and a data platform. With a URL, the state of the map, the layers, the positions and the time, can be handed to a colleague or put in a document, and the recipient sees the same thing rather than a description of it. For a government data service, where a planner needs to send a colleague a specific view of a specific layer at a specific moment, that is a core requirement rather than a nicety.
The interface is also internationalised, with translations available for French, Italian and Japanese and partial translations contributed for other languages through Weblate.
The pairing of the catalogue with the connector list is the design. A connector that can query a service for groups of items, inside a catalogue that can nest and be shared, is what turns a viewer into a platform, and it is the reason the library sits under national-scale deployments rather than behind a single-purpose viewer.
The family: Terria, Cesium, TerriaMap, TerriaJS-Server
The components section is the clearest map of the ecosystem, and it is worth reading in full because the names are easy to confuse.
Terria is the overall name for the spatial data platform and for the team that built TerriaJS. TerriaJS is the TypeScript and JavaScript library itself, consisting of the 2D and 3D map, the catalog management and many spatial data connectors. Cesium is the 3D WebGL rendering library used by TerriaJS, which provides many low-level functions for loading and displaying imagery and spatial formats such as GeoJSON and KML.
TerriaMap is a complete website starting point using TerriaJS, and the Getting Started section calls it the easiest way to build your own Terria-based map, because it gives you the HTML structure, the server and the build processes you need to get a site up and running immediately. TerriaJS-Server is a NodeJS-based server that provides proxying and support services for TerriaJS, and its role is specific: it proxies web services that do not support CORS or that require authentication. An alternative proxy service URL can be specified instead of using the TerriaJS-Server proxy service, which matters when a deployment wants to keep the proxy inside its own infrastructure.
NationalMap is the flagship Terria deployment and the origin of the TerriaJS library, and TerriaMapStatic is a pre-built version of TerriaMap that can be deployed as a static HTML website, such as on GitHub Pages.
The build tooling is a monorepo story. The root package is the terria-monorepo, a private package for terriajs, terriajs-server and TerriaMap, with Turbo running the build, dev, test and lint tasks, pnpm 12.3.4 as the package manager and Node 22 or later required. The README in the root is generated from the package, with a sync-readme script that copies packages/terriajs/README.md over it, and the monorepo layout is explained in MONOREPO.md.
Where TerriaJS is the wrong choice
The first wrong-tool case is a simple embedded map. If you need a map with a handful of layers on a marketing page, the catalogue model, the mashup machinery and the connector set are a great deal of machinery for the job, and a lighter mapping library will take less effort to integrate and less bandwidth to serve.
The second is a project that needs a hosted service rather than a library. TerriaJS is a set of building blocks, and the README does not describe a hosted product, a plan or a service tier. The deployments listed are the ones the team and the community built themselves, which is a good sign for the library and a bad sign for anyone hoping for a managed platform.
The third is a desktop or offline application. The library is almost entirely JavaScript in the browser, with a NodeJS server for proxying, and it assumes a network connection to reach the services it connects to. A field deployment with intermittent connectivity is a different problem.
There is also the size question. A 3D globe with Cesium, a catalogue of tens of thousands of layers and a wide set of connectors is a large front end, and the choice to compile down to ES5 for browser compatibility costs bytes. A team optimising hard for first load on a slow connection should measure before committing.
And there is the organisational point that the deployments list makes. The sites built on it are government spatial services with long lives, which means the real cost of TerriaJS is not the library but the commitment to maintain a deployment around it.
Editorial conclusion
Adopt TerriaJS if you are building a public geospatial data explorer and want a proven answer for catalogues of tens of thousands of layers, time animation and shareable map URLs rather than inventing them, and start from the TerriaMap starting point instead of assembling the pieces yourself. Do not adopt it for a simple embedded map, since the connector and catalogue machinery is far more than you need, and do not expect a hosted service, because there is none, the platform is the library. Before you commit, read the proxying section, since services without CORS support need TerriaJS-Server, and check the deployment options, because a static TerriaMapStatic deployment removes the server but also removes the proxy.
Frequently asked questions
What is TerriaJS used for?
It is a library for building rich, web-based geospatial data explorers, used to drive services such as Digital Earth Australia Map and the NSW Spatial Digital Twin. It renders a 3D globe with Cesium and WebGL with no plugins, falls back to 2D with Leaflet, handles catalogs of tens of thousands of layers, and can be deployed as a static website.
Which geospatial formats and services does TerriaJS support?
Natively GeoJSON, KML, CSV with point and region mapping, GPX, GeoRSS, CZML and zipped shapefiles, and the WMS, WFS, WMTS, Esri MapServer, Esri FeatureServer, Bing Maps, Carto Maps, Cesium Ion Imagery, OpenStreetMap-style raster tiles, Mapbox, SDMX, 3D Tiles, GTFS and Sensor Observation Service types. It can also query WMS, WFS, Esri MapServer, CSW, CKAN, Socrata, OpenDataSoft and SDMX services for groups of items.
Do I need a server to run a TerriaJS map?
Not necessarily. The library is almost entirely JavaScript in the browser, so it can be deployed as a static website, and TerriaMapStatic is a pre-built version of TerriaMap that runs as static HTML, such as on GitHub Pages. A server is needed for proxying web services that do not support CORS or that require authentication, which is what TerriaJS-Server provides, and an alternative proxy service URL can be specified.
How do I start a TerriaJS site?
The README says the easiest way to build your own Terria-based map is to use the TerriaMap starting point, which gives you the HTML structure, the server and the build processes you need to get a site running. The documentation has a Getting Started guide, and the monorepo is built with Turbo, pnpm 12.3.4 and Node 22 or later.
What licence is TerriaJS released under?
Apache-2.0, with LICENSE.md at the repository root and the monorepo package metadata recording the same. The last push was on 2026-10-16, there are no GitHub releases, and the interface is translated into French, Italian and Japanese with partial translations for other languages through Weblate.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/terriajs-terriajs)Was this useful?