Quickstart
Install
Pick the package that matches what you want to do — CLI, browser embed, server daemon, signaling broker.
Pick your package
| Goal | Install |
|---|---|
Build a .html pod from a pod.toml | npm i -D @gemmapod/toolkit |
Embed a pod on a website via <script> | <script src="https://cdn.jsdelivr.net/npm/@gemmapod/embed/dist/gemmapod-shim.iife.js"> |
| Embed a pod from npm (Next.js / Vite / etc.) | npm i @gemmapod/embed |
| Build your own React UI over the runtime | npm i @gemmapod/embed (use /runtime subpath) |
| Run a Host connecting to Ollama | npm i @gemmapod/host or docker run ghcr.io/gemmapod/host |
| Self-host the signaling broker + pod registry | npm i @gemmapod/signal or docker run ghcr.io/gemmapod/signal |
| Build a custom DARTC implementation | npm i @gemmapod/dartc |
| Build a custom verifier (Rust / Node) | npm i @gemmapod/core |
Requirements
- Node 22+ for all server-side packages and the CLI. Older Node is
unsupported (we use
node:sqlitebuilt-in). - pnpm 9+ is what the monorepo is developed on.
npmandyarnalso work for consumers. - Ollama with
gemma4:e4bfor the Host path. Not needed if you only plan to use the in-browser WebGPU fallback. - Rust stable + wasm32-unknown-unknown target + wasm-pack only if
you're rebuilding the WASM core from source. The committed
packages/core/pkg{,-node}/artifacts work out of the box.
Pinning + Subresource Integrity (production)
When you embed via CDN, pin the version and add an
SRI hash.
@latest in production is how silent bumps eat afternoons.
curl -fsSL "https://cdn.jsdelivr.net/npm/@gemmapod/embed@0.1.0/dist/gemmapod-shim.iife.js" \
| openssl dgst -sha384 -binary | openssl base64 -A<script
src="https://cdn.jsdelivr.net/npm/@gemmapod/embed@0.1.0/dist/gemmapod-shim.iife.js"
integrity="sha384-PASTE_HASH_HERE"
crossorigin="anonymous"
></script>Verifying signatures (optional but recommended)
All @gemmapod/* packages publish to npm with sigstore provenance.
You can verify any tarball came from this repo's CI without trusting
npm:
npm audit signaturesNext
- Build your first pod — TOML →
.htmlwith the CLI. - Embed via
<script>tag — drop a pod on a page you control in 60 seconds. - Run in React — headless mount with your own UI.