ApexMaps 1.0.0: A Stable API, Hex Tile Maps, and Hexbin Density
ApexMaps 1.0.0 shipped on October 6, 2026 and commits the public API to semantic versioning; this post also covers 0.4.0 (September 1), which added hex tile layouts, a morph back to real boundaries and a hexbin series. Nothing breaks since 0.3.0 and no configuration change is needed, but two 0.4.0 behaviors can change how an existing map looks, so check the table below.
Key takeaways
- Stable public API (1.0.0): breaking changes now wait for a major version.
- Wrappers at 1.0.0 peer
apexmaps ^1.0.0, so a later core minor no longer forces a wrapper upgrade. - Hex tile layouts (0.4.0, Premium):
layout: 'hex'gives every region one equal cell, for seven region sets. - Hexbin (0.4.0, Premium):
type: 'hexbin'colors a hexagonal lattice by point density and refines as the reader zooms. - No breaking changes: a 0.3.0 configuration runs unchanged on 1.0.0.
- Upgrading is
npm install apexmaps@1.0.0.
Which defaults changed?
| Change | Release | What you will see | How to reverse it |
|---|---|---|---|
Map chrome falls back to the family's --apx-* root tokens | 0.4.0 | A page that already sets --apx-fore, --apx-surface, --apx-grid or --apx-accent for its charts restyles its maps to match. Dark mode takes no tokens and is unchanged | Set the matching --apexmaps-* property, which still wins |
An empty tooltip.formatter result hides the tooltip | 0.4.0 | Returning '' shows no tooltip for that mark instead of an empty chip | Return a non-empty string |
A page with no --apx-* tokens renders as before. See Theming for the --apexmaps-* properties.
What does ApexMaps 1.0 mean?
A minor release can no longer break your code: the README now reads "stable since 1.0.0". The release adds no features and changes no map behavior. Besides the version, which the root package, all three wrappers and the runtime VERSION constant take together, it changes three things:
- Wrapper peers. Under 0.x a caret pins the minor, so every core minor forced
react-apexmaps,vue-apexmapsandngx-apexmapsto move with it. Each now peers^1.0.0, which spans every 1.x minor. - License text. The Community threshold now reads as it does across the family: under $2 million USD in annual revenue, operating budget, funding or equivalent financial resources, measured across a parent company, affiliates and any entity under common control. The license also lists the features that need Premium, and is renamed
LICENSE.mdso GitHub renders it. - A dependency update.
apex-commonsmoves to^0.8.0.
What is a hex tile map, and how do I make one in ApexMaps?
A hex tile map (also called a honeycomb or tilegram) gives every region one hexagon of the same size, so land area stops deciding how loud a value is. The layout is a property of the geometry, not of the series:
const map = new ApexMaps(el, {
geo: { map: 'us', layout: 'hex' },
series: [{ type: 'choropleth', name: 'Index', joinBy: 'abbr', data }],
})
await map.updateOptions({ geo: { map: 'us', layout: null } }) // morphs back
Seven layouts ship: US states, Japan, Europe, Brazil, Germany, Canada and Australia. Each is keyed like its boundary pack, so one dataset and one joinBy serve both pictures. Toggling layout morphs each region between its outline and its cell, with no option to enable it, and respects prefers-reduced-motion and chart.animations.enabled: false.
Press the button on the left map to watch the morph. Hex Tile Layouts covers the layout ids, aliases and registerLayout for your own cell table.
What is a hexbin map, and when should I use one?
Use a hexbin when you have more points than a marker map can show: past the first overlap, the ink stops tracking the number. A hexbin lays a lattice over the projection and colors each cell by what landed in it.
series: [
{
type: 'hexbin',
name: 'Sightings',
data: points, // { lon, lat }, { lng, lat } or { coordinates }
radius: 12, // screen pixels, center to vertex
aggregate: 'count', // or sum, mean, min, max
scale: { palette: 'viridis', classes: 6 },
},
]
The radius is in screen pixels, so the lattice refines as the reader zooms instead of magnifying, and the color domain follows the bins: pin scale.domain when two maps must be read against each other. There is no joinBy; rows with region keys instead of coordinates want a choropleth.
The demo bins 20,000 points; its panel that draws every point as a marker waits for a click. Hexbin covers orientation, minCount, gap, valueField and every aggregate.
Which ApexMaps features need a license?
Hexbin and hex tile layouts join the features licensed on the Premium plan and above. Hexbin was licensed from its first release, so nothing moved behind the gate, and the morph adds no gate of its own. Without a key each renders in full with a watermark; ApexMaps.setLicense(key) removes it.
The choropleth, bubble and marker series, every built-in projection and geometry pack, joins, scales, legends, tooltips, the camera and the accessibility layer are covered by the Community License, free under $2M in annual revenue, budget or funding. Point clustering, drilldown, story mode and the other Premium features still need a Premium key; see Licensing for the full table and pricing for current plans.
Other fixes
- Beads on
flow: trueroutes move at one screen speed from 0.5x to 10x zoom, instead of speeding up and thinning out (0.4.0).
The full lists are in the 0.4.0 and 1.0.0 GitHub releases.
How do I upgrade to ApexMaps 1.0.0?
npm install apexmaps@1.0.0
npm install apexmaps@1.0.0 react-apexmaps@1.0.0 # with a wrapper: or vue-apexmaps, ngx-apexmaps
- Upgrade a React, Vue or Angular wrapper in the same step.
- Check the two 0.4.0 behaviors against pages that set
--apx-*tokens or return''from a tooltip formatter. - If you self-host geometry through
ApexMaps.setGeoSource(), copy the seven new layout files: the dataset goes from 26 files to 33, and the boundary packs are unchanged. The default CDN source, pinned toapexmaps-geo@1, already serves them. See Geometry Registry.
New to ApexMaps? Start with the installation guide or browse the demos.
Frequently asked questions
Is ApexMaps stable now?
Yes. Since 1.0.0, published on October 6, 2026, the public API follows semantic versioning. Under 0.x any minor release could change options incompatibly; from 1.0.0 on, an incompatible change waits for a major version.
What is the difference between a hexbin and a hex tile layout in ApexMaps?
Ask what one cell stands for. In a hex tile layout (geo.layout: 'hex') a cell is one region, placed by hand, and joined on region keys. In a hexbin (type: 'hexbin') a cell is a patch of the projection that points with coordinates fell into, drawn on top of a basemap.
Can I try hexbin and hex tile layouts before buying a license?
Yes. Both are Premium features, but each renders in full without a key, with a watermark on the map, so you can evaluate it in your own app with your own data. Calling ApexMaps.setLicense(key) with a Premium or higher key removes the watermark.
Do I need to install apexmaps-geo to use hex tile layouts?
No, not on the default geometry source: it is pinned to apexmaps-geo@1 and fetches the layout files from 1.1.0 on its own. Only a self-hosted copy set with setGeoSource() needs the seven new layout files added next to the boundary packs.