Skip to main content

Introducing FastGIS: GRASS GIS, finally in your browser

· 4 min read
Massimo Di Stefano
FastGIS author

If you've ever used GRASS GIS, you know it's one of the most powerful spatial analysis platforms ever built. Decades of algorithms, impeccable accuracy, a passionate community. You also know that getting it installed, configured, and running on a new machine can be a bit of an adventure — and sharing your work with a colleague who doesn't have GRASS set up? That's a whole afternoon gone.

FastGIS started as a personal itch-scratcher for exactly that problem.

The idea

The core premise is simple: what if you could open a browser tab, point it at a GRASS environment, run r.slope.aspect, and see the result draped over a 3-D globe — without installing anything locally?

That's it. No desktop app, no remote desktop, no "works on my machine". Just a URL and an API token.

What it looks like in practice

You open the GRASS Runner, connect to a server running your GRASS database, pick a location and mapset, and you're in. From there you can:

  • Run any GRASS module through a generated form — type r.watershed, hit Load, fill in the fields, and watch the output stream back live in a terminal panel
  • See results immediately on a CesiumJS 3-D globe — raster outputs appear as WMS layers the moment a module finishes
  • Draw directly on the map — set the computational region by dragging a bounding box, trace an elevation profile across a ridge, draw a histogram bounding box around a glacier
  • Manage layers like you'd expect — drag to reorder, toggle visibility, adjust opacity, expand a legend, zoom to extent

The whole thing runs in the browser. Your GRASS data stays on the server. Your laptop just needs a web connection.

A few things we're especially happy with

The profile tool

Click the profile button, draw a line across a mountain range by clicking waypoints on the globe, double-click to finish — and a chart of the elevation profile appears below the map in about a second. The transect line stays on the globe while you work. You can change the input raster and re-run without redrawing the line.

It's powered by r.profile under the hood, but from the user's perspective it's just "draw a line, get a chart."

Session persistence

This one took some thought to get right. When you navigate away from the page and come back, everything is where you left it — the camera angle, the layers, the drawn transect, the histogram chart. No "please re-run your analysis." We call it autosave, and it's invisible by design.

You can also save named workspaces and load them on a different device or share them with a colleague. The state is stored server-side so it survives browser restarts.

The layer manager

Layers have drag-and-drop reordering, inline opacity sliders, vector style controls (colour, line width, transparency), WMS legend panels, and group support. It sounds like a small thing, but being able to organise a dozen layers without hunting through a settings menu is genuinely nice to use.

The stack, in brief

FastGIS is built on FastAPI at the back end, which proxies GRASS module execution and streams output over Server-Sent Events. Map tiles come from MapServer via WMS/WFS. The front end is plain ES modules — no build step, no framework — around a CesiumJS globe. It's deliberately lightweight.

What's next

There's a lot more on the list. The identifier tool (click the map, get r.what/v.what values for all active layers). Better session UI. More robust environment management. And eventually, letting users draw and export vector data directly from the browser.

But the core loop — connect, run a module, see the result on a map, save your work — is solid and in use.

If you want to try it, the Quick Start guide gets you running in a few minutes. If you find a bug or have an idea, open an issue. And if you know someone who spends too much time wishing GRASS had a web UI, send them the link.