>_ program-games.org
browse games
MMO / RTSOnline

Screeps: World

An open-source MMO RTS where your units are driven by JavaScript you write — and the world keeps running 24/7, even while you sleep.

4.7 (318 reviews)12.4k playingReleased 2016

// About this game

Screeps: World is best understood as mmo / rts built around code as the main verb, not as a normal game with a small programming minigame attached. Screeps drops you into a shared, always-on world where you never click a unit directly. Instead you write JavaScript that runs every tick on the server — spawning creeps, harvesting energy, defending rooms and expanding your empire. Your code keeps playing while you are offline, so the real game is engineering a colony that survives on its own. The useful question for a new player is not simply "is it about programming?", but what kind of thinking it asks for: JavaScript and TypeScript, mmo, persistent and open-source, and a willingness to test an idea by letting the simulation run. Released in 2016 by Screeps, it sits in the catalog because the program you write is the thing that actually changes the game state.

The minute-to-minute loop is strategic rather than twitchy: you reason about territory, resource flow, production pressure, scouting and failure recovery, then encode those priorities into a bot that can act without you. The interesting part is not one perfect command; it is whether your system still behaves when the map changes, enemies interfere, or resources run dry. In Screeps: World, that means the fun is in the gap between an intention and a working implementation. You start with a rough plan, translate it into the tools the game provides, then watch the result expose every missing condition. A direct solution may pass the first level or match, but the better solutions usually come from noticing a pattern: repeated movement, wasted work, poor targeting, bad routing, a race condition, a blocked path, or a decision that should have been stored as state instead of hard-coded.

The language side is centered on JavaScript and TypeScript, but the transferable skill is broader than syntax. You practice decomposition, debugging, iteration and the habit of reading the rules before blaming the machine. The advanced rating matters because the game rewards players who can structure larger solutions, reason about edge cases and tolerate several failed iterations before the system behaves. Because it is online, the game also has a social or persistent edge: your code has to survive contact with leaderboards, shared state, other players or changing live conditions instead of only beating a frozen puzzle once. The best sessions are usually not the ones where everything works immediately; they are the ones where a failed run gives you a clear hypothesis for the next version. If the game has leaderboards, ratings or community solutions, those become useful mirrors rather than just bragging rights, because they show how many different shapes a correct program can take.

Screeps: World is strongest for players who like the feeling of making a system slightly smarter each time they touch it. It will be less satisfying if you want fast reflex challenges, cinematic spectacle or a puzzle with only one intended answer. The reward is more specific: seeing your own instructions harvest, fight, route, query, build, solve or survive without your hand on the controls. As a paid game, it needs to justify its place by offering enough authored puzzles, polish or replayable optimization depth to make the programming loop worth returning to. Taken on its own terms, it is a practical way to turn programming concepts into a visible loop, where every bug is part of the play and every improvement has a concrete effect on the world in front of you.

// What you’ll write

Screeps runs your JavaScript once per game tick. This tiny loop shows the shape of a harvester brain: inspect the creep, choose a source or spawn, and issue orders.

main.jsjavascript
module.exports.loop = function () {
  for (const name in Game.creeps) {
    const creep = Game.creeps[name];
    if (creep.store.getFreeCapacity() > 0) {
      const source = creep.room.find(FIND_SOURCES)[0];
      if (creep.harvest(source) === ERR_NOT_IN_RANGE) creep.moveTo(source);
    } else {
      creep.transfer(Game.spawns.Spawn1, RESOURCE_ENERGY);
    }
  }
};

Screeps scripting basics ↗

4.7
318 reviews
5 ★
4 ★
3 ★
2 ★
1 ★

// Related games

// Related guides