Discraft Documentation

Discraft is a small tool for defining Discord server structures as portable JSON. Create a setup visually, write it yourself, or generate it with the Discraft SDK. Export the definition and install it into a Discord server using the Discraft Discord app.

Visual → JSON → Discord
Code   → JSON → Discord
AI     → JSON → Discord

Quick Start

1. Open Discraft Designer

2. Create roles, categories, and channels using the visual tree

3. Export your setup as a .discraft.json file

4. Add the Discraft bot to your Discord server

5. Use /install and upload your JSON file

6. Done.


JSON Format

Overview

Every Discraft definition is a JSON file with this structure:

{
  "format": "discraft",
  "version": 1,
  "name": "My Server",
  "roles": [],
  "categories": [],
  "channels": []
}
  • format — Must be "discraft".
  • version — Must be 1.
  • name — Server name (required, max 100 characters).
  • roles — Array of role definitions (optional).
  • categories — Array of category definitions with nested channels (optional).
  • channels — Array of top-level channels not inside any category (optional).

Roles

{
  "name": "Moderator",
  "color": "#f39c12",
  "hoist": true,
  "mentionable": true,
  "permissions": {
    "manage_messages": true,
    "kick_members": true
  }
}
PropertyTypeRequiredDescription
namestringYesRole name (max 100 chars)
colorstringNoHex color code (e.g. #ff0000)
hoistbooleanNoDisplay separately in member list
mentionablebooleanNoAllow anyone to mention this role
permissionsobjectNoServer-wide permissions

Categories

{
  "name": "Community",
  "position": 0,
  "permissions": {
    "@everyone": { "view": true }
  },
  "channels": [
    { "name": "general", "type": "text" },
    { "name": "Gaming", "type": "voice" }
  ]
}
PropertyTypeRequiredDescription
namestringYesCategory name (max 100 chars)
positionintegerNoSort position (0-based)
permissionsobjectNoPermission overwrites per role
channelsarrayNoChannels inside this category

Channels

{
  "name": "general",
  "type": "text",
  "topic": "Welcome to the community",
  "position": 0,
  "permissions": {
    "@everyone": { "send": false },
    "Moderator": { "send": true }
  }
}
PropertyTypeRequiredDescription
namestringYesChannel name (max 100 chars)
typestringYes"text" or "voice"
topicstringNoChannel topic (text only, max 1024 chars)
positionintegerNoSort position (0-based)
permissionsobjectNoPermission overwrites per role

Permissions

Role Permissions (server-wide)

Used in the permissions field of a role definition:

PermissionDescription
administratorFull admin access
manage_guildManage server settings
manage_channelsCreate, edit, delete channels
manage_rolesCreate, edit, delete roles
manage_messagesDelete and pin messages
kick_membersKick members
ban_membersBan members
view_audit_logView audit log
create_inviteCreate invites
change_nicknameChange own nickname
manage_nicknamesChange other members' nicknames
manage_emojisManage server emojis
manage_webhooksManage webhooks
viewView channels
sendSend messages
send_ttsSend TTS messages
embed_linksEmbed links
attach_filesAttach files
read_historyRead message history
mention_everyoneMention @everyone
use_external_emojisUse external emojis
add_reactionsAdd reactions
connectConnect to voice
speakSpeak in voice
mute_membersMute members in voice
deafen_membersDeafen members in voice
move_membersMove members between voice channels
use_vadUse voice activity detection
priority_speakerPriority speaker in voice

Channel Permissions (overwrites)

Used in the permissions field of a category or channel definition. These override role-level permissions for specific channels.

{
  "permissions": {
    "@everyone": {
      "view": false
    },
    "Moderator": {
      "view": true,
      "send": true
    }
  }
}
  • Keys are role names (not IDs).
  • @everyone refers to the default role.
  • Values are true (allow) or false (deny).
  • Omitting a permission means "inherit" (no overwrite).

SDK

The Discraft SDK is a JavaScript builder class for generating Discraft JSON definitions programmatically.

Usage

const server = new Discraft("Gaming Community");

server.role("Admin", { color: "#ff0000" });
server.role("Moderator", {
    color: "#f39c12",
    hoist: true,
    permissions: { manage_messages: true, kick_members: true }
});
server.role("Member");

server.category("Community", category => {
    category.text("general", { topic: "Welcome!" });
    category.text("media");
    category.voice("Gaming");
});

server.category("Staff", category => {
    category.text("staff-chat");
    category.voice("Staff Voice");
});

console.log(server.toJSON());

API

MethodDescription
new Discraft(name)Create a new server definition
.role(name, options?)Add a role
.category(name, builder?)Add a category with optional builder callback
.text(name, options?)Add a top-level text channel
.voice(name, options?)Add a top-level voice channel
.toJSON()Export as a JavaScript object
.toString()Export as formatted JSON string

Category Builder

Inside a .category() callback:

MethodDescription
.text(name, options?)Add a text channel
.voice(name, options?)Add a voice channel
.permissions(overwrites)Set permission overwrites
.position(pos)Set sort position

Code Generation

The designer can export your visual design as SDK code using Discraft.generateCode(setup).


Discord Bot

Installation

1. Add the Discraft bot to your server

2. The bot requires Manage Channels and Manage Roles permissions

Commands

/install file:

Upload a .discraft.json file to install the server setup.

The installer:

  • Validates the JSON format and schema
  • Checks bot permissions
  • Creates roles in order
  • Creates categories
  • Creates channels inside categories
  • Applies permission overwrites
  • Reports results

/help

Shows brief usage information.

Behavior

  • Additive only — The installer only adds missing items. It never deletes existing channels, roles, or categories.
  • Collision handling — If a role or channel already exists (by name), it is skipped.
  • Permission hierarchy — The bot respects Discord's role hierarchy. It cannot modify roles above its own.

Examples

Basic Server

{
  "format": "discraft",
  "version": 1,
  "name": "My Server",
  "roles": [
    { "name": "Admin", "color": "#e74c3c" },
    { "name": "Member", "color": "#3498db" }
  ],
  "categories": [
    {
      "name": "General",
      "channels": [
        { "name": "welcome", "type": "text", "topic": "Welcome!" },
        { "name": "general", "type": "text" },
        { "name": "General", "type": "voice" }
      ]
    }
  ]
}

Private Staff Category

{
  "name": "Staff",
  "permissions": {
    "@everyone": { "view": false },
    "Moderator": { "view": true, "send": true },
    "Admin": { "view": true, "send": true }
  },
  "channels": [
    { "name": "staff-chat", "type": "text" },
    { "name": "mod-logs", "type": "text" },
    { "name": "Staff Voice", "type": "voice" }
  ]
}

Read-Only Announcements

{
  "name": "announcements",
  "type": "text",
  "topic": "Server announcements",
  "permissions": {
    "@everyone": { "send": false },
    "Admin": { "send": true }
  }
}

AI Support

Discraft definitions are designed to be AI-friendly. You can tell any AI coding assistant:

Create a Discraft JSON definition for a Minecraft community with Admin, Moderator, and Member roles, an Information category with rules and announcements channels, and a Community category with general chat and voice.

The AI generates valid Discraft JSON. You can validate it using the designer or the /api/validate endpoint.


Limits

LimitValue
Maximum roles250
Maximum categories50
Maximum channels500
Role/channel name length100 characters
Channel topic length1024 characters
JSON file size100 KB

Schema

The full JSON Schema is available at:

https://Discraft.iH4xz.pro/schema/v1.json

The permission mapping reference:

https://Discraft.iH4xz.pro/schema/permissions.json