File formats
This section explains how each supported file format is handled, what format-specific options are available, and what to watch out for.
Comparison
| Format | Extension | Read | Write | Geometry | Attributes | Topology | Multi-layer |
|---|---|---|---|---|---|---|---|
| Shapefile | .shp .shx .dbf .prj .cpg |
✓ | ✓ | vector | DBF (10-char names) | — | — |
| GeoJSON | .json .geojson |
✓ | ✓ | vector | yes | — | — |
| TopoJSON | .json .topojson |
✓ | ✓ | vector | yes | ✓ | ✓ |
| GeoPackage | .gpkg |
✓ | ✓ | vector | yes | — | ✓ |
| FlatGeobuf | .fgb |
✓ | ✓ | vector | yes | — | — |
| GeoParquet | .parquet .geoparquet |
✓ | ✓ | vector | yes | — | — |
| KML / KMZ | .kml .kmz |
✓ | ✓ | vector | limited | — | ✓ |
| CSV / TSV | .csv .tsv |
✓ | ✓ | points (X/Y) | yes | — | — |
| DBF | .dbf |
✓ | ✓ | none | yes | — | — |
| JSON records | .json |
✓ | ✓ | none | yes | — | — |
| GeoTIFF | .tif .tiff |
✓ | ✓ | raster | — | — | — |
| PNG / JPEG raster | .png .jpg .jpeg |
✓ | — | raster (with world file) | — | — | — |
| SVG | .svg |
✓ | ✓ | vector | as data-* |
— | ✓ |
| Mapshaper snapshot | .msx |
✓ | ✓ | vector | yes | ✓ | ✓ |
A few things worth knowing across all formats:
- Auto-detection by extension. You usually don't need to tell Mapshaper what format a file is — the input and output format are both inferred from the file extension. Use
format=on-ior-oto override. - TopoJSON is the only interchange format that preserves topology in the file itself. Topology-aware operations like
-dissolve,-cleanand-simplifywork correctly regardless of the input format, but only TopoJSON keeps shared boundaries between adjacent polygons from being duplicated on disk. (Mapshaper's own.msxsnapshots also preserve topology, but they're not readable by other tools.) - Encoding. The
encoding=option on-iand-oapplies to Shapefile, DBF and CSV/TSV i/o (UTF-8 is the default) — the other formats are UTF-8-only. - Raster and vector layers export separately. GeoTIFF is the only output format that takes a raster layer's pixels, and it takes nothing else, so
-oneeds atarget=when a session holds both kinds of layer. SVG and.msxsnapshots are the two formats that accept a mix. A GeoTIFF written by Mapshaper keeps the pixel values as they are, in the type they were read in, so an elevation model comes out as elevations rather than as an image; the pixels are Deflate-compressed unless you ask forcompression=none. The layer's projection is written into the file, either as an EPSG code or spelled out parameter by parameter. A handful of projections — Mapshaper's interrupted and composite ones among them — have no GeoTIFF representation at all; for those, Mapshaper writes the projection to a small.aux.xmlfile next to the.tif, so keep the two together, since that's where GIS software — and Mapshaper itself, when the.tifis loaded again — will look for it. Reading a raster, Mapshaper fills in what the file leaves out in the same way it does for vector data: a projection given without a datum is assumed to be on WGS 84, and a file with no projection metadata at all is assumed to be in WGS 84 lat-long if its coordinates fall in the decimal-degree range. A raster whose coordinates are outside that range and that says nothing about its CRS still loads and displays, but can't be projected or shown over a basemap until you say what it's in, with-proj init=<crs> crs=<crs>.