Declarative Discord Bot Framework - Build bots with YAML, no code required
npm install @furlow/cliCommand-line interface for the FURLOW declarative Discord bot framework.
Build powerful Discord bots using YAML specifications — no code required.
``bash`
npm install -g @furlow/cli
Or with your preferred package manager:
`bash`
pnpm add -g @furlow/cli
yarn global add @furlow/cli
`bashCreate a new bot project
furlow init my-bot
cd my-bot
Requirements
- Node.js 20.0.0 or higher
- A Discord bot token (create one here)
- Discord Application Client ID
Commands
$3
Create a new FURLOW bot project with starter templates.
`bash
furlow init my-bot
furlow init my-bot --template moderation
furlow init my-bot --no-git --no-install
`Options:
| Flag | Description | Default |
|------|-------------|---------|
|
-t, --template | Project template (simple, moderation, full) | simple |
| --no-git | Skip git repository initialization | - |
| --no-install | Skip dependency installation | - |---
$3
Start the bot from a FURLOW specification file.
`bash
furlow start
furlow start ./bot.furlow.yaml
furlow start -g 123456789 # Register commands to specific guild
`Options:
| Flag | Description | Default |
|------|-------------|---------|
|
-e, --env | Path to environment file | .env |
| -g, --guild | Register commands to specific guild (instant updates) | - |
| --no-validate | Skip schema validation | - |Environment Variables:
| Variable | Required | Description |
|----------|----------|-------------|
|
DISCORD_TOKEN | Yes | Your Discord bot token |
| DISCORD_CLIENT_ID | Yes | Your Discord application ID |
| DISCORD_GUILD_ID | No | Default guild for command registration |---
$3
Start the bot in development mode with hot reload. The bot automatically restarts when specification files change.
`bash
furlow dev
furlow dev ./bot.furlow.yaml
`Options:
| Flag | Description | Default |
|------|-------------|---------|
|
-e, --env | Path to environment file | .env |
| --no-validate | Skip schema validation | - |---
$3
Validate a FURLOW specification file against the schema.
`bash
furlow validate furlow.yaml
furlow validate ./bot.furlow.yaml --strict
`Options:
| Flag | Description |
|------|-------------|
|
--strict | Enable strict validation mode |---
$3
Add a builtin module to your project.
`bash
furlow add moderation
furlow add welcome
furlow add --list # Show available builtins
`Available Builtins:
| Module | Description |
|--------|-------------|
|
moderation | Warn, kick, ban, mute, case management |
| welcome | Join/leave messages, auto-role, DM welcome |
| logging | Message, member, server event logging |
| tickets | Support tickets, claiming, transcripts |
| reaction-roles | Role assignment via reactions/buttons |
| leveling | XP, levels, rewards, leaderboards |
| music | Voice playback, queue, filters |
| starboard | Star reactions, hall of fame |
| polls | Voting, multiple choice |
| giveaways | Requirements, reroll, winners |
| auto-responder | Custom triggers, responses |
| afk | AFK status, mention notifications |
| reminders | Personal reminders, DM delivery |
| utilities | Serverinfo, userinfo, avatar, etc. |---
$3
Bundle the bot for production deployment.
`bash
furlow build
furlow build -o ./build
`Options:
| Flag | Description | Default |
|------|-------------|---------|
|
-o, --output | Output directory | dist |---
$3
Export Discord slash command registration JSON for manual deployment.
`bash
furlow export furlow.yaml
furlow export furlow.yaml -o commands.json
furlow export furlow.yaml -g 123456789 # Guild-specific commands
`Options:
| Flag | Description |
|------|-------------|
|
-o, --output | Output file (default: stdout) |
| -g, --guild | Export for specific guild |---
Example Bot
Create
furlow.yaml:`yaml
version: "0.1"identity:
name: "My Bot"
presence:
status: online
activity:
type: playing
text: "with FURLOW"
commands:
- name: ping
description: Check bot latency
actions:
- reply:
content: "Pong! ${client.ping}ms"
- name: hello
description: Greet someone
options:
- name: user
type: user
description: Who to greet
actions:
- reply:
content: "Hello, ${options.member.display_name}!"
events:
- event: member_join
actions:
- send_message:
channel: "${env.WELCOME_CHANNEL}"
content: "Welcome ${member.display_name}!"
`Run it:
`bash
furlow start furlow.yaml
``- Full Documentation: github.com/virgilvox/discord-furlow
- Actions Reference: 84 available actions
- Expression Functions: 71 functions
- Pipes Reference: External integrations
| Package | Description |
|---------|-------------|
| @furlow/core | Runtime engine |
| @furlow/discord | Discord.js adapter |
| @furlow/schema | TypeScript types |
| @furlow/storage | Database adapters |
| @furlow/builtins | Pre-built modules |
| @furlow/pipes | External integrations |
| @furlow/testing | Test utilities |
MIT