No description
  • JavaScript 53.3%
  • Julia 46.7%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Kahli Burke 2107a0e948 Resolve SlateExtensionsBase 0.9 from SlateRegistry
Drop the [sources] path into the KaimonSlate checkout — SEB is a registered
package now, so no sibling directory layout is required.
2026-07-31 12:39:50 -07:00
assets CesiumSlate.jl — a live-satellite CesiumJS globe as a Slate extension 2026-07-21 05:57:44 -07:00
notebooks CesiumSlate.jl — a live-satellite CesiumJS globe as a Slate extension 2026-07-21 05:57:44 -07:00
src CesiumSlate.jl — a live-satellite CesiumJS globe as a Slate extension 2026-07-21 05:57:44 -07:00
.gitignore CesiumSlate.jl — a live-satellite CesiumJS globe as a Slate extension 2026-07-21 05:57:44 -07:00
Project.toml Resolve SlateExtensionsBase 0.9 from SlateRegistry 2026-07-31 12:39:50 -07:00
README.md CesiumSlate.jl — a live-satellite CesiumJS globe as a Slate extension 2026-07-21 05:57:44 -07:00

CesiumSlate.jl

An interactive CesiumJS 3D globe with live satellites as a first-class Kaimon Slate output — return a cesium_globe() from a notebook cell and Slate mounts a draggable globe tracking real satellites (fetched from Celestrak, propagated with satellite.js).

using CesiumSlate
cesium_globe(satellites = "starlink", imagery = "dark")   # → an interactive globe, 140 live orbits

What it demonstrates

CesiumSlate is a complete Slate extension that depends only on SlateExtensionsBase (the lean SDK) — never on the KaimonSlate server. The entire Julia side is three dispatch points:

module CesiumSlate
using SlateExtensionsBase                       # the ONLY dependency

struct CesiumGlobe; props::Dict{String,Any}; end
cesium_globe(; satellites="visual", imagery="dark", kw...) = CesiumGlobe(Dict("satellites"=>satellites, ...))

# 1. a returned value renders as a component (the same registry a @bind widget mounts through)
SlateExtensionsBase.slate_render(g::CesiumGlobe) = component("CesiumSlate.CesiumGlobe", g.props)

# 2. ship the front-end renderer once, on `using CesiumSlate`
__slate_frontend(slate_on) = provide_frontend!(@pkg_asset("assets/cesium.js"); id="CesiumSlate.cesium")
end

No boot cell, no per-cell asset plumbing, no server dependency — the front-end (assets/cesium.js) is a slateRegisterWidget component that CesiumJS mounts from the returned value's props.

Layout

  • src/CesiumSlate.jl — the extension (~40 lines).
  • assets/cesium.js — the CesiumJS renderer (loads Cesium + satellite.js from CDN; token-free imagery).
  • notebooks/satellites.jl — a two-cell demo.

Notes

  • Token-free: uses OpenStreetMap / CARTO base imagery, so no Cesium Ion account is needed. Drop in an Ion token for photorealistic terrain later.
  • Assets load from a CDN today; a future provide_assets! vendors them for offline / reproducible exports.