
honua-sdk-js
by honua-io
Honua JS SDK
MapLibre renders the map. Honua connects, queries, explains, and mounts the data.
@honua/sdk-js is the integration layer for the open map stack: typed clients for the
protocols your data already speaks (Esri GeoServices, OGC API Features / Tiles / Maps /
Processes, STAC, WMS, WMTS, WFS 2.0, OData v4), a one-call data→map bridge and MapLibre
runtime, provider-pluggable geocoding and routing, and a drop-in ArcGIS compatibility
layer with a codemod. MapLibre is the stable renderer path; the optional Cesium scene
surface is beta on @honua/app-platform, and Kepler.gl integration is experimental.
Leaving ArcGIS? Every classic Esri widget was deprecated at ArcGIS JS SDK 5.0 and
removal begins with 6.0 — as early as Q1 2027. If your app constructs one, that code stops
compiling and running when you take the 6.0 upgrade. Run
npm run scan:arcgis:widgets -- ./src for a per-file readiness report, then read the
widget-removal survival guide — every deprecated
widget mapped to its Honua/MapLibre disposition.
A public endpoint to a styled map
Nine application lines. No Honua server, no API key, no account — a public Esri Living Atlas FeatureServer becomes a styled, interactive MapLibre map:
import { connect } from "@honua/sdk-js";
import { mountSource } from "@honua/sdk-js/map";
import * as maplibregl from "maplibre-gl";
const endpoint = "https://services.arcgis.com/P3ePLMYs2RVChkJx/arcgis/rest/services/2020_Census_State_Apportionment/FeatureServer/0";
const map = new maplibregl.Map({ container: "map", style: "https://demotiles.maplibre.org/style.json", center: [-98, 39], zoom: 3 });
await map.once("load");
const data = await connect({ endpoint, protocol: "auto", authorizationScopeFingerprint: "public" });
await mountSource(map, data.source(), {
popup: { factory: () => new maplibregl.Popup(), fields: ["NAME", "Seats_2020"] },
hover: true,
fitBounds: true,
});
For those nine lines the bridge selected a materialization strategy from the source's
declared capabilities, installed geometry-appropriate default styling, wired click popups
and hover feature-state, fit the map to the data, and returned one owned handle
(setFilter() diff-updates in place; dispose() removes everything the bridge added).
Run the canonical inspected workflow with npm run demo:quickstart:mock
(examples/maplibre-quickstart/); the focused lower-level cookbook
is docs/data-to-map-bridge.md.
For an application that opens more than one source or needs deterministic refresh and shutdown, put discovery under one instance-scoped owner:
import { createHonua } from "@honua/sdk-js";
const honua = createHonua({ discoveryCacheMaxEntries: 128 });
try {
const data = await honua.connect(
"https://services.arcgis.com/P3ePLMYs2RVChkJx/arcgis/rest/services/2020_Census_State_Apportionment/FeatureServer/0",
);
const inspection = await data.inspect();
const source = data.source<{ NAME: string; Seats_2020: number }>();
console.log(inspection.cacheStatus, source.descriptor.id);
} finally {
await honua.dispose();
}
Related servers

n8n
Updated todayby n8n-io
Fair-code workflow automation platform with native AI capabilities. Combine visual building with custom code, self-host or cloud, 400+ integrations.

mcp-server-git
OfficialUpdated todayA Model Context Protocol server providing tools to read, search, and manipulate Git repositories programmatically via LLMs

mcp-server-fetch
OfficialUpdated todayA Model Context Protocol server providing tools to fetch and convert web content for usage by LLMs