LegacyShell WikiLegacyShell Wiki
Back to LegacyShell
Home
Wiki
Plugins
Docs
Back to LegacyShell
Home
Wiki
Plugins
Docs
  • Documentation

    • Getting Started

      • What is LegacyShell?
      • Speed Setup
      • Requirements
      • Installation
      • First Run
      • Config Files
      • Making an Account
      • Troubleshooting (Getting Started)
    • Running a Server

      • Architecture Overview
      • The Database
      • Users and Ranks
      • Adding Game Servers
      • Client Mirrors
      • Perpetual
      • Backups
      • Rate Limiting
      • Moderation
      • Closed Mode
      • Deployment
      • Troubleshooting (Running a Server)
      • Hosting for Someone Else's Instance
    • Content Creation

      • Maps
      • Dealing with Babylon Models
      • Map Blocks
      • Items and Skins
      • Hats and Stamps
      • Sounds
      • Gamemodes
      • Seasonal Events
    • Plugin Development

      • Quickstart
      • I Want To...
      • Anatomy of a Plugin
      • Lifecycle
      • Dependencies
      • Events (Concept)
      • Event Reference

        • services: events
        • game: events — shared logic (src/shell/)
        • game: events — main-thread server process
        • game: events — per-connection client object
        • game: events — room lifecycle & tick loop
        • game: events — in-browser gameplay
        • client: events — client server & build pipeline
      • Commands
      • Client-Side Code
      • Static Assets
      • Content Packs
      • Networking
      • Workers and State
      • Prediction and Authority
      • Recipes

        • Recipe: Killstreaks
        • Recipe: New Pickup Item
        • Recipe: New Gamemode
        • Recipe: Custom Weapon
        • Recipe: UI Modification
        • Recipe: Discord Integration
        • Recipe: Replacing Core Behaviour
        • Recipe: Persistent Plugin Storage
        • Recipe: Rewarding Players with Currency
        • Recipe: Custom Per-Player Data
        • Recipe: Custom Theme
      • Publishing
      • Pitfalls
      • Modifiers
      • Sound and Apollo
    • Codebase Reference

      • Repo Layout
      • Shared Shell Layer
      • Server-Only Markers
      • The ss Object
      • Build Pipeline
      • Stamps and Babylons
      • Game Loop
      • Rooms and Workers
      • Wire Protocol
      • Generated

        • Wire Protocol Opcodes
        • Enums & Lookup Tables
        • Database Schema
        • Config Reference
        • Slash Command Reference
      • Services Internals
      • Catalog and Items
      • Permissions Internals
      • Physics and Collision
      • Known Quirks
      • Codebase Anecdotes
      • Development Timeline
    • Contributing

      • Documentation Style Guide
      • Generators
      • For AI Agents

Config Reference

Audience: Server operators, AI agents · Prereqs: Config Files

Every key in every src/defaultconfig/*.yaml template, with its default value and the comment(s) written above/beside it in source - extracted directly, not hand-maintained. Your actual settings live in store/config/*.yaml, a personal copy of these defaults (see Config Files).

all.yaml

KeyDefaultComment
verbosefalseloads of more logs?
devlogsfalseeven more logs in the browser console

client.yaml

KeyDefaultComment
port13370-
sync_server"ws://localhost:13371"this is basically the services server. but its not! this is what the client server will internally use to retrieve its configs and shit. in theory the sync server could put in a different services URL entirely! anyway, if the client and services servers are both running on the same machine, you can keep this as localhost.
auth_key""optional. giving this client instance an auth_key (create one via the admin panel's SQL/table editor against the game_servers table, same table game servers already register in) lets services target it directly for admin actions (config editor, restart) instead of it only being reachable indirectly. leave blank if you don't need that - everything else works the same either way, this instance just won't show up as a routable target in the admin panel.
this_url"legacyshell.com"used in some find and replaces. input the url you want people to access your site via. primarily used for the seo embed things. not critical to the site's function.
login.enabledfalse-
login.username"legacy"-
login.password"shell"-

distributed_all.yaml

KeyDefaultComment
closedfalseshuts down services/game and displays a closed message on the webpage.
servicesInfoCollectInterval15interval in seconds in which game/client servers report stats to the services server
servicesInfoSendInterval10interval in seconds in which the services server sends specific stats back to game/client servers

distributed_client.yaml

KeyDefaultComment
servicesURL"wss://services.legacyshell.com:443"-
minifytrue this lags startup of the server by a few seconds (to half a minute) in theory though will reduce lag longer term for both clients and the server itself
iiftrueiif means immediately invoked function. in other words, hides vars from the console. good for making messing a little harder. note that its nowhere close to foolproof at all, but at least forces someone to have to make a script to change things
discordServerF3Xh5bhXTrdo NOT put anything except the ending id/vanity as the rest is filled in!
githubURL"https://github.com/onlypuppy7/LegacyShell/"-

distributed_permissions.yaml

KeyDefaultComment
ranks.0"Guest"do not modify
ranks.1"Signed In"do not modify
ranks.5"Content Creator"-
ranks.10"Moderator"do not modify
ranks.20"Admin"do not modify
ranks.255"Superuser"do not modify
permissions.rooms.joinPublicGame0-
permissions.rooms.joinPrivateGame0-
permissions.rooms.createPrivateGame0-

game.yaml

KeyDefaultComment
port13372the port on your device to use
services_server"ws://localhost:13371"the services server to sync with eg, if you want to make an extra region for the public instance, it would be "wss://services.legacyshell.com" otherwise for local usage you can leave as "ws://localhost:13371"
auth_key"AUTH_KEY"this is given by the owner of the services server, and can be revoked you cannot act as an endorsed game server without this key from the services server owner this is cause you wont even show up without it, or be able to access account data, or add kills/deaths to the database if you are running a local instance, run the init script to hopefully fill this in if it is unchanged

perpetual_all.yaml

KeyDefaultComment
pullers["services", "client", "game"]if you are running all three, then you can delete all except services because when services restarts, it restarts the others anyway (game/client cant do this) default: ["services", "client", "game"]
client.process_cmd"server-client/run-client.js"dont touch unless u changed the path
client.dailyrestart_enabletruedaily restarts, at specified time every day
client.dailyrestart_time"4:00"HH:MM (24 hours)
client.dailyrestart_quickpullfalseif true, will pull before restarting
client.logfile_enabletruelogfiles
client.webhook_url""webhook logging empty disables it
client.webhook_username"LegacyShell: Client Server"-
client.webhook_avatar"https://cdn.onlypuppy7.org/legacyshell/client.png"-
client.webhook_ping_user""ENTER THE USER ID. for when there is an error. empty = no ping.
client.webhook_ping_role""ENTER THE ROLE ID. for when there is an error. empty = no ping.
services.process_cmd"server-services/run-services.js"dont touch unless u changed the path
services.dailyrestart_enabletruedaily restarts, at specified time every day
services.dailyrestart_time"4:00"HH:MM (24 hours)
services.dailyrestart_quickpullfalseif true, will pull before restarting
services.logfile_enabletruelogfiles
services.webhook_url""webhook logging empty disables it
services.webhook_username"LegacyShell: Services Server"-
services.webhook_avatar"https://cdn.onlypuppy7.org/legacyshell/services.png"-
services.webhook_ping_user""ENTER THE USER ID. for when there is an error. empty = no ping.
services.webhook_ping_role""ENTER THE ROLE ID. for when there is an error. empty = no ping.
game.process_cmd"server-game/run-game.js"dont touch unless u changed the path
game.dailyrestart_enabletruedaily restarts, at specified time every day
game.dailyrestart_time"4:00"HH:MM (24 hours)
game.dailyrestart_quickpullfalseif true, will pull before restarting
game.logfile_enabletruelogfiles
game.webhook_url""webhook logging empty disables it
game.webhook_username"LegacyShell: Game Server"-
game.webhook_avatar"https://cdn.onlypuppy7.org/legacyshell/game.png"-
game.webhook_ping_user""ENTER THE USER ID. for when there is an error. empty = no ping.
game.webhook_ping_role""ENTER THE ROLE ID. for when there is an error. empty = no ping.

services.yaml

KeyDefaultComment
port13371-
feedbackfalse a discord webhook for all feedback to be sent. leave to "false" to disable feedback
nugget_interval24 set interval in hours between each opportunity to get the 1 hour of vip
protect_usernamesfalse makes the errors less revealing of which usernames exist. but this is pointless, as you can just send a register request. if the user doesnt exist, then there is no way you can sign up with it anyway. this is just out of spite, tbh. (hijinks ensue.......)
password_cost_factor10higher is more secure, but will require more processing power - run "npm run bcrypt" to determine the recommended cost you should probably leave as is though, because lowering will make it less secure in the event of a breach this is the main defense against a breach, so dont mess with it unless you know what you are doing
session_expiry_time180how long, in minutes, sessions should exist for
session_cleanup_interval3 how often, in minutes, sessions should be purged should NOT be higher than expiry time (above)! you will make some strange stuff happen, i can only imagine! dont!
ratelimit.regular.max_count10-
ratelimit.regular.reset_interval60in seconds
ratelimit.sensitive.max_count5-
ratelimit.sensitive.reset_interval300in seconds
ratelimit.sensitive.cmds[]"validateLogin"-
ratelimit.sensitive.cmds[]"validateLoginViaAuthToken"-
ratelimit.sensitive.cmds[]"validateRegister"-
ratelimit.sensitive.cmds[]"feedback"-
ratelimit.protect_ipstruemd5 hashes ips. this is not a very strong algorithm, so still be careful about sharing info
backups.enabledtrue-
backups.interval4in hours
backups.keep50how many backups to keep
backups.filepathfalsewhere to store the backups. false to store in the default location

This page was drafted with AI assistance and reviewed for accuracy. If something looks wrong, please open a PR or flag it.

Edit this page on GitHub
Prev
Database Schema
Next
Slash Command Reference