# What changed in geopandas

> 44 changes in geopandas 1 from its official release notes, upgrade guides and advisories: 9 breaking, 1 deprecations, 2 security, 13 new APIs and options. Each one cited. Sources checked 2026-10-30. HTML: https://unstale.sh/pypi/geopandas/

To see which of these apply to a repository, run `npx @unstale/cli init` in it.

## geopandas 1

### Breaking changes

- The internal figure representation and composition of collections have changed, which may break code relying on collection composition. (1.2.0) — [release notes](https://github.com/geopandas/geopandas/releases/tag/v1.2.0)
- The minimum required NumPy version is now 2.0. (1.2.0) — [release notes](https://github.com/geopandas/geopandas/releases/tag/v1.2.0)
- The minimum required pandas version is now 2.2. (1.2.0) — [release notes](https://github.com/geopandas/geopandas/releases/tag/v1.2.0)
- The minimum required pyproj version is now 3.7. (1.2.0) — [release notes](https://github.com/geopandas/geopandas/releases/tag/v1.2.0)
- Python 3.11 or greater is now required. (1.2.0) — [release notes](https://github.com/geopandas/geopandas/releases/tag/v1.2.0)
- The expired seed keyword in sample_points is removed; use rng instead. (1.2.0) — [release notes](https://github.com/geopandas/geopandas/releases/tag/v1.2.0)
- The minimum required Shapely version is now 2.1. (1.2.0) — [release notes](https://github.com/geopandas/geopandas/releases/tag/v1.2.0)
- The expired use_pygeos option, which had no functionality, is no longer available. (1.2.0) — [release notes](https://github.com/geopandas/geopandas/releases/tag/v1.2.0)
- Points generated by sample_points are no longer sorted along the x-axis. (1.1.4) — [release notes](https://github.com/geopandas/geopandas/releases/tag/v1.1.4)

### Security

- Further hardens to_postgis against SQL injection. (1.1.4) — [release notes](https://github.com/geopandas/geopandas/releases/tag/v1.1.4)
- geopandas SQL Injection Vulnerability in to_postgis() Allows Information Disclosure (1.1.2) — [security advisory](https://github.com/advisories/GHSA-6497-PRX7-GPMQ)

### Deprecations

- The resolution keyword is deprecated in favor of quad_segs to align with Shapely's convention. (1.2.0) — [release notes](https://github.com/geopandas/geopandas/releases/tag/v1.2.0)

### New APIs and options

- Adds a grid_size parameter. (1.2.0) — [release notes](https://github.com/geopandas/geopandas/releases/tag/v1.2.0)
- Generates square or hexagonal grids covering the input geometry. (1.2.0) — [release notes](https://github.com/geopandas/geopandas/releases/tag/v1.2.0)
- Exposes information about file layers, including layer metadata, as an alias for pyogrio.read_info. (1.2.0) — [release notes](https://github.com/geopandas/geopandas/releases/tag/v1.2.0)
- Generates square or hexagonal grids covering the input geometry. (1.2.0) — [release notes](https://github.com/geopandas/geopandas/releases/tag/v1.2.0)
- Adds a grid_size parameter. (1.2.0) — [release notes](https://github.com/geopandas/geopandas/releases/tag/v1.2.0)
- Axes are labeled using CRS unit information, and this behavior can be controlled with add_labels. (1.2.0) — [release notes](https://github.com/geopandas/geopandas/releases/tag/v1.2.0)
- When plotting continuous variables with a classification scheme, setting colorbar=True within legend_kwds produces a colorbar instead of a categorical legend. (1.2.0) — [release notes](https://github.com/geopandas/geopandas/releases/tag/v1.2.0)
- The value "greedy" enables greedy topological coloring so adjacent polygons do not share a color; it requires mapclassify and libpysal. (1.2.0) — [release notes](https://github.com/geopandas/geopandas/releases/tag/v1.2.0)
- Static plots can include a basemap through contextily.add_basemap; the contextily package is required. (1.2.0) — [release notes](https://github.com/geopandas/geopandas/releases/tag/v1.2.0)
- With the pyogrio engine, fid_as_index=True accesses the feature ID as the index. (1.2.0) — [release notes](https://github.com/geopandas/geopandas/releases/tag/v1.2.0)
- Adds a grid_size parameter. (1.2.0) — [release notes](https://github.com/geopandas/geopandas/releases/tag/v1.2.0)
- Adds a grid_size parameter. (1.2.0) — [release notes](https://github.com/geopandas/geopandas/releases/tag/v1.2.0)
- Random states in pointpats methods can now be fixed with rng. (1.1.3) — [release notes](https://github.com/geopandas/geopandas/releases/tag/v1.1.3)

### Behavior and default changes

- Writes attrs to Parquet files. (1.2.0) — [release notes](https://github.com/geopandas/geopandas/releases/tag/v1.2.0)
- Legends are created automatically by matplotlib, allowing a single legend for a layered map with ax.legend(). (1.2.0) — [release notes](https://github.com/geopandas/geopandas/releases/tag/v1.2.0)
- Static plotting has been re-implemented with enhancements to categorical styling, legends, colorbars, classification, and basemaps. (1.2.0) — [release notes](https://github.com/geopandas/geopandas/releases/tag/v1.2.0)
- Supports reading the upcoming GeoParquet 2.0 specification. (1.2.0) — [release notes](https://github.com/geopandas/geopandas/releases/tag/v1.2.0)
- Reads attrs from Parquet files and supports direct reading from HTTP/HTTPS protocols. (1.2.0) — [release notes](https://github.com/geopandas/geopandas/releases/tag/v1.2.0)
- Improved compatibility with pandas 3.0 Copy-on-Write by using deferred copies where possible. (1.1.3) — [release notes](https://github.com/geopandas/geopandas/releases/tag/v1.1.3)

### Fixes and other changes

- Passing multiple non-geometry columns now falls back to pandas multi-column explode instead of raising a cryptic error. (1.2.0) — [release notes](https://github.com/geopandas/geopandas/releases/tag/v1.2.0)
- An empty feature list with a CRS now returns an empty GeoDataFrame with a geometry column instead of raising ValueError. (1.2.0) — [release notes](https://github.com/geopandas/geopandas/releases/tag/v1.2.0)
- Zero-area polygons no longer cause an endless loop; they now return an empty MultiPoint. (1.2.0) — [release notes](https://github.com/geopandas/geopandas/releases/tag/v1.2.0)
- Index levels produced by explode and get_coordinates with index_parts=True are int64 rather than int32 on 32-bit platforms. (1.2.0) — [release notes](https://github.com/geopandas/geopandas/releases/tag/v1.2.0)
- read_parquet no longer ignores partitioning when auto-detecting columns, so partitioning=None no longer raises. (1.2.0) — [release notes](https://github.com/geopandas/geopandas/releases/tag/v1.2.0)
- vmin and vmax are now supported when scheme is defined instead of being ignored. (1.2.0) — [release notes](https://github.com/geopandas/geopandas/releases/tag/v1.2.0)
- vmin and vmax are now supported when scheme is defined instead of being ignored. (1.2.0) — [release notes](https://github.com/geopandas/geopandas/releases/tag/v1.2.0)
- Custom legend_kwds labels are no longer ignored for categorical and boolean columns. (1.1.4) — [release notes](https://github.com/geopandas/geopandas/releases/tag/v1.1.4)
- Handles keep_geom_type more gracefully when the input is empty. (1.1.4) — [release notes](https://github.com/geopandas/geopandas/releases/tag/v1.1.4)
- Correctly handles missing values with pandas 3 when the new str dtype is used. (1.1.3) — [release notes](https://github.com/geopandas/geopandas/releases/tag/v1.1.3)
- Accepts list-like size when generating points using pointpaterns. (1.1.3) — [release notes](https://github.com/geopandas/geopandas/releases/tag/v1.1.3)
- Assigning column values to a new row index now preserves the column CRS and geometry dtype on pandas 3.1. (1.1.3) — [release notes](https://github.com/geopandas/geopandas/releases/tag/v1.1.3)
- Correctly handles missing values with pandas 3 when the new str dtype is used. (1.1.3) — [release notes](https://github.com/geopandas/geopandas/releases/tag/v1.1.3)
