Skip to main content

Best 3D globe npm packages for JavaScript and React

There is no honest single winner for every globe project. A decorative WebGL hero, a Canvas 2D data graphic, a tiled map, and a terrain engine solve different problems.

We tested nine current npm packages with the same deterministic data, viewport, browser, and measurement code. The goal is to help you choose the right renderer, not to make CanvasGlobe look fastest in every table.

Open the same-data benchmark lab to switch between all nine renderers and the 250, 1,000, and 5,000-marker workloads yourself. The lab uses the same seeded fixture as the measured results below.

Short answer​

ChooseBest fitMain trade-off
CanvasGlobeCanvas 2D globe and flat maps, no WebGL, keyboard-ready canvas, PNG and WebM exportNot a true 3D scene engine and not the fastest option for 5,000 animated markers
three-globeA Three.js class with rich 3D geographic layersLarge Three.js dependency surface and direct server import failed in our Node check
globe.glHigh-level WebGL globe with points, arcs, labels, objects, and custom layersLarger bundle and dependency graph than focused globe components
react-globe.glReact applications that want globe.gl featuresAdds React wrapper cost and still needs WebGL
CobeSmall, polished decorative WebGL globesNarrower data, map, accessibility, and export scope
CesiumJSTerrain, imagery, 3D Tiles, and full geospatial applicationsMuch larger platform and operational scope
MapLibre GL JSTiled maps, geographic styling, labels, and globe projectionA map engine rather than a self-contained globe component
@wescld/dotted-mapFocused React dotted maps and globesReact-specific and intentionally narrower
MappoCompact dotted globes, SVG maps, and custom bodiesRegion geometry and broader application behavior remain your responsibility

Measured normal desktop workload​

These results use 250 markers and 25 routes at 1280 by 720. Each value is the median of 20 measured runs after three warm-ups. Lower timing values are better.

Package versionRendererGzip bundle closureData renderInteraction frameTransitive packages
canvas-globe 1.2.0Canvas 2D106.1 KB259.4 ms53.6 ms0
three-globe 2.45.2Three.js and WebGL499.3 KB98.9 ms16.6 ms36
globe.gl 2.46.2Three.js and WebGL528.6 KB110.2 ms16.6 ms44
react-globe.gl 2.38.0React, Three.js, and WebGL597.7 KB214.1 ms16.6 ms52
cobe 2.0.1WebGL6.6 KB57.6 ms16.6 ms0
cesium 1.145.0WebGL geospatial engine1,080.7 KB305.2 ms16.6 ms28
maplibre-gl 6.10.0WebGL map engine265.1 KB363.4 ms16.6 ms24
@wescld/dotted-map 1.0.0React and Canvas 2D83.6 KB47.1 ms16.6 ms0
mappo 0.3.0Canvas 2D and SVG16.2 KB62.6 ms16.6 ms0

CanvasGlobe was not the fastest renderer in this test. Its measured advantages were a zero-package dependency closure, no WebGL requirement, a labeled and focusable canvas in the default adapter, direct server import, and built-in image and video export APIs.

The bundle value is the minified gzip closure Vite associated with each isolated adapter. It is a controlled comparison, not a promise about your final application bundle.

5,000-marker emulated-mobile stress test​

This workload uses 5,000 markers, 250 routes, a 390 by 844 viewport, and device scale factor 2. It is browser emulation on the test laptop, not evidence from a physical lower-end phone.

PackageData render medianFrame medianHeap median
CanvasGlobe1,476.4 ms365.1 ms8.9 MB
three-globe215.8 ms22.1 ms47.8 MB
globe.gl202.2 ms25.6 ms46.0 MB
react-globe.gl528.1 ms24.6 ms53.9 MB
Cobe84.2 ms16.7 ms5.8 MB
CesiumJS495.9 ms16.6 ms105.8 MB
MapLibre GL JS373.5 ms16.6 ms11.8 MB
@wescld/dotted-map52.0 ms16.9 ms40.6 MB
Mappo144.7 ms37.4 ms7.1 MB

If your main requirement is thousands of independently animated objects, use a GPU-backed WebGL library. CanvasGlobe is better suited to smaller presentation and data-visualization workloads where Canvas 2D behavior, exports, and a controlled dependency surface matter more.

Server import and default accessibility surface​

We imported each package directly in Node and inspected the default benchmark render for a labeled, focusable visualization. These are surface checks, not a WCAG audit and not a claim that an application cannot add its own semantics.

PackageDirect Node importDefault canvas labeled and keyboard reachable
CanvasGlobePassedPassed
three-globeFailed: window is not definedNot present in adapter
globe.glFailed: window is not definedNot present in adapter
react-globe.glFailed: window is not definedNot present in adapter
CobePassedNot present in adapter
CesiumJSPassedPartial: controls were reachable, canvas was not labeled
MapLibre GL JSPassedPassed
@wescld/dotted-mapPassedNot present in adapter
MappoPassedNot present in adapter

Framework and SSR compatibility​

A direct Node import is not the same as framework hydration. Browser-only packages can still work behind a client-only boundary, so we do not infer one result from the other.

For CanvasGlobe, we built production starters for all four frameworks, checked that the heading and canvas shell were present in server HTML, then opened the production output in Chrome. Each test required a rendered bitmap and no page, request, or hydration errors.

LibraryPrimary package surfaceDirect Node importNext.jsNuxtSvelteKitAngular
CanvasGlobeCore plus first-party React, Vue, Svelte, Angular, and Web Component packagesPassedPassedPassedPassedPassed
three-globeImperative Three.js classFailed: window is not definedNot testedNot testedNot testedNot tested
globe.glImperative DOM componentFailed: window is not definedNot testedNot testedNot testedNot tested
react-globe.glReact componentFailed: window is not definedNot testedNot testedNot testedNot tested
CobeImperative WebGL canvas APIPassedNot testedNot testedNot testedNot tested
CesiumJSImperative geospatial enginePassedNot testedNot testedNot testedNot tested
MapLibre GL JSImperative map enginePassedNot testedNot testedNot testedNot tested
@wescld/dotted-mapReact componentPassedNot testedNot testedNot testedNot tested
MappoImperative Canvas 2D and SVG APIPassedNot testedNot testedNot testedNot tested

Competitor hydration cells remain Not tested rather than being guessed from package documentation. The machine-readable framework evidence and four-framework browser report are committed with the test runner and Nuxt starter.

Export and network behavior​

CanvasGlobe exposes direct PNG snapshot and WebM recording APIs. The other adapters could be captured through their browser canvas, but we did not count application-level canvas capture as a built-in library export API.

The benchmark deliberately used self-contained data and local assets. It made no claim that CesiumJS or MapLibre applications are normally network-free. Those engines commonly load imagery, terrain, styles, tiles, or 3D content from services. The raw request and transfer figures describe only the controlled local harness.

How the test works​

  • deterministic seed 20260919
  • normal, dense, and stress workloads
  • desktop and emulated-mobile viewports
  • three warm-ups and 20 retained runs for every group
  • disabled browser cache for cold-load runs
  • median and p95 retained with every raw sample
  • Chromium 153 on Windows, Intel Core i5-11320H, same machine for all runs
  • 54 validated records and 1,080 retained runs
  • no valid outliers removed

The complete adapters, lockfile, schema, raw samples, environment data, and generated report are available in the reproducible benchmark source.

When CanvasGlobe is the wrong choice​

Choose another tool when you need:

  • true camera perspective, scene depth, custom shaders, or arbitrary 3D objects
  • terrain, satellite imagery, 3D Tiles, or a full GIS engine
  • very large animated point clouds where GPU rendering is central
  • the smallest possible decorative globe with only a few locations
  • a permissively licensed production component instead of commercial terms

Choose CanvasGlobe when you need a no-WebGL Canvas 2D component with globe and flat projections, markers, routes, choropleths, keyboard behavior, reduced motion, and built-in export in one package. Try the playground with your own largest realistic dataset before purchasing.

If you are evaluating a paid production component, the premium interactive globe component guide collects the live product, commercial evidence, implementation scope, license path, and reasons not to buy in one review page.

Primary references​

Last measured: September 19, 2026.

Talk to a real person

Live human support. Choose what you need help with.