Build Discord bots in a real IDE
Wire commands together as visual flows, watch each block light up as your bot runs it, and ship the same folder to your own server. Free and open source.
- Start/greet
- Condition{{options.user}}
- ReplyHey {{user.displayName}},
19:42:07Bramble#4821 is online in 3 servers
19:42:31commands/greetdone in 84 ms
Mira used /greet
BrambleAPPToday at 19:42
Hey Mira, welcome to the server
From the first command to a bot on your server
Makecord handles the parts of bot making that aren't the fun part, so you can spend your time on what the bot actually does.
- 01
Flows are files
Every command and event is a readable JSON file in your project. Version it with git, review it, share it.
- 02
Live while you save
Change a flow while the bot runs and it takes effect on save. The block that just ran lights up in the editor.
- 03
Your token stays out of the project
Secrets are encrypted with your system keychain and only handed to the bot as environment variables while it runs.
- 04
Problems before you run
A missing intent, a block that never runs, an action used in the wrong place. The Problems panel catches it and fixes most with one click.
Runs on your machine, then on your server
The engine is a standalone npm package. Copy the project to a VPS, put your token in .env and start it. With Docker it's one line.
No accounts, no hosted service. When Discord's API changes, updating the engine is an npm update.
# on your server
cp .env.example .env # fill in DISCORD_TOKEN
npm install
npm start
# or
docker compose up -d
● Bramble#4821 is online in 3 servers
Registered 3 commands: /ping /greet /rankimport { defineNode, defineNodeMeta, definePlugin }
from "@makecord/plugin-sdk";
import { z } from "zod";
const roll = defineNodeMeta({
type: "dice.roll", title: "Roll Dice", category: "data",
fields: z.object({ sides: z.number().default(6) }),
});
export default definePlugin({
id: "makecord-plugin-dice", version: "1.0.0",
engines: { makecord: "^0.1.0" },
nodes: [defineNode(roll, (ctx, { sides }) =>
ctx.vars.set("roll", 1 + Math.floor(Math.random() * sides)))],
});Missing a block? Write it
A plugin is a few block definitions and the functions that run them. Fields are Zod schemas, and the IDE builds the settings form from them.
Plugins only see the secrets you allow, never the bot token. A marketplace inside the IDE is on the way, so adding a database or an economy system will be one click.