Make your own Discord Bot with Kite for free without a single line of code. With support for slash commands, buttons, select menus, events, and more.
This project is very much work in progress and doesn't have all the features yet. Only some parts of the Discord API are covered and more complex logic is hard to implement right now.
Warning
Self-hosting is not officially supported. These instructions are provided as-is for people who are comfortable running Docker, Postgres and their own Discord application. We don't answer self-hosting questions in issues or on Discord, and they may be closed without a reply. Bug reports that also affect the hosted version of Kite are welcome.
This describes the easiest way to self host an instance of Kite by using a single binary that contains both the backend and frontend.
You can find prebuilt binaries of the server with the frontend files included here.
To run Kite you will also need to run a Postgres server alongside it, so it's recommended to use docker-compose to simplify the process.
To configure the server you can create a file called kite.toml with the following fields:
[discord]
client_id = "..." # Your Discord client ID used for Oauth2
client_secret = "..." # Your Discord client secret used for Oauth2
[encryption]
token_encryption_key = "..." # HEX encoded AES key for encrypting Discord tokensTo generate an encryption key for tokens you can use openssl enc -aes-256-cbc -k secret -P -md sha1.
You can also set the config values using environment variables. For example KITE_DISCORD__CLIENT_ID will set the discord client id.
Install Docker and docker-compose and create a docker-compose.yaml file with the following contents:
services:
postgres:
image: postgres
restart: always
volumes:
- kite-local-postgres:/var/lib/postgresql/data
environment:
POSTGRES_USER: postgres
POSTGRES_DB: kite
PGUSER: postgres
PGDATA: /var/lib/postgresql/data/pgdata
POSTGRES_HOST_AUTH_METHOD: trust
healthcheck:
test: ["CMD", "pg_isready"]
interval: 3s
timeout: 30s
retries: 3
minio:
image: pgsty/silo
command: server --console-address ":9001" /data
ports:
- "9000:9000"
- "9001:9001"
environment:
MINIO_ROOT_USER: kite
MINIO_ROOT_PASSWORD: 1234567890
volumes:
- kite-local-minio:/data
kite:
image: merlintor/kite:latest
restart: always
ports:
- "8080:8080"
environment:
- KITE_API__HOST=0.0.0.0
- KITE_DATABASE__POSTGRES__HOST=postgres
- KITE_DATABASE__POSTGRES__USER=postgres
- KITE_DATABASE__POSTGRES__DB_NAME=kite
- KITE_DATABASE__S3__ENDPOINT=minio:9000
- KITE_DATABASE__S3__ACCESS_KEY_ID=kite
- KITE_DATABASE__S3__SECRET_ACCESS_KEY=1234567890
- KITE_DATABASE__S3__SECURE=false
- KITE_APP__PUBLIC_BASE_URL=http://localhost:8080
- KITE_API__PUBLIC_BASE_URL=http://localhost:8080
volumes:
- ./kite.toml:/root/kite.toml
depends_on:
postgres:
condition: service_healthy
volumes:
kite-local-postgres:
kite-local-minio:Run the file using docker-compose up. It will automatically mount the kite.toml file into the container. You should not configure postgres in your config file as it's using the postgres instance from the container.
Kite should now be accessible in your browser at localhost:8080.
You can download NodeJS from nodejs.org and enable pnpm with corepack enable.
# Switch to the kite-web directory
cd kite-web
# Install dependencies
pnpm install
# Start the development server (optional)
pnpm run dev
# Build for embedded use in kite-service (recommended)
OUTPUT=export pnpm run build
# Build for standalone use
pnpm run buildYou can download NodeJS from nodejs.org and enable pnpm with corepack enable.
# Switch to the kite-docs directory
cd kite-docs
# Install dependencies
pnpm install
# Start the development server (optional)
pnpm run start
# Build for production use
pnpm run buildInstall Go >=1.25 from go.dev.
# Switch to the backend directory
cd kite-service
# or if you are in the kite-web / kite-docs directoy
cd ../kite-service
# Configure the server (see steps above)
# Run database migrations
go run main.go database migrate postgres up
# Start the development server (optional)
go run main.go server
# Build and include the kite-web files in the backend binary (build website first)
go build --tags "embedweb"
# Build without including the frontend files in the backend binary (you need to serve them yourself)
go build- Slash Commands
- Sub Commands
- Basic Placeholders
- Advanced Placeholders
- Message Templates (MVP)
- Embeds
- Attachments
- Interactive Components
- Select Menus
- Components V2
- Basic placeholders
- Advanced Placeholders
- Event Listeners
- Stored Variables
- Basic infrastrcuture
- Connect variables to commands
