Open source feedback board, roadmap and changelog.
The Canny alternative that runs on Cloudflare's free tier.
Website · Changelog · API · MCP · Design · Contributing
Collecting feedback should not cost $79 a month or a weekend of Docker. Every open source feedback tool needs a VPS, Postgres and someone to babysit it, and most of them look like an admin template.
openheard is one Cloudflare Worker and one D1 database. It deploys in two commands, runs on the free tier, and is designed like a product people would pay for. Self-hosting is the default, not the afterthought.
Collect
- Public board with voting, search, sorting and keyboard navigation
- Posts with comments, reactions and a status timeline
- Images on posts and comments: paste, drop or pick, stored in R2
- Anonymous voting, sign-in gate on posting, optional approval queue
- Sign in with Google, magic link or password
Manage
- Dashboard with inbox, internal notes, merge, pin, tags and ETA
- Custom statuses that drive the roadmap columns
- Team invites, admin and member roles, join links
- Import from a CSV export of Canny or similar tools; export to JSON and CSV
Publish
- Roadmap with drag between columns
- Changelog with an editor, linked shipped posts and an RSS feed
- Email updates: voters and commenters hear when a post changes status or ships, and visitors can subscribe to the changelog by email, with unsubscribe links in every message
- Help center at
/help: collections, searchable articles, "was this helpful?" feedback, and matching articles suggested before a new post - Branding: accent colour, logo and light or dark background read from your website, board name
Extend
- HTTP API with per-workspace keys at
/api/v1(docs) - MCP server at
/api/mcpso Claude, Cursor and other agents can read and triage feedback (docs) - Agent skill that teaches Claude Code and other agents the openheard workflows (skills/openheard)
- Embeddable widget: one script tag puts feedback, the roadmap and the changelog inside your own app, with a "new" badge for fresh releases (docs)
- Multi-workspace: each workspace lives on its own subdomain
Coming next: a CLI and a docs site.
Sign up at openheard.com. Your board lives at
<slug>.openheard.com. There is a free tier.
Needs a Cloudflare account. Everything fits in the free tier.
git clone https://github.com/Heilonng23/openheard && cd openheard
bun install
cp packages/infra/.env.example packages/infra/.env # set BETTER_AUTH_SECRET
cd packages/infra && bunx alchemy login --configure && cd ../..
bun run deployThat provisions the Worker, the D1 database, KV and an R2 bucket for images, applies migrations and prints your URL. R2 has to be switched on once in the Cloudflare dashboard before the first deploy; its free tier covers 10 GB. The first account to sign up becomes the admin.
To keep a board internal, put a Cloudflare Access
application in front of it. Set these in packages/infra/.env and redeploy,
and people signed in to Access (or to WARP) land in openheard already signed
in, with no second login:
CF_ACCESS_TEAM_DOMAIN=yourteam.cloudflareaccess.com # Zero Trust > Settings
CF_ACCESS_AUD=<the application's Audience (AUD) tag> # Access application overviewThe Access identity's email is matched to an existing account or creates one, exactly like a magic link. Signing out of openheard only lasts until the next page load while Access is in front; sign out of Access to leave.
No Cloudflare account needed. A SQLite file stands in for D1.
bun install
bun run db:push:local # creates apps/web/local.db
bun run dev:local # http://localhost:3001
bun run db:seed # optional demo postsKeyboard on the board: j k move, v vote, enter open, / search,
c new post.
- TanStack Start, React 19, TypeScript
- Cloudflare Workers, D1, KV and R2, provisioned with Alchemy
- Drizzle ORM, Better Auth
- Tailwind 4, Base UI primitives, Phosphor icons, Geist
Design rules live in DESIGN.md. Read it before touching UI.
Bug reports and pull requests are welcome. See CONTRIBUTING.md for local setup and the checks a PR needs to pass. Security issues go to the contact in SECURITY.md, not the issue tracker.
Built in the open for The Build Games, September 2026.
The app (apps/web, packages/db, packages/auth, packages/ui) is
AGPL-3.0. Self-host it freely; if you run a modified version as a
service, publish your changes.
The pieces you embed in your own product, the widget, the CLI and the API client, will ship under MIT in their own packages so they never touch your licence.
