Open-Source Discord Bots You Can Self-Host in 2026

Published on

Open-source Discord bots you can self-host in 2026, checked in their own repos: licence, runtime, RAM, last release and the Carl-bot or MEE6 job each covers.

Rows of server racks joined by glowing cables, the kind of machine a self-hosted Discord bot runs on

Your server runs on Carl-bot or MEE6, and you want a bot you control instead: code you can read and data on your own disk. The question that matters is whether a project still ships, so every bot below was checked in its own repository and documentation on 3 November 2026: licence, language, what it needs to run, the latest release, and which Carl-bot or MEE6 job it can take over.

Quick answer: The open-source Discord bots worth self-hosting in 2026 are Red-DiscordBot (Python, GPL-3.0, moderation, custom commands, self-roles and music in one bot), YAGPDB (Go, MIT, role menus, feeds and custom commands), Discord Tickets (Node.js, GPL-3.0, tickets with a web dashboard) and Modmail (Python, AGPL-3.0, a staff inbox through DMs). Zeppelin, a moderation bot built for large servers, has public code, but its Elastic License 2.0 makes it source-available rather than open source. For MEE6-style levels, add the MIT-licensed LevelUp cog to Red. For polls you need no bot at all, because Discord has them built in.

The Bots at a Glance

BotLicenceLanguage and runtimeAlso needsLatest release
Red-DiscordBotGPL-3.0Python 3.8.1 to 3.11Java 17 or 21 for music3.5.24, 6 March 2026
YAGPDBMITGo 1.23 or newerPostgreSQL 9.6+, Redis 5+v2.92.0, 27 October 2026
ZeppelinElastic License 2.0TypeScript, runs in DockerMySQL 8.0 and Redis (bundled in the standalone setup)No tagged releases; last commit 30 October 2026
Discord TicketsGPL-3.0JavaScript, Node.js 20 or newerSQLite, MySQL, MariaDB or PostgreSQL, plus an open portv4.0.52, 4 October 2026
ModmailAGPL-3.0Python 3.10, discord.py 2.6.3MongoDBv4.2.1, 30 November 2025
LevelUp (Red cog)MITPython 3.9+, Red 3.5.0+A running RedNo releases; repository updated 2 November 2026

Only Discord Tickets puts a number on memory: at least 150 MB, with the bot using around 120 MB and npm at least triple that during installation. Red's hosting page says a Raspberry Pi 3 can handle a small to medium sized bot. The others publish no figure, so measure your own; our guide to how much RAM a Discord bot needs shows how.

Open-Source Alternatives to Carl-bot and MEE6, Feature by Feature

Carl-bot's site describes it as a bot "featuring reaction roles, automod, logging, custom commands" and lists autoroles, embeds, starboard, autofeeds and reminders as well (carl.gg, checked 3 November 2026). MEE6 describes itself as a way to "manage your Discord server with leveling, moderation, Twitch, Youtube and Reddit notifications" (mee6.xyz, checked 3 November 2026). Matched to the bots in this guide:

Job, as Carl-bot or MEE6 list itSelf-hosted option
Reaction roles and autoroles (Carl-bot)YAGPDB role menus, Zeppelin reaction roles, Red self-roles
Automod and logging (Carl-bot), moderation (MEE6)Zeppelin automod, cases and logs; Red filter, mod-log and warnings; YAGPDB moderation and logs
Custom commands (Carl-bot)Red CustomCommands, YAGPDB custom commands, Zeppelin tags
Starboard (Carl-bot)Zeppelin
Reminders (Carl-bot)YAGPDB
Leveling (MEE6)Red with the LevelUp cog
Twitch, YouTube and Reddit notifications (MEE6)YAGPDB YouTube Feed, Reddit Feed and Stream Announcements; Red Streams
TicketsDiscord Tickets, or Modmail for support through DMs
PollsDiscord's built-in polls

The trade: Carl-bot and MEE6 are bots you invite, while these are bots you run. Updates, backups and keeping the process online become your job.

Red-DiscordBot: One Bot for Most Jobs

Red calls itself "a fully modular bot" and a "self-hosted bot", meaning "you will need to host and maintain your own instance". After installation, everything is controlled from inside Discord. The default modules cover moderation (kick, ban, mod-log, filter, chat cleanup), warnings and mutes, custom commands, stream alerts for Twitch, YouTube and Picarto, a bank, trivia, self-role assignment and music. Community cogs add the rest; the README names reaction roles and welcome messages among them. Music runs through the Audio cog, which downloads and manages Lavalink, a Java audio server, so the install includes Java 17.

Where to run it matters. Red's hosting page says platforms "such as Heroku, Pterodactyl, repl.it, Termux and alike are NOT officially supported" and that its Docker support is "not ready for daily use". It recommends a Linux VPS, with Ubuntu 24.04 LTS as the suggested system. Do not install it as root; create a normal user with sudo first. Then, from Red's Ubuntu 24.04 guide:

sudo apt update
sudo apt -y install software-properties-common
sudo add-apt-repository -y ppa:deadsnakes/ppa
sudo apt -y install python3.11 python3.11-dev python3.11-venv git openjdk-17-jre-headless build-essential nano
python3.11 -m venv ~/redenv
source ~/redenv/bin/activate
python -m pip install -U pip wheel
python -m pip install -U Red-DiscordBot
redbot-setup
redbot <your instance name>

redbot-setup asks where to store data, which storage backend to use and what to call the instance; redbot then asks for your bot token and a prefix. Red's docs include a guide to auto-restart with systemd.

Add MEE6-Style Levels With LevelUp

LevelUp, in the vertyco/vrt-cogs repository, lets members "earn experience by chatting in text and voice channels" and compare levels on leaderboards. It needs Red 3.5.0 or newer. In Discord, with your prefix in place of [p]:

[p]load downloader
[p]repo add vrt-cogs https://github.com/vertyco/vrt-cogs
[p]cog install vrt-cogs levelup
[p]load levelup
[p]levelset toggle
[p]levelset roles add 10 @Regular

The last line hands out the Regular role at level 10. Community cogs are not part of Red itself, so read a repository before you add it.

YAGPDB: Role Menus, Feeds and Custom Commands

YAGPDB is "a multifunctional, modular Discord bot". Its README lists YouTube and Reddit feeds, stream announcements, reminders, reputation, moderation, logs and custom commands, and its role commands plugin builds role menus. Our YAGPDB reaction roles guide was checked against this same source code.

It has more moving parts than the other bots here: Redis for light data and caching, PostgreSQL for configuration and heavy data such as logs, and its own web control panel, so your Discord application needs two redirect URLs, https://YourHostNameHere/confirm_login and https://YourHostNameHere/manage, and the Docker setup expects ports 80 and 443 to be reachable. The Docker route from the README:

git clone https://github.com/botlabs-gg/yagpdb
cp yagpdb/yagpdb_docker/{app.example.env,app.env}
cp yagpdb/yagpdb_docker/{db.example.env,db.env}
# edit app.env and db.env, then start it:
docker compose -f yagpdb/yagpdb_docker/docker-compose.yml up -d

The README writes the last command as docker-compose, the older standalone tool. Before updating, read breaking_changes.md: schema migrations should run on their own, "but you should always make backups".

Zeppelin: Moderation for Large Servers

Zeppelin is "a moderation bot for Discord, designed with large servers and reliability in mind". Its README lists automod with word filters and spam detection, moderation cases with notes, server logs, tags, reaction roles, starboard, and slowmodes that switch from Discord's native slowmode (6 hours or less) to a bot-enforced one for longer, all configured through a web dashboard.

Read the licence first. The Elastic License 2.0 lets you use, copy and change the software, but says: "You may not provide the software to third parties as a hosted or managed service". It is not on the Open Source Initiative's list of approved licences, so Zeppelin is source-available. If you plan to offer your copy to other communities, check that clause.

Production runs in Docker. The standalone setup brings its own MySQL 8.0, Redis and nginx:

git clone https://github.com/ZeppelinBot/Zeppelin.git
cd Zeppelin
cp .env.example .env
# fill in the missing values, including the "PRODUCTION - STANDALONE" section
docker compose -f docker-compose.standalone.yml up -d

The docs warn that the dashboard and API are served over plain HTTP and recommend a TLS proxy in front of them.

Discord Tickets: A Ticket Bot With a Dashboard

Discord Tickets calls itself "a free alternative to the premium and white-label plans of other ticket management bots." It has a settings dashboard, tags that answer common questions without a ticket, auto-closing of inactive tickets, transcripts in the database, up to 5 questions before a ticket opens, claiming and transferring, and staff statistics.

The requirements, from its docs: Node.js 20 or newer, a forwarded port for the web server, at least 150 MB RAM, at least 1 GB disk, and a database. MySQL 8 is recommended. SQLite works with nothing extra to install, but the docs advise against it if you archive transcripts in large servers, because the file only grows until you vacuum it by hand. On hosting panels, the docs warn that "NPM may crash when installing dependencies if less than 500MB is allocated."

Create a new Discord application for it (the docs advise against reusing one), copy its OAuth2 secret, add <HTTP_EXTERNAL>/auth/callback as a redirect, and turn on the presence, server members and message content intents. On Linux:

git clone --depth 1 --branch v4.0.52 https://github.com/discord-tickets/bot.git tickets
cd tickets
npm i --production
# edit .env: DISCORD_TOKEN, DISCORD_SECRET, DB_PROVIDER=sqlite, HTTP_EXTERNAL
npm run postinstall
node .

Type commands publish into the console once to register the slash commands, then stop it with exit and run it in the background with npm i -g pm2 and pm2 start . --name tickets. Back up .env: it holds the encryption key, and the docs say "your database is useless if you lose the encryption key."

Modmail: A Staff Inbox Through DMs

Modmail is "a shared inbox for server staff to communicate with their users". A member DMs the bot, the bot opens a channel in a category you choose, and any moderator answers there. Closing a thread posts a log link, and you can set a minimum account age or server membership time before someone can open one. There is no public invite: the README says that "due to how this bot functions, it cannot be invited".

It stores everything in MongoDB, and the docs use MongoDB Atlas's free tier. Their Ubuntu guide installs Python 3.10 with libcairo2-dev, libffi-dev and g++ through apt and runs the bot with pipenv. The .env needs TOKEN, LOG_URL, GUILD_ID, OWNERS and CONNECTION_URI. Without a log viewer, LOG_URL must still be a valid domain name, or thread creation runs into problems.

Modmail's AGPL-3.0 adds one rule to the GPL: if you modify the bot, users "interacting with it remotely through a computer network" must be offered the source of your version. The last tagged release dates from November 2025, but the repository was still being updated at the end of October 2026.

Polls Need No Bot

Discord has polls built in. According to Discord's developer documentation, a poll takes up to 10 answers and stays open for up to 32 days, 24 hours by default. Our Discord poll guide covers when a poll bot still makes sense.

Which Space-Node Plan Fits Each Bot

Discord Tickets is the bot here with its own guide for Pterodactyl-style panels. On our Discord bot hosting, Pro fits it: 1 GB RAM, above the 500 MB the docs ask for during npm install, 20 GB NVMe for its SQLite database, and Node.js 20 or newer. Each plan runs one bot process, and the dashboard needs a port reachable from outside, so check that with our support before you order.

Red, YAGPDB, Zeppelin and Modmail want root: apt packages, Docker or a database server of their own. A VPS gives you KVM with root access in an EU data center, from VPS-S on Standard (3 vCores, 4 GB RAM, 60 GB, AMD EPYC 7452) or VPS-XS on Premium (2 vCores, 2 GB DDR5, 20 GB, Ryzen 9 9950X). Backups are not included in the plan, so keep your own copies of each bot's database and .env.

Before You Switch

  • Run the new bot next to the old one in a test channel and move one job at a time, starting with whatever you pay for now.
  • Give each bot its own Discord application and turn on only the privileged intents its docs ask for.
  • Back up before every update. Red has a backup and restore guide, YAGPDB tells you to always make backups, and Discord Tickets cannot read its database without the key in .env.
  • Count the hours. A self-hosted bot only stays up if its machine does; our true cost of self-hosting a Discord bot works through power and upkeep.

FAQ

What is the best open-source alternative to MEE6? For leveling, Red with the LevelUp cog. For moderation, Zeppelin or Red. Red's Streams cog covers Twitch and YouTube alerts; for Reddit feeds you need YAGPDB.

Is there an open-source Carl-bot alternative for reaction roles? Yes. YAGPDB has role menus and Zeppelin has reaction roles. Red has self-assignable roles built in and reaction roles through community cogs.

Is Zeppelin open source? Its code is public, but its licence is the Elastic License 2.0, which forbids providing it to third parties as a hosted or managed service and is not an OSI-approved open source licence. The other bots in this guide use GPL-3.0, AGPL-3.0 or MIT.

Can I run Red-DiscordBot on a Pterodactyl panel? Red's docs say Pterodactyl and similar platforms are not officially supported, so you get no help if something breaks there. They recommend a Linux VPS with Ubuntu 24.04 LTS.

How much RAM does a self-hosted Discord bot need? Only Discord Tickets gives a figure: at least 150 MB, about 120 MB in use, and 500 MB on a panel so npm does not crash during installation. Measure the others after a day of normal use.

Do I need a bot for Discord polls? No. Discord's built-in polls take up to 10 answers and run for up to 32 days.

Sources

All opened on 3 November 2026: