Geospatial.Grpc 1.0.0

dotnet add package Geospatial.Grpc --version 1.0.0
                    
NuGet\Install-Package Geospatial.Grpc -Version 1.0.0
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Geospatial.Grpc" Version="1.0.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Geospatial.Grpc" Version="1.0.0" />
                    
Directory.Packages.props
<PackageReference Include="Geospatial.Grpc" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Geospatial.Grpc --version 1.0.0
                    
#r "nuget: Geospatial.Grpc, 1.0.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Geospatial.Grpc@1.0.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Geospatial.Grpc&version=1.0.0
                    
Install as a Cake Addin
#tool nuget:?package=Geospatial.Grpc&version=1.0.0
                    
Install as a Cake Tool

Geospatial gRPC Protocol Standard

CI OpenSSF Scorecard License: Apache 2.0 Latest release

An open, vendor-neutral gRPC/Protobuf protocol standard for geospatial systems: feature access, mobile data collection, styles, elevation, 3D scenes/tiles, and execution workflows (processes, pipelines, rendering, app building, deployment). Existing geospatial interop standards are REST/XML-first; this project defines the equivalent contracts as strongly typed, streaming-capable gRPC services so servers and clients in any language can interoperate over one schema.

This is a schema/contract repository — the .proto files under geospatial/v1/ are the source of truth. There is no server or application code here; implementations and SDKs generate clients from these definitions (ownership rules).

Status

Stable v1. v1.0.0 closes the pre-release stabilization window. The full within-major compatibility guarantees in VERSIONING.md now apply without exception. Every PR is gated by buf lint, buf format, buf breaking (WIRE_JSON + RPC/service no-delete rules), multi-language codegen, and a conformance-fixture round-trip.

What the standard defines

All services live in the geospatial.v1 package, one service per file. Each execution-plane service follows a validate / dry-run / execute pattern.

Service Purpose
FeatureService Feature CRUD: query, server-streaming pages, batch edits
FormService Mobile data collection: dynamic forms, validation, submission
WorkspaceService Workspace lifecycle: create/open/list, promote, retain/release, quotas
ArtifactService Artifact lifecycle: publish/read/inspect, retention policies
ProcessService Geospatial process execution: plan validation, dry-run, sync/streaming/async
PipelineService Data publishing pipelines: validation, dry-run, stage-by-stage execution
RenderService Map composition; produces MapLibre-compatible MapPackage bundles
BuilderService Application bundle synthesis; produces AppPackage bundles
DeploymentService Promotion to live targets with health telemetry and rollback
SpecService Declarative spec plan/apply workflows with streaming progress
StyleService 2D style catalog: StyleRef styles with typed encodings (MapLibre, SLD, Esri drawing info)
ElevationService Point elevation and geodesic profile sampling
SceneService 3D scene catalog backed by 3D Tiles tilesets and optional terrain
TileService 3D tile delivery by node, or streamed by LOD and extent

Shared type modules: common.proto, spatial_types.proto (geometries with Z/M support), execution_types.proto (plans, steps, jobs, provenance, structured errors), packaging_types.proto (MapPackage, AppPackage, DeploymentSpec), workspace_artifact_types.proto (typed WorkspaceRef/ArtifactRef/RetentionPolicyRef handles and lifecycle enums), style_types.proto, and scene_types.proto.

The full capability map is in docs/features/README.md; message-level detail is in the protocol specification.

Quick start

Generate client code

git clone https://github.com/honua-io/geospatial-grpc.git
cd geospatial-grpc

# Install the Buf CLI (https://buf.build/docs/installation), e.g.:
npm install -g @bufbuild/buf

# Generate every configured language from the immutable stable public schema
buf generate buf.build/honua-io/geospatial-grpc:v1.0.0
# gen/csharp, gen/go, gen/java, gen/python, gen/rust, gen/swift, gen/typescript

# Or generate the local checkout / a single language with its dedicated template
buf generate
buf generate --template buf.gen.go.yaml --output generated/go
# also: buf.gen.csharp.yaml, buf.gen.python.yaml, buf.gen.javascript.yaml, buf.gen.java.yaml

gen/ is build output — it is never committed; regenerate it from the protos.

.NET: use the published protocol package

The stable Geospatial.Grpc NuGet package (netstandard2.0, protos compiled via Grpc.Tools) is available from nuget.org. Downstream .NET projects should reference the exact package version rather than copying .proto files:

dotnet add package Geospatial.Grpc --version 1.0.0

You can also pack it locally:

dotnet pack src/Geospatial.Grpc/Geospatial.Grpc.csproj --configuration Release -o ./nupkgs

First query

.NET:

using Geospatial.V1;
using Grpc.Net.Client;

using var channel = GrpcChannel.ForAddress("https://api.example.com");
var client = new FeatureService.FeatureServiceClient(channel);

var response = await client.QueryFeaturesAsync(new QueryFeaturesRequest
{
    ServiceId = "parcels",
    LayerId = 0,
    Where = "AREA > 1000",
    ReturnGeometry = true
});

foreach (var feature in response.Features)
{
    Console.WriteLine($"Feature {feature.Id}: {feature.Attributes}");
}

TypeScript (protobuf-es + Connect v2):

import { FeatureService } from './gen/typescript/geospatial/v1/feature_service_pb.js';
import { createClient } from '@connectrpc/connect';
import { createGrpcTransport } from '@connectrpc/connect-node';

const transport = createGrpcTransport({ baseUrl: 'https://api.example.com' });
const client = createClient(FeatureService, transport);

const response = await client.queryFeatures({
  serviceId: 'parcels',
  layerId: 0,
  where: 'AREA > 1000',
  returnGeometry: true,
});

response.features.forEach((feature) => {
  console.log(`Feature ${feature.id}:`, feature.attributes);
});

Python:

import grpc
from geospatial.v1 import feature_service_pb2
from geospatial.v1 import feature_service_pb2_grpc

channel = grpc.secure_channel('api.example.com:443', grpc.ssl_channel_credentials())
client = feature_service_pb2_grpc.FeatureServiceStub(channel)

response = client.QueryFeatures(feature_service_pb2.QueryFeaturesRequest(
    service_id='parcels',
    layer_id=0,
    where='AREA > 1000',
    return_geometry=True,
))
for feature in response.features:
    print(f'Feature {feature.id}: {feature.attributes}')

Runnable end-to-end samples live in examples/:

Example Run
JavaScript/TypeScript npm install && npm run generate && npm run dev
Python pip install -r requirements.txt && python main.py
.NET dotnet run

Conformance suite

conformance/ holds canonical request/response fixtures for the core workflows plus a language-agnostic regression harness that round-trips them against the live schema with buf convert — catching contract drift before it reaches generated SDKs:

conformance/run.sh            # verify fixtures against committed goldens
conformance/run.sh --update   # regenerate goldens after a reviewed schema change

Each schema release publishes the fixture set as a versioned, checksummed tarball on the matching GitHub Release (conformance-fixtures-<version>.tar.gz). Implementations pin a version with conformance/fetch-fixtures.sh --version <version> and run the bundled harness in their own CI. See conformance/README.md for the consumer contract.

Versioning and stability

VERSIONING.md is the canonical policy. In short:

  • Proto package majors (geospatial.v1) align with release-tag majors.
  • Within a major: wire compatibility, JSON mapping stability, field/enum number stability, and RPC surface stability are guaranteed between tagged releases.
  • Breaking changes require deprecation first, maintainer sign-off, and a new package version path (geospatial/v2) — enforced in CI by buf breaking on every PR and on every push to trunk against the previous release tag.
  • The historical pre-1.0 exception is closed. It remains documented only to explain the alpha baselines; it cannot be used for v1 changes.

Implementing the standard

  1. Generate server stubs for your language (buf generate, or the per-language templates).
  2. Implement the services relevant to your product — the standard does not require every service.
  3. Validate payload compatibility against the pinned conformance fixtures in your CI.
  4. Follow CONTRIBUTING.md to propose schema changes — contracts evolve here first, never in downstream copies (proto ownership).

Known implementations and clients:

Documentation

Document Contents
Protocol specification Design principles and per-service protocol detail
Getting started Tooling setup and per-language walkthroughs
Feature map Implemented protocol surfaces and boundaries
Proto ownership Canonical-source and downstream sync rules
Versioning policy Compatibility guarantees and breaking-change governance
Release checklist Release coordination and client regeneration
Changelog Release history, including acknowledged alpha baselines
  • geospatial-mcp — companion open standard: geospatial tools over the Model Context Protocol
  • geobench — vendor-neutral benchmark suite for geospatial servers

Contributing

Contributions are welcome — see CONTRIBUTING.md for local validation (buf lint, buf format --diff --exit-code, buf breaking --against '.git#branch=trunk'), the proto change workflow, and what must not change within v1. Questions and proposals go through GitHub Issues.

Security

Report vulnerabilities privately to security@honua.io — see the security policy. Do not open public issues for security reports.

License

Apache License 2.0.

Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
.NET Core netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.0 is compatible.  netstandard2.1 was computed. 
.NET Framework net461 was computed.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen40 was computed.  tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.0.0 1,230 8/31/2026

Stable geospatial.v1 protocol contract. See https://github.com/honua-io/geospatial-grpc/blob/trunk/CHANGELOG.md