THE QUICK START
A good place
to start.
Pick a home for your tools. Connect your agents. Bring your feedback with you.
Your server. One command.
Use Node 22 or later. The CLI selects Docker when its daemon is available, and prepares Node dependencies otherwise.
npx @dupes/cli up feedbackOpen localhost:3000. The public CLI stores data in feedback-data/ (the source checkout uses data/). Your initial admin password stays there. Sign in at /admin. Back up the database and keep credentials private.
This is the prepared public install command. Package publication is pending; the private preview can use the prepared CLI tarball instead.
Complete repository README →Keep your server time for other things.
Public hosted access is coming. Join the waitlist for availability. In local development, the hosted CLI uses your private platform URL and key.
dupe up feedback --hosted --name "My workspace"The result is saved to a private file with the instance URL, admin key and MCP endpoint.
Join the hosted waitlistOne small command.
dupe list
dupe up feedback
dupe mcp feedback --client codexAfter npm ci, use npx dupe or the repository's CLI entry point. The CLI is Apache-2.0; Feedback and Forms are AGPL-3.0.
Read requests. Ship. Close the loop.
Provision a hosted workspace using authenticated POST /v1/instances. It returns the instance URL, admin API key and MCP endpoint.
POST /v1/instances
Authorization: Bearer $DUPES_PLATFORM_API_KEY
{"app":"feedback","name":"My workspace"}Keep your instance key in FEEDBACK_API_KEY. Print configuration for your agent with:
dupe mcp feedback --client codex --url "$INSTANCE_URL"MCP tools list/search posts, find top requests, update status and post a linked changelog. Instance MCP manages feedback; provisioning currently uses REST.
Import from Canny.
Use your own Canny API key. You're responsible for having the right to move your users' data. The importer runs on your own server; your key and data aren't sent to Dupes.
dupe import canny
# set CANNY_API_KEY privately first
dupe import canny --fixture fixtures/canny.jsonBoards, tags/categories, users, posts, votes, comments and changelog migrate together. Back up and stop the service before a real migration. Reimport after local merges is refused.
Import details and API versions →A conversation, on your terms.
A free, self-hostable alternative to Typeform. Build one-question-at-a-time forms with hidden fields, branching, calculations, CSV exports and signed webhooks.
npx @dupes/cli up forms
# or: dupe up forms --hosted --name "My forms"Package publication is pending. Forms is being validated in the private preview. The public CLI uses forms-data/; sign in at /admin with the private admin-api-key file. Provision with {"app":"forms","name":"My forms"} and use FORMS_API_KEY for its five MCP tools.
dupe import typeform --form FORM_ID
# set TYPEFORM_API_KEY privately first
dupe mcp forms --client codex --url "$INSTANCE_URL"The importer retains supported jump conditions, nested logic and variable calculations. Unsupported question or logic types are rejected before saving. Imported forms stay in draft until you publish. Existing response history is not imported.