Make every SQL example a playground.

Transform static SQL into interactive DuckDB sessions you can embed in documentation, blog posts, product tours, and workshops—no servers, no setup, only fun.

  • 🎨 Custom theme authoring with full font and color control.
  • ⚡ Init and reset queries for automated setup and teardown.
  • 📡 Event-driven results API for building custom visualizations.
1.4.0 Latest widget release
DuckDB 1.31.1 Bundled WASM runtime
Zero backend Everything stays in-browser
SELECT
    o_orderstatus AS status,
    COUNT(*) AS total_orders,
    ROUND(AVG(o_totalprice), 2) AS avg_value
FROM 'https://shell.duckdb.org/data/tpch/0_01/parquet/orders.parquet'
GROUP BY status
ORDER BY total_orders DESC;
Trusted by developers for
Why PondPilot Widget

Ship interactive SQL stories without provisioning anything.

PondPilot Widget wraps the power of DuckDB WASM in a tiny package that drops into any page. It keeps queries local, renders beautiful editors, and makes sharing analytical narratives delightful.

🦆

DuckDB in the browser

Run full SQL analytics locally with the latest DuckDB 1.31.1 runtime—no round trips, no latency.

✨

Polished UX out of the box

Responsive editors, syntax highlighting, keyboard shortcuts, and light/dark theming tuned for docs and blogs.

🎨

Custom theme authoring

Create fully custom themes with your own fonts, colors, and sizes. Perfect for matching your brand.

⚡

Init and reset queries

Run setup SQL once per page and optional cleanup SQL whenever the editor resets. Perfect for data prep.

📡

Event-driven results

Listen to the pondpilot:results event to build custom visualizations, charts, and maps from query data.

📦

Zero backend required

CDN-friendly, CSP-ready, and only ~22KB. Works anywhere static HTML runs, from Markdown to Next.js.

Quick start

Give any <pre> superpowers in under a minute.

PondPilot auto-detects marked snippets and turns them into interactive notebooks on load. Prefer full control? Instantiate widgets programmatically and share a DuckDB instance across them.

  1. 01
    Load the script Use the CDN for instant demos or npm/yarn for bundlers.
  2. 02
    Tag your SQL Apply the pondpilot-snippet class to any <pre>.
  3. 03
    Optionally configure Toggle theming, branding, or provide your own DuckDB instance.
CDN unpkg.com
<script src="https://unpkg.com/pondpilot-widget@1.4.0"></script>
<pre class="pondpilot-snippet">
SELECT 'Hello DuckDB' AS greeting;
</pre>
Programmatic init Docs
import 'pondpilot-widget';

const el = document.querySelector('#report');
const dbPromise = window.createDuckDB?.();

new PondPilot.Widget(el, {
  theme: 'dark',
  duckdbInstance: dbPromise,
  showPoweredBy: false
});
Themes

Paint the widget to match your brand.

Start from a preset or author your own palette with full control over colors, typography, and syntax tokens.

Midnight Neon

Synthwave-inspired dark mode with electric blues and glowing controls.

SELECT
  'Midnight Neon' AS theme,
  'Electric glow for night mode' AS vibe;

Sunset Sorbet

Warm oranges and soft browns for a welcoming editorial feel.

SELECT
  'Sunset Sorbet' AS theme,
  'Citrus gradients meet code' AS flavor;

Retro Terminal

IBM Plex Mono, neon greens, and amber accents for a vintage terminal aesthetic.

SELECT
  'Retro Terminal' AS theme,
  'CRT glow with modern ergonomics' AS energy;

Browse the theme authoring guide for the full token list and deeper customization tips.

What's new in 1.4.0

Custom themes, init queries, and event-driven results.

The November 2025 release brings powerful customization and integration features. Author fully custom themes, automate data setup with init queries, and build visualizations with structured result events.

  • 🎨 Theme authoring API with full control over fonts, colors, and sizes.
  • ⚡ Init and reset queries for automated setup and teardown workflows.
  • 📡 pondpilot:results event emits structured row data for custom visualizations.
  • ⌨️ Keyboard shortcut (Ctrl/Cmd+Enter) to execute queries directly from the editor.
  • 🧪 Vitest test suite and React/Vue integration examples.

Listen to query results

React to query results with the new pondpilot:results event. Perfect for building custom charts, maps, or any data visualization alongside your interactive SQL.

widget.addEventListener('pondpilot:results', (e) => {
  const { rows, columns } = e.detail;

  // Build a chart, update a map, etc.
  updateVisualization(rows, columns);
});

// Or with init queries
new PondPilot.Widget(el, {
  initQuery: `CREATE TABLE data AS
              SELECT * FROM 'data.parquet';`,
  resetQuery: 'DROP TABLE IF EXISTS data;'
});

Enables powerful data storytelling with custom visualizations.

Works everywhere

From Markdown to modern frameworks.

Drop the widget into static sites, React, Vue, or your favorite docs stack—no build-step gymnastics required.

Markdown & docs

Add one script tag to Docusaurus, VitePress, Astro, or a plain HTML export and you're live.

// docusaurus.config.js
module.exports = {
  scripts: ['https://unpkg.com/pondpilot-widget@1.4.0']
};

React & Next.js

Import the package once, then wrap snippets in lightweight components for live tutorials.

import { useEffect, useRef } from 'react';
import 'pondpilot-widget';

export function SQLPlayground({ sql }) {
  const ref = useRef();
  useEffect(() => {
    const widget = new PondPilot.Widget(ref.current);
    return () => widget.destroy();
  }, []);
  return <pre ref={ref} className="pondpilot-snippet">{sql}</pre>;
}

Workshops & slides

Embed interactive SQL directly inside slides or LMS content to keep labs engaging.

<section data-auto-animate>
  <h2>Run the query</h2>
  <pre class="pondpilot-snippet">SELECT * FROM attendees;</pre>
</section>

Ready to make your SQL glow?

Install the PondPilot Widget, point it at your code blocks, and give your readers a playground they won't forget. No backend, no waiting, just instant insight.