mirror of
https://github.com/openfrontio/OpenFrontIO.git
synced 2026-06-21 12:00:44 +00:00
eca5794ebb
## Description:
Only mentioning removals/major updates/notable changes below, not all
minor upgrades.
### Removed:
- "@aws-sdk/client-s3": not used anywhere (was used in Archive.ts
previously)
- chai, "@types/chai", sinon-chai: not used anywhere, probably leftover.
Vitest uses a bundled version of Chai for its expect asserations under
the hood too.
- protobufjs, "@types/google-protobuf": not used anywhere, probably left
from evan's experiment with it? Removed from vite.config.ts too.
- "@types/jquery": not used anywhere, probably leftover
- sinon, "@types/sinon": not used anywhere just like chai, probably
leftover. And Vitest provides us with the same functionality.
- "@types/systeminformation": dependency systeminformation was removed
last year, this is an unneeded, deprecated and unmaintained remainder.
- vite-tsconfig-paths: removed, and removed the import and usage in
vite.config.ts and replaced it by adding `tsconfigPaths: true` to the
`resolve` block. Because of this message displayed on running the tests:
"The plugin "vite-tsconfig-paths" is detected. Vite now supports
tsconfig paths resolution natively via the resolve.tsconfigPaths option.
You can remove the plugin and set resolve.tsconfigPaths: true in your
Vite config instead."
- vite-plugin-static-copy: removed, we don't use it anymore (was used in
our vite.config.ts once,, probably before Vite natively supported
copying static assets via its publicDir configuration)
### Updated:
- color.js: v0.5 > v0.6, no breaking change affecting us
- cross-env: v7 > v10. It's a publicly archived repo since Nov 2025. But
before that he got it up-to-date from June 2025, porting to TS, dropping
old Node versions, dependencies etc. Seems still good to use for some
amount of time to come.
- dotenv: v16 > v17, now logs an informational message by default when
it loads an environment file. Can be disabled by using
dotenv.config({quite: true}) if needed.
- ejs: v3 > v5: security patches mostly. Vite still uses v3 btw.
- eslint: v9 > v10. Newly enabled rules by default:
'no-unassigned-vars', 'no-useless-assignment' and
'preserve-caught-error'. Mostly faster and minimum support moved to
higher node versions, which shouldn't be a problem.
- "@eslint/compat": v1 > v2. Minimum supported Node versions, which
should not be a problem.
- intl-messageformat: v10 > v11 no breaking changes that affect us
- jdom: v27 > v29. Faster. Most notably minimum support moved to higher
node v22 version, which should not be a problem. Also, see types/node,
kind of expecting v24 to be installed now.
- nanoid: from v3 to v5, no breaking changes that affect us
- "@opentelemetry/sdk-logs": now that addLogRecordProcessor is removed,
changed Logger.ts to pass an (empty) provider array directly to the
LoggerProvider constructor. Follows the changes in
https://github.com/open-telemetry/opentelemetry-js/pull/5588
- "@tailwindcss/vite": supports vite v8 from 4.2.2, and a fix for it in
4.2.4
- tailwindcss: supports vite v8 from 4.2.2
-- in 4.1.15 (we were already above this version) break-words was
deprecated in favor of wrap-break-word. But break-words, which we use in
15 places, will still work as expected
(https://github.com/tailwindlabs/tailwindcss/pull/19157). Same goes for
also deprecated "order-none".
- "@types/node": from v22 to v24, assuming most now use node 24
- vite v7 > v8:
-- is now on 8.0.10 so first bugs are out of it, while v8 itself also
fixed a big number of bugs.
-- in vite.config.ts, fixed Ts error/compilation issue by changing the
manualChunks option in build.rollupOptions.output to use the function
syntax, which is required by the updated types instead of the object
syntax.
- zod: no changes that affect us
### Prettier:
Updated only because of (new because of update?) Prettier errors for
files untouched in this PR originally:
- PathFinder.Parabola.ts
- WorkerMessages.ts
- ClanModal.handlers.test.ts
- ClanModal.rendering.test.ts
- CONTRIBUTING.md
- README.md
### ESLint:
Fixes needed to silence errors coming from newly enabled recommended
rules 'no-useless-assignment' and 'preserve-caught-error':
For 'no-useless-assignment' (default assignment never used because of
unreachable code or they are guaranteed to get a value, so they can be
undefinedat the start. Exception was AttackExecution, so made the
default value of 0 the default case in the switch statement):
- ClientGameRunner
- GameModeSelector
- NameBoxCalculator
- StructureDrawingUtils
- TerritoryLayer
- Diagnostics
- GameRunner
- ColorAllocator
- DefaultConfig
- AttackExecution
- AiAttackBehavior
- Worker.worker
- GamePreviewBuilder
For 'preserve-caught-error', disabled the rule here because the possible
fix `{cause: error}` was introduced in ES2022 while we're still on
target ES2020 currently:
- GameServer
- Privilege
_Error: The value assigned to 'gameMap' is not used in subsequent
statements. (no-useless-assignment)
Error: The value assigned to 'timeDisplay' is not used in subsequent
statements. (no-useless-assignment)
Error: The value assigned to 'scalingFactor' is not used in subsequent
statements. (no-useless-assignment)
Error: The value assigned to 'radius' is not used in subsequent
statements. (no-useless-assignment)
Error: The value assigned to 'teamColor' is not used in subsequent
statements. (no-useless-assignment)
Error: The value assigned to 'gl' is not used in subsequent statements.
(no-useless-assignment)
Error: The value assigned to 'power' is not used in subsequent
statements. (no-useless-assignment)
Error: The value assigned to 'tickExecutionDuration' is not used in
subsequent statements. (no-useless-assignment)
Error: The value assigned to 'selectedIndex' is not used in subsequent
statements. (no-useless-assignment)
Error: The value assigned to 'mag' is not used in subsequent statements.
(no-useless-assignment)
Error: The value assigned to 'speed' is not used in subsequent
statements. (no-useless-assignment)
Error: The value assigned to 'matchesCriteria' is not used in subsequent
statements. (no-useless-assignment)
Error: The value assigned to 'shouldContinue' is not used in subsequent
statements. (no-useless-assignment)
Error: The value assigned to 'description' is not used in subsequent
statements. (no-useless-assignment)
Error: There is no `cause` attached to the symptom error being thrown.
(preserve-caught-error)
Error: There is no `cause` attached to the symptom error being thrown.
(preserve-caught-error)_
All tests pass. TypeScript and ESLint errors resolved.
## Please complete the following:
- [x] I have added screenshots for all UI updates
- [x] I process any text displayed to the user through translateText()
and I've added it to the en.json file
- [x] I have added relevant tests to the test directory
- [x] I confirm I have thoroughly tested these changes and take full
responsibility for any bugs introduced
## Please put your Discord username so you can be contacted if a bug or
regression is found:
tryout33
---------
Co-authored-by: Copilot <copilot@github.com>
227 lines
7.7 KiB
Markdown
227 lines
7.7 KiB
Markdown
<p align="center">
|
|
<picture>
|
|
<source media="(prefers-color-scheme: dark)" srcset="proprietary/images/OpenFrontLogoDark.svg">
|
|
<source media="(prefers-color-scheme: light)" srcset="proprietary/images/OpenFrontLogo.svg">
|
|
<img src="proprietary/images/OpenFrontLogo.svg" alt="OpenFrontIO Logo" width="300">
|
|
</picture>
|
|
</p>
|
|
|
|
[OpenFront.io](https://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.
|
|
|
|

|
|
[](https://crowdin.com/project/openfront-mls)
|
|
[](https://cla-assistant.io/openfrontio/OpenFrontIO)
|
|
[](https://www.gnu.org/licenses/agpl-3.0)
|
|
[](https://creativecommons.org/licenses/by-sa/4.0/)
|
|
|
|
## 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](LICENSE) for complete requirements.
|
|
|
|
For asset licensing, see [LICENSE-ASSETS](LICENSE-ASSETS).
|
|
For license history, see [LICENSING.md](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
|
|
|
|
- [npm](https://www.npmjs.com/) (v10.9.2 or higher)
|
|
- A modern web browser (Chrome, Firefox, Edge, etc.)
|
|
|
|
## 🚀 Installation
|
|
|
|
1. **Clone the repository**
|
|
|
|
```bash
|
|
git clone https://github.com/openfrontio/OpenFrontIO.git
|
|
cd OpenFrontIO
|
|
```
|
|
|
|
2. **Install dependencies**
|
|
|
|
```bash
|
|
npm run inst
|
|
```
|
|
|
|
Do NOT use `npm install` nor `npm i` but instead use our `npm run inst`. It runs the safer `npm ci --ignore-scripts` to install dependencies exactly according to the versions in `package-lock.json` and doesn't run scripts. This can prevent being hit by a supply chain attack.
|
|
|
|
## 🎮 Running the Game
|
|
|
|
### Development Mode
|
|
|
|
Run both the client and server in development mode with live reloading:
|
|
|
|
```bash
|
|
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:
|
|
|
|
```bash
|
|
npm run start:client
|
|
```
|
|
|
|
### Server Only
|
|
|
|
To run just the server with development settings:
|
|
|
|
```bash
|
|
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:
|
|
|
|
```bash
|
|
npm run dev:staging
|
|
```
|
|
|
|
To connect to production api servers:
|
|
|
|
```bash
|
|
npm run dev:prod
|
|
```
|
|
|
|
## 🛠️ Development Tools
|
|
|
|
- **Format code**:
|
|
|
|
```bash
|
|
npm run format
|
|
```
|
|
|
|
- **Lint code**:
|
|
|
|
```bash
|
|
npm run lint
|
|
```
|
|
|
|
- **Lint and fix code**:
|
|
|
|
```bash
|
|
npm run lint:fix
|
|
```
|
|
|
|
- **Testing**
|
|
```bash
|
|
npm test
|
|
```
|
|
|
|
## 🏗️ Project Structure
|
|
|
|
- `/src/client` - Frontend game client
|
|
- `/src/core` - Shared game logic
|
|
- `/src/server` - Backend game server
|
|
- `/resources` - Static assets (images, maps, etc.)
|
|
|
|
## 🤝 Contributing
|
|
|
|
Contributions are welcome! Please feel free to submit a Pull Request.
|
|
|
|
1. Request to join the development [Discord](https://discord.gg/K9zernJB5z).
|
|
1. Fork the repository
|
|
1. Create your feature branch (`git checkout -b amazing-feature`)
|
|
1. Commit your changes (`git commit -m 'Add some amazing feature'`)
|
|
1. Push to the branch (`git push origin amazing-feature`)
|
|
1. Open a Pull Request
|
|
|
|
## 🌐 Translation
|
|
|
|
Translators are welcome! Please feel free to help translate into your language.
|
|
How to help?
|
|
|
|
1. Join the translation [Discord](https://discord.gg/3zZzacjWFr)
|
|
2. Go to the project's Crowdin translation page: [https://crowdin.com/project/openfront-mls](https://crowdin.com/project/openfront-mls)
|
|
3. Login if you already have an account / Sign up if you don't have one
|
|
4. Join the project
|
|
5. Select the language you want to translate in. If your language isn't on the list, click the "Request New Language" button and enter the language you want added there.
|
|
6. Translate the strings
|
|
|
|
Feel free to ask questions in the translation Discord server!
|
|
|
|
### Project Governance
|
|
|
|
- The project maintainer ([evan](https://github.com/evanpelle)) has final authority on all code changes and design decisions
|
|
- All pull requests require maintainer approval before merging
|
|
- The maintainer reserves the right to reject contributions that don't align with the project's vision or quality standards
|
|
|
|
### Contribution Path for New Contributors
|
|
|
|
To ensure code quality and project stability, we use a progressive contribution system:
|
|
|
|
1. **New Contributors**: Limited to UI improvements and small bug fixes only
|
|
- This helps you become familiar with the codebase
|
|
- UI changes are easier to review and less likely to break core functionality
|
|
- Small, focused PRs have a higher chance of being accepted
|
|
|
|
2. **Established Contributors**: After several successful PRs and demonstrating understanding of the codebase, you may work on more complex features
|
|
|
|
3. **Core Contributors**: Only those with extensive experience with the project may modify critical game systems
|
|
|
|
### How to Contribute Successfully
|
|
|
|
1. **Before Starting Work**:
|
|
- Open an issue describing what you want to contribute
|
|
- Wait for maintainer feedback before investing significant time
|
|
- Small improvements can proceed directly to PR stage
|
|
|
|
2. **Code Quality Requirements**:
|
|
- All code must be well-commented and follow existing style patterns
|
|
- New features should not break existing functionality
|
|
- Code should be thoroughly tested before submission
|
|
- All code changes in src/core _MUST_ be tested.
|
|
|
|
3. **Pull Request Process**:
|
|
- Keep PRs focused on a single feature or bug fix
|
|
- Include screenshots for UI changes
|
|
- Describe what testing you've performed
|
|
- Be responsive to feedback and requested changes
|
|
|
|
4. **Testing Requirements**:
|
|
- Verify your changes work as expected
|
|
- Test on multiple systems/browsers if applicable
|
|
- Document your testing process in the PR
|
|
|
|
### Communication
|
|
|
|
- Be respectful and constructive in all project interactions
|
|
- Questions are welcome, but please search existing issues first
|
|
- For major changes, discuss in an issue before starting work
|
|
|
|
### Final Notes
|
|
|
|
Remember that maintaining this project requires significant effort. The maintainer appreciates your contributions but must prioritize long-term project health and stability. Not all contributions will be accepted, and that's okay.
|
|
|
|
Thank you for helping make OpenFront better!
|