server/config.yml. This YAML file controls everything from Discord OAuth scopes and bot behaviour to channel IDs, role permissions, and available locales.
Full config structure
The file below shows the default values shipped with discord.place:server/config.yml
Options reference
General
string[]
required
Discord OAuth2 scopes requested during login. The default set —
identify, email, and guilds — is required for the full feature set. Only remove a scope if you are certain the features that depend on it are not used.string
default:"online"
Presence status displayed for the Discord bot. Accepted values:
online, idle, dnd, invisible.string[]
Array of Discord user IDs that are exempt from all rate limits. Add IDs for your admin accounts here.
boolean
default:"true"
Express
trust proxy setting. Set to true when running behind a reverse proxy (e.g. nginx, Cloudflare) so that req.ip reflects the real client IP instead of the proxy’s IP.URLs
string
required
Public URL of the Next.js client (e.g.
https://discord.place). Used by the server to construct redirect URLs and CORS rules.string
required
Public URL of the Express API server (e.g.
https://api.discord.place). Used to construct self-referential API links.string
required
URL of the documentation site, linked from bot messages and API responses.
string
required
Invite URL for your Discord support server, linked from bot messages and error pages.
Bot emojis
object
required
Custom emojis used in bot messages and embeds. Each value is a Discord emoji string in the format
<:name:id> (static) or <a:name:id> (animated). Replace all values with emojis from your own guild.Ports
number
default:"3000"
Port the Next.js client runs on. Should match
NEXT_PUBLIC_PORT in the client’s .env.number
default:"3001"
Port the Express server listens on.
Base guild
string
required
Discord ID of your base guild. The bot uses this guild for role assignments, channel logging, and other administrative actions.
string
required
Public invite URL for the base guild. Displayed in bot messages and on the website.
Permissions
object
required
Maps permission names to arrays of role IDs from the base guild. Permission names ending in
Roles are role-based (checked against a user’s server roles). Permission names without a suffix are user ID-based.Replace all role IDs with those from your own guild. The following permission keys are available:Server count validation
number
default:"50"
Maximum allowed discrepancy between the
server_count value a bot reports via the stats API and the actual count observed by the Discord bot. Requests exceeding this threshold are rejected. Increase this value if you expect bots with large, rapidly-changing server counts.Roles
object
required
Maps logical role names to Discord role IDs from the base guild. Replace each ID with the corresponding role in your own guild.
Database backups
string[]
MongoDB collection names to exclude from daily database backups. Use exact collection names as they appear in the database. The defaults exclude ephemeral or easily-regenerated collections such as vote timeouts and evaluation results.
Custom hostnames
string[]
required
List of custom vanity hostnames for user profiles (e.g.
dsc.lat). Must match the customHostnames list in client/config.js. Each hostname must be DNS-pointed to your server and proxied to the correct port via a reverse proxy.Lemon Squeezy
object
Maps internal product identifiers to Lemon Squeezy variant IDs. If you are using Lemon Squeezy for premium features, create these products/variants in your Lemon Squeezy store and update these IDs.
Locales
object[]
required
Array of locale objects available on the server. Each object has the following fields:
See Localization for instructions on adding new languages.
Channel IDs
All fields ending inChannelId must be set to real channel IDs from your base guild.

