discord.js or discord.py — upload your bot and it runs around the clock on our own hardware in Tokyo. The free plan never puts it to sleep, and your bot does not need a web server to prove it is alive.
$0 to start · no card · never sleeps
Many free hosts put an app to sleep when nobody visits its web address. A bot has no visitors, so it quietly drops offline in Discord. Javer does not do that.
Free apps are never stopped for being quiet. Your bot stays connected to Discord day and night, on the free plan too.
Javer recognises a bot and runs it as a background worker. No keep-alive script, no dummy web page, no false “not responding” warnings.
If your bot crashes, it starts again on its own. If it keeps crashing, the panel says why, with the last line it printed.
A storage folder survives every update — for a SQLite file or JSON settings. Its path is in JAVER_STORAGE.
The token goes in the panel, never in your code.
Add an environment variable such as DISCORD_TOKEN. Your bot reads it when it starts.
A zip, a public Git link, a connected GitHub repo, or javer deploy from the command line.
Javer installs your dependencies, starts the bot, and shows it as a background worker. Logs are live.
A minimal bot in each library. Deploy either one as it is.
const { Client, GatewayIntentBits } = require('discord.js');
const client = new Client({ intents: [GatewayIntentBits.Guilds] });
client.once('ready', () => console.log(`Logged in as ${client.user.tag}`));
client.login(process.env.DISCORD_TOKEN);import os
import discord
client = discord.Client(intents=discord.Intents.default())
@client.event
async def on_ready():
print(f"Logged in as {client.user}")
client.run(os.environ["DISCORD_TOKEN"])Javer looks for these, in this order, and runs the first it finds.
| WHAT YOUR BOT HAS | WHAT JAVER DOES |
|---|---|
A Procfile with worker: python bot.py | runs exactly that |
package.json with a start script or main | runs that |
server.js, app.js, index.js, main.js or bot.js | runs it with Node.js |
app.py, main.py, server.py, wsgi.py, application.py or bot.py | installs requirements.txt, runs it |
discord.js, discord.py, py-cord, nextcord, disnake, hikari, Eris, Oceanic and Discordeno are recognised as bots automatically. A bot that also serves a web page — a dashboard, or a keep-alive on Flask — is treated as a web app and watched like one, so you hear about it if that page stops answering.
A small bot in a handful of servers is comfortable in 512 MB. Music bots, large guilds and image or audio processing want 1 GB or more.
Straight answers. If something here is unclear, ask us and we will add it.
Yes. Javer Webhost's free plan runs one Discord bot around the clock on 512 MB of memory, 0.25 vCPU and 2 GB of disk, with no credit card and no expiry date. Free apps are never stopped for being idle.
Yes. Include a requirements.txt that lists discord.py, and name the file main.py, bot.py or app.py, or add a Procfile with worker: python yourfile.py. Forks such as py-cord, nextcord and disnake work the same way.
No. Javer recognises a bot from its Procfile or its dependencies and runs it as a background worker, so it never expects a web page from it. Keep-alive scripts written for other hosts are not needed.
In an environment variable you set in the panel, for example DISCORD_TOKEN. Your code reads process.env.DISCORD_TOKEN in Node.js or os.environ["DISCORD_TOKEN"] in Python. Never put a token in your code.
Yes, if you save it in the storage folder. Its path is in the JAVER_STORAGE environment variable. Everything else is replaced each time you deploy.
It restarts on its own. If it keeps crashing, the panel says so and shows the last line it printed before stopping.