Canny

canny.iocontributed by Samuele Ongaro

YES

Replaceable in one session with an AI coding agent.

A public feedback board: users post ideas, vote on each other's, and follow a roadmap showing what is planned, in progress and shipped.

Promptfree, for everyone, and the only version there is
Build me a public feedback board that replaces Canny: users post ideas, vote on them, and watch what happens to the ones that win.

STACK
- Node 20+ with Fastify, server-rendered HTML, a little vanilla JavaScript
- SQLite through better-sqlite3, WAL mode, one file
- Caddy in front for TLS and static files
- One process, one small VPS, no queue and no cache layer

THE DATA MODEL
- boards: id, slug, name, description, is_private, created_at
- posts: id, board_id, title, body, status, author_id, created_at, edited_at, merged_into_id, pinned
- votes: id, post_id, user_id, weight, created_at — unique on (post_id, user_id)
- comments: id, post_id, user_id, body, created_at, is_internal, parent_id
- users: id, email, name, avatar_url, role, company, mrr, created_at
- status_changes: id, post_id, from_status, to_status, note, changed_by, created_at
- subscriptions: id, post_id, user_id — who hears when a post moves
- Statuses are open, under review, planned, in progress, complete, closed. Store the key, never the label

VOTING, WHICH IS THE POINT
- One vote per person per post, and a vote can be withdrawn
- Weight is a column because a vote from a customer paying you 500 a month is not the same signal as one from a stranger. Default 1; the admin can set weight per user or per company
- Show both numbers: the raw count and the weighted one, labelled. Never blend them into one figure
- Sort by votes, by recent activity, by trending — trending is votes in the last 14 days over the age of the post, and the formula is in a comment because somebody will ask
- Never let an admin vote silently: an admin vote is a vote with a badge

POSTING AND DUPLICATES
- A new post searches as you type and shows near-matches before the submit button, because half the value of a board is not having the same idea forty times
- Merge: an admin merges post B into post A, votes and subscribers move across, B redirects to A forever and says it was merged
- Edit history kept, not overwritten
- Rate limit per user and per IP hash, with a friendly refusal rather than a silent drop

MODERATION AND ADMIN
- Roles: admin, member, guest. Guests can vote and comment only if the board allows it
- Private boards behind login; public boards readable by anyone, with posting optional
- Internal comments visible only to admins, on the same thread as the public ones and clearly marked
- Bulk actions: change status, tag, merge, delete spam
- A changelog view generated from posts that reached complete, with the date they got there

TELLING PEOPLE WHAT HAPPENED
- Anybody who voted or commented is subscribed to that post by default, with one click to stop
- A status change sends one email, with the admin's note if there is one
- A weekly digest per board, off by default
- Every email carries an unsubscribe link that works without logging in, signed with a secret

THE ROADMAP
- Three columns — planned, in progress, complete — fed from post status, drag to move if you are an admin
- Each card shows title, votes, and the number of comments
- A public URL that can be embedded in an iframe, and a JSON feed of the same thing

IDENTIFYING WHO IS ASKING
- Single sign-on from your own app: a signed token in the URL creates or matches a user, so customers do not make a second account
- Store company and monthly value against a user when the token carries them, and let the board be filtered by both
- Nothing about a user is public except their name and avatar

THE INTERFACE
- Two columns on desktop, one on a phone: the list, and the post being read
- The vote control is the biggest thing on a row and works without a page load
- Search covers titles, bodies and comments
- Dark and light, one accent colour, no modal dialogs for anything that could be a page

OPERATIONS
- .env: DATABASE_PATH, SESSION_SECRET, SSO_SECRET, SMTP_URL, BASE_URL
- Migrations applied on boot, each once, recorded in a table
- Nightly backup: VACUUM INTO, gzip, off-server upload, plus a restore script that has been run at least once
- Structured logs, and a health endpoint that touches the database

WHAT MATTERS MOST
The board lives or dies on whether the votes mean anything. Build posting, voting and duplicate-merging first and prove them with a hundred posts and a thousand votes; the roadmap and the emails can wait a week. An admin who cannot trust the ranking will stop looking at it, and a board nobody looks at is a board nobody posts on.

Give me the repository, the migrations, a seed script with a demo board, the .env.example, and a README with deploy steps for a fresh Ubuntu VPS behind Caddy.

What you lose

  • Votes weighted by account value, so the loudest customer is not automatically the most important one
  • Deduplication of near-identical requests, which is most of the work on a busy board
  • Automatic notification of everyone who voted when a request ships

If you would rather not build

  • GitHub Discussions, which is free and already there

What it costs

read from their page 15 Aug 2026

PlanBilled monthlyBilled yearlyLast read
Pro$79/mo—15 Aug 2026

Their pricing page is where these came from. Seeing a different price? Tell us.

The escape hatch

open source · no votes, no paid placement

Fider

$0

A self-hosted feedback board with voting and statuses.

getfider/fiderfree · open source

Astuto

$0

Open-source feedback collection with boards and a roadmap.

astuto/astutofree · open source

Why this verdict

our own opinion · changed only by a person

76/100

Verdict yes at 76. The board is easy; deduplication and the merge that keeps old URLs alive are what make it survive a year of use.

History

tracked since 10 Aug 2026 · nothing is ever overwritten

Interest · last 30 dayspeak 2/day
views01230 Aug4 Sept9 Sept14 Sept19 Sept24 Sept28 Sept
— views— prompt copies none yet— votes none yet

Questions about Canny

answered from the record above

Is Canny free?

No — the plan we track is $79 a month. Starter from around $79/month billed monthly, cheaper annually.

Can you replace Canny by building your own?

YES. Replaceable in one session with an AI coding agent. Replacement score 76 out of 100, build time one session. Read what you lose before you decide.

How much does Canny cost?

$79 a month on Starter — $948 a year. Recorded 10 Aug 2026.

What do you lose by replacing Canny?

Votes weighted by account value, so the loudest customer is not automatically the most important one; Deduplication of near-identical requests, which is most of the work on a busy board; Automatic notification of everyone who voted when a request ships. If any of those carry weight for you, keep paying.

Is there an open-source alternative to Canny?

Yes: Fider, Astuto. The prompt on this page is for when you want it your way instead.

Related entries

same category first, most replaced first

All 29 in Customer support

Not sending yet

Every week, something stops being worth paying for.

New verdicts, prices that moved, entries added. One email a week. Unsubscribe in one click. Nothing is being sent yet — your address is kept here, and the first issue is the first thing it is used for.

free forever · no tracking pixel · stored here, never passed to anyone

Esc