How to host a Discord bot 24/7 for free
Step by step
Create an account
Sign up at dash.waifly.com with a username of at least 4 alphanumeric characters and a password of at least 6, or in one click with Discord, Google or Apple. No payment method is requested for the free plan.
Create a server with the right runtime
Open the Servers tab, click Create, name the server, and pick the Egg matching your bot: NodeJS for discord.js, Python for discord.py. Choose location FR2 (Paris) unless FR1 has capacity. Leave the free-plan limits as they are: 300 MB RAM, 1 GB disk, 30% CPU.
Upload your bot
Open the Pterodactyl panel, go to Files, and upload your project — or connect over SFTP with a client like FileZilla using the credentials shown in the panel. Include package.json for Node.js or requirements.txt for Python so dependencies install on start.
Put your token in an environment file
Never hard-code the Discord token in your source. Put it in a .env file and read it with process.env.DISCORD_TOKEN or os.environ. Files named .env are excluded from Waifly's automated security scan, unlike the rest of your code.
Set the startup command and start
In the panel's Startup tab, set the entry point — node index.js or python main.py. Hit Start and watch the console: dependency installation and the Discord gateway handshake both appear there, which is where token and intent errors show up first.
Keep it alive
Enable auto-restart in the panel so a crash brings the process back instead of leaving the server idle. This matters: a server that stays offline for 3 days is suspended automatically, and an account created less than 7 days earlier loses its server 3 days after that.
What the free plan gives you, precisely
- 300 MB of RAM — a discord.js v14 bot with 20–30 commands typically idles at 80–120 MB; a discord.py bot at 60–90 MB.
- 1 GB of storage — enough for the code, node_modules and logs. Media caching is what fills it, so write to /tmp or prune.
- CPU capped at 30% of a core on an Intel Xeon Gold 6138 (2.00 GHz, 3.70 GHz boost). Fine for event handling; audio transcoding for a music bot is what pushes past it.
- 1 MySQL database — for levels, economy, per-guild settings.
- Backups and the Pterodactyl panel included.
- DDoS protection included, on the free plan as on the paid ones.
When a bot outgrows this, Nano at €4/month raises it to 4 GB of RAM, 2 vCPU and 20 GB of storage — the usual trigger being a music bot or a bot serving several thousand guilds.
What gets a free bot suspended
These are the rules that actually matter, from the anti-abuse policy:
- Server status is checked daily; 3 days offline means automatic suspension. An automated inspection also runs every 30 minutes.
- VPNs, proxies and tunnels are forbidden on the free plan, as is obfuscated code — a common reason self-bot or scraper projects get pulled.
- One account per person. Recovering access when duplicates are detected involves a €1 manual verification fee.
- A suspended server created less than 7 days earlier is deleted after 3 days. An older one is kept 15 days and recoverable from backups.waifly.com.
If your server is suspended but not blacklisted, you can reactivate it yourself at unsuspend.waifly.com by pasting its panel link.
No code? BotForge builds the bot for you
If you would rather not write the bot at all, BotForge is a four-step wizard in the dashboard: bot name, Discord token and command prefix, then the modules to enable, then embed colour and language (9 available), then deployment with live status. A €3 Premium tier unlocks the advanced command modules. Full walkthrough in the BotForge documentation.