{
  "markdown": "# SlickFast\n\n**A deterministic render engine.** Spec in, same bytes out. Forever. Charts, boards, and whole Pages. No headless browser.\n\n![SlickFast — one JSON spec, one dashboard image](https://raw.githubusercontent.com/SlickFast/github-dashboard-template/main/assets/showcase-teal.png)\n<sub>↑ Engine output — one JSON spec, one image. Get this exact board on your README with the [dashboard template](https://github.com/SlickFast/github-dashboard-template) (`teal-hero` layout).</sub>\n\n**Local MCP is free forever.** A public URL is a plan (free key is enough to learn).\n\nThe spec **is** the chart. A pagespec **is** a Page. Add **`.json`** — that’s the **twin**.\n**The hash is on the page.** Don’t trust us. Check the math.\n\n- **npm (MCP):** [`@slickfast/mcp@0.7.31`](https://www.npmjs.com/package/@slickfast/mcp)\n- **Website:** [slickfast.com](https://slickfast.com)\n- **Engine explainer (a Page):** [open it](https://pages.slickfast.com/s/6ced56513246042c765dace4d4ec77b6) · [twin](https://pages.slickfast.com/s/6ced56513246042c765dace4d4ec77b6.json)\n- **Get started / News:** [slickfast.com/start](https://slickfast.com/start) · [slickfast.com/news](https://slickfast.com/news)\n- **Bugs:** [GitHub Issues](https://github.com/SlickFast/slickfast/issues) · feedback@slickfast.com\n\n## This project's pulse — a LIVE chart, right here in the README\n\nThe dashboard below is **not a screenshot**. It's a SlickFast **live chart**: a permanent\nimage URL whose numbers update on their own. A scheduled job pushes fresh stats; every\nvisitor sees current data. [Live Charts](https://slickfast.com) — embed once, update forever.\n\n![SlickFast live pulse — real project stats, updating automatically](https://api.slickfast.com/live/7eb0085dd74015764d54ec73ce4ee8bf.svg)\n\n## The range — two boards, two renders\n\nA seller ops board (funnel, bullet graph, goal ring, gauge, calendar heatmap, leaderboard — demo data):\n\n![Seller weekly dashboard](https://raw.githubusercontent.com/SlickFast/slickfast/main/assets/demo-seller-weekly.png)\n\nAnd the board that explains the engine — it times its own render into its title:\n\n![How chart images get made](https://raw.githubusercontent.com/SlickFast/slickfast/main/assets/how-chart-images-get-made.png)\n\n## Prove it yourself\n\nDon't take the speed or determinism claims on faith — run the benchmark on your own machine:\n\n```bash\ngit clone https://github.com/SlickFast/slickfast && cd slickfast\nnode scripts/bench.mjs\n```\n\nIt renders all 47 chart types, times each, runs a 10,000-chart throughput burst, and\ndouble-renders everything to verify byte-identical output. On an M1 Max: **median 15µs per\nchart, ~140,000 renders/sec, 47/47 deterministic.** Your numbers are your numbers.\n\n## Quick start (MCP)\n\n**One-click:**\n[![Add to Cursor](https://cursor.com/deeplink/mcp-install-dark.svg)](https://cursor.com/en/install-mcp?name=slickfast&config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsIkBzbGlja2Zhc3QvbWNwIl19)\n[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install_SlickFast_MCP-0098FF?style=for-the-badge&logo=githubcopilot&logoColor=white)](https://insiders.vscode.dev/redirect/mcp/install?name=slickfast&config=%7B%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22%40slickfast%2Fmcp%22%5D%7D)\n\nAdd to your MCP client config (Claude Code, Claude Desktop, Cursor, …):\n\n```json\n{\n  \"mcpServers\": {\n    \"slickfast\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@slickfast/mcp\"],\n      \"env\": { \"SLICKFAST_API_KEY\": \"SF-…\" }\n    }\n  }\n}\n```\n\nOmit `env` to stay local-only (draw free forever). Add a free key from [slickfast.com](https://slickfast.com) when you want a live URL, share, or a published Page.\n\nThen: **`get_started`** → **`news`** → **`gallery`** → one **`render_chart`**. Full tool docs: [`apps/mcp/README.md`](apps/mcp/README.md).\n\n## How to keep a Page\n\n**“Save it” is two jobs.** On disk: `render_page` + keep the pagespec JSON (no key). In the world: `publish_page` (SF- key) → `pages.slickfast.com/s/…` + `.json` twin. The hash is on the page. Find it later with `my_pages`.\n\n## Why agents pick SlickFast\n\n- **Deterministic** — same spec, same bytes. Cacheable. Testable.\n- **Cheap tokens** — a few dozen tokens of JSON beat hundreds of matplotlib / SVG retries.\n- **One-field edits** — swap type, palette, size; re-render. No code rewrite.\n- **Pages = shareable memory** — agent output → Page → twin → hash on the page. Not stuck in chat.\n- **No headless browser** — pure in-memory SVG → PNG (and Page HTML).\n- **47 types + tiled dashboards in one call.**\n- **Loud errors** — bad enum / unknown palette lists the valid options.\n- **Local by default** — nothing phones home from the MCP package.\n\n## What's in this repo\n\n| Path | What it is |\n| --- | --- |\n| `packages/render-core/` | The engine: pure `(spec) → SVG string`. All 47 types, the type registry, `SPEC.md` (the spec contract), examples, gallery, and the golden snapshot net. |\n| `packages/palette-core/` | The color library: palettes, nested themes, WCAG contrast, tokens. |\n| `packages/raster/` | SVG → PNG rasterization (resvg). |\n| `packages/fonts/` | The swappable font layer. |\n| `apps/mcp/` | The MCP server published as `@slickfast/mcp` — a thin surface over the engine. |\n| `apps/api/` | The hosted HTTP API — [`API.md`](apps/api/API.md) is the how-to-call-it guide (no MCP needed: `curl`, `<img src>`, any language), [`openapi.yaml`](apps/api/openapi.yaml) the machine-readable contract. Live at `api.slickfast.com`; free tier at [slickfast.com](https://slickfast.com). |\n| `scripts/` | The safety net: golden checks, registry-drift check, 323-case torture suite, palette hex check. |\n| `templates/` | Ready-made spec presets. |\n\n## Build & verify from source\n\n```bash\ncd apps/mcp && npm install && npm run build     # builds dist/index.js\ncd ../../packages/raster && npm install          # native resvg binding (PNG)\n\n# from the repo root — the full safety net:\nnode packages/render-core/generate.mjs --check   # golden snapshots (all types)\nnode scripts/check-surfaces.mjs                  # type-registry drift check\nnode scripts/torture.mjs                         # 323 empty/edge-case renders\nnode scripts/check-palettes.mjs                  # palette hex validation\n```\n\nThe engine is pure and deterministic by contract: no IO, no `Date.now()`, no\n`Math.random()` in drawing code, and **nothing ships without a snapshot test**.\n\n## Contributing\n\n- **Bug reports and feature requests are the best way to contribute** — please use the\n  [issue templates](https://github.com/SlickFast/slickfast/issues/new/choose). The MCP's\n  built-in `report_issue` tool writes a ready-to-paste report for you.\n- Day-to-day development happens in an internal tree and releases are published here, so a\n  PR may be ported in rather than merged directly — you'll be credited either way. For\n  anything non-trivial, open an issue first so we can agree on the shape.\n\n## License\n\n[AGPL-3.0-only](LICENSE). **Local MCP is free.** Closed commercial products (embed or\nself-host without AGPL) need a commercial license from $99/year:\n[slickfast.com/license.html](https://slickfast.com/license.html) · licensing@slickfast.com.\nHosted API / hosted MCP: [slickfast.com/#pricing](https://slickfast.com/#pricing).\n",
  "bytes": 7232,
  "sha": "23ad1dc4c172cbc95d669b2b6467dcbb00bd297c7d462f405a81e1fc8f9a7ddb",
  "repo_slug": "slickfast/slickfast",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_com_slickfast_mcp_0113bf53/readme"
}