openfootmanager

A free and open source football management simulation game built with Rust and Tauri, inspired by Football Manager.

949stars
141forks
GNU GPLv3
Rust

Openfoot Manager is an open source football management simulation desktop game that puts you in the dugout as a manager. You recruit players, set tactics, manage contracts, and watch your club climb the league table — all without spending a penny. Inspired by the Football Manager franchise but unburdened by licensing fees, it aims to deliver the depth football fans crave in a fully transparent, community-driven package.

The game runs as a native desktop app powered by Tauri and Rust on the backend, with a React + TypeScript frontend that delivers a responsive, broadcast-quality UI. Match simulation happens entirely in a local Rust engine, so there are no cloud dependencies: your saves, your world data, and your match outcomes live entirely on your own machine.

Beyond matches, Openfoot Manager models the full management lifecycle: hiring and firing staff, negotiating player contracts and transfer fees, setting weekly training schedules, managing club finances, and responding to board objectives and inbox messages. The inbox-driven narrative system — pre-match briefings, scouting reports, board directives, press conference prompts — keeps the experience feeling alive between fixtures.

The project is actively developed and community-backed, with nightly releases, a Discord community, and internationalization support across seven languages including English, German, Spanish, French, Italian, Portuguese, and Chinese.

What You Get

  • A minute-by-minute match simulation engine written in Rust, capable of running a full 90-minute match in ~2ms, with 22+ event types including goals, fouls, cards, corners, and penalties
  • Full squad and contract management: buy, sell, and loan players through a multi-step negotiation workflow with counter-offer logic and financial projections
  • A reactive inbox and news system that generates pre-match briefings, scouting reports, board directives, match result summaries, and managerial appointment news
  • Training and staff management: set weekly training focus and intensity, hire coaches with specialized roles, and track player attribute development and fitness warnings
  • Live match mode with interactive substitutions, formation changes, halftime team talks, and press conference prompts after every fixture
  • Persistent, migration-safe SQLite save files with a save index manager, load screen, and in-memory fallback for pre-save state
  • Seven-language UI (en, de, es, fr, it, pt, pt-BR) backed by i18next with an i18n audit script to catch missing translation keys
  • Nightly desktop releases for download, with a GPLv3 license and an active Discord community

Common Use Cases

  • Football fans who want a free alternative to Football Manager for PC/Mac/Linux with no subscription or purchase required
  • Open source contributors interested in Rust game development, Tauri desktop apps, or React + TypeScript UI work
  • Developers learning event-driven game simulation architecture, including how to isolate a simulation engine from domain types for testability
  • Translators and localization contributors adding new languages or improving existing ones via the i18n audit tooling
  • Community modders who want to customize world databases, team definitions, or player name pools by swapping JSON definition files without recompiling
  • Researchers or students studying statistical simulation, Markov-like progression models, or sports analytics who want a readable open source reference implementation

Under The Hood

Architecture Openfoot Manager follows a layered, dependency-inverted workspace architecture with four Rust crates arranged in a strict hierarchy: a pure data layer (domain), a deliberately isolated simulation engine (engine), a game logic orchestrator (ofm_core), and a persistence layer (db). The engine crate carries no dependency on domain — it defines its own mirror types — which means the simulation can be evolved and tested in total isolation. The ofm_core crate acts as the bridge, converting between domain and engine types in turn.rs and managing a Mutex<Option<Game>> state manager that serializes all Tauri IPC commands sequentially. On the frontend, Zustand stores shadow the backend state with a predictable update pattern: every Tauri command that mutates game state returns the updated Game, which the store replaces atomically. The result is a clean separation of concerns where the simulation, game rules, persistence, and UI can each change independently.

Tech Stack The backend is pure Rust (edition 2021) using Tauri v2 as the desktop shell, rusqlite with a versioned migration manager for save persistence, serde with #[serde(default)] for backward-compatible serialization, and rand with seedable RNGs for deterministic simulation testing. The frontend uses React 19 with TypeScript, Vite 8, Tailwind CSS v4, react-router-dom v7 for page-level routing, and Zustand v5 for global state. Internationalization is handled by i18next with i18next-resources-to-backend for lazy locale loading across seven languages. All Tauri↔React communication flows through typed invoke() commands; there are no WebSockets or polling loops. Build artifacts are packaged by Tauri’s bundler targeting macOS, Windows, and Linux.

Code Quality The Rust crates have comprehensive integration and unit test coverage: the engine crate has deterministic simulation tests using seeded StdRng, and the ofm_core crate has an extensive suite covering transfers, finances, training, contracts, player events, scouting, live match management, and end-of-season logic. On the frontend, Vitest is configured with @testing-library/react and jsdom, with tests covering components, hooks, and utility functions. Error handling in the Rust layer uses typed string error codes prefixed by domain (e.g., be.error.transfers.*) rather than opaque panics, and all SQL repository queries use bound parameters. The codebase maintains a consistent naming convention throughout, and a CI audit script verifies i18n key coverage across all locales, preventing untranslated strings from shipping silently.

What Makes It Unique The most distinctive technical choice is the hard isolation of the simulation engine from the rest of the game stack — the engine crate has no knowledge of domain types, which is unusual in game codebases and enables true unit testing of match outcomes with synthetic data. The live match architecture is also notable: it supports genuine interactivity (substitutions, tactical changes, halftime talks) by wrapping the same core resolution logic in a LiveMatchState that advances minute by minute and emits per-minute result streams, rather than having a separate simulation path for interactive play. The optional MCP server feature (gated behind a Cargo feature flag) exposes game state over a streamable HTTP interface via rmcp, enabling AI agent integration and external tooling — a genuinely forward-looking addition for a desktop game. The metadata-driven inbox and news system, where all message text is externalized as i18n keys with structured parameters, means the entire narrative layer is community-translatable without touching Rust code.

Self-Hosting

Openfoot Manager is licensed under the GNU General Public License v3.0 (GPLv3), one of the strongest copyleft licenses in open source. This means you can use, study, modify, and distribute the game freely — including commercially — but any derivative work or software that incorporates Openfoot Manager’s code must also be released under GPLv3 with source included. For most self-hosters simply running the game, this has no practical impact; the copyleft obligation only activates if you distribute modified binaries to others.

Running the game yourself requires no server infrastructure at all — it is a native desktop application. You install it directly on macOS, Windows, or Linux using the nightly or tagged release binaries, or build from source with standard Rust and Node tooling. All game data, save files, and world databases live in local SQLite files on your own machine. There is no database server to configure, no authentication system to maintain, and no cloud dependency. The operational burden is essentially that of any desktop app: keep Tauri and Rust toolchains updated if building from source, and manage your own save backups.

There is no paid, cloud, or SaaS tier for Openfoot Manager — it is purely community-developed with no commercial offering. This means there are no managed hosting options, no support SLAs, no automatic cloud backups, and no enterprise license pathway. All support comes through the community Discord server and GitHub Issues. If you want hosted saves or multi-device sync, you would need to implement that yourself by synchronizing the SQLite save files with a tool like Syncthing or a cloud drive, as no first-party mechanism exists.

Join founders buildingwith open source

Opinionated takes, migration guides, cost-saving tips, and insights from the open source ecosystem.

Subscribe on Substack

No spam. Unsubscribe anytime.

Join 750+ subscribers
No spam. Unsubscribe anytime.

Search