Ask about SvelteKit.Get Next.js patterns.Every time.
Grounded Code reads the actual docs and cites every answer, so you can trust what it tells you and verify the source in one click.
Citation Discipline
If we can’t cite it, we don’t claim it.
Every answer in Grounded Code links to the exact paragraph it came from. If the model fabricates a reference, our validator catches it before you see it. You verify in one click.
EVERY ANSWER
Citations link to the specific chunk in the indexed source. Click any cite and you land on the exact paragraph — not a Google result, not a search page.
EVERY CITATION VALIDATED
If the model invents a reference that doesn't map to a real indexed chunk, our validator flags it and removes it before display. Fabricated citations never reach you.
EVERY GAP MARKED
When indexed docs don't cover your question, Grounded Code says so. It won't fabricate confidence. 'I don't know' beats 'here's a plausible lie.'
796 tests. LLM baseline: 304 wrong, 478 partial, 14 correct. We built Grounded Code because of those numbers.
How it works
Four steps. Zero docs-reading.
Everything from your stack to the style of answer you want — wired up in under a minute.
- 01
Set your stack
Tell Grounded Code your framework, ORM, and auth once. Every answer is scoped to your setup.
framework: SvelteKit · orm: Drizzle · auth: Supabase - 02
Pick your sources
Toggle from 150+ pre-indexed docs. Type @Resend in the composer to scope a question to one source on the fly.
@Resend how do I send a transactional email? - 03
Ask, your way
Choose response style: terse production code, balanced, or step-by-step tutorial with pseudocode planning.
style: terse · balanced · tutorial - 04
Ship
Copy cited code or save it to your snippet library with a shareable URL. Endpoints are current, auth is correct, parameters are right — because it came from the docs.
// cited · current · correct · saved
Response styles
Answers shaped to how you work.
Three presets control verbosity, comment depth, and structure. Advanced options let you fine-tune citation placement, error handling, followup suggestions, and the primary code language — per project.
One-paragraph answers, production-clean code, no tutorial comments.
Structured prose with clean code and light explanatory comments.
Step-by-step prose, pseudocode planning blocks, inline comments.
Advanced overrides
1const res = await fetch('/api/data', {2 method: 'POST',3 headers: { 'Content-Type': 'application/json' },4 body: JSON.stringify(payload),5});6if (!res.ok) throw new Error(res.statusText);7return res.json();
Production-clean. No prose, no comments.
1// PSEUDOCODE: POST payload, assert 2xx, parse JSON2const res = await fetch('/api/data', {3 method: 'POST',4 // why: server won't parse body without this header5 headers: { 'Content-Type': 'application/json' },6 body: JSON.stringify(payload),7});8// why: non-2xx responses don't throw by default in fetch9if (!res.ok) throw new Error(res.statusText);10return res.json();
Pseudocode headers, inline why-comments.
Question
How do I POST JSON and handle errors with the Fetch API?
Project Profiles
Your stack. Remembered.
Tell Grounded Code your framework, language, and dependencies once. Every chat, every MCP query, every lint pass uses that context — so you never get v4 patterns when you’re on v6.
One profile per project. Unlimited sources per profile. Cited every time.
This happened to you last week
Real questions. Real failures. Real answers from Grounded Code.
Works where you already code
Your editor’s AI can read your docs too. Via MCP.
Generate an API key, point any MCP client at it, and every grounded answer is available inside your editor.
Connect once
Query inline
Lint against the live docs
lint_against_docs validates a snippet against the indexed docs for a source and returns deprecated, removed, and signature-changed findings — each one cited verbatim from the source the agent can click to verify. Try it in the playground before wiring up MCP.Auto-configure
Index from the editor
Same grounding
Lint against live docs
Paste a snippet. See what broke.
Paste any code snippet, pick a source, and get line-by-line findings for removed APIs, deprecated patterns, and signature drift — each one cited directly from the indexed docs. No editor plugin required.
Works on any language or framework in your source library
Every finding links to the exact doc section that flagged it
Also available as lint_against_docs in any MCP client
1import { createServerSupabaseClient }2 from "@supabase/auth-helpers-nextjs"4export async function middleware(req) {5 const sb = createServerSupabaseClient({6 req, res7 })8 const user = await sb.auth.getUser()9}
@supabase/auth-helpers-nextjsREMOVEDline 2Package removed. Migrate to @supabase/ssr.
createServerSupabaseClient()REMOVEDline 5Function removed with auth-helpers-nextjs. Use createServerClient() from @supabase/ssr.
sb.auth.getUser()DRIFTline 8Still valid but slower than getClaims() for read-only middleware — makes a network round-trip every call.
Compare sources
Same question. Every doc.
Pick 2–5 indexed sources and ask one question. Get per-source answers with citations side-by-side — so you see exactly how Stripe, Lemon Squeezy, and Resend each handle the same pattern before you write a line.
How do I handle webhook signature verification?
Use stripe.webhooks.constructEvent() with the raw body and signing secret. Throws on mismatch.
Compute HMAC-SHA256 of the raw body with your signing secret and compare to X-Signature header using timingSafeEqual.
Use the svix library — Resend webhooks are delivered via Svix. Verify with wh.verify(payload, headers).
What's the correct way to scope an API key to read-only access?
Create a fine-grained personal access token with resource owner set and Contents: read permission. Classic tokens use the repo:read scope.
Use Row Level Security policies with a service_role key restricted by anon key defaults. For read-only, enable SELECT policies only.
How it compares
Every tool fails differently. One tool fixes it.
No stale training data, no single-source silos, no surprise API breaks.
Real test, real results
We asked all three the same question.
“How do I get the current user in a Supabase SvelteKit app?”
1import { createServerSupabaseClient }2 from "@supabase/auth-helpers-nextjs"34export async function middleware(req) {5 const sb = createServerSupabaseClient(6 { req, res }7 )8 // auth-helpers-nextjs: removed 20239}
1const { data: { user } } =2 await supabase.auth.getUser()34// getUser() makes a network request5// every time it's called.6// Use getClaims() for cached access.78if (!user) redirect("/login")
1const { data: { session } } =2 await supabase.auth.getClaims()34// getClaims() reads from JWT — no5// network round-trip. Introduced in6// @supabase/ssr v0.5+.78// Source: Supabase Auth Docs §3.2
Live example
Scope with @mentions.
Every answer, cited.
Type @Lemon Squeezy to scope a question to one source. Pick a response style. Every line of code traces back to the exact doc section it came from.
Share answers
Send the answer, not a screenshot.
Every assistant response has a share button. One click generates a permanent public link — your teammate gets the full answer with citations intact, no account required.
Permanent URL
The link never expires unless you revoke it. Works for async code review, Slack threads, or PR descriptions.
No account needed to view
Recipients see the full answer and citations without signing up. The unguessable token is the only access control.
How do I stream a response with the Anthropic SDK in Node.js?
1const client = new Anthropic();3const stream = client.messages.stream({4 model: 'claude-opus-4-5',5 max_tokens: 1024,6 system: systemPrompt,7 messages: [{ role: 'user', content }],8});10for await (const chunk of stream) {11 if (chunk.type === 'content_block_delta')12 yield chunk.delta.text;13}
Snippet library
Save once. Reuse everywhere.
Every code block has a Save button. Saved snippets land in your library where you can tag, filter, pin, and share them — with a link back to the conversation that produced each one.
Pin to top
Keep your most-used snippets a click away.
Tag & filter
Filter by language, framework, source, or your own tags.
Share a link
One click generates a public read-only URL — no account needed to view.
Back to the conversation
Every snippet links back to the chat it came from.
1const { data } = await supabase2 .auth.getClaims()3if (!data?.claims) {4 return redirect(303, '/login')5}
1const checkout = await createCheckout(2 storeId, variantId, {3 checkoutData: {4 custom: { user_id: uid },5 },6 }7)
Your source library
540+ sources indexed. Search across everything.
540+ documentation sources indexed. Re-crawled weekly. Every page chunked, embedded, and ready to cite — across more frameworks, libraries, and infrastructure than any single-source @docs integration.
all indexedSupabase alone: 312K indexed pages. More depth in one source than most tools cover across their entire library.
Receive webhook events when an email is delivered, opened, or bounced...
Twilio sends HTTP POST requests to your webhook URL...
Send real-time data from your database to another system...
Free during beta. No credit card required.
Everything is included while we're in beta. Pricing will be introduced later — early users will be grandfathered.
FAQ
Common questions
Still unsure? The answers below cover what most people ask before signing up.
How is this different from Cursor @Docs?
Cursor indexes one source at a time by keywords. Grounded Code indexes every source you add and retrieves across all of them in one query.
Why not just paste docs into Claude or ChatGPT?
Pasting re-reads the whole doc every turn and still misses deep nuance. We pre-index once and retrieve the exact chunk — no token cost, persistent across sessions.
Do you connect to my database?
No. We crawl documentation about databases — Prisma, Drizzle, Supabase — not the databases themselves.
What documentation can you crawl?
Any public docs URL: official sites, versioned docs, GitHub READMEs. Login-gated docs aren't supported yet.
What sources are already indexed?
540+ sources including React, Next.js, Supabase, Drizzle, Lemon Squeezy, Tailwind, SvelteKit, PyTorch, TensorFlow, Kubernetes, and more. Full catalog at /sources after signup.
Why should I trust code from Grounded Code?
Every answer is cited to the exact doc section. Click to verify. The trust is in the source, not our word.
Can I use Grounded Code from my editor?
Yes — we expose an MCP server. Generate a key in Settings and connect Cursor, Claude Code, or any MCP-compatible client.
Are my conversations saved?
Yes. Conversations and saved snippets persist across sessions and are searchable from the sidebar.
What if the model makes up a citation?
Every citation is validated against your indexed sources. If the model fabricates a reference that doesn't map to a real indexed chunk, it's flagged — you only see citations we can verify.
What if my source's version doesn't match my stack?
Grounded Code detects version mismatches between your stack profile and the retrieved chunks. When a conflict is found, it asks you to clarify before answering — so you don't get v4 patterns when you're on v6.
Stop reading docs.
Start shipping code.
150+ doc sources. Cited code answers. Free during beta.
Get started free