Skip to content

Supported Data Formats

This page lists the data formats RustGIS reads and writes, how to add each one, and the main limits. Data covers adding data, large files and rasters in more detail; Maps and Basemaps covers web tile layers.

Most formats open in the desktop app and in the web app alike. Those that need C libraries (GDAL, DuckDB) or files on disk are desktop-only, as the tables say. The web app reads GeoPackages without SQLite, with a small SQLite file reader written in Rust.

Vector and tabular files

Format Extensions or source How to add it Notes
GeoJSON .geojson, .json Home › Add Data, or drop the file Features with typed attributes; a GeometryCollection keeps its first member. On the desktop, a FeatureCollection larger than 32 MB is read in place, a view at a time, however large; otherwise files up to 256 MB load whole.
Delimited text .csv, .tsv, .txt Add Data, or Add Data › Delimited Text… to choose the columns from the file's header Comma, semicolon, tab or pipe separated (found from the header, or "delimiter"); info.fileColumns lists the columns and the ones found. Points from x/y columns (named like longitude/latitude or easting/northing, or chosen with "x" and "y"), or any geometry from a WKT/EWKT column (named like wkt or geometry, or "wkt"). Coordinates in another system are converted from "crs" (EPSG:2263, or WKT) or an EWKT SRID=; without either, coordinates outside longitude/latitude are pointed out. A file without coordinates opens as a standalone table.
Shapefile .shp with .dbf (and .shx), or zipped (.zip) Add Data or drop the file; in the web app, pick or drop the .shp and .dbf together, with the .shx and .prj if there are (they open as one layer), or the zip A zip may hold several Shapefiles, in folders, and other vector files (GeoJSON, CSV, GeoParquet, FlatGeobuf); each becomes a layer, at most 32 for the whole archive (Shapefiles first, so other files are left out when Shapefiles fill it). .txt files and macOS __MACOSX entries are passed over, and a member that can't be read is skipped and named in a notice. Converted to longitude/latitude from the coordinate system in its .prj (EPSG, Esri or OGC WKT, or WKT2 as PROJ and QGIS write it; Web Mercator, UTM, State Plane and other common projections); without a .prj it must be in longitude/latitude. On the desktop, one with more than 100,000 shapes (counted from its .shx) is read in place, a view at a time.
KML / KMZ .kml, .kmz Add Data, drop the file, or upload it in the web app A layer for each kind of geometry (points, lines, polygons), with each placemark's name, description, folder path and extended data. Styles are kept: the layer is drawn by unique values of its style field, with each KML style's line and fill colours, widths and icon colours (up to 64 styles). Multi-geometries and gx:Tracks are read. Ground overlays (pictures on a LatLonBox, turned by its rotation) are raster layers kept in the project: the picture inside a KMZ, or a file beside a KML (not a web address, nor outside its folder); a gx:LatLonQuad isn't drawn.
GPX .gpx Add Data, drop the file, or upload it in the web app Waypoints, routes, tracks (one line per track, its segments as parts) and track points (with elevation and time) as separate layers.
Spreadsheets .xlsx, .xlsm, .xlsb, .xls, .ods Add Data (or Delimited Text… to choose the columns), drop the file, or upload it in the web app One sheet at a time, read like delimited text: the first non-empty row names the columns, and x/y or WKT columns (found, or given with "x", "y", "wkt" and "crs") make the geometry; a sheet without them is a table. The first sheet is added and the others named in a notice; "layer" picks one, and info.fileLayers lists them. Dates read as ISO 8601.
GeoRSS .rss, .atom, .georss, or .xml Add Data, drop the file, upload, or From URL… RSS 2.0, RSS 1.0 and Atom feeds with GeoRSS Simple, GeoRSS GML or W3C Basic Geo places: points, lines and polygons layers with each item's title, link, description, date, id and category.
LandXML .landxml, or .xml Add Data, drop the file, or upload Coordinate geometry points, parcels (polygons), alignments (lines; curves as chords) and TIN surfaces (a triangle per face, with its mean elevation), converted from the file's epsgCode or "crs".
Encoded polylines text layer.addEncodedPolyline with "polyline" (one or a list) Google's encoding, precision 5, or 6 ("precision") as OSRM and Valhalla can give: a line layer.
GML .gml Add Data, drop the file, or upload Simple features in GML 2 and 3 (WFS answers, OGR's GML): a layer per feature type, its simple elements as fields. Converted from the srsName (EPSG codes, URNs and URLs; the URN and URL forms of geographic systems are latitude first).
MapInfo Interchange .mif with its .mid (or both zipped) Add Data, drop the file, or upload the zip Points, lines, polylines, regions (holes found by nesting), rectangles and ellipses; text and arcs are rows without geometry. Converted from the CoordSys: longitude/latitude, Transverse Mercator, Lambert Conformal Conic, Albers or Mercator.
OpenStreetMap PBF .osm.pbf Add Data, drop the file, or upload Points (tagged nodes), lines and multipolygons (closed ways that are areas, and multipolygon and boundary relations), with common tags as fields and the rest in other_tags, as GDAL gives them. Up to 40 million nodes (4 million in the web app); on the desktop, extracts over 256 MB open through GDAL when it is installed.
TopoJSON .topojson, or .json Add Data, drop the file, or upload A layer per object, its geometries rebuilt from the shared arcs (quantized or not).
AutoCAD DXF .dxf (ASCII) Add Data, drop the file, or upload Points, lines and polygons layers from the drawing's entities: POINT, LINE, LWPOLYLINE and POLYLINE (bulges drawn as arcs; closed ones stay lines; polyface meshes become polygons), CIRCLE, ARC, ELLIPSE, SPLINE, HELIX, LEADER, MLINE (its centre line), TEXT, MTEXT, ATTRIB and constant ATTDEF (points with their text, at the alignment point of justified text), HATCH boundaries (holes found by nesting), SOLID, TRACE and 3DFACE (polygons). Blocks (named in any case) are drawn where INSERTs place them (scaled, rotated, in arrays, nested up to 8 deep), and so are DIMENSIONs' blocks (a linear dimension without one draws its lines and measured text). Entities in an object's own coordinate system are turned into the drawing's. Fields: layer, entity, color (ACI, BYLAYER and BYBLOCK resolved), linetype, text, height, rotation, block, elevation and paperspace. The drawing's layouts (paper space: title blocks, viewport frames) are left out, with a notice, unless "paperSpace": true. A drawing never says its coordinate system: give "crs" (such as EPSG:2263), or its coordinates are kept as they are, with a notice. "layer" picks one of the drawing's own layers, and info.fileLayers lists them. Up to 2 million features (500,000 in the web app). Not read: binary DXF, MULTILEADER, WIPEOUT, IMAGE and ACIS solids (3DSOLID, REGION), named in a notice.
Geotagged photos .jpg, .jpeg Add Data (several at once in the web app), drop them, upload, or layer.addPhotos with "paths" or a "folder" JPEGs with a GPS position in their EXIF become points in the Photos layer (photos added one at a time join it): each with its name, file, time (when it was taken), altitude, direction (where the camera faced), camera and a thumbnail of at most 160 pixels, kept with the feature so the project needs no other file. Identify shows the thumbnail. Photos without a position are named in a notice and left out; a layer holds up to 2,000 photos. A JPEG is always read as a photo unless layer.addData or layer.addDataBytes is given "as": "scan" (a phone photo of a paper map, say: see Scans with no coordinates).
LiDAR point clouds .las, .laz (COPC too) Add Data, drop the file, upload, or From URL… LAS 1.0–1.4 (point formats 0–10) and LAZ, on the desktop and in the web app: a point layer with each point's z, intensity, classification, return and colour (red, green, blue), coloured by ASPRS class (or by elevation when the cloud has one class). A cloud past 2 million points (500,000 in the web app) shows an evenly spread sample of them. Converted from the coordinate system its WKT or GeoTIFF-key record names (the horizontal part of a compound one); a file that names none keeps its coordinates, with a notice. Read in place, so a project keeps the file's path, not its points.
GeoPackage .gpkg Add Data, or upload in the web app Every feature table becomes a layer, up to 32 at once (the result counts the rest in skippedCount and names up to 100 of them in skipped); "layer" picks one, and info.fileLayers lists them all. Read in place by its R-tree; any EPSG system is reprojected. The web app reads the file with its own SQLite reader (tables scanned, the envelope in each geometry header tested first; no R-tree); UTF-16 databases aren't read there.
GeoParquet .parquet, .geoparquet Add Data, or upload in the web app WKB geometry, with the CRS from the file's geo metadata. Row groups are pruned by the bbox covering. Snappy, gzip, LZ4 and zstd compression are read, in the browser too; Brotli isn't.
FlatGeobuf .fgb Add Data, or upload Read in place by its packed R-tree.
Esri File Geodatabase .gdb folder (desktop) A file dialog can't pick a folder: in Add Data pick any .gdbtable file inside it; or double-click the .gdb in the Browser, or drop the folder on the window Read without GDAL: every feature class becomes a layer and every table a standalone table, with their fields (dates as text) and coordinate system (by its code, EPSG or Esri; else its WKT). "layer" picks one, and info.fileLayers lists them. 3D multipatches (such as swissBUILDINGS3D's buildings) are drawn as their footprints, the union of their faces seen from above, with their lowest and highest Z in z_min and z_max and the difference in height, which an extrusion (Style › Extrusion) can stand them up by; one with no face seen from above (only walls) is drawn as the outline of its points. Curves are drawn as straight segments between their ends. Compressed tables, raster fields and some newer row indexes aren't read: with GDAL installed, such a geodatabase opens through GDAL instead (see below). Loaded whole, up to 2 GB a table.
Standalone tables CSV, or any layer without geometry Add Data Listed under the map in Layers; join or relate them to layers.

Files with more than 100,000 features (GeoPackage, GeoParquet, FlatGeobuf, and Shapefile on the desktop) are read in place, a view at a time, rather than loaded whole: see Large files. They draw, label, identify and run through tools like any layer; Load All Features loads one to edit it.

Formats read through GDAL

With GDAL installed (its ogr2ogr and ogrinfo on the PATH, GDAL 3.7 or later), the desktop app also reads the vector formats below. Each layer is converted once into a cached, indexed FlatGeobuf, so large ones stream too: see Formats through GDAL.

Format Extensions or source Notes
AutoCAD DWG .dwg Through GDAL's CAD driver, when it is built in. Give "crs" (such as EPSG:2263) when the drawing doesn't say its coordinate system.
MapInfo tables .tab Keep the companion files together.
OpenStreetMap XML .osm
GeoJSON Lines, GMT .geojsonl, .geojsons, .gmt

Files on the web

Home › Add Data › From URL… (layer.addUrl with "url") downloads a file by its https:// (or s3://, see S3 buckets) address and adds it like a file from this computer: GeoJSON, CSV, GeoParquet, FlatGeobuf, GeoPackage, zipped Shapefiles, KML/KMZ, GPX or GeoTIFF/COG, up to 512 MB on the desktop and 256 MB in the web app (where the server must allow requests from web pages, CORS). On the desktop, with GDAL installed, a JPEG 2000 file (.jp2, .j2k: Sentinel-2's imagery on S3) is downloaded too, converted to a GeoTIFF that the project keeps, and added. Desktop byte uploads (layer.addDataBytes) of .jp2 and .j2k use the same conversion. The web app rejects both JPEG 2000 uploads and downloads with an explicit GDAL limitation; convert them to GeoTIFF first. The format comes from the address, or from the contents when the address has no extension (an API endpoint, say), JPEG 2000 included: its signature is recognised in the contents, so the desktop converts it and the web app gives the same GDAL limitation. The app downloads in the background and adds the layer when the file arrives (to the project it was started in: opening another meanwhile drops it). A .pmtiles address is added as a tile layer and read a tile at a time instead.

For JPEG 2000 uploads and downloads on the desktop, the converted GeoTIFF must fit within 512 MiB. The private conversion workspace (source file, output and GDAL scratch files together) is monitored every 50 ms against a budget of the input file's byte length plus three times that output limit (1.5 GiB). Conversion stops when the workspace exceeds the budget, but files can grow between checks: this is not a strict operating-system disk quota. Ordinary conversions of files opened from disk do not use this workspace budget.

Conversion runs synchronously while the layer is added and can temporarily make the app unresponsive. The original JPEG 2000 byte buffer is released once it has been staged on disk, before GDAL runs or the GeoTIFF is read back. The converted GeoTIFF and decoded raster still occupy memory together; the 512 MiB file limit is not a limit on total process memory.

A cloud-optimised GeoTIFF (a tiled .tif with overviews, as most published imagery is) is read in place rather than downloaded: its header first, then, by HTTP range requests, only the tiles of the overview each part of the view needs, so a Sentinel-2 scene of 300 MB draws in a couple of seconds and full detail comes as you zoom in. It is a tile layer (map.addTiles kind cog, saved in the project by its address), drawn under the map's own layers like other tile layers: RGB(A) 8-bit images as they are, other images in grey stretched between the 2nd and 98th percentiles of their coarsest overview. A GeoTIFF in strips, with bands stored apart, or without tiles is downloaded whole as a raster layer, as is any GeoTIFF added with "whole": true (for the raster tools and symbology). The web app needs the server to allow range requests from web pages (CORS with the Range header), as public buckets such as Sentinel-2's do.

A GeoParquet or FlatGeobuf file by its address is read in place too, a view at a time, however large: the layer is streamed like a large local file, and the view's features are fetched in the background by HTTP range requests and drawn as they land. A FlatGeobuf's header and packed R-tree index are read first (a level of the tree per round of requests), then only the features in the view. A GeoParquet's footer is read first, then the row groups the view meets, by their bounding box covering column (bbox) and its statistics: the covering of groups on the view's edge, then the geometry and attribute columns of the rows taken. A view holding more than a read takes (60,000 features on the desktop, 30,000 in the web app) shows an evenly spread sample of it, in patches; zoom in for all of them. So a 12 GB FlatGeobuf of 11 million areas opens after 65 KB and draws a city in about a second from 9 MB, and a 525 MB Overture buildings file opens after 1 MB. The project keeps the address and reads it the same way when it opens. A FlatGeobuf without an index, a GeoParquet without a covering column, or a server that doesn't answer range requests means the file is downloaded whole instead, as is any file added with "whole": true; Load All Features and the geoprocessing tools fetch the whole file on the desktop, while in the web app they need the file downloaded first.

layer.addUrl waits for the download, up to a minute, which suits the command line, MCP and the desktop app's assistant; a larger file comes through the From URL… dialog, which downloads in the background. In the web app, where nothing may wait, it adds .pmtiles and GeoTIFF addresses only (a GeoTIFF read in place); other files, GeoParquet and FlatGeobuf read in place among them, come through the From URL… dialog (ui.addUrl) or a ?data= link. GeoJSON, CSV, KML and GPX files are read up to 256 MB; larger downloads (GeoParquet, FlatGeobuf, GeoPackage, GeoTIFF) up to the limits above.

Map and feature services

Home › Add Data › From Service… connects to a service by its address, lists what it offers from its capabilities. For OGC API feature collections, enter a group name (initially My OGC Layer) and choose Import All. The group expands into ordinary point, line and polygon layers with the same legends, styling and attribute tables as file imports. Other offerings have individual Add buttons (service.layers and service.add from scripts, the command line and MCP). An OGC API landing page works directly: RustGIS follows its advertised JSON collections link, so you don't need to append /collections. If the landing page also offers map tiles, they remain listed alongside the collections. A failed collections request leaves any available map layers usable and shows the error.

When a service can't be reached or refuses the request, the dialog says what happened in plain words and what to try next: a sign-in or token it needs (401), access refused (403), nothing at that address (404), too many requests (429), a problem on the server (5xx), or a server that couldn't be reached or took too long. When a firewall in front of the server (Cloudflare, Akamai, Imperva, Sucuri or AWS WAF) blocked or challenged RustGIS itself, told by its own block page or a header it sends only then, it says so: only the service's administrator can let RustGIS through. A firewall that only passed on the service's own refusal (a private service wanting a token) isn't blamed for it. Details, folded below, lists what the server said for an expert or the administrator: the address (without keys or tokens), the status, the server, the firewall and the request's id, the User-Agent RustGIS sent, and the title or first words of the server's answer (as text). Copy details copies them to send. In the web app the browser hides most of a refused answer, so it tells the status only.

Right-click the group and choose Refresh to rediscover its collections and update them all, including newly added or removed collections. Right-click a child and choose Refresh to update only that collection. Existing children keep their names, styles and visibility (a changed geometry type gets a suitable default symbol); selections are cleared because row positions can change. Refresh replaces local feature edits with the service's data. Failed imports or refreshes leave the map intact; a successful operation is one undo step. Groups and their source connections are saved in the project. Group downloads are limited to 2000 collections and 64 MB in total and use the existing per-collection feature limits.

Scripts use service.import {"url":"…","name":"My OGC Layer"} and service.refresh {"group":id} or service.refresh {"layer":id}. The browser uses service.groupPlan to discover the requests, then supplies text, documents, and responses: [{"url":"…","text":"GeoJSON"}] to import or refresh without blocking network calls.

Service What it lists How a layer is added
WMS 1.1.1 / 1.3.0 Named layers offered in Web Mercator A tile layer of GetMap images (PNG when the service offers it, else JPEG)
WMTS Layers whose tile matrix set is Web Mercator's pyramid A tile layer from the tile template (or KVP GetTile)
WFS 1.1 / 2.0 Feature types Their features downloaded as GeoJSON, in the output format the service names (up to 50,000)
OGC API Features Collections Their items downloaded as GeoJSON, following the service's next pages up to 100,000 features or a minute of downloading (the web app reads the first page)
OGC API Tiles Collections' map and vector tiles; a landing page's dataset map tiles A tile layer in WebMercatorQuad, from the tile template the tileset advertises (its item link; …/tiles/WebMercatorQuad/{z}/{y}/{x}, the usual path, when that can't be read), keeping the tiles link's query (a token), map tiles in the server's image format, vector tiles drawn layer by layer in colours of their own
WCS 1.0 / 2.0 (a 1.1 service is asked in 1.0) Coverages, with their bounds A raster: GetCoverage of the map's view within the coverage's bounds (or its whole extent: "bbox": "full"), as a GeoTIFF in EPSG:4326, at most 2048 pixels on a side
ArcGIS REST FeatureServer and MapServer layers; a MapServer's map; an ImageServer; a VectorTileServer Layers queried as GeoJSON (up to the server's record limit); a map as its tile cache when it is Web Mercator's pyramid, else exported images; an ImageServer as exported images; a VectorTileServer as its MapLibre style

The type is guessed from the address (?SERVICE=, /wmts, /wfs, /wcs, /collections, /rest/services…) or chosen (select OGC API Features and Tiles when a landing page's address doesn't identify its type). A WebMercatorQuad tileset is found by its tile matrix set, whatever the server calls it. A service that asks for a token says so. In the web app the server must allow requests from web pages (CORS).

A coverage is read once, for the view when it was added (its DescribeCoverage first, for its axes, format and bounds; service.coverage gives the GetCoverage address alone). Moving the map doesn't ask for it again: add it again for another area. The server reprojects it to EPSG:4326 (WCS 2.0 through its CRS extension); one that can't answers with an error, which is shown.

For callers that fetch documents themselves (including the web app), service.layers accepts text for the initial document and documents: [{"url": "…", "text": "…"}] for subsequent responses. It returns next while another collections document is needed; supplied documents never cause a blocking capabilities fetch. Each listed layer includes source_url; pass it and the same documents to service.add to distinguish layers with the same name. Discovery follows at most four documents and rejects loops and disallowed addresses. Collection lists aren't paged. On the desktop, feature downloads follow their next pages (see the table above).

Catalogues

The same dialog's Catalogue search (CSW) type searches a CSW 2.0.2 catalogue (GeoNetwork, pycsw, geocat.ch…) by words anywhere in its records and, if you like, the map's area (catalog.search). Its records are listed 20 at a time (More asks for the next), with their titles, abstracts (on hover) and bounds (Zoom), and a button per link RustGIS can follow: a WMS, WMTS, WFS, WCS, OGC API or ArcGIS service connects in the dialog, a download is added as From URL… does. Links pointing where a document on the web may not send RustGIS (the local network) are left out.

PostgreSQL and PostGIS

The desktop app reads the geometry and geography columns of a PostGIS database live, talking to the server itself: see PostgreSQL and PostGIS.

Source How to add it Notes
PostGIS table or view Add Data › Database… (layer.addDatabase) with a libpq connection string or postgresql:// address Large tables read a view at a time by their spatial index, others loaded whole. Converted to longitude/latitude by the server; "crs" for geometry that doesn't say. A column of mixed types becomes a layer per type. The password is kept for the session only.

MySQL and MariaDB

The desktop app reads the spatial columns of a MySQL (8 or later) or MariaDB (10.2 or later) database live, talking to the server itself: see MySQL and MariaDB.

Source How to add it Notes
MySQL or MariaDB table or view Add Data › Database… (layer.addDatabase) with a mysql://user@host:3306/database or mariadb://… address Large tables read a view at a time by their spatial index, others loaded whole. Converted to longitude/latitude by RustGIS from the column's SRID; "crs" for an SRID of 0. A column of mixed types becomes a layer per type. ssl-mode sets the encryption. The password is kept for the session only.

SQL Server and Azure SQL

The desktop app reads SQL Server 2012 or later and Azure SQL spatial tables live, without an external client: see SQL Server and Azure SQL.

Source How to add it Notes
SQL Server table or view Add Data › Database… (layer.addDatabase) with an mssql://user@host:1433/database address Read only; large tables read a view at a time. Geometry and geography, including curves, are converted to longitude/latitude. "crs" supplies SRID 0; mixed types become separate layers. TLS and certificate checking are on by default. SQL Server logins on every desktop platform; Windows logins on Windows only. Passwords are kept for the session, never in projects.

SQL queries and DuckDB databases

With DuckDB installed (the duckdb program on the PATH, DuckDB 1.5 or later), the desktop app adds the result of an SQL query as a layer, and opens DuckDB database files. Results are written as cached GeoParquet, so large ones stream too: see SQL queries and DuckDB databases.

Source How to add it Notes
SQL query layer.addSql with "sql" One DuckDB SELECT with DuckDB Spatial: Parquet, CSV, GeoParquet and ST_Read files, web addresses (https://, s3://). Give "crs" for a geometry that doesn't say its coordinate system.
DuckDB database .duckdb, .ddb: Add Data Every table with a geometry column becomes a layer ("layer" picks one). Converted once, until the file changes.

Rasters

Format Extensions or source How to add it Notes
GeoTIFF / Cloud-optimised GeoTIFF .tif, .tiff Add Data, or upload Regular or cloud-optimised, striped or tiled; grey, RGB(A), palette (with its colour table) or multiband; Deflate, LZW, PackBits, JPEG or Zstandard compression. Any EPSG system, or the file's own projection from its GeoKeys (Albers, LCC, transverse Mercator…), reprojected as it draws. A rotated or skewed image (a transformation matrix with rotation terms) is resampled to a north-up grid as it's read. A large file opens from its overview, or one made as it is read when it has none.
JPEG 2000 .jp2, .j2k Add Data, byte upload (layer.addDataBytes), or From URL… (desktop, with GDAL installed) Converted through GDAL. Uploads and downloads keep the converted GeoTIFF in the project, so reopening it needs neither GDAL nor the original file or address; their output and workspace limits are described under Files on the web. The web app rejects JPEG 2000 uploads and downloads with an explicit GDAL limitation: use GeoTIFF instead.
Scans with no coordinates a .tif with no GeoTIFF tags, .png; any .tif, .png or .jpg/.jpeg with "as": "scan" Add Data, or upload (layer.addData, layer.addDataBytes) Keeps its pixel size and bands (grey, RGB(A); 8 or 16 bits). An untagged TIFF or a PNG opens as a scan by default; a JPEG only with "as": "scan" (otherwise it is a photo), which also drops the coordinates of a GeoTIFF. It has no coordinates, so it is drawn over the current view, the command's result says so (georeferenced: false), and the layer is marked not georeferenced until Georeference places it. Until then it can't be exported, and tools that would give a result a place on the ground (raster functions, pixel edits, clip, resample, mosaic) refuse it. A PNG or JPEG is decoded whole: up to four times the sample limit in decoded bytes is read at every second pixel, and anything larger is refused, so save it as a TIFF (read at a reduced size). A TIFF is reduced as a GeoTIFF is.
ASCII grid .asc (with an optional .prj) Add Data, or upload
Zarr a store's folder (.zarr) or web address, format 2 (consolidated) or 3 Add Data › Zarr… (layer.addZarr), Add Data on the folder, or a ?zarr= link A variable's latitude/longitude (or y/x) map at the steps picked of its other dimensions (time, level), read chunk by chunk in pure Rust (blosc, zlib, gzip, zstd, LZ4; sharded arrays too), on the desktop and the web. See Zarr stores.
Rasters GDAL reads .img, .hgt, .dem, .dt0–.dt2, .nc, .hdf, .h5, .bil, .grd, .sdat, .kea, .ers, .rst, .ntf, .ecw, .sid… Add Data (desktop, with GDAL installed: gdal_translate, gdalinfo and gdalwarp) Converted once to a cloud-optimised GeoTIFF in the cache, then read as one. A NetCDF or HDF file's variables are its subdatasets: the first is added, the others are named in a notice, and "layer" picks one. A file that doesn't say its coordinate system is read as WGS 84 when its coordinates look like longitude/latitude (0–360° longitudes are moved to -180–180°); otherwise give "crs".

Tiles and web services

Format Extensions or source How to add it Notes
Raster tiles XYZ/TMS template ({z}/{x}/{y}, {-y}, {s}, {q}), WMS ({bbox-epsg-3857}) Home › Add › Basemap › Add Tile Layer PNG, JPEG and WebP.
Vector tiles Mapbox Vector Tiles (.pbf, .mvt) template, or TileJSON Add Tile Layer Drawn in a built-in style that knows the OpenMapTiles, Protomaps and Shortbread schemas.
MapLibre styles style.json Add Tile Layer The style's vector and raster sources, sprite, expressions and zoom functions.
PMTiles .pmtiles: a web address, or a file on the desktop Add Tile Layer (or its Tile Archive File… button), Add Data, or drop the file Raster or vector, as the archive says; uncompressed, gzip, Brotli or Zstandard. Read a tile at a time by byte ranges (the server must allow them, and CORS in the web app). The map moves to the archive's bounds when it is added (not for a world archive). A vector archive is drawn in the built-in style when it is a basemap, otherwise with each of its layers in its own colour.
MBTiles .mbtiles: a file Add Data, drop the file, Add Tile Layer's Tile Archive File… button, or upload in the web app Raster (PNG, JPEG, WebP) or vector tiles, as its metadata says, drawn as PMTiles archives are. The desktop reads the file in place, a tile at a time. The web app reads an upload into memory (the plain tiles table and the deduplicated layouts of mbutil, TileMill and Planetiler) and keeps it for the session: a project saved there asks for the file again.

Writing

Format How to write it Notes
GeoJSON, CSV Data › Export (share.exportLayer) The Export Features dialog picks the format; the file is saved in it whatever extension is typed. In the web app it downloads (any format below but GeoPackage; a Shapefile as one zip). A streamed layer writes its whole source (as every format below does).
GeoPackage Data › Export to .gpkg (desktop) One feature table (an attributes table for a layer without geometry) in the layer's coordinate system (see below), with an R-tree spatial index and the GeoPackage 1.4 triggers that keep it current when other software edits the file. Feature ids are kept.
GeoParquet Data › Export to .parquet GeoParquet 1.1: WKB geometry in WGS 84, Snappy compression, row groups of 65,536 features and a bbox covering column so readers can skip rows by extent.
Shapefile Data › Export to .shp (or .zip for the files zipped) Writes .shp, .shx, .dbf, .prj (the coordinate system, see below) and .cpg (UTF-8). Field names are cut to 10 characters (made unique), text to 254 bytes, and numbers too wide for a dBase field are left empty; features without geometry, and lines of a single point, are left out (and reported).
FlatGeobuf Data › Export to .fgb In the layer's coordinate system (see below), with a spatial index; features without geometry are left out (and reported).
KML, KMZ, GPX Data › Export to .kml, .kmz or .gpx Placemarks named by a name field, if there is one; features without geometry are left out.
KML, GPX, CSV with WKT Analyze › Workflows › Data Interop
GeoTIFF Data › Export
PNG Publish › Export Map (share.exportMap) At any DPI, with labels, scale bar and tile credits.
PDF Layouts, reports and presentations
Wavefront OBJ, glTF Publish › Export To 3D, Share As › Web Scene Polygons extruded by a field.
Web map, OGC API Features, MapLibre style Publish › Share As Open-format files that need no server: see Sharing.
Raster tiles Analyze › Create Hosted Imagery

GeoPackage, Shapefile and FlatGeobuf exports are written in the coordinate system the layer was read in: a Shapefile's .prj, a GeoPackage's or FlatGeobuf's own system, or the crs a CSV was added with (EPSG:25832 data goes back out as EPSG:25832). A layer read in longitude/latitude, or made in RustGIS, is written in WGS 84 (EPSG:4326). share.exportLayer takes "crs" to choose another, such as {"layer": "Parcels", "path": "parcels.gpkg", "crs": "EPSG:4647"}. GeoJSON, KML, GPX, GeoParquet and CSV are always written in WGS 84.

RustGIS files

File Extension Notes
Project .rgis (older .rgisx open too) Saves streamed layers' file paths, not their features; a browser upload is kept inside.
Map, layer, style, color ramp, template, task, bookmark and layout files .rgismap, .rgislyr, .rgisstyle, .rgisramp, .rgistemplate, .rgistask, .rgisbookmarks, .rgislayout See Project items.
Project package .rgispkg Everything, rasters included.
Plugin .rgplugin See Plugins.
Color ramps from other tools QGIS style .xml and layer style .qml, GDAL color-relief .txt, GMT .cpt Read as custom color ramps; see Custom color ramps.