Change Log
August 20, 2026 ยท View on GitHub
All notable changes to this project will be documented in this file. This project adheres to Semantic Versioning.
The public API of this library consists of the functions declared in file h3api.h.in.
[Unreleased]
Fixed
- Fixed the
polygonToCellsfuzzer regression test to use explicit double literals instead of reinterpreting raw bytes, so it is portable across endianness (#964) - No longer emit a CMake warning about a missing
clang-format/clang-tidywhen the user explicitly setENABLE_FORMAT=OFF/ENABLE_LINTING=OFF(#1158) - Fixed an out of bounds read in
_baseCellToCCWrot60when passed a face index equal toNUM_ICOSA_FACES(#978)
[4.5.0] - 2026-05-21
Added
cellsToMultiPolygonfunction (#1104, #1113)- Internal for now, will be added to the public API in a future release
destroyGeoMultiPolygonfunction (#1104)- (internal)
geoLoopAreafunction (#1101)
reverseDirectedEdgefunction (#1098)- Bidirectional
gridPathCells(#1111) h3.pcpkg-config file (#1115)
Changed
cellsToLinkedMultiPolygonnow usescellsToMultiPolygoninternally (#1126, #1133, #1136)cellsToLinkedMultiPolygon(andcellsToMultiPolygon) now return errors for invalid cells (E_CELL_INVALID), mixed resolutions (E_RES_MISMATCH), and duplicate cells (E_DOMAIN) instead of producing undefined output
cellAreaRads2usesgeoLoopArea(#1101)- Refactor of indexing code to use Vec3d (#1145, #1155)
- Refactor of CoordIJK code to be inlineable (#1154)
Fixed
- CLI handling of invalid cell input (#1125, #1124)
destroyLinkedMultiPolygonis now idempotent (safe to call twice) (#1136)
[4.4.1] - 2025-11-11
Fixed
- Proper version set in
VERSIONfile (#1091)
[4.4.0] - 2025-11-06
Added
getIndexDigitfunction for inspecting specific index digits of an H3 index. (#1024, #1042)isValidIndexfunction (#1056, #1079)constructCellfunction (#1063, #1074, #1078)- New
H3_INDEX_INVALID,E_BASE_CELL_DOMAIN,E_DIGIT_DOMAIN,E_DELETED_DIGITerror codes andH3_ERROR_END(#1063, #1064, #1065)
Changed
- Updated minimum version of macOS in CI. (#1069)
[4.3.0] - 2025-06-17
Added
- Added
gridRingfunction, that works even if encountering pentagon distortion. (#1011, #1013, #1015)
[4.2.1] - 2025-03-10
Fixed
- Fixed MSVC/WIN32 checks in CMake. (#981)
- Fixed potential memory leak in
polygonStringToGeoPolygon(#976)
Changed
- Added arm64 tests in CI. (#975, #974)
- Faster
isValidCell(#968) - Moved
ContainmentModeenum forpolygonToCellsExperimentaltoh3api.h. (#958)
[4.2.0] - 2024-12-04
Added
- Added experimental new algorithm for
polygonToCells, calledpolygonToCellsExperimental, that supports more containment flags and is more memory-efficient (#785, #800, #947) h3binary for shell scripts ready for use (#818, #826, #846, #923, #924, #931, #933)
Fixed
- Fixed compacting all or many resolution 1 cells (#919)
Changed
compactCellsinternally uses int64 for array indexing. (#920)- Reorganize tests into public / internal. (#762)
- Performance enhancement for aarch64, may improve other platforms (#790, #792, #852, #905, #913)
clang-formatupgraded to version 14. (#834)- Fixed tests that incorrectly did not test resolution 15. (#820)
- Use
CMAKE_INSTALL_LIBDIRwhen choosing where to install library files. (#819)
[4.1.0] - 2023-01-18
Added
- Functions for
cellToChildPosandchildPosToCell(#719)
Fixed
- Fixed possible signed integer overflow in
h3NeighborRotations(#707) - Fixed possible signed integer overflow in
localIjToCell(#706, #735)
Changed
asserton defensive code blocks that are not already covered. (#720)clang-formatupgraded to version 11. (#734)
[4.0.1] - 2022-09-15
Fixed
- Changing an internal
floattodoubleimproves the precision of geographic coordinate output (#652) - Fixed compacting all children of a resolution 0 cell (#679)
- Fixed possible signed integer overflow in
maxGridDiskSize(#686) - Fixed possible use of uninitialized values in
cellToVertex(#683, #690) - Fixed possible out of bounds read in
localIjToCell(#684) - Fixed possible memory leak in
compactCells(#685) - Fixed possible out of bounds read in
areNeighborCells(#677) - Fixed possible memory leak in
cellsToLinkedMultiPolygon(#673)
Changed
- Build script does not use toolchain file (#641)
- Removed a duplicated include preprocessor directive (#682)
- Improvements to the fuzzer suite and their automatic runs in CI (#671, #674, #687)
- Increased test coverage (#642)
- Added a fuzzer targeting internal
algos.cfunctions (#675)
[4.0.0] - 2022-08-23
Breaking changes
- Rename functions according to the terminology RFC (#622, #586, #571, #403, #466, #495, #466)
- Functions that can experience errors now have an
H3Errorreturn value. (#617, #586, #581, #551, #550, #509, #505, #507, #508, #503, #478, #468, #436, #359) - Cell count parameters use
int64_tinstead ofint. polygonToCells(previouslypolyfill) accepts a flags argument for future expansion. (#570)cellToLocalIjandlocalIjToCellaccept a mode argument for future expansion. (#586)exactEdgeLengthfunctions renamed toedgeLength(#639)
Fixed
- Fix polyfill bug when vertex latitude exactly matches cell center. (#603)
- A number of issues detected via unit tests and fuzzers were fixed. (#568, #562, #558, #559, #560, #430)
polygonToCellsreturns an error if Infinity is passed in. (#636)
Changed
- The file
CMakeTests.cmakeis no longer included ifENABLE_TESTINGis off. (#609)
Added
- Vertex mode and associated functions: (#422, #420, #417)
cellToVertex(cell, vertexNum)cellToVertexes(cell, out)vertexToLatLng(vertex, out)isValidVertex(vertex)
h3CLI application. (#556, #497)
Other changes
- Generally use
lnginstead oflon - Closed-form implementation of
numHexagons - A number of fuzzer harnesses are now included in the H3 core library. (#557, #553, #545, #433)
- Additional benchmarks are added and benchmarks are regularly run in CI. (#524, #518)
[4.0.0-rc5] - 2022-08-16
Breaking changes
exactEdgeLengthfunctions renamed toedgeLength(#639)
Fixed
polygonToCellsreturns an error if Infinity is passed in. (#636)
[4.0.0-rc4] - 2022-07-25
Breaking changes
distance*functions (distanceKm, etc) renamed togreatCircleDistance*. (#622)- Error code
E_MEMORYrenamed toE_MEMORY_ALLOC. (#617)
[4.0.0-rc3] - 2022-06-03
Fixed
- Fix polyfill bug when vertex latitude exactly matches cell center. (#603)
Changed
- The file
CMakeTests.cmakeis no longer included ifENABLE_TESTINGis off. (#609)
[4.0.0-rc2] - 2022-03-16
Breaking changes
experimentalH3ToLocalIjandexperimentalLocalIjToH3renamed tocellToLocalIjandlocalIjToCellrespectively. (#586)cellToLocalIjandlocalIjToCellaccept a mode argument for future expansion. (#586)cellToCenterChild(previouslyh3ToCenterChild) returns an error code. (#581)
Added
E_OPTION_INVALIDerror code added. (#586)
[4.0.0-rc1] - 2022-02-07
Breaking changes
- Rename functions according to the terminology RFC (#571, #403, #466, #495, #466)
- Functions that can experience errors now have an
H3Errorreturn value. (#551, #550, #509, #505, #507, #508, #503, #478, #468, #436, #359) - Cell count parameters use
int64_tinstead ofint. polygonToCells(previouslypolyfill) accepts a flags argument for future expansion. (#570)
Added
- Vertex mode and associated functions: (#422, #420, #417)
cellToVertex(cell, vertexNum)cellToVertexes(cell, out)vertexToLatLng(vertex, out)isValidVertex(vertex)
h3CLI application. (#556, #497)
Fixed
- A number of issues detected via unit tests and fuzzers were fixed. (#568, #562, #558, #559, #560, #430)
Other changes
- Generally use
lnginstead oflon - Closed-form implementation of
numHexagons - A number of fuzzer harnesses are now included in the H3 core library. (#557, #553, #545, #433)
- Additional benchmarks are added and benchmarks are regularly run in CI. (#524, #518)
[3.7.2] - 2021-07-15
Fixed
gridDiskof invalid indexes should not crash. (#498)
[3.7.1] - 2020-10-05
Fixed
- Finding invalid edge boundaries should not crash. (#399)
- Build fixes for FreeBSD. (#397)
[3.7.0] - 2020-09-28
Added
- Area and haversine distance functions (#377):
cellAreaRads2cellAreaKm2cellAreaM2pointDistRadspointDistKmpointDistMexactEdgeLengthRadsexactEdgeLengthKmexactEdgeLengthM
- Refactor
getH3UnidirectionalEdgeBoundaryfor accuracy at small resolutions. (#391)- Speeds up
getH3UnidirectionalEdgeBoundaryby about 3x. - Implement core logic for future vertex mode.
- Speeds up
Fixed
- Fixed building the library with custom memory allocation functions on Mac OSX. (#362)
- The installed H3 CMake target should have include directories specified. (#381)
Changed
- Tests now use
bashon Windows. (#381)
[3.6.4] - 2020-06-19
Added
H3_MEMORY_PREFIXCMake option for replacing the memory management functions used in H3. (#317)- Support for building Debian packages of H3. (#352)
Fixed
- Removed duplicate include statements. (#333)
- Fixed macro
H3_DIGIT_MASK_NEGATIVE. (#329)
Changed
- Again implement new
polyfillalgorithm. (#313)
[3.6.3] - 2020-01-21
Fixed
compactdetects and fails on cases with duplicated input indexes. (#299)
Changed
h3IsValidreturns false for indexes that have non-zero reserved bits. (#300)h3IsValidandh3UnidirectionalEdgeIsValidreturn false for indexes with the high bit set. (#300)
[3.6.2] - 2019-12-9
- Revert new
polyfillalgorithm until reported issues are fixed. (#293)
[3.6.1] - 2019-11-11
Fixed
compacthandles zero length input correctly. (#278)bboxHexRadiusscaling factor adjusted to guarantee containment forpolyfill. (#279)polyfillnew algorithm for up to 3x perf boost. (#282)- Fix CMake targets for KML generation. (#285)
[3.6.0] - 2019-08-12
Added
h3ToCenterChildfunction to find center child at given resolution (#267)getPentagonIndexes(andpentagonIndexCount) function to find pentagons at given resolution (#267)
Fixed
- Fix bounds check for local IJ coordinates (#271)
[3.5.0] - 2019-07-22
Added
- CMake options for excluding filter applications or benchmarks from the build. (#247)
h3GetFacesfunction to find icosahedron faces for an index, and helper functionmaxFaceCount(#253)
Changed
- Argument parsing for all filter applications is more flexible. (#238)
Fixed
- Fix printing program name in
h3ToHiererror messages. (#254)
[3.4.4] - 2019-05-30
Changed
- Local coordinate spaces cannot cross more than one icosahedron edge. (#234)
- All dynamic internal memory allocations happen on the heap instead of the stack. (#235)
- Argument parsing for
h3ToGeo,geoToH3, andh3ToGeoBoundaryis more flexible. (#227)
[3.4.3] - 2019-05-02
Added
localIjToH3filter application (#222)- An option to print distances in the
kRingfilter application (#222)
Changed
- Arguments parsing for
kRingfilter application is more flexible. (#224)
Fixed
benchmarkPolyfillallocates its memory on the heap (#198)- Fixed constraints of vertex longitudes (#213)
- Zero only input to
uncompactdoes not produce an error (#223)
[3.4.2] - 2019-02-21
Changed
binding-functionsbuild target generates an ASCII file on Windows (#193)
[3.4.1] - 2019-02-15
Fixed
binding-functionsbuild target fixed when running the build out of source (#188)
[3.4.0] - 2019-01-23
Added
getRes0Indexesfunction for getting all base cells, and helper functionres0IndexCount(#174)- Include defined constants for current library version (#173)
[3.3.0] - 2018-12-25
Added
h3Lineandh3LineSizefunctions for getting the line of indexes between some start and end (inclusive) (#165)
Changed
- Indexes in deleted pentagon subsequences are not considered valid.
[3.2.0] - 2018-10-04
Added
experimentalH3ToLocalIjfunction for getting local coordinates for an index. (#102)experimentalLocalIjToH3function for getting an index from local coordinates. (#102)- Benchmarks for the kRing method for k's of size 10, 20, 30, and 40. (#142, #144)
Changed
- Internal
h3ToIjkfunction renamed toh3ToLocalIjk. (#102) h3ToIjkfilter application replaced withh3ToLocalIj. (#102)
Fixed
- Added
#include <stdio.h>tobenchmark.h(#142)
[3.1.1] - 2018-08-29
Fixed
- Fixed bounding box bug for polygons crossing the antimeridian (#130)
- Normalize output of h3SetToMultiPolygon to align with the GeoJSON spec, ensuring that each polygon has only one outer loop, followed by holes (#131)
Changed
- Longitude outputs are now guaranteed to be in the range [-Pi, Pi]. (#93)
- Implemented closed form formula for maxKringSize. Source: https://oeis.org/A003215 (#138)
- Improved test and benchmark harnesses (#126, #128)
[3.1.0] - 2018-08-03
Added
h3Distancefunction for determining the grid distance between H3 indexes (#83)- Internal
h3ToIjkfunction for getting IJK+ coordinates from an index (#83) - Internal
ijkDistancefunction for determining the grid distance between IJK+ coordinates (#83) h3ToIjkfilter application for experimenting withh3ToIjk(#83)
Fixed
- Don't require a C++ compiler (#107)
Changed
- Most dynamic internal memory allocations happen on the heap instead of the stack (#100)
[3.0.8] - 2018-07-18
Added
- Added Direction enum, replacing int and defined constants (#77)
Fixed
- Ensured unused memory is cleared for pentagon children. (#84)
- Fixed compiler warnings in
h3ToGeoHierandh3ToGeoBoundaryHier. (#90) - Fixed a segfault in
h3SetToLinkedGeo(#94)
Changed
- Warnings are not errors by default. (#90)
[3.0.7] - 2018-06-08
Added
- Generator for the faceCenterPoint table (#67)
- Generator for number of indexes per resolution (#69)
- Added CMake
WARNINGS_AS_ERRORSoption, default on, for Clang and GCC (#70) - Added CMake
TEST_WRAPPERsetting whenWRAP_VALGRINDis on (#66)
Changed
- Moved Vec3d structure to
vec3d.h(#67) - Added input validation when getting the origin or destination of an edge (#74)
[3.0.6] - 2018-06-01
Changed
- Changed signature of internal function h3NeighborRotations.
- Do not require support for
hexRange,hexRanges, orhexRangeDistancesin the bindings. These functions may be deprecated in the public API in future releases; consumers should usekRingandkRingDistancesinstead. - Performance improvement in core indexing logic for
geoToH3(thanks @wewei!)
[3.0.5] - 2018-04-27
Fixed
- Fixed duplicate vertex in h3ToGeoBoundary for certain class III hexagons (#46)
Added
- Release guide
[3.0.4] - 2018-04-16
Added
- Assertions when allocating memory on the heap.
Changed
- Most internal memory allocations happen on the stack instead of the heap.
[3.0.3] - 2018-03-19
Added
- CMake config installation to ease use of h3 from CMake projects.
- Add CMake toolchain file to set build options upfront.
- Add CMake
C_CLANG_TIDYproperty to integrate clang-tidy checks during build. - YouCompleteMe completion support.
Changed
- Improved resilience to out of range inputs.
- Minimum CMake version to 3.1.
- Set
CMAKE_C_STANDARDto11instead of using compiler flag-std=c1x. - Use
CMAKE_POSITION_INDEPENDENT_CODEinstead of using compiler flag-fPIC. - Rename library target from
h3.1toh3withSONAMEproperty of 1.
Removed
- CMake
H3_COMPILERoption in favor of built-inCMAKE_C_COMPILER. - CMake
BUILD_STATICoption in favor of built-inBUILD_SHARED_LIBS. - CMake
ENABLE_TESTSoption in favor of built-inBUILD_TESTING. - File globbing in CMake in favor of listing source files.
[3.0.2] - 2018-01-24
Removed
- Removed the
H3IndexFatinternal structure.
Changed
- Simplified build process on Windows.
Fixed
- Fixed an issue where tests would fail on ARM systems.
[3.0.1] - 2018-01-18
Added
- Added a
make installtarget.
Changed
- Improved compatibility with building on Windows.
- Fixed various cases where the test suite could crash or not compile.
[3.0.0] - 2018-01-08
Added
- First public release.