Docs / Concepts / Why MapConductor

Why MapConductor

Code that shows a map is usually welded to one map SDK. When the time comes to move, the rewrite is not confined to the map — it reaches into your screen logic. MapConductor replaces that weld with one shared API.

PROVIDERS
13
PLATFORMS
Android · iOS · Web
LICENSE
Apache 2.0
Intro video · A unified map SDK for mobile app developers — FOSSASIA Summit 2026

01 · The problem

01

Pricing and contracts move

Map API billing changes. You want to move, and your own code is what stops you.

02

The same feature, written three times

A different map SDK on Android, iOS and the web means markers behave differently and camera numbers mean different things. Every spec discussion happens three times.

03

The numbers disagree

What zoom 14 shows, and how far apart two points are, drift between environments when you lean on each SDK utilities. QA ends up adjudicating which one is right.

04

Volume breaks it

Past a few thousand markers a naive implementation makes the camera stutter. The fix differs per provider, and each one is another rewrite.

02 · What MapConductor does

Your app depends only on the unified API. Drivers absorb the per-provider differences, and switching comes down to swapping one dependency and one view type.

ONE TYPE

Shared coordinates and state

GeoPoint, MarkerState and MapCameraPosition mean the same thing and carry the same name on all three platforms. No provider types leak through.

ONE SCALE

Zoom and distance agree

Zoom is normalised onto one scale, and distance, heading and area come from the SDK own implementation. Identical inputs give identical numbers on every provider.

ONE SHAPE

Just hand over the state

Hand over the array of what should exist now; Core diffs it against last time and applies only what moved. You never track adds, updates and removals yourself.

Volume is handled inside the SDK

Past 2,000 markers the internal rendering engine switches to raster tiles on its own. Camera work stays smooth at tens of thousands and not a line of your code changes. The threshold is a map-view option if you want a different one.

03 · Not just a thin wrapper

A wrapper that only dispatches to each SDK ends up limited by whichever SDK does least. MapConductor draws the missing pieces itself, so appearance and behaviour stay put when the provider changes.

Implemented in the SDK
What that buys you
Geodesy
Distance, heading, area and interpolation written from the same formulas in Kotlin, Swift and TypeScript. Nothing depends on an SDK utility, so displayed numbers never disagree.
Marker rendering engine
Native markers when there are few, raster tiles when there are many, with a spatial index keeping hit tests and viewport queries independent of the count.
Holed polygons, great circles
Where the native SDK cannot do it, the shape is drawn as raster tiles to match. Your call sites do not change.
A shared camera
Zoom and camera altitude convert into each other, calibrated against measured visible areas. Zoom 14 covers the same ground everywhere.
Attribution
Rules that switch the attribution by zoom and area are part of the design object, so bringing your own tiles still shows the right credit.

04 · What it buys the team

Putting one shared API in the middle changes what kind of code you can write. Code with no map SDK name in it survives a change of provider, and a move to another platform.

LEARNING COST

One API to learn

Every map SDK names things its own way, so each change of provider and each move to another platform means learning it again. With MapConductor there is one API, carrying the same names and the same meanings on Android, iOS and React. What someone learns on one platform holds on the next, and onboarding does not grow with the number of providers.

REUSE

Code that owes nothing to a map SDK

GeoPoint and MarkerState belong to no map SDK. Building a route, testing whether a point falls inside an area, deciding what to show — that logic can be written without a single SDK type in it, so changing provider is not a rewrite. Shared map components can be factored out as a library instead of one build per provider.

05 · Seen from the data side

Everything above is written from the app side. What MapConductor is after is not only freedom from vendor lock-in, but the freedom to decide which vendor you lean on separately from which map SDK you draw with.

SOMETIMES THERE IS NO CHOICE

A commercial SDK is usually where you land

Unless the whole stack is open, production work lands on some commercial map SDK. Contracts and procurement sometimes leave exactly one option. What MapConductor is for is not having to throw away what you already own when that happens.

UNBUNDLING

Data apart from the SDK that drew it

Map data, geocoding and tiles have come bundled with the SDK of the vendor that supplies them. Separate the two and content built up in, say, ArcGIS can be put to work on a map drawn by something else.

PROVIDERS WITHOUT A VIEW

Geocoding only, data only

A provider that offers geocoding, or one dataset, and no map SDK of its own has had few places to be used. Split display from data and it can sit on top of any map.

There is no feature for this yet. The closest thing today is the Android SDK loading ArcGIS Online content, and that is displayed on the ArcGIS view. What is written here is the direction, not a list of what ships now.
Complying with the terms of each dataset and service is the responsibility of the developer who integrates it. A combination being technically possible says nothing about it being permitted.

06 · Seen from a map SDK provider

A shared layer can look, from a map SDK vendor's side, like something that dilutes them. That is not how MapConductor is built. Only the part every provider already has is unified; what each vendor is good at stays reachable.

NEW ARRIVALS

Customers from outside

Once several providers can be driven the same way, apps built on someone else's SDK become reachable. A lower switching cost cuts both ways — it also loosens the hold on the customers you have — but what remains as a reason to be chosen is price, coverage and how well you draw, rather than the cost of leaving.

A MINIMUM, NOT A WRAPPER

Your differentiators stay visible

What is unified is the part every provider already has. Calling getMapViewHolder() on the state object hands back the native map view and map instance, so anything only your SDK offers is written against your own API. A wrapper that hid everything would erase what makes each provider different; this one does not.

THE FIELD AS A WHOLE

Competing on a shared footing

After HTML5 settled what browsers had to implement, browsers stopped competing on compatibility and started competing on speed and capability. Map SDKs are no different: with a shared interface in place, the question becomes how fast, how accurately and how widely you can draw. A common layer is not a brake on individual SDKs — it points their progress the same way.

07 · When it fits, and when it does not

A GOOD FIT
  • One map experience across several platforms
  • Keeping the option to change provider later
  • Markers, shapes and camera work as the core of the feature
  • Thousands to tens of thousands of markers
  • Distances and areas that have to agree everywhere
A POOR FIT
  • A provider-specific showpiece — custom shaders, one vendor exclusive layer
  • Turn-by-turn navigation and other features that are the SDK own product
  • One platform, one provider, and no intention of ever changing

Mixing is still possible: the native map instance is always reachable, so the unusual parts can be written against the provider directly.

Read next