Thanks for considering a contribution. The cookbook exists to help developers ship with Parallel faster — every recipe should leave a builder thinking "I could fork this today."
There are three ways to contribute:
- Submit a recipe to live in this repo
- Submit a community example that lives in your own repo
- Improve the cookbook itself — docs, organization, the website
For anything not covered here, open an issue or DM @p0.
A recipe is a self-contained working application with a live demo and a clear pedagogical point. Every recipe in the cookbook should answer "why would someone copy this?" in one sentence.
| ✅ Good | ❌ Avoid |
|---|---|
| Solves one specific problem (e.g. "stream Task progress to a UI") | Tries to demo every Parallel API at once (templates are the exception) |
| Shipped with a live demo URL | Local-only with no deploy story |
Has a one-click deploy button or DEPLOY.md |
Requires hand-rolling infra to try it |
| Real research/data domain (companies, papers, news) | "Hello world" toy data |
| README explains the design decisions, not just setup | README is just npm install && npm run dev |
| Uses our latest API surfaces (Search, Extract, Task SSE, Ingest) | Wraps deprecated endpoints |
Pick a top-level home based on language:
typescript-recipes/<your-recipe-name>/
python-recipes/<your-recipe-name>/
Use kebab-case directories prefixed with parallel- (e.g. parallel-fact-checker-cerebras). Inside the recipe folder include at minimum:
<your-recipe-name>/
├── README.md # Required — see template below
├── .env.example # Required if the recipe needs secrets
├── package.json # Or pyproject.toml / requirements.txt
├── LICENSE # MIT preferred for parity with the cookbook
└── ... # Your code
If your recipe deploys to Cloudflare, Vercel, or Supabase, include the appropriate config (wrangler.jsonc, vercel.json, supabase/config.toml).
Every recipe README should hit these sections, roughly in this order:
# <Recipe Title>
One-sentence pitch. Live demo: <url>
[Deploy button or link to DEPLOY.md]
## What it shows
- Bullet 1
- Bullet 2
## Architecture
ASCII diagram or short prose explaining the request flow.
## Quick Start
1. Clone
2. Install
3. Set env vars
4. Run
## How it works
The interesting part — design choices, gotchas, why this approach.
## License
MIT (or whatever you chose)The Vercel Template README is a good reference.
After your recipe is in place, add an entry to two places so it shows up everywhere:
-
README.md— add a row under the most appropriate category. If no category fits, propose a new one. -
website/cookbook.json— add an entry followingcookbook.schema.json. Fields:{ "slug": "your-recipe-name", "popular": false, "featured": false, "title": "Display Title", "description": "One-sentence description.", "repoUrl": "https://github.com/parallel-web/parallel-cookbook/tree/main/typescript-recipes/your-recipe-name", "websiteUrl": "https://your-demo.example.com", "creators": ["yourgithub"], "imageUrl": "https://svg.quickog.com/https://your-demo.example.com/og.svg", "tags": ["task", "sse", "cloudflare"] }Reviewers set
featured/popular.
Use lowercase, hyphenated tags drawn from this controlled vocabulary so filters stay clean:
- API surface:
search,extract,task,deep-research,ingest,mcp,webhooks,sse,oauth - Stack:
cloudflare,vercel,nextjs,supabase,vertex-ai,python,typescript,temporal - Pattern:
agent,enrichment,monitoring,realtime,batch,fact-checking,template,entity-resolution
Propose new tags in your PR if none of these fit.
Before opening a PR, double-check:
- Recipe runs end-to-end from a fresh clone using only the README
- Live demo URL is reachable and shows what the README claims
- No API keys, secrets, or
.env/.dev.varsfiles committed (use.examplevariants) - No hardcoded Cloudflare account IDs or KV namespace IDs — use
<YOUR_KV_NAMESPACE_ID>placeholders and documentwrangler kv:namespace createin the README - Production-only routes live under
env.productioninwrangler.jsonc, not the default config - Lockfile committed (
package-lock.json,pnpm-lock.yaml, oruv.lock) - LICENSE included (MIT preferred)
- Title and description fit on one line each
- Recipe added to both
README.mdandwebsite/cookbook.json
The repo uses pre-commit to scan for secrets, infra IDs, and basic hygiene before every commit. The exact same hooks run in CI via .github/workflows/pre-commit.yml, so what passes locally passes in CI.
Set up once per clone:
brew install pre-commit # or: pip install pre-commit
pre-commit installWhat's enforced (see .pre-commit-config.yaml for the exact list):
detect-private-key— blocks SSH/RSA/EC/OpenSSH private keys.gitleaks— secret scanning using.gitleaks.toml. Inherits ~150 default rules (AWS/GitHub/Stripe/OpenAI/etc.) and adds custom rules for Parallel, Cerebras, and Groq API keys. Allowlists placeholder strings likeyour-api-key-hereand<YOUR_API_KEY>.forbid-env-files— refuses to commit.envor.dev.varsfiles (use the.examplevariant instead).
False positive? Add an entry to the [allowlist] section of .gitleaks.toml and explain why in the PR.
Note on Cloudflare IDs:
account_idand KV namespace IDs are public identifiers, not secrets — but please use<YOUR_KV_NAMESPACE_ID>placeholders in committedwrangler.jsoncfiles anyway, so recipes are portable for forks. This is a code-review check, not enforced by the scanner.
If your project lives in your own repo and you'd rather keep it there, that's perfect — open a PR adding a row to the Community Examples table in README.md and an entry to website/cookbook.json (omit the repoUrl pointing into this repo; use yours).
We'll feature standout community projects on the website.
Documentation, organization, the website/ sources, and the task-best-practices.md guide are all fair game for PRs. For larger reorgs (new top-level categories, folder moves), open an issue first so we can align before you build.
Be kind, give credit, and credit others' work properly. Recipes shouldn't include scraped private data, copyrighted media, or content that violates a source's terms of service. If you're unsure, ask in your PR.
- Open an issue
- DM @p0 on X
- Email hello@parallel.ai