tools · maps · omarchy
OmaMap: a map viewer for spatial files on Omarchy
Why I built a small desktop viewer for GeoJSON, KML, GPX, CSV and shapefiles, what it does, and how to try it.
OmaMap is a desktop app for looking at spatial data on Omarchy. You drop in GeoJSON, KML, GPX, CSV or shapefiles and see them over street, topo or satellite maps. I built it with a lot of help from Codex, and it’s free to use.
Why I built it
OmaMap started as a work idea. Working for a large publicly owned organisation comes with IT limits. They make sense from a security point of view, but they’re frustrating when you’re trying to find better ways of doing things. The idea fell under the weight of corporate IT, so I decided to make it work on Omarchy and share it instead.
I shared it on X when it launched, and the replies explain the thinking in more detail. The aim was a viewer, not an editor. I wanted to open a spatial file, see where things are, click on them and read their attributes, without starting a full GIS package. Keeping it that small made it something I could finish.
What it does
- Opens the common formats. GeoJSON, KML, KMZ, GPX, CSV with latitude and longitude columns, and shapefiles, zipped or as loose files dropped together.
- Handles British data. Easting and northing in British National Grid are converted to latitude and longitude automatically, to within about 5 m. That’s fine for viewing, not for surveying.
- Shows what’s in each feature. Click anything on the map to read its attributes in a side panel, or open the whole dataset as a table you can search and sort.
- Colours by a field. Pick a field and OmaMap colours features by its values and adds a legend. Values like Yes/No or Completed/Pending/Overdue get your theme’s green, yellow and red.
- Saves the workspace. Ctrl+S writes a
.omamapprofile with the data, styles and map view, so you can pick up where you left off. - Fits in with Omarchy. It follows your theme colours and font, and there’s an optional bar widget that opens the app and lists recent files.
Your data stays on your machine. The only network traffic is basemap tiles, and you can choose None to switch those off too. There’s no telemetry or update check.
How to try it
The code is on GitHub: thebytorsnowdog/omamap. On Arch or Omarchy, build and install it from a checkout:
sudo pacman -Syu --needed base-devel git cmake qt6-base qt6-webengine nodejs
git clone https://github.com/thebytorsnowdog/omamap.git
cd omamap/packaging/arch
makepkg -si
omamap
It needs Qt 6.8 or newer. To add the bar widget after installing the app:
omarchy plugin add https://github.com/thebytorsnowdog/omamap.git --enable
To check it works, save this as stations.csv and run omamap stations.csv:
name,latitude,longitude,status
Waverley,55.952,-3.189,In service
Haymarket,55.946,-3.218,Planned
Click a station to inspect it, or press T to open the table.
What was hard
Treating every file as hostile. A viewer opens files from anywhere, so a lot of the work went into checking input before it reaches the map. Malformed geometry, ZIP bombs and shapefile headers that don’t match their file are rejected with a reason. There are size limits on files, features and attributes for the same reason.
Keeping big datasets quick. Large point layers draw on the GPU where it’s available. The table only draws the rows on screen. Lines and polygons too small to see at the current zoom are drawn as simple blocks until you zoom in.
Shapefiles. They’re the format with the most rough edges. Blank numeric cells in some files make the whole import fail. Some extended DBF headers are rejected. If you reopen a loose shapefile from the recent list, only the .shp comes back, so a ZIP or a saved profile is the better option.
XML formats. KML and GPX use the browser’s XML parser, so a large file can still pause the window briefly while it’s read.
What’s next
The bar widget’s logic is tested, but it still needs more checking by hand on Omarchy itself. The next jobs are the known shapefile problems, starting with blank numeric cells. The full list of rough edges is in the repo, so you know what you’re getting before you install it.