framejs.io

Create and share interactive visualizations, dashboards, and apps — with AI or by hand.

Write JavaScript, get a shareable URL. No server, no login, no build step. The entire app lives in the link.

Ask AI to build it
Describe what you want, paste the code, share the link.
Share via URL
The link is the app. No deploy, no hosting, no accounts.
Embed anywhere
Notion, Jupyter, Confluence, blogs — just paste the URL.

Example — real-time animated particles

const canvas = document.createElement("canvas");
canvas.width = root.getBoundingClientRect().width;
canvas.height = root.getBoundingClientRect().height;
root.appendChild(canvas);
const ctx = canvas.getContext("2d");

let particles = Array.from({length: 80}, () => ({
  x: Math.random() * root.getBoundingClientRect().width, y: Math.random() * root.getBoundingClientRect().height,
  vx: (Math.random() - 0.5) * 2, vy: (Math.random() - 0.5) * 2,
  r: Math.random() * 3 + 1
}));

function frame() {
  ctx.fillStyle = "rgba(0,0,0,0.08)";
  ctx.fillRect(0, 0, root.getBoundingClientRect().width, root.getBoundingClientRect().height);
  for (const p of particles) {
    p.x += p.vx; p.y += p.vy;
    if (p.x < 0 || p.x > root.getBoundingClientRect().width) p.vx *= -1;
    if (p.y < 0 || p.y > root.getBoundingClientRect().height) p.vy *= -1;
    ctx.beginPath();
    ctx.arc(p.x, p.y, p.r, 0, Math.PI * 2);
    ctx.fillStyle = `hsl(210, 40%, ${50 + p.r * 10}%)`;
    ctx.fill();
  }
  requestAnimationFrame(frame);
}
frame();
Docs Examples AI setup GitHub
AI / CLI tools (Claude Code, Cursor, etc.)

CLI tools can generate JavaScript and create a short URL via POST /api/shorten/json with body {"js": "code", "modules": []} — the API returns a short URL that opens directly in the browser. Never create local files. Full guide: CLI integration guide • JS coding guide • llms.txt