Transform your GitHub issues into beautiful, visual roadmaps
A simple, elegant way to visualize your project roadmap using GitHub issues. Roadmapper automatically generates beautiful SVG roadmaps from your GitHub issues based on labels, making it easy to communicate your project's priorities and timeline.
Website โข Live Example โข How It Works โข Usage
Roadmapper transforms your GitHub issues into a clean, three-column visual roadmap that's perfect for:
- Project README files
- Documentation sites
- Status pages
- Team dashboards
Simply add one of three labels to your GitHub issuesโRoadmap: Now, Roadmap: Next, or Roadmap: Laterโand Roadmapper does the rest.
Here's what this project's roadmap looks like:
๐ก Click the roadmap image above to open the interactive viewer where each card is clickable and links directly to its GitHub issue. Due to GitHub's security restrictions, roadmap cards cannot be made clickable when embedded directly in markdown.
-
Register your repository at roadmapper.rocketstack.co โ enter your GitHub owner, repo name, and email to receive your API key.
-
Confirm your email โ click the confirmation link sent to your email. Your key activates after confirmation (the link expires in 24 hours).
-
Add a
.roadmapperfile to the root of your repository containing the API key you received. Commit and push. -
Label your issues: Add one of these labels to your GitHub issues:
- Roadmap: Now - Top priority items you're working on right now
- Roadmap: Next - Next priority items planned for soon
- Roadmap: Later - Longer-term items under consideration
-
Embed your roadmap: Use the URL format:
https://roadmapper.rocketstack.co/{owner}/{repo}/{bgColor}/{textColor} -
Add to your README: Link to the interactive viewer page where users can click on items:
[](https://roadmapper.rocketstack.co/view/owner/repo/ffffff/24292f)
The .roadmapper file proves you own the repository and authorizes Roadmapper to generate roadmaps for it. It should contain only the API key you received during registration:
rm_a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4
Place this file in the root of your repository. Roadmapper checks this file periodically (every 24 hours) to verify your registration.
https://roadmapper.rocketstack.co/{owner}/{repo}/{bgColor}/{textColor}
Parameters:
owner(required): GitHub repository owner/organizationrepo(required): GitHub repository namebgColor(required): Background color as hex code without # (e.g.,ffffff,f6f8fa)textColor(required): Text color as hex code without # (e.g.,24292f,000000)
White background with dark text:
https://roadmapper.rocketstack.co/facebook/react/ffffff/24292f
Dark background with light text:
https://roadmapper.rocketstack.co/facebook/react/0d1117/e6edf3
Light gray background with dark text (GitHub style):
https://roadmapper.rocketstack.co/facebook/react/f6f8fa/24292f
Recommended: Interactive Roadmap Link
This shows a preview image that links to a page where each card is clickable:
## Roadmap
[](https://roadmapper.rocketstack.co/view/your-username/your-repo/ffffff/24292f)
> Click the roadmap to view the interactive version with clickable cards.Alternative: Static Image Only
If you just want a static roadmap image without clickable links:
For Documentation Sites (Non-GitHub)
If you're embedding in a website or documentation site that supports HTML, you can use the clickable embed:
<iframe src="https://roadmapper.rocketstack.co/embed/your-username/your-repo/ffffff/24292f" width="100%" height="520" frameborder="0"></iframe>Or generate HTML code with image maps for more direct embedding (replace rocketstack-matt/roadmapper with your repository).
GitHub Limitation: GitHub's markdown renderer strips iframes and may not support HTML image maps for security reasons. For GitHub READMEs, use the recommended link approach above.
Roadmapper supports fully customizable colors for your roadmap. You can specify:
- Background color (
bgColor): Used for the roadmap background and card backgrounds - Text color (
textColor): Used for all text, headers, and drop shadows
Colors are specified as hex codes without the # symbol. Both 3-digit and 6-digit hex codes are supported.
- Classic light:
ffffff/24292f- White background, dark text - GitHub style:
f6f8fa/24292f- Light gray background, dark text - Dark mode:
0d1117/e6edf3- Dark background, light text - Navy:
001f3f/ffffff- Navy background, white text - Forest:
2c5f2d/ffffff- Forest green background, white text
- Use high contrast between background and text for readability
- The label accent colors (from your GitHub labels) will still show on card borders
- Invalid hex codes will fall back to white background with dark text
- Node.js 14 or higher
- npm
npm installStart the local development server:
npm run runThe server will start on port 5002 (or the port specified in the PORT environment variable).
Access your roadmap locally at:
http://localhost:5002/{owner}/{repo}/{bgColor}/{textColor}
Example:
http://localhost:5002/rocketstack-matt/roadmapper/ffffff/24292f
This project can be deployed to any serverless platform that supports Node.js:
- Fork this repository
- Connect to your hosting platform (e.g., Vercel)
- Set environment variables:
GITHUB_TOKENโ GitHub Personal Access Token (recommended, for higher API rate limits)UPSTASH_REDIS_REST_URLโ Upstash Redis REST URL (required for registration, rate limiting, caching)UPSTASH_REDIS_REST_TOKENโ Upstash Redis REST tokenRESEND_API_KEYโ Resend API key (optional, enables email confirmation on registration)FROM_EMAILโ Sender email address (optional, defaults toRoadmapper <[email protected]>)
- Deploy
Without the Upstash Redis variables, the service runs unrestricted (no registration required, no rate limits, no caching). Without RESEND_API_KEY, keys work immediately after registration (no email confirmation required).
Roadmapper looks for these exact label names on your GitHub issues:
- Roadmap: Now - Items appear in the "Now" column
- Roadmap: Next - Items appear in the "Next" column
- Roadmap: Later - Items appear in the "Later" column
Roadmapper automatically extracts and uses the actual colors from your GitHub labels. Each roadmap card displays a colored accent border at the top that matches the color you've set for that label in your GitHub repository. This means you can customize the appearance of your roadmap by simply changing the label colors in GitHubโno configuration needed!
If a label color cannot be determined, the card will use a default gray color.
Issues are automatically sorted by issue number within each column.
- โจ Clean, modern SVG output
- ๐จ Fully customizable colors (background and text)
- ๐จ Automatic label color matching from GitHub
- ๐ Automatic updates from GitHub issues (free tier refreshes hourly)
- ๐ฑ Responsive design
- ๐ Serverless deployment ready
- ๐ Per-repository API keys with rate limiting
- โก Built-in response caching for fast load times
Roadmapper uses per-repository rate limiting and response caching:
| Tier | Roadmap Refresh | Rate Limit |
|---|---|---|
| Free (registered) | Every 60 minutes | 60 requests/hour |
| Paid (coming soon) | Every 30 seconds | ~Unlimited |
The cache TTL controls how often your roadmap data refreshes from GitHub. All viewers within the cache window see the same cached response. The rate limit is a secondary protection against abuse.
Roadmapper also uses the GitHub API, which has its own rate limits:
- Unauthenticated requests: 60 requests per hour per IP
- Authenticated requests: 5,000 requests per hour
To increase the rate limit to 5,000 requests/hour, add a GitHub Personal Access Token:
-
Create a GitHub Personal Access Token:
- Go to https://github.com/settings/tokens
- Click "Generate new token (classic)"
- Give it a name like "Roadmapper"
- Select scope:
public_repo(read access to public repositories) - Click "Generate token" and copy the token
-
Add the token to your environment:
For local development:
# Create a .env file in the project root echo "GITHUB_TOKEN=your_token_here" > .env
For production (Vercel):
- Go to your Vercel project settings
- Navigate to "Environment Variables"
- Add:
GITHUB_TOKEN=your_token_here
-
Restart the server - The token will be automatically used for all GitHub API requests.
Security Note: Never commit your .env file or expose your token in public repositories.
Apache 2.0 - See LICENSE file for details.
Contributions are welcome! Feel free to open issues or submit pull requests.