#Contributing
Thank you for your interest in contributing to curl.md! We’re building the best way to go from URL to markdown, and we’d love your help.
Use this page to get a local curl.md development environment running and learn how to contribute.
#Ways To Contribute
We welcome and appreciate any form of contributions, here are some ideas:
- Bug Reports Report markdown extraction issues, share performance regressions, or document edge cases
- Feature Development Add new agent plugins or site profiles, rules, and extraction methods.
- Documentation Add new guides or improve areas that were difficult to understand.
- Testing Improve test coverage, create performance benchmarks, or level up plugin tests.
- Infrastructure Improve build and CI systems, or maintain compat with other tools.
You can also check out GitHub issues for good first issues.
#Prerequisites
- OrbStack for local Docker support on macOS
- Node.js and
pnpmfor local tools
#Local Setup
Install and start OrbStack
OrbStack provides the local Docker runtime used by curl.md on macOS.
orb startCopy the environment file
And fill out any missing env vars.
cp .env.example .envStart the app with Docker Compose
You can also run the
pnpm devscript.docker compose up -dOpen curl.md locally
Open https://curl.local or request a page directly:
curl curl.local/example.com
#Dev Workflow
The app runs inside Docker during local development.
docker compose updocker logs curl -f#Local Package Scripts
Use these scripts to exercise the shipped CLI and plugin entrypoints against your local app at https://curl.local.
pnpm md example.compnpm plugin amppnpm mdruns the local CLI againsthttps://curl.localpnpm plugin [name]runs agent plugin locally. You can also run short versions:pnpm amp,pnpm opencode,pnpm pi, etc.
#Testing
Use scoped Vitest projects while iterating, then run the broader set that matches your change.
pnpm test --project clipnpm test --project plugins:pipnpm test --project app --project md --project workersWhen working on browser behavior, run browser or E2E coverage as needed:
pnpm test --project browserpnpm test:e2e#Checks
Run these before opening a PR:
pnpm checkpnpm check:typesIf you changed dependencies in cli/ or plugins/, also run:
pnpm check:deps#DB Migrations
When you change the schema, create a migration, apply it locally, then regenerate database types.
pnpm db:make your_migration_namepnpm db:migrate latestpnpm db:codegenUse a descriptive snake_case migration name.
#Changesets
If your change affects a published package or release notes, add a changeset.
pnpm changesetThat creates a markdown file in .changeset/ where you select the package and bump type.
Docs-only or purely local dev changes usually do not need a changeset.
#Docs
Docs live in docs/ and are rendered through the src/docs/ route in app.
If you add or update docs, make sure the sidebar in docs/_sidebar.ts stays in sync.
Last updated: May 5 3:02 PM