Skip to content
CAI
Software that uses CAICheck a score

felt/geo

57.2

Adequate · 3 October 2026

2.1k

lines of production code

Elixir

primary language

2

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

This system is a GIS library for Elixir that provides core functionality for handling spatial geometry data. It supports encoding and decoding of geometric primitives, including points, lines, and polygons with optional elevation and measure dimensions, into standard formats like WKT, WKB, and GeoJSON. The library manages serialization through flexible JSON backend support and ensures type safety via modern Elixir structs.

Features

Initial public release of the Geo library

This change introduces the Geo library, a collection of GIS functions for Elixir that handles conversions to and from Well-Known Text (WKT), Well-Known Binary (WKB), and GeoJSON. It supports a comprehensive set of geometry types including Point, LineString, Polygon, and their multi/3D variants. The release includes the core implementation, a MIT license, and documentation detailing usage for encoding and decoding spatial data.

(repo-wide) · high confidence

New GeoJSON encoding and decoding module

A new \lib/geo/json\ module has been introduced to handle serialization and deserialization of Geo geometry structs to and from GeoJSON format. The decoder supports a wide range of geometry types including Point, LineString, Polygon, MultiPoint, MultiLineString, MultiPolygon, and GeometryCollection, as well as their Z (elevation) and M (measure) variants. It also handles GeoJSON Feature and FeatureCollection objects, correctly mapping properties and handling null geometries. The encoder converts geometry structs back into GeoJSON maps, preserving properties and handling specific type conversions (e.g., dropping M values for ZM types as per GeoJSON spec limitations). Decoded geometries default to SRID 4326 (WGS 84) in accordance with the GeoJSON specification.

lib/geo/json · high confidence

New geometry structs and dedicated encoding modules for WKT, WKB, and GeoJSON

The library now defines explicit structs for all geometry types, including new variants with Z (elevation) and M (measure) dimensions (e.g., PointZ, MultiLineStringZM) and a GeometryCollection. Encoding and decoding for Well-Known Text (WKT), Well-Known Binary (WKB/EWKB), and GeoJSON have been refactored into dedicated modules (Geo.WKT, Geo.WKB, Geo.JSON) with separate Encoder/Decoder implementations. This change introduces support for EWKT (including SRID parsing), allows GeoJSON decoding to default to SRID 4326 per the spec, and provides flexible JSON parsing by delegating actual JSON encoding/decoding to the user's chosen library (JSON or Jason) rather than bundling a specific one.

lib/geo · high confidence

WKT encoding and decoding now support Z and M coordinate dimensions

The WKT module in lib/geo/wkt has been refactored to handle geometry types with Z (elevation) and M (measure) dimensions. The new decoder and encoder implementations explicitly parse and generate Well-Known Text for Point, LineString, Polygon, MultiPoint, MultiLineString, MultiPolygon, and GeometryCollection variants including Z, M, and ZM suffixes (e.g., POINT ZM, LINESTRINGZM). This allows users to serialize and deserialize spatial data that includes these additional coordinate dimensions, which were previously unsupported in the WKT conversion layer.

lib/geo/wkt · high confidence

Behavioural changes

Migration from record-based structs to typed modules with optional JSON backend support

The core geometry types in the \lib/geo.ex\ module have been refactored from legacy Elixir records to proper structs with explicit type definitions, improving type safety and documentation. Additionally, the library now supports encoding geometry objects to JSON via the \JSON.Encoder\ protocol if the \JSON\ library is present, or falls back to \Jason.Encoder\ if \Jason\ is available, allowing users to serialize geometry data to JSON without requiring a specific JSON library at compile time.

lib · high confidence

Refactored WKB decoding and encoding to support Z/M dimensions and empty geometries

The WKB (Well-Known Binary) handling in the Geo library has been refactored to replace the previous \decode\_iodata\ approach with a new pattern-matching-based decoder and a dedicated encoder module. This change expands support for geometry types with Z (elevation) and M (measure) coordinates, including PointZ, PointM, PointZM, LineStringZ, LineStringM, LineStringZM, MultiPointM, MultiPointZ, MultiLineStringZ, MultiLineStringZM, PolygonZ, and MultiPolygonZ. Additionally, the decoder now correctly handles edge cases such as empty MultiPolygons, empty LineStrings, and points with zero coordinates, while the encoder ensures that SRID information is properly passed through and encoded.

lib/geo/wkb · high confidence

Test coverage

Added WKB encoding/decoding benchmarks comparing binaries and iodata; Initial test suite for Geo geometry types and serialization formats; Removal of WKT test suite and minor test helper update.

Dependencies

Update project configuration and lock dependencies

The project manifest has been updated to require Elixir \~\> 1.10 and bumped the version to 4.1.0. The dependency list now explicitly includes Jason (\~\> 1.4) as an optional dependency, along with dev/test tools ExDoc (\~\> 0.29), StreamData (\~\> 0.5 or \~\> 1.0), and Benchee (\~\> 1.1). The lock file reflects these additions, pinning specific versions for Jason, ExDoc, and their transitive dependencies like EarmarkParser and Makeup.

(dependencies) · high confidence

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

How this codebase got here

Score

  • CAI 55 → 57 (+1.7)
  • Rubric changed (rubric-2026.09.15 → rubric-2026.10.1) — scores are not directly comparable.

Lenses

  • Code Health 100 → 100 (+0.0)
  • Architecture 100 → 100 (+0.0)
  • Maturity 34 → 34 (+0.0)
  • Readiness 70 → 72 (+1.5)
  • Security 65 → 71 (+5.8)

Resolved (2)

  • Documentation: no installation or build instructions (README.md)
  • Documentation: no usage examples (README.md)

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

felt/geo was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.

About this page

  • The score is its most recent published measurement, taken on 3 October 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit acf6ab8fe2cc19baef2a6b17cc54b48e4c0d06ff — the exact code this score is about.
  • Scored under rubric-2026.10.1 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-8fe32cd45d00.