{"id":44983383,"url":"https://github.com/escapingnetwork/core-keeper-dedicated","last_synced_at":"2026-02-18T19:01:09.579Z","repository":{"id":37376816,"uuid":"491228412","full_name":"escapingnetwork/core-keeper-dedicated","owner":"escapingnetwork","description":"Dockerfile for automated build of a Core Keeper Dedicated Server","archived":false,"fork":false,"pushed_at":"2025-09-21T00:13:26.000Z","size":168,"stargazers_count":175,"open_issues_count":15,"forks_count":47,"subscribers_count":7,"default_branch":"main","last_synced_at":"2025-09-21T02:31:56.440Z","etag":null,"topics":["dedicated-server","docker","game","game-server","server","steam","steamcmd"],"latest_commit_sha":null,"homepage":"https://hub.docker.com/r/escaping/core-keeper-dedicated","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/escapingnetwork.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2022-05-11T18:26:15.000Z","updated_at":"2025-09-21T00:12:57.000Z","dependencies_parsed_at":"2024-11-01T03:21:20.647Z","dependency_job_id":"2ebac794-094c-4c92-92f7-d23c85a2da0d","html_url":"https://github.com/escapingnetwork/core-keeper-dedicated","commit_stats":null,"previous_names":[],"tags_count":13,"template":false,"template_full_name":null,"purl":"pkg:github/escapingnetwork/core-keeper-dedicated","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/escapingnetwork%2Fcore-keeper-dedicated","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/escapingnetwork%2Fcore-keeper-dedicated/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/escapingnetwork%2Fcore-keeper-dedicated/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/escapingnetwork%2Fcore-keeper-dedicated/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/escapingnetwork","download_url":"https://codeload.github.com/escapingnetwork/core-keeper-dedicated/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/escapingnetwork%2Fcore-keeper-dedicated/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29590679,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-18T18:54:29.675Z","status":"ssl_error","status_checked_at":"2026-02-18T18:50:50.517Z","response_time":162,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dedicated-server","docker","game","game-server","server","steam","steamcmd"],"created_at":"2026-02-18T19:00:58.489Z","updated_at":"2026-02-18T19:01:09.562Z","avatar_url":"https://github.com/escapingnetwork.png","language":"Shell","readme":"# Core Keeper Dedicated Server\n\n![corekeeper](https://user-images.githubusercontent.com/136487/168213246-7f561105-136e-47fa-abd9-fac1c97ca48d.png)\n\nExplore an endless cavern of creatures, relics and resources in a mining sandbox adventure for 1-8 players. Mine, build, fight, craft and farm to unravel the mystery of the ancient Core. [Get Core Keeper at the Steam Store](https://store.steampowered.com/app/1621690/Core_Keeper/)\n\n[![Docker Image CI](https://github.com/escapingnetwork/core-keeper-dedicated/actions/workflows/docker-image.yml/badge.svg?branch=main)](https://github.com/escapingnetwork/core-keeper-dedicated/actions/workflows/docker-image.yml)\n\n## Supported tags and respective `Dockerfile` links\n-\t[`latest` (*Dockerfile*)](./Dockerfile)\n\n## How to run\n\n### ARM based configuration\n\nThis image currently includes the following Box64 build variants for the following devices:\n\n- Generic [generic]\n- Raspberry Pi 3 [rpi3]\n- Raspberry Pi 4 [rpi4-pre3]\n- Raspberry Pi 5 (4K page size) [rpi5]\n- Raspberry Pi 5 (16K page size) [rpi5_16k]\n- M1 (M-Series) Mac [m1]\n- ADLink Ampere Altra (Oracle ARM CPUs) [adlink]\n\nBy default it is set to use `generic`. If you want to use another one, change the enviromental variable `ARM64_DEVICE` at the `core.env` file.\n\n### Volumes\n\nCreate two directories where you want to run your server :\n\n- `server-data`: mandatory if you want to keep configuration between each restart\n- `server-files`: optional, contains all the files of the application\n\nThen modify `/host/path/to/server-data` and/or `/host/path/to/server-files` in one of the examples below to match the paths of the folders you created.\n\n### Using Docker CLI:\n\n```bash\ndocker run -d \\\n  --name core-keeper-dedicated \\\n  -e WORLD_NAME=\"Core Keeper Server\" \\\n  -e MAX_PLAYERS=5 \\\n  -v /host/path/to/server-data:/home/steam/core-keeper-data \\\n  -v /host/path/to/server-files:/home/steam/core-keeper-dedicated \\\n  escaping/core-keeper-dedicated:latest\n```\n\n### Using Docker Compose\nCreate a [`docker-compose.yml`](./docker-compose-example/docker-compose.yml) with the following content:\n\n```yml\nservices:\n  core-keeper:\n    image: escaping/core-keeper-dedicated:latest\n    container_name: core-keeper-dedicated\n    restart: unless-stopped\n    stop_grace_period: 2m\n    # Port is only needed if using direct connection mode\n    # ports:\n    #   - \"$SERVER_PORT:$SERVER_PORT/udp\"\n    volumes:\n      - /host/path/to/server-files:/home/steam/core-keeper-dedicated\n      - /host/path/to/server-data:/home/steam/core-keeper-data\n    env_file:\n      - path: core.env\n        required: false\n```\n\nCreate a `core.env` file and override the desired environmental variables for the dedicated server, see configuration for reference. Example:\n```env\nARM64_DEVICE=rpi5\nMAX_PLAYERS=3\n```\n\nOn the folder which contains the files run `docker compose up -d`.\n\nA `GameID.txt` file will be created next to the executable containing the Game ID. If it doesn't appear you can check the docker logs (`docker logs core-keeper-dedicated` or `docker compose logs`) for errors.\n\nTo query the game ID run:\n`docker exec -it core-keeper-dedicated cat /home/steam/core-keeper-dedicated/GameID.txt`\n\n## Configuration\n\nThese are the arguments you can use to customize server behavior with default values.\n\n| Argument | Default | Description |\n| :---:   | :---: | :---: |\n| PUID | 1000 | The user ID on the host that the container should use for file ownership and permissions. |\n| PGID | 1000 | The group ID on the host that the container should use for file ownership and permissions. |\n| ARM64_DEVICE | generic | The Box64 build variants. Accepts `generic`, `rpi5`, `m1` and `adlink`. |\n| USE_DEPOT_DOWNLOADER | false | Use Depot downloader instead of steamcmd. Useful for system not compatible with 32 bits. |\n| WORLD_INDEX | 0 | Which world index to use. |\n| WORLD_NAME | \"Core Keeper Server\" | The name to use for the server. |\n| WORLD_SEED | \"\" | The seed to use for a new world. Set to \"\" to generate random seed. |\n| HASHED_WORLD_SEED | \"\" | The hashed seed to use for a new world, added in v1.1. Set to \"\" to generate random seed. |\n| WORLD_MODE | 0 | Sets the world mode for the world. Can be Normal (0), Hard (1), Creative (2), Casual (4). |\n| SEASON | No Default | Overrides current season by setting to any of None (0), Easter (1), Halloween (2), Christmas (3), Valentine (4), Anniversary (5), CherryBlossom (6), LunarNewYear(7).\u003cbr/\u003e**Do not set this env var if you want real date season.** |\n| GAME_ID | \"\" |  Game ID to use for the server. Need to be at least 15 characters, no longer than 28 characters and alphanumeric. Empty or not valid means a new ID will be generated at start. |\n| MAX_PLAYERS | 10 | Maximum number of players that will be allowed to connect to server. |\n| SERVER_IP | No Default | Only used if port is set. Sets the address that the server will bind to. Supports ipv4 and ipv6 addresses. If not set, default value 0.0.0.0 is used, which will accept connections from any internal ip. |\n| SERVER_PORT | No Default | Port used for direct connection mode. **Setting an value to this will cause the server behaviour to change!** [See Network Mode](#network-mode) |\n| PASSWORD | No Default | Password players should use when trying to join using direct connections. Maximum length password can be 28 characters. If omitted or invalid, a random password will be generated.|\n| ALLOW_ONLY_PLATFORM | No Default | Allow only players from given platform. If not set all platforms are allowed. Has no effect unless -port is also set enabling Direct Connections. Can be Steam (1), Epic (2), Microsoft (3), GOG (4). |\n| DISCORD_WEBHOOK_URL | \"\" | Webhook url (Edit channel \u003e Integrations \u003e Create Webhook). |\n| DISCORD_PLAYER_JOIN_ENABLED | true | Enable/Disable message on player join |\n| DISCORD_PLAYER_JOIN_MESSAGE | `\"$${char_name} ($${steamid}) has joined the server.\"` | Embed message |\n| DISCORD_PLAYER_JOIN_TITLE | \"Player Joined\" | Embed title |\n| DISCORD_PLAYER_JOIN_COLOR | \"47456\" | Embed color |\n| DISCORD_PLAYER_LEAVE_ENABLED | true | Enable/Disable message on player leave |\n| DISCORD_PLAYER_LEAVE_MESSAGE | `\"$${char_name} ($${steamid}) has disconnected. Reason: $${reason}.\"` | Embed message |\n| DISCORD_PLAYER_LEAVE_TITLE | \"Player Left\" | Embed title |\n| DISCORD_PLAYER_LEAVE_COLOR | \"11477760\" | Embed color |\n| DISCORD_SERVER_START_ENABLED | true | Enable/Disable message on server start |\n| DISCORD_SERVER_START_MESSAGE | `\"**World:** $${world_name}\\n**GameID:** $${gameid}\"` | Embed message. Available variables are `world_name`, `gameid`, (the following only in direct connection mode) `allowed_platforms`, `public_ip`, `port`, `password`, `join_string`|\n| DISCORD_SERVER_START_TITLE | \"Server Started\" | Embed title |\n| DISCORD_SERVER_START_COLOR | \"2013440\" | Embed color |\n| DISCORD_SERVER_STOP_ENABLED | true | Enable/Disable message on server stop |\n| DISCORD_SERVER_STOP_MESSAGE | \"\" | Embed message |\n| DISCORD_SERVER_STOP_TITLE | \"Server Stopped\" | Embed title |\n| DISCORD_SERVER_STOP_COLOR | \"12779520\" | Embed color |\n| MODS_ENABLED | false | Enable/Disable mod support |\n| MODIO_API_KEY | \"\" | mod.io API key |\n| MODIO_API_URL | \"\" | mod.io API path |\n| MODS | \"\" | List of mods to install |\n| ACTIVATE_CONTENT | \"\" | Comma separated list to turn on biomes for worlds created prior to v1.1. Valid values are `GiantCicadaBossDungeon`, `NatureBiomeCicadas`, `GuaranteedOases`, and `AbioticFactor`. Once enabled, they cannot be disabled! |\n\n## Mod Support\n\nThe container supports automatically installing mods from [mod.io](https://mod.io/g/corekeeper).\n\n1. Get a mod.io API key from [mod.io/me/access](https://mod.io/me/access)\n    - You'll need the API path that is generated along with the key (e.g. https://u-*.modapi.io/v1)\n2. Set the necessary environment variables in your `core.env` file (or in your `docker-compose.yml`)\n  - `MODS_ENABLED=true`\n  - `MODIO_API_KEY=your_api_key`\n  - `MODIO_API_URL=your_api_url`\n  - `MODS=mod1,mod2` (see below)\n\n### Specify mods to install\n\n\u003e [!WARNING]\n\u003e Installing a client-only mod can cause the server to not start. Don't install client-only mods (they wouldn't do anything on the server anyway).\n\n\u003e [!IMPORTANT]\n\u003e Mod dependencies are not automatically installed. You must look at the dependencies for each mod you want to install and add their dependencies to the list.\n\nYou'll need to get the mod string ID from mod.io for each mod you want to install. The easiest way to do this is to grab it from the URL.\n\nFor example, looking at the URL for [CoreLib](https://mod.io/g/corekeeper/m/core-lib) (`https://mod.io/g/corekeeper/m/core-lib`), you would use `core-lib`.\n\nSpecify mods as a comma-separated list, optionally providing a version:\n\n```sh\n# Format: \u003cmod_id\u003e[:\u003cversion\u003e], ...\nMODS=core-lib,coreliblocalization,corelibrewiredextension,ck-qol\n```\n\nExample using specific versions:\n\n```sh\nMODS=core-lib,coreliblocalization,corelibrewiredextension:3.0.1,ck-qol:1.9.4\n```\n\n- If `version` is not specified, the latest version will be installed.\n- Mods are reinstalled whenever the container is started, so to update mods to their latest version, simply restart the container.\n\n## Network Mode\n\nCurrently Core Keeper supports two network modes: SDR (Steam Datagram Relay) and Direct Connect.\n\n### SDR (Steam Datagram Relay)\nIn this mode, the server uses [Valve's Virtual Network](https://partner.steamgames.com/doc/features/multiplayer/steamdatagramrelay) to route traffic through Steam's relay infrastructure. Instead of players connecting directly to the server's IP address, all communication goes through secure relay nodes managed by Steam. This hides the server’s real IP, protects against DDoS attacks, and improves NAT traversal.\n\nBecause of this relay system, server operators do not need to open any ports on their router or firewall—as long as outbound connections to Steam are allowed, the server can communicate with clients reliably.\n\n### Direct Connection\nIn Direct Connect mode, players connect straight to the server’s public IP address without going through Steam's relay network. This can result in lower latency and more direct communication, but it requires the server to be reachable from the internet.\n\nServer operators must open and forward the necessary ports on their router or firewall to allow incoming connections. Unlike SDR, this mode exposes the server’s IP address to clients and may be more vulnerable to connection issues or attacks.\n\n\u003e [!IMPORTANT]\u003cbr\u003e\n\u003e The SERVER_PORT environment variable determines the server's network mode.\u003cbr\u003e\n\u003e Leave it empty to use SDR (no port forwarding needed).\u003cbr\u003e\n\u003e Setting a value switches to Direct Connect, which requires opening and forwarding ports.\u003cbr\u003e\n\u003e Only set this if you specifically want Direct Connect.\n\n### Contributors\n\u003ca href=\"https://github.com/escapingnetwork/core-keeper-dedicated/graphs/contributors\"\u003e\n  \u003cimg src=\"https://contrib.rocks/image?repo=escapingnetwork/core-keeper-dedicated\" /\u003e\n\u003c/a\u003e\n\nMade with [contrib.rocks](https://contrib.rocks).\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fescapingnetwork%2Fcore-keeper-dedicated","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fescapingnetwork%2Fcore-keeper-dedicated","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fescapingnetwork%2Fcore-keeper-dedicated/lists"}