@globestudio/react
React component that embeds Globestudio dotted globes and maps. It has no dependencies, works with SSR and autocompletes preset names.
Install
npm install @globestudio/react
Use
import { Globe } from "@globestudio/react";
export default function Page() {
return (
<section>
<h1>Worldwide coverage</h1>
<Globe look="aurora" width={800} height={600} />
</section>
);
}
The component is a styled <iframe> over globestudio.app/embed, so the heavy work (Three.js, shaders, country data) runs on the embed origin and your bundle stays a couple hundred bytes.
In the app, the export dialog's Share tab writes a <Globe config=… /> snippet for the design on screen: pick React under Embed code and copy it.
Props
look | LookId | "halftone" | Autocomplete on every shipped preset |
width | number | string | "100%" | A number means pixels |
height | number | string | 480 | A number means pixels |
config | string | | Pre-built share-URL payload, layered over look when you pass both, or over Default alone |
title | string | "Globestudio dotted globe" | A11y label |
className | string | | Forwarded |
style | CSSProperties | | Merged after border: 0 |
loading | "lazy" | "eager" | "lazy" | Off-screen embeds defer WebGL until scrolled near |
source | string | | Tag for analytics attribution |
onLoad | (e) => void | | Forwarded |
Helpers
import { globestudio } from "@globestudio/react";
const embed = globestudio.embedUrl({ look: "vapor" });
const thumb = globestudio.thumbnailUrl("halftone");
const payload = encodeURIComponent(JSON.stringify({ v: 2, selection: "country:JPN" }));
const share = globestudio.shareUrl(payload);
Use these when you need the URL but not the iframe (e.g. Next.js <Image src>, server-rendered markup, OG metadata).
SSR
The component is plain JSX. It renders the iframe HTML on the server and hydrates on the client without re-mounting, since it has no client-only state and no useEffect.
import { Globe } from "@globestudio/react";
export default function Page() {
return <Globe look="risograph" />;
}
Sizing patterns
<Globe look="halftone" /> {}
<div style={{ width: 320, aspectRatio: "1 / 1" }}>
<Globe look="aurora" width="100%" height="100%" />
</div>
<section style={{ position: "relative", height: 520 }}>
<Globe
look="vapor"
width="100%"
height="100%"
style={{ position: "absolute", inset: 0 }}
/>
<div style={{ position: "relative", padding: 64 }}>
<h1>Hero content over the globe</h1>
</div>
</section>
Package or snippet
Most people start with the snippet on globestudio.app/integrations. The package adds:
- TypeScript autocomplete on
look, so typos get caught
- Versioning: pin a tested version and upgrade when you choose
- A one-line install in SaaS templates that ship via npm
globestudio.* helpers for building URLs outside the iframe
The whole API is one component and one helper object.
License
MIT. See LICENSE.