Makecord

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.

commands/greet
Running
  1. Start/greet
  2. Condition{{options.user}}
  3. 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.

  1. 01

    Flows are files

    Every command and event is a readable JSON file in your project. Version it with git, review it, share it.

  2. 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.

  3. 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.

  4. 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 /rank
import { 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.