Honua
// pillar 02 · low risk migration

Migrate by automation,
not by hand.

Import services. Convert apps. Validate parity. Run old and new side by side. Honua ships a migration converter for every SDK — JavaScript, .NET, Python, and mobile (MAUI). Your team doesn't write a migration project, they run one — in the language their app already uses.

honua-migrate codemod · example output
honua-migrate codemod ./webmap-app \
--target honua-compat --write --report parity.json
analyzing source files...
FeatureLayer / MapView / Map rewritten
Query options deep-transformed
reactiveUtils.watch accessors rewritten
event names remapped layer-view-created · …
 
parity is partial · gaps in docs/migration-punch-list.md
report written to ./parity.json
# real binary in honua-sdk-js; numbers come from your run
// sdk converters · JS today · others on roadmap

One converter per SDK. Same playbook.

JavaScript ships a real honua-migrate codemod today — AST scanner, constructor rewrites, event-name + Query option transforms, and a flagged-for-review list with a parity report. The .NET, Python, and MAUI converters follow the same playbook and are on the roadmap; their parity surfaces ship today.

JS
JavaScript SDK
@honua/sdk-esri-compat · scanner + codemod
production tooling
$honua-migrate codemod ./webmap-app --target honua-compat --write
@arcgis/core @honua/sdk-esri-compat
// what the converter rewrites
  • import paths & barrel re-exports
  • FeatureLayer · MapView · Map constructors
  • portal references & webmap content
  • renderer / symbol / popup wiring
honua-sdk-js · Vitest + Playwright in CI
.NET
.NET SDK
Honua .NET · Roslyn codemod + adapters
roadmap
$honua-migrate dotnet ./MyApp.csproj // roadmap
ArcGIS Runtime .NET Honua .NET
// what the converter rewrites
  • Esri.ArcGISRuntime usings → Honua namespaces
  • Map · MapView · GraphicsOverlay ctors
  • FeatureTable · ServiceFeatureTable
  • PortalItem & WebMap loaders
honua-sdk-dotnet · integration suite
PY
Python SDK
honua-sdk-python · scanner + rewrites
roadmap
$honua-migrate python ./notebooks/ ./scripts/ // roadmap
arcgis (Esri Python) + arcpy honua-sdk-python
// what the converter rewrites
  • arcgis.GIS / Map / FeatureLayer surfaces
  • arcgis.features.* spatial ops
  • arcpy.* GP toolbox calls → OGC API Processes
  • notebook + script + module callers
honua-sdk-python · ArcPy executor in flight
MAUI
Mobile SDK · .NET MAUI
honua-mobile · MAUI codemod + offline sync
roadmap
$honua-migrate maui ./MobileApp.sln // roadmap
ArcGIS Maps SDK · MAUI / Xamarin Honua MAUI
// what the converter rewrites
  • MapView · Layer constructors (MAUI)
  • GeoPackage offline collection → Honua sync
  • Field-form bindings · OpenRosa
  • native map integration shim
honua-mobile · field-collection-first
// js converter · example output

Here's what one of those rewrites looks like.

A representative honua-migrate codemod diff. The shape of the ArcGIS surface is preserved through the Compat classes; the runtime, transport, and infrastructure underneath are Honua's. The .NET, Python, and MAUI converters will apply the same pattern to their ecosystems on the roadmap.

honua-migrate codemod · diff webmap-app/src/MapView.jsx
BEFOREArcGIS JS API · v4
// hand-maintained ArcGIS JS app
import Map from "@arcgis/core/Map";
import MapView from "@arcgis/core/views/MapView";
import FeatureLayer from "@arcgis/core/layers/FeatureLayer";
 
const map = new Map({ basemap: "streets-navigation-vector" });
const view = new MapView({ container: "viewDiv", map });
const parcels = new FeatureLayer({
url: "https://gis.acme.gov/.../Parcels/FeatureServer/0",
});
map.add(parcels);
AFTER · AUTOMATED@honua/sdk-esri-compat
// imports + constructors rewritten to Compat surface
import { MapCompat, MapViewCompat, FeatureLayerCompat } from "@honua/sdk-esri-compat";
 
 
 
const map = new MapCompat({ basemap: "streets-navigation-vector" });
const view = new MapViewCompat({ container: "viewDiv", map });
const parcels = new FeatureLayerCompat({
url: "https://gis.acme.gov/.../Parcels/FeatureServer/0",
});
map.add(parcels);
// migration path

Lower switching cost with compatibility + checks.

PathMigration supportAdoption value
Esri service import FeatureServer, MapServer, ImageServer, Geometry Service, GPServer — schemas, styles, permissions, service references. Existing Esri clients validate against Honua before any cutover.
App conversion (SDK parity) honua-migrate codemod rewrites ArcGIS JS imports, FeatureLayer / MapView / Query / reactiveUtils constructors and call sites to @honua/sdk-esri-compat; .NET / Python / MAUI converters are on the roadmap. App migrations stop being rewrite projects. Auto-migration ratio is emitted per-run in the parity report; remaining call sites carry a TODO(honua-migrate) marker for review.
GeoServer service import WFS, WMS, WMTS, WCS, layers, styles, CRS, metadata, service endpoints. GeoServer-facing clients keep using familiar standards while the backend changes.
Standards & data ingestion OGC services, GeoServices REST, files, databases, object storage paths — all staged. Move service by service, dataset by dataset. No big bang.
Parity checks Diff features, tiles, rendered maps, response shapes, and workflow behavior. Prove equivalent behavior before any user is moved.
// adoption model

Run old and new together.

01 · IMPORT
Import.
Pull existing ArcGIS, GeoServer, file, and database-backed services into Honua. Schemas, styles, permissions, and service references come along.
02 · CONVERT
Convert.
Run the SDK converter against your ArcGIS JS apps. Imports, FeatureLayer constructors, portal references, and styles rewrite automatically. The hard judgment calls stay flagged for review.
03 · EXPAND
Expand.
Keep legacy clients on the compatibility surface. Move new work to Honua's SDKs, gRPC, MCP, and AI workflows at the team's pace.
// next

Run the import. Run the converter.
Ship a side-by-side rollout.