CLI tool
screeps/screeps avatar
screeps/screeps

Screeps' standalone server has no accounts of its own, and its newest release tag is seven years old

A standalone server for programming game Screeps

3,361 stars235 forksJavaScriptISC

At a glance

What is it?
This repository is not the game but the server that hosts it: a set of coordinated processes that run the same engine the official server runs, with all user identity delegated to Steam. The launch surface is documented in detail, down to the flag that sets the server password and the one that leaves it empty. The packaging tells a different story: the newest release tag is v3.4.0 from 2019 while the published package reads 4.3.0, and the last push here is dated 2026-04-01.
Who is it for?
Stand up this server if you want to run Screeps yourself, keep your own world, or test player code against a world you control, and if having Steam on the same machine is acceptable to you, because that is not a preference the project lets you decline.
Can I use it commercially?
Yes. ISC is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 1 day ago.
What is it written in?
Mainly JavaScript, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on November 14, 2026, and from our analysis. They are not legal advice.

From daily snapshots

Star history

  • screeps/screeps3,361 ★ · +12
Star history
Repository2026-09-242026-11-14
screeps/screeps3.3k3.4k

12 Stars in the last 51 days, measured from the daily GitHub snapshot. Compare with other projects

Editorial analysis

There is no user account system here, only Steam

The authentication section is blunt about the design: the server has no user authentication mechanism of its own, and Steam is employed for the purpose instead. Two mechanisms work in parallel. The first is native authentication through the local Steam client on your own machine, which the file calls the easiest and handiest method because it requires no setup and works automatically when the server is launched through Steam. The second applies when the server runs on a machine with no Steam client installed, and it means registering a Steam Web API key and setting up authentication against it. That key is also asked for during the console launch flow. Everything else about identity is delegated, which is a real constraint for anyone who wants their own accounts: there is no user table to seed, no password reset and no invite system, because those problems are solved by somebody else's login. The one credential the server does own is the sign in password, and its default is empty. Playing on your own world is also a client-side act: you connect with the Steam game client, use Change server and enter your server credentials.

The manifest installs eight pinned packages and the documentation names six modules

The documentation says the server consists of six separate modules: launcher, storage, backend, engine, driver and common, each with its own repository, and each installed into the node_modules of any directory according to npm's rules. The manifest tells a longer story. Its dependencies are @screeps/backend at 3.3.0, @screeps/common at 2.16.0, @screeps/driver at 5.3.0, @screeps/engine at 4.3.0, @screeps/launcher at 4.2.0, @screeps/storage at 5.1.3 and @screeps/pathfinding at 0.4.17, plus a helper called node_modules-path at 2.0.7. So pathfinding is installed but never mentioned in the module list, and every version is an exact number rather than a range, which means an install today is entirely determined by this file. The versions also have little relation to each other or to the package: the umbrella is 4.3.0, only the engine happens to share that number, and storage and driver are on their own fifth major versions.

The newest release tag is from 2019 and the package says 4.3.0

Version information is the first thing that will mislead you. The only release listed for this repository is v3.4.0, dated 2019-05-03, while package.json carries version 4.3.0. That is a full major version and roughly seven years between the tag and the published package, and nothing in the repository explains the gap. There is a CHANGELOG.md at the root, which is where that history would have to live. The last push in this tree is dated 2026-04-01, so the code is being touched on a much shorter cycle than the tags suggest. Two smaller details from the same manifest: the entry point is main set to package.json, which is unusual for a package meant to be run rather than imported, and the bin entry maps the screeps command to bin/screeps.js. The licence is ISC, with the text in a LICENSE.txt at the root, and the package author is listed as Artem Chivchalov. The root also holds three images, client.png, logo.png and modules.png, which appear to be documentation assets shipped inside the server package, alongside a .npmrc.

The engine is shared, and driver is the seam you can replace

The module descriptions explain why this is not a fork of the game. The engine is the game core, and it is shared between the official server, the standalone server and the in-browser simulation, which means the rules your code runs against are the same ones the hosted game uses. The driver is described as the link between that environment-independent engine and whatever environment is hosting it, and the file says you can replace it with your own if you want a different way of storing and handling data, which is the documented extension point for the whole system. Around those, storage holds the database, a key-value store and a Pub/Sub mechanism, and every other process connects to storage to exchange data. The backend is the HTTP server clients talk to plus a CLI server for administration. The launcher starts the rest and includes the control GUI, and common is shared utilities. Each module has its own code base and repository, and the split is explicit: the engine is shared, while the other modules are developed specifically for the standalone server.

The whole world lives in one db.json until you replace the engine

The default storage choice is explained by where it has to run. The built-in storage is based on LokiJS, a library chosen because it can be embedded in pure JavaScript environments such as the Steam game client, and it stores all data in a file called db.json. Every other process talks to storage for data exchange, so that single file is the whole world state as far as the default configuration is concerned. The performance answer is substitution rather than tuning: the file says you can replace the storage engine with another community solution to improve performance, and links a step-by-step guide for installing a standalone private server on Ubuntu with MongoDB and Redis as the storage. Custom game content is a separate mechanism again, loaded from a JSON list of mods that the launcher reads from mods.json unless you point it elsewhere, while static assets are read from a directory whose path is also a launch option.

Two worker pools, two processes each, and a warning about your cores

The launch options are documented as the output of the start command's help text, and they are the most precise part of the file. Two options control parallelism, and both carry the same instruction not to set them higher than the number of physical CPU cores: run the number of parallel runner worker processes, defaulting to 2, and the number of parallel processor worker processes, also defaulting to 2. That matches the description of the server as multiple parallel processes linked to each other with a separate launcher process to start them. The remaining options are paths and addresses: a database file path, a log directory, the mods file, an asset directory, a port that defaults to 21025, and a host that defaults to 0.0.0.0. The administrative side is the careful half: the CLI port defaults to the game port plus one and the CLI host defaults to 127.0.0.1. One option ties back to authentication, since the Steam API key is required when the server runs without the local Steam client.

You can skip the launcher entirely and start the processes yourself

Three commands are all the console launcher needs:

bash
npm install screeps
npx screeps init
npx screeps start

The prerequisites are Node.js 22 LTS or higher plus Python 3 and build tools, and the manifest is stricter than the prose, requiring node 22.9.0 or newer and npm 10.8.2 or newer. Two things about that install are worth knowing before you run it. The package declares a postinstall script that runs node postinstall.js, so the install step executes code from the package rather than only unpacking it. And the launcher is explicitly optional: the documentation says the launchers exist to start the other server processes with the correct environment variables, that you can launch those processes your own way, for example through upstart or systemd, across different machines, or as an automated testing framework, and that the list of environment variables each process needs is in the launcher's own start.js file in its repository. The GUI launcher, meanwhile, ships inside the Steam version package.

Editorial conclusion

Stand up this server if you want to run Screeps yourself, keep your own world, or test player code against a world you control, and if having Steam on the same machine is acceptable to you, because that is not a preference the project lets you decline. Do not reach for it expecting a game client, and do not expect recent release notes: the newest tag is v3.4.0 from May 2019, the manifest is at 4.3.0, and the seven years between them are not documented anywhere in this repository. Three things to verify before you commit an evening to it. Read the launch defaults as security settings, because the game server binds 0.0.0.0 on port 21025 with an empty password unless you change it, while the administrative CLI correctly binds loopback only. Decide on storage early, since the built-in engine keeps the entire world in a single db.json file and the documented performance path is to replace it with MongoDB and Redis. And expect to assemble the thing from separate repositories, because the six modules the documentation describes are only part of what the manifest installs.

Frequently asked questions

Is Screeps an MMO?

The project's own description calls Screeps an MMO RTS sandbox game for programmers, in which the core mechanic is programming your units AI, and your JavaScript runs 24/7 in a single persistent world shared with other players.

Is Screeps open source?

This repository is, under the ISC licence with the text in LICENSE.txt at the root, and each of the six server modules lives in its own repository. The game client is separate: the GUI launcher for the server comes with the Steam version package.

Is Screeps free to play?

This repository does not cover game pricing or what the Steam package costs. What it documents is the standalone server, published under the ISC licence, which you run yourself and which delegates all user identity to Steam through either the local client or a Steam Web API key.

Is screeps still active?

The repository's last push is dated 2026-04-01. Its only listed GitHub release is v3.4.0 from 2019-05-03, while package.json carries version 4.3.0 and the module dependencies are pinned at versions such as engine 4.3.0 and storage 5.1.3.

Official sources

  1. Issues
  2. License: ISC
  3. README
  4. Releases
  5. screeps/screeps on GitHub
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/screeps-screeps.svg)](https://hysenlabs.com/projects/screeps-screeps)

Star history chart for your README

markdown
[![Star history](https://hysenlabs.com/chart/screeps-screeps.svg)](https://hysenlabs.com/projects/screeps-screeps)

Was this useful?