npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

earthos

v0.2.0

Published

A real-time interactive 3D digital twin of Earth: composable globe, satellites, earthquakes, and your own data as plugins

Readme

earthos

A real-time interactive 3D digital twin of Earth: composable globe, satellites, earthquakes, and your own data as plugins.

This is the meta SDK you install to build with EarthOS. It re-exports the React components (Earth, Layer, and typed per-plugin wrappers), the UI control surfaces, the engine hooks, the headless createEarthEngine, and the plugin-authoring primitives from one entry point. Layers are lazy plugins, so you only ship the data sources you mount. Live demo: earthos.efolusi.com.

Install

pnpm add earthos

Peer dependencies (single-instance, provide them yourself): react and react-dom (^19), three (>=0.170), @react-three/fiber (^9), @react-three/drei (^9 || ^10), framer-motion (^11 || ^12).

Usage

import { Earth, LayerSatellites, LayerEarthquakes, Layer } from 'earthos';

export function App() {
  return (
    <Earth stars moon persistKey="earthos" style={{ width: '100vw', height: '100vh' }}>
      <LayerSatellites group="starlink" />
      <LayerEarthquakes feed="all_day" minMagnitude={2.5} />
      {/* any third-party plugin, no wrapper needed */}
      <Layer
        manifest={() => import('@earthos/plugin-geojson')}
        settings={{ url: '/data.geojson' }}
      />
    </Earth>
  );
}

<Earth/> mounts the WebGL canvas client-side only, so it renders safely from any SSR framework. It creates its own engine by default, or you can pass one from createEarthEngine for headless and imperative setups.

What's exported

  • Components: Earth, generic Layer, and typed wrappers LayerImagery, LayerSatellites, LayerAircraft, LayerEarthquakes, LayerDayNight, LayerEclipse, LayerHurricanes, LayerGeoJson.
  • UI kit (tree-shakeable): LayerPanel, Timeline, Inspector, CommandPalette, StatusBar, SettingsForm, GlassPanel, HoverCard.
  • Hooks: useEarth, useEarthState, useSimTime, useLayer, useLayerRenderers, plus EarthEngineProvider.
  • Engine and plugin authoring: createEarthEngine, definePlugin, defineSettings, f, PLUGIN_API_VERSION, and provider bases DataProvider, StaticProvider, StreamProvider, TileProvider.
  • Lower-level building blocks: EarthCanvas, ExtrapolatedPointsLayer, useEarthFixed, and GIS helpers geodeticToScene, eciToScene, subsolarPoint, EARTH_RADIUS_KM.

Wildfires has no typed wrapper yet

@earthos/plugin-wildfires ships in the EarthOS repo and runs in the demo app, but it has no LayerWildfires wrapper and is not a dependency of earthos. Add it to your own dependencies and mount it through the generic Layer escape hatch:

pnpm add @earthos/plugin-wildfires
import { Earth, Layer } from 'earthos';

<Earth>
  <Layer manifest={() => import('@earthos/plugin-wildfires')} />
</Earth>;

Every other third-party or unwrapped plugin composes the same way: manifest takes the lazy import, enabled toggles it, settings patches its schema-validated settings.

See docs/ARCHITECTURE.md for how the engine, providers, and renderers fit together, and docs/PLUGIN_GUIDE.md to build your own layer.

Part of EarthOS. MIT licensed.