A bridge between Nuvio's Discord community forums and GitHub Issues.
Discord intake with GitHub-grade tracking, synchronized end to end.
NuvioBot keeps community feedback and engineering tracking in sync by mirroring forum discussions to GitHub and GitHub updates back to Discord.
NuvioBot is a TypeScript bot used by NuvioMedia to connect support and suggestion conversations in Discord with actionable issue tracking in GitHub.
Instead of splitting context across two places, NuvioBot links them into one workflow.
As the Nuvio community grew, most bug reports and feature ideas started in Discord while implementation work happened in GitHub. That created friction:
- Reports had to be copied manually from Discord to GitHub.
- Status updates in GitHub were not visible to forum users.
- Edited messages and follow-up discussion could drift out of sync.
NuvioBot solves this by making Discord the user-friendly intake surface and GitHub the engineering source of truth, while keeping both sides synchronized.
- Creates GitHub issues from new Discord forum posts.
- Mirrors GitHub issues back into the correct Discord forum.
- Syncs comments/replies in both directions.
- Syncs edits for already-linked messages/comments.
- Mirrors closed issue state back to Discord by resolving and locking related threads.
- Discord tags can route posts to different repositories (configured in
src/config.ts). - GitHub labels can route mirrored issues into the right Discord forum channel.
- Polling intervals and optional sync limits are configurable via
.env.
- Node.js 18+
- Discord bot token
- GitHub token with Issues read/write access on target repositories
- Install dependencies:
npm install- Create your environment file:
cp .env.example .env- Set required values in
.env:
DISCORD_TOKENGITHUB_TOKEN
- Start in development:
npm run dev- Build and run in production:
npm run build
npm startRun with Docker Compose:
docker compose up -d --buildView logs:
docker compose logs -fStop:
docker compose downDetailed technical and implementation notes are available in INFO.md.
Licensed under the GNU General Public License v3.0.
See LICENSE for full text.