The TL;DR
GeoPackage is technically superior to Shapefile on every meaningful axis. It is OGC-standardised, single-file, multi-layer, supports modern types, has no 2 GB ceiling, and is what every major GIS tool reads natively. If you're starting a new project today, default to GeoPackage.
Shapefile still wins when the recipient explicitly requires it. That's a real constraint and it covers a lot of ground — but it should be the only reason you reach for it.
Head-to-head
| Capability | Shapefile | GeoPackage |
|---|---|---|
| File count | 3–7 sibling files | 1 |
| Max file size | 2 GB per .shp and .dbf | 140 TB (SQLite cap) |
| Max field name length | 10 characters | Unlimited |
| Multi-layer in one file | No | Yes |
| Mixed geometry types in one layer | No | Yes |
| Null vs empty string distinction | No | Yes |
| Boolean type | No | Yes |
| Datetime with time | No (date only) | Yes |
| 64-bit integers | No (32-bit max) | Yes |
| Raster support | No | Yes (tile pyramids) |
| Embedded styles / metadata | No | Yes |
| Random reads | Sequential scan via .shx | SQL-indexed |
| Spatial index | External (.qix/.sbn) | Built-in R-tree |
| OGC standard | No (Esri spec, openly published) | Yes (OGC 12-128r19) |
| Browser support | None | Limited (with WASM) |
| Universal desktop support | Yes (every tool) | Yes (every modern tool) |
What GeoPackage gives you that Shapefile can't
One file. A .gpkg is one file. Email it, upload it, version-control it (LFS), unzip it nowhere. No more "where's the .prj?" support tickets.
Multiple layers. A single GeoPackage can carry a parcel layer, a roads layer, a points-of-interest layer, and a raster basemap. Shipping a multi-theme dataset becomes one attachment instead of a ZIP of folders.
Honest types. GeoPackage uses SQLite's column type system. NULL is NULL, true is a boolean, timestamps carry their hour and minute, and a 64-bit ID column actually holds 64-bit IDs. Shapefile coerces all of these into strings or sentinel values.
Spatial index built in. Every GeoPackage layer can have an R-tree (rtree_<table>_<geom>) for fast bounding-box queries. Shapefile's index is optional, external, and tool-specific.
Storable as a database. You can open a GeoPackage with the SQLite CLI, run regular SQL on it, add views, write triggers. It's a real database masquerading as a file.
The migration recipe
For most cases, this is a one-liner:
ogr2ogr -f GPKG out.gpkg in.shpIf you have several Shapefiles to bundle into one GeoPackage:
for f in *.shp; do
layer="$(basename "$f" .shp)"
ogr2ogr -f GPKG -update -append out.gpkg "$f" -nln "$layer"
doneIf the Shapefile's .prj is missing, declare the source CRS explicitly:
ogr2ogr -f GPKG -s_srs EPSG:25833 -t_srs EPSG:4326 out.gpkg in.shpQGIS does the same: right-click the layer → Export → Save Features As → Format GeoPackage.
What you'll notice after migrating
- Field names get longer. If the Shapefile had
populationandpopulatio_(truncated frompopulation_maleandpopulation_femalein the original DB), the GeoPackage preserves whatever names ogr2ogr derives — sometimes you need to rename manually. - Empty strings become NULLs. Shapefile's empty-string-as-missing convention gets normalised. Downstream code that checks for empty strings needs to check for NULL too.
- Date columns may shift type. Some converters write
dateastext. Inspect withPRAGMA table_infoand ALTER COLUMN if you need a true date type.
When Shapefile still wins
There are honest reasons to stick with Shapefile:
- Government procurement. Public-sector RFPs from 2005–2015 still specify Shapefile as the deliverable. Read the spec; if it says Shapefile, ship Shapefile.
- Legacy desktop users. A surveyor on ArcMap 9.3 or AutoCAD Map 2014 may not have a GeoPackage driver. If the recipient won't budge, neither can you.
- Mobile field tools. A few field-collection apps still read Shapefile better than GeoPackage. Confirm before migrating.
- The 100-byte case. For a single point with three attributes, Shapefile's overhead is lower than GeoPackage's SQLite scaffolding. This matters never in practice but I'll mention it once.
In every other case in 2025, GeoPackage is the right default.
A note on the OGC stamp
GeoPackage is an OGC standard (OGC 12-128r19). That matters because procurement language can specify "OGC-compliant vector exchange format" — and GeoPackage qualifies while Shapefile does not. If you're writing the procurement spec, this is the magic phrase.
The migration question
If you're a single-person shop or a small team: migrate. The tooling is identical, the format is better, your future self will thank you. If you're in a 50-person GIS department with established workflows and downstream consumers: pilot it on one new project before changing defaults. The transition cost is real, but the destination is right.