Profile
Back to NewsBack
GitHub Trending 4 min
Reader Mode
openfrontio/OpenFrontIO: Online browser-based RTS game

openfrontio/OpenFrontIO: Online browser-based RTS game

10 hours ago

OpenFrontIO Logo

OpenFront.io is an online real-time strategy game focused on territorial control and alliance building. Players compete to expand their territory, build structures, and form strategic alliances in various maps based on real-world geography.

This is a fork/rewrite of WarFront.io. Credit to https://github.com/WarFrontIO.

!CI Crowdin</a> CLA assistant</a> License: AGPL v3</a> Assets: CC BY-SA 4.0</a>

License

OpenFront source code is licensed under the GNU Affero General Public License v3.0

Current copyright notices appear in:

  • Footer: "© OpenFront and Contributors"
  • Loading screen: "© OpenFront and Contributors"
Modified versions must preserve these notices in reasonably visible locations.

See the LICENSE for complete requirements.

For asset licensing, see LICENSE-ASSETS. For license history, see LICENSING.md.

🌟 Features

  • Real-time Strategy Gameplay: Expand your territory and engage in strategic battles
  • Alliance System: Form alliances with other players for mutual defense
  • Multiple Maps: Play across various geographical regions including Europe, Asia, Africa, and more
  • Resource Management: Balance your expansion with defensive capabilities
  • Cross-platform: Play in any modern web browser

📋 Prerequisites

  • Node.js v24.15.0 or newer in the Node 24 release line
  • npm v12.1.0 or newer in the npm 12 release line
  • A modern web browser (Chrome, Firefox, Edge, etc.)
Node.js may bundle an older npm version. Upgrade it before installing project dependencies:
npm install --global --ignore-scripts [email protected]

🚀 Installation

  1. Clone the repository
git clone https://github.com/openfrontio/OpenFrontIO.git
   cd OpenFrontIO
  1. Install dependencies
npm run inst

Do NOT use npm install nor npm i for project dependencies. Use npm run inst; it runs the safer npm ci --ignore-scripts to install exactly the versions in package-lock.json without running lifecycle scripts.

The repository also rejects dependency releases less than seven days old and dependencies sourced from Git, remote URLs, local tarballs, or directories. Wait until a new release passes the seven-day window before updating it; security exceptions require explicit maintainer review.

🎮 Running the Game

Development Mode

Run both the client and server in development mode with live reloading:

npm run dev

This will:

  • Start the webpack dev server for the client
  • Launch the game server with development settings
  • Open the game in your default browser (to disable this behavior, set SKIP_BROWSER_OPEN=true in your environment)

Client Only

To run just the client with hot reloading:

npm run start:client

Server Only

To run just the server with development settings:

npm run start:server-dev

Connecting to staging or production backends

Sometimes it's useful to connect to production servers when replaying a game, testing user profiles, purchases, or login flow.

To replay a production game, make sure you're on the same commit that the game you want to replay was executed on, you can find the gitCommit value via https://api.openfront.io/game/[gameId].
Unfinished games cannot be replayed on localhost.

To connect to staging api servers:

npm run dev:staging

To connect to production api servers:

npm run dev:prod

🛠️ Development Tools

  • Format code:
npm run format
  • Lint code with Oxlint:
npm run lint
  • Lint and fix code with Oxlint:
npm run lint:fix
  • Testing
npm test

🏗️ Project Structure

  • /src/client - Frontend game client
  • /src/server - Backend game server
  • /packages/engine - Deterministic game simulation (@openfront/engine)
  • /packages/engine-api - The engine's contract: types, schemas, game updates and the worker protocol (@openfront/engine-api)
  • /packages/engine-lib - Engine code also used outside the engine: map grid, rules, helpers (@openfront/engine-lib)
  • /packages/shared - Code shared by client and server: wire schemas, env, asset URLs (@openfront/shared)
  • /packages/zbin - Compact binary wire format for zod schemas (self-contained, zod-only)
  • /resources - Static assets (images, maps, etc.)

🤝 Contributing

Contributions and translations are welcome! See CONTRIBUTING.md for the workflow, the approved-issue process, project governance, and translation info.

Chat with me