[workspace]
members = [
"crates/kenro-abi",
"crates/kenro-ext",
"crates/kenro-ext-test",
"crates/kenro-wasm",
]
[profile.release]
opt-level = "z"
lto = true
codegen-units = 1
strip = true
[package]
name = "kenro"
version = "0.4.0"
edition = "2024"
rust-version = "1.85"
description = "SpatiaLite-style spatial SQL for SQLite in pure Rust — PostGIS-compatible ST_ functions, GeoPackage R-tree, CRS transform, H3, MVT. Use via rusqlite, loadable extension, or WASM"
license = "MIT OR Apache-2.0"
repository = "https://github.com/reearth/kenro"
keywords = ["sqlite", "gis", "spatialite", "postgis", "geopackage"]
categories = ["database", "science::geo"]
readme = "README.md"
exclude = [".github/"]
[features]
default = ["transform", "h3", "geojson", "mvt"]
full = [
"transform",
"h3",
"geojson",
"mvt",
"overlay",
"spheroid",
"concave-hull",
"delaunay",
"crs-full",
"gml",
"text-encodings",
"voronoi",
"routing",
]
rusqlite = ["dep:rusqlite"]
transform = ["dep:proj4rs"]
h3 = ["dep:h3o"]
geojson = ["dep:geojson"]
overlay = ["dep:i_overlay"]
text-encodings = ["transform"]
spheroid = []
concave-hull = []
delaunay = []
voronoi = ["delaunay", "overlay"]
mvt = []
gml = ["dep:quick-xml"]
crs-full = ["transform", "proj4rs/crs-definitions"]
routing = []
[dependencies]
geo = "0.33"
geo-types = "0.7"
geozero = { version = "0.15", default-features = false, features = [
"with-wkb",
"with-wkt",
"with-geo",
] }
serde_json = "1"
thiserror = "2"
rusqlite = { version = "0.40", optional = true, default-features = false, features = [
"functions",
] }
proj4rs = { version = "0.1.10", optional = true, default-features = false, features = [
"geo-types",
] }
h3o = { version = "0.10", optional = true }
geojson = { version = "0.24", optional = true, default-features = false, features = [
"geo-types",
] }
quick-xml = { version = "0.37", optional = true, default-features = false }
i_overlay = { version = "4.5", optional = true, default-features = false }
[dev-dependencies]
rusqlite = { version = "0.40", features = ["functions", "bundled"] }
proptest = "1"
serde = { version = "1", features = ["derive"] }
serde_json = "1"
geo = "0.33"
geo-types = "0.7"
[[example]]
name = "accuracy_report"
required-features = ["transform"]
[[example]]
name = "routing_bench"
required-features = ["rusqlite", "routing"]
[[test]]
name = "manifest_consistency"
required-features = ["rusqlite"]
[[test]]
name = "postgis_compat"
required-features = ["rusqlite"]
[[test]]
name = "threed_derived"
required-features = ["rusqlite", "overlay", "transform"]
[[test]]
name = "golden_predicates"
required-features = ["rusqlite"]
[[test]]
name = "gpkg_rtree"
required-features = ["rusqlite"]
[[test]]
name = "register_smoke"
required-features = ["rusqlite", "overlay", "mvt", "transform", "h3", "geojson"]
[[test]]
name = "golden_transform"
required-features = ["rusqlite", "transform"]
[[test]]
name = "golden_h3"
required-features = ["rusqlite", "h3"]
[[test]]
name = "golden_geojson"
required-features = ["rusqlite", "geojson"]
[[test]]
name = "golden_accessors"
required-features = ["rusqlite"]
[[test]]
name = "golden_processing"
required-features = ["rusqlite"]
[[test]]
name = "golden_bool_ops"
required-features = ["rusqlite", "overlay"]
[[test]]
name = "golden_buffer"
required-features = ["rusqlite", "overlay"]
[[test]]
name = "golden_mvt"
required-features = ["rusqlite", "mvt"]
[[test]]
name = "golden_routing"
required-features = ["rusqlite", "routing"]
[[test]]
name = "golden_box_text"
required-features = ["rusqlite"]
[[test]]
name = "golden_quantize"
required-features = ["rusqlite"]
[[test]]
name = "gpkg_polyhedralsurface"
required-features = ["rusqlite"]
[[test]]
name = "proptests"
required-features = ["overlay", "mvt"]