NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #1026 most downloaded on PyPI
Vectorized spatial vector file format I/O using GDAL/OGR
Last release 3 months ago
26 Jun 2026
Ships fairly regularly
a new release about every 3 months
Nearly every release is documented
notes for 19 of 19 stable releases
Nothing withdrawn
no release was ever pulled
5 years old
21 releases · first in 2021
One column per quarter.
Support reading Time type columns by default (was already supported with use_arrow=False ) ( #617 ).
use_arrow=False) (#617).list_drivers_details() function to list the available drivers with morelist_drivers (#559)vsi_curl_clear_cache() function to allow users to clear the local GDAL vsi cacheread_dataframe (especially if a filter is used)write_dataframe without Arrow (#577, #674).write_dataframe with use_arrow=False when writing an object-typeFix regression in reading date columns
Return JSON fields (as identified by GDAL) as dicts/lists in read_dataframe ; these were previously returned as strings ( #556 ).
read_dataframe;datetime_as_string and mixed_offsets_as_utc parameters to read_dataframeread_info (#556).layer in read_info (#564).use_arrow=True after having used theCompatibility with Shapely >= 2.1 to avoid triggering a deprecation warning at import ( #542 ).
Capture all errors logged by gdal when opening a file fails ( #495 ).
use_arrow (#511).write_dataframe when writing an empty or all-None objectuse_arrow (#512).Add support to read, write, list, and remove /vsimem/ files ( #457 ).
/vsimem/ files (#457).write_dataframe with GeoSeries.notna() (#435).libgdal tolibgdal-core. This package is significantly smaller as it doesn't containpyproj becoming an optional dependency; you will needpyproj in order to support spatial reference systems (#452)./vsimem/ files (#457).use_arrow=True (#490).write_dataframe with GeoSeries.notna() (#435).NotImplementedError when user attempts to write to an open file handle (#442).libgdal to
libgdal-core. This package is significantly smaller as it doesn't contain
some large GDAL plugins. Extra plugins can be installed as seperate conda
packages if needed: more info here.
This also leads to pyproj becoming an optional dependency; you will need
to install pyproj in order to support spatial reference systems (#452).Remove usage of deprecated distutils in setup.py (#416).
on_invalid parameter to read_dataframe (#422).read_dataframe (#412).distutils in setup.py (#416).Support for writing based on Arrow as the transfer mechanism of the data from Python to GDAL (requires GDAL >= 3.8). This is provided through the new
pyogrio.raw.write_arrow function, or by using the use_arrow=True
option in pyogrio.write_dataframe (#314, #346).fids filter to read_arrow and open_arrow, and to
read_dataframe with use_arrow=True (#304).read_info, including layer name, geometry name
and FID column name (#365).read_arrow and open_arrow now provide
GeoArrow-compliant extension metadata,
including the CRS, when using GDAL 3.8 or higher (#366).open_arrow function can now be used without a pyarrow dependency. By
default, it will now return a stream object implementing the
Arrow PyCapsule Protocol
(i.e. having an __arrow_c_stream__method). This object can then be consumed
by your Arrow implementation of choice that supports this protocol. To keep
the previous behaviour of returning a pyarrow.RecordBatchReader, specify
use_pyarrow=True (#349).write_dataframe if input has a date column and
non-consecutive index values (#325).read_arrow or read_dataframe(..., use_arrow=True) if
a boolean column is detected due to error in GDAL reading boolean values for
FlatGeobuf / GPKG drivers (#335, #387); this has been fixed in GDAL >= 3.8.3.columns parameter when reading from
the data source not using the Arrow API (#391).encoding
option for read, read_dataframe, and open_arrow, and correctly encode
Shapefile field names and text values to the user-provided encoding for
write and write_dataframe (#384).read_arrow /
open_arrow (#407).where expression combined with a list of columns that does not include
the column referenced in the expression is not recommended and will now
return results based on driver-dependent behavior, which may include either
returning empty results (even if non-empty results are expected from where parameter)
or raise an exception (#391). Previous versions of pyogrio incorrectly
set ignored fields against the data source, allowing it to return non-empty
results in these cases.Add packaging as a dependency (#320).
packaging as a dependency (#320).pandas.ArrowDtype (#321).Fix unspecified dependency on packaging ( #318 ).
packaging (#318).Support reading and writing datetimes with timezones (#253).
read_info, read, read_dataframe) (#271).arrow_to_pandas_kwargs parameter to read_dataframe + reduce memory usage
with use_arrow=True (#273)read_info, the result now also contains the total_bounds of the layer as well
as some extra capabilities of the data source driver (#281).read or read_dataframe is called with parameters to read no
columns, geometry, or fids (#280).detect_write_driver (#270).mask parameter to open_arrow, read, read_dataframe,
and read_bounds functions to select only the features in the dataset that
intersect the mask geometry (#285). Note: GDAL < 3.8.0 returns features that
intersect the bounding box of the mask when using the Arrow interface for
some drivers; this has been fixed in GDAL 3.8.0.force_2d=True with use_arrow=True in read_dataframe (#300).test suite requires Shapely >= 2.0
using skip_features greater than the number of features available in a data
layer now returns empty arrays for read and an empty DataFrame for
read_dataframe instead of raising a ValueError (#282).
enabled skip_features and max_features for read_arrow and
read_dataframe(path, use_arrow=True). Note that this incurs overhead
because all features up to the next batch size above max_features (or size
of data layer) will be read prior to slicing out the requested range of
features (#282).
The use_arrow=True option can be enabled globally for testing using the
PYOGRIO_USE_ARROW=1 environment variable (#296).
fid_as_index=True doesn't set fid as index using read_dataframe with
use_arrow=True (#265)read_info (#281):
features property in the result will now be -1 if calculating the
feature count is an expensive operation for this driver. You can force it to be
calculated using the force_feature_count parameter.capabilities property, the values will now be
booleans instead of 1 or 0.Add automatic detection of 3D geometries in write_dataframe (#223, #229)
write_dataframe (#223, #229)read_info result (#224)read, read_dataframe, and
read_info (#233)write_dataframe, or
specifying a mask manually for missing values in write (#219)RecordBatchReader via
pyogrio.raw.open_arrow, which allows iterating over batches of Arrow
tables (#205).write and write_dataframe, and add support for reading
dataset and layer metadata in read_info (#237).Fix memory leak in reading files
Support for reading based on Arrow as the transfer mechanism of the data from GDAL to Python (requires GDAL >= 3.6 and pyarrow to be installed). This
pyarrow to be installed).
This can be enabled by passing use_arrow=True to pyogrio.read_dataframe
(or by using pyogrio.raw.read_arrow directly), and provides a further
speed-up (#155, #191).append=True to pyogrio.write_dataframe (#197).nan_as_null=False
to keep the previous behaviour) (#190).pyogrio.write_dataframe (#189).columns to read, unnecessary IO or parsing
is now avoided (#195).new get_gdal_data_path() utility funtion to check the path of the data directory detected by GDAL
get_gdal_data_path() utility funtion to check the path of the data
directory detected by GDAL (#160)use user-provided encoding when reading files instead of using default encoding of data source type
encoding when reading files instead of using default
encoding of data source type (#139)Consolidated error handling to better use GDAL error messages and specific exception classes (#39). Note that this is a breaking change only if you ar…
read_dataframe can now optionally be set
to the FID of the features that are read, as int64 dtype. Note that some
drivers start FID numbering at 0 whereas others start numbering at 1./vsizip to /vsi (#29)read_info (#30)zip://, s3://) (#43)bool, int16, float32 into correct dtypes (#83)geometry_type to write_dataframe to set geometry type for layer (#85)GDAL_CURL_CA_BUNDLE / PROJ_CURL_CA_BUNDLE defaults (#97).geojson, .geojsonl and .geojsons files (#101)read now also returns an optional FIDs ndarray in addition to meta,
geometries, and fields; this is the 2nd item in the returned tuple.FGB, though it can write mixed geometry
types if geometry_type is set to "Unknown")"Unknown" unless overridden using geometry_type. Note:
"Unknown" may be ignored by some drivers (e.g., shapefile)object instead of numpy.object to eliminate deprecation warnings (#34)write_dataframe (#62)write_dataframe (#67)read_dataframe can now optionally be set
to the FID of the features that are read, as int64 dtype. Note that some
drivers start FID numbering at 0 whereas others start numbering at 1./vsizip to /vsi (#29)read_info (#30)zip://, s3://) (#43)bool, int16, float32 into correct dtypes (#83)geometry_type to write_dataframe to set geometry type for layer (#85)GDAL_CURL_CA_BUNDLE / PROJ_CURL_CA_BUNDLE defaults (#97).geojson, .geojsonl and .geojsons files (#101)read now also returns an optional FIDs ndarray in addition to meta,
geometries, and fields; this is the 2nd item in the returned tuple.FGB, though it can write mixed geometry
types if geometry_type is set to "Unknown")"Unknown" unless overridden using geometry_type. Note:
"Unknown" may be ignored by some drivers (e.g., shapefile)object instead of numpy.object to eliminate deprecation warnings (#34)write_dataframe (#62)write_dataframe (#67)layer_geometry_type introduced in 0.4.0a1 was renamed to geometry_type for consistencyPeople with a “+” by their names contributed a patch for the first time.
Nothing published for this version
Nothing published for this version
Auto-discovery of GDAL_VERSION on Windows, if gdalinfo.exe is discoverable on the PATH.
GDAL_VERSION on Windows, if gdalinfo.exe is discoverable
on the PATH.read_bounds function to read the bounds of each feature.fids keyword to read and read_dataframe to selectively
read features based on a list of the FIDs.initial support for building on Windows.
where parameter to read and read_dataframe to enable GDAL-compatible
SQL WHERE queries to filter data sources.force_2d parameter to read and read_dataframe to force
coordinates to always be returned as 2 dimensional, dropping the 3rd dimension
if present.bbox parameter to read and read_dataframe to select only
the features in the dataset that intersect the bbox.set_gdal_config_options to set GDAL configuration options and
get_gdal_config_option to get a GDAL configuration option.pyogrio.__gdal_version__ attribute to return GDAL version tuple
and __gdal_version_string__ to return string version.list_drivers function to list all available GDAL drivers.FlatGeobuf driver when available in GDAL.Your coding agent can read these notes before it upgrades. Set up the MCP server →