# Product Roadmap

> A public roadmap where people vote on ideas and suggest their own, with a changelog for what shipped.

Source: https://emdashcmseverything.com/plugins/product-roadmap/

- Category: roadmap
- Status: available
- Version: 0.4.0
- Price: Unknown
- Compatibility: Not stated in the public registry profile
- License: MIT
- Maintainer: Wbcom Designs
- Download: https://plugins.emdashcms.com/plugins/@vapvarun.bsky.social/roadmap
- Repository: https://github.com/wbcomdesigns/emdash-roadmap
- Published: 2026-10-21

## Description

A public roadmap for any EmDash site. Visitors see what you are considering, building and have shipped. They can vote, and they can send an idea that waits for you to approve it.

## What you get

- **A board with stages you name.** Start with Under review, Planned, In progress and Done. Add, hide, rename or reorder them.
- **Voting.** One vote per person per item. Click again to take it back.
- **Suggestions with approval.** An idea is saved as a draft. You approve it onto the board or reject it.
- **Guests or members.** You choose who can vote and suggest. Guests add a name. Written ideas always wait for review.
- **A changelog.** A second collection with a list page and a page per release.
- **Comments.** The item page uses EmDash's own comments. Nothing extra to moderate.
- **Merge.** Fold a duplicate into the item you keep. Votes move across, one per person.

## How it fits together

The plugin is the engine: routes, storage and the admin screens. An EmDash plugin cannot add pages to your site, so the public pages ship as a site kit you copy in once. See Installation.

The hourly email needs a mail provider. The dashboard card still shows how many ideas are waiting when mail is off.

## Installation

## Before you install

**1. Your site needs a sandbox runner.** Registry plugins run in a sandbox. Until the site has one, Admin, Plugins shows "No plugins configured" and there is no Registry in the menu.

- **Node:** in your site, run `npm install @emdash-cms/sandbox-workerd workerd`, then add `sandboxRunner: "@emdash-cms/sandbox-workerd/sandbox",` inside `emdash()` in `astro.config.mjs`.
- **Cloudflare:** add `import  from "@emdash-cms/cloudflare";` and `sandboxRunner: sandbox(),`. It needs the Workers Paid plan, the `worker_loaders` binding named `LOADER` (uncomment it in your Wrangler config) and an R2 bucket as `storage: r2(...)`, or the install stops with "Storage error while installing plugin". Then run `npm run deploy`.

Stop the dev server and start it again. **Registry** now shows in the admin menu.

**2. The plugin is the engine. Visitor pages come from its site kit.** A registry plugin cannot add pages to your site. Until you copy the kit, its addresses (for example `/roadmap/`) show your site's 404 page. That is expected. The kit copy below takes one command.

**3. You need Node 22.16 or later** for the `npx emdash seed` step.

Checked on EmDash 1.3.1 with the `blog` template, on Node and on Cloudflare Workers (registry install).

## Install

1. Admin, Registry, search **Product Roadmap**, Install, then accept the permissions.
2. From your site's root folder:

   ```bash
   kit="$(mktemp -d)" &&
     git clone --depth 1 \
       --branch v0.4.0 \
       https://github.com/wbcomdesigns/emdash-roadmap \
       "$kit/emdash-roadmap" &&
     "$kit/emdash-roadmap/scripts/add-to-site.sh" .
   ```

3. Nothing to paste. Restart the dev server.
4. Add the printed links in Admin, Menus.
5. Open Admin, Roadmap, Ideas.

After every update, run step 2 with the new tag. Full guide: https://github.com/wbcomdesigns/emdash-roadmap/blob/v0.4.0/docs/website/getting-started/install.md

## FAQ

**Why is `/roadmap/` a 404 after install?**
The plugin cannot create pages. Run the kit command from the Installation tab (or from Admin, Roadmap, Ideas) with the tag of the version you installed, then restart the dev server.

**The board says it could not load.**
Copy the kit again from the tag of the version you installed. The kit and the plugin are released together.

**Can guests vote and suggest ideas?**
Yes, when Settings is set to Anyone (the default) and the host gives EmDash the visitor's address: Cloudflare, or `trustedProxyHeaders` in the site config. Otherwise guests see a sign-in link and Settings says so. Every idea waits for your approval.

**A guest sees a 401 in the browser console.**
Expected: the page checks a signed-in member's votes first. The page is fine.

**How do I move an item to another stage?**
On the item's edit screen, use the Stage panel on the right.

**Do new ideas go live straight away?**
No. A suggestion is saved as a draft. Approve it on Ideas to put it on the board.

**What happens if I rename a stage?**
The board uses the new name. Items stay in that column. You do not need to edit each item.

**Does it work in dark mode?**
Yes. The kit colours follow your site theme.

**Does it send email?**
One short notice an hour when ideas are waiting, if the site has a mail provider. The notice has no idea text and no link. The dashboard card always shows the count.

**Is there a paid version?**
No. Everything here is free.

## Changelog

## 0.4.0

Every page, vote and admin screen now stays within Cloudflare's limit of 10 requests per plugin call on a busy test site. Cloudflare stays marked not supported until it is checked there. No new permission.

- New: each item keeps a running vote count; counts from 0.3.0 are rebuilt on Ideas page loads and hourly.
- Improve: merge, Roadmap votes erase and the hourly cleanup run in steps.
- Fix: on Cloudflare a guest vote was refused as "not on the board".
- Fix: the kit script no longer claims the content types were created on a Cloudflare site.

Copy the kit again after you update. Until then, a category-filtered board shows every item and Take back all my votes stops with an error after 7.

```bash
kit="$(mktemp -d)" &&
  git clone --depth 1 \
    --branch v0.4.0 \
    https://github.com/wbcomdesigns/emdash-roadmap \
    "$kit/emdash-roadmap" &&
  "$kit/emdash-roadmap/scripts/add-to-site.sh" .
```

## 0.3.0

New permission: Read retained content revision history, so the Stage panel can see and move an item while it has unpublished changes. You approve it once when you update. Guests need a visitor address to vote. Copy the kit again after you update:

```bash
kit="$(mktemp -d)" &&
  git clone --depth 1 \
    --branch v0.3.0 \
    https://github.com/wbcomdesigns/emdash-roadmap \
    "$kit/emdash-roadmap" &&
  "$kit/emdash-roadmap/scripts/add-to-site.sh" .
```

- New: Set up visitor pages card; scripts/add-to-site.sh copies the whole kit.
- Improve: Stage panel is the one place to set the stage.
- Fix: Ideas counts, nested form, alignment, dark mode.
- Security: no guest writes without a visitor address; one guest per IPv4 or IPv6 /64; hashes cleared after 30 days.

## 0.2.1

- Fix: the My votes file no longer has the same name as WB Polls', so both kits can sit on one site. Copy the kit again after updating.

Older versions: https://github.com/wbcomdesigns/emdash-roadmap/blob/main/CHANGELOG.md
