π¬π§ English | π©πͺ Deutsch
A companion app and custom game mod for Star Trek Fleet Command on macOS and Windows.
Project Daystrom is a native desktop app with an integrated game mod for STFC. The mod is built entirely in Rust with a custom hook engine (ARM64 + x86_64) that intercepts the game's IL2CPP runtime directly.
Key features:
- Multi-account support on Windows and macOS
- Each account gets its own TOML-based profile with isolated game settings
- Custom PlayerPrefs interceptor redirects game settings into per-profile storage
- Dedicated account tabs separate selection, launch actions, and running state
- Local profiles and sign-in data can be deleted safely with explicit confirmation
- Profiles are portable across platforms
- Game enhancements powered by the Rust mod
- Configurable keyboard shortcuts with game-binding conflict detection
- Adjustable UI scale (50β200%), applied live to the running game
- Auto-open chat sidebar on game start
- Auto-expand the job queue panel on game start
- Configurable system view zoom distance and ship name visibility range
- Auto-open cargo view for hostiles, armadas, stations, and player ships
- Skip loot box reveal animation (enabled by default)
- Skip the first popup after game start (enabled by default)
- One-button combat flow: press the Main Action shortcut repeatedly to select the next interceptable hostile and attack it without using the mouse
- Configurable Main Action shortcut with support for keyboard keys and extra mouse buttons
- Toast banner suppression with per-type opt-out (combat, station, armada, etc.)
- Configurable slider limits for Standard Recruit, Alliance Donations, and Transporter Patterns
- Shop and refinery bundles remain inspectable while they are on cooldown
- Automatic STFC update detection via the Scopely update API
- Native cross-platform app (Tauri 2 + Vue 3)
- English and German interface
- Adjustable scaling of the Daystrom interface using keyboard or mouse-wheel controls
- Unified launcher: entitlement patching on macOS, DLL proxy injection on Windows
- Process monitoring with automatic detection of game and launcher activity
- Visible warning when STFC is running without a connected Daystrom mod
- System tray integration with minimize-to-tray and quit protection
- Live WebSocket bridge that syncs settings to the running game in real time
- Signed Daystrom updates with explicit installation, staged rollout, and localized release notes
- One-click rollback to the verified predecessor, including its bundled mod and settings
Project Daystrom is an unofficial community project and is neither developed nor supported by Scopely. It modifies the game and loads its own code into the running game process. Game updates can therefore make Daystrom temporarily incompatible, and use is at your own risk.
Link every game account to a Scopely ID before using Daystrom so access does not depend on local profiles or sign-in data. Daystrom shows the complete platform-specific safety and removal instructions on first use and makes them available again from Settings.
Download the latest release for your platform from the Releases page.
- macOS: Download the
.dmgfile, open it, and drag the app to your Applications folder. - Windows: Download the
.exeinstaller and run it. If Windows SmartScreen shows a warning, click "More info" and then "Run anyway" (the app is self-signed, not yet verified by Microsoft).
After installation, launch Project Daystrom, review the safety notice, and prepare the mod through the action in the
status bar. To add the first account, start STFC through Daystrom and sign in to the intended Scopely account. Daystrom
then adds its player profile as an account tab; use Start on that tab for later launches.
Daystrom shows localized release notes for signed application updates and installs them only after confirmation. A running game remains open while Daystrom updates, and its mod reconnects automatically after Daystrom restarts. When a verified predecessor is available, the same window offers a one-click rollback.
This project was originally inspired by the STFC Community Mod by netniV, tashcan, and contributors. Daystrom has since moved to its own Rust-based mod with a custom hook engine and profile system.
- Tauri 2 (Rust backend and native shell)
- Vue 3 + Vite (frontend)
- @mburchard/bit-log (structured logging)
- Custom IL2CPP hook engine in Rust (ARM64 + x86_64)
project-daystrom/
βββ package.json # Workspace root (orchestrating scripts)
βββ pnpm-workspace.yaml # Workspace config (members: app, scripts)
βββ eslint.config.js # Shared ESLint config (lints entire project)
βββ tsconfig.base.json # Shared TypeScript base config
βββ scripts/ # Build and tooling scripts
β βββ build.ts # Mod + app build orchestration
β βββ update-manifest.ts # Release notes + updater manifest generation
β βββ package.json # Script dependencies
βββ release-notes/ # Versioned German and English release notes
βββ rust-mod/ # Daystrom game mod (Rust, cdylib)
β βββ src/hook/ # Hook engine (inline hooks, ARM64 + x86_64)
β βββ src/hooks/ # IL2CPP hook implementations
β βββ src/il2cpp/ # IL2CPP runtime bindings
β βββ Cargo.toml # Crate config
βββ app/ # Project Daystrom app (Tauri 2 + Vue 3)
β βββ modules/
β β βββ app/ # Vue 3 frontend
β β βββ backend/ # Tauri/Rust backend
β β βββ plugins/ # Feature plugins (dashboard, alerts, advisor)
β βββ resources/ # Shared assets (logo, icons)
β βββ package.json # App dependencies + app-local scripts
βββ README.md
- Apple Silicon β local development assumes arm64; the CI handles universal builds
- Xcode Command Line Tools (
xcode-select --install)
- Visual Studio Build Tools 2022 (or VS Community) β workload "Desktop development with C++" including a Windows SDK (not installed by default!)
- Rust: standard installation via rustup-init.exe (option 1 selects MSVC toolchain)
nvm use
pnpm installAll commands run from the workspace root unless noted otherwise.
The Rust mod in rust-mod/ produces a shared library that gets injected into the game at launch.
pnpm build:modThis compiles the mod for the current platform and copies the result to app/resources/mod/.
| Script | Description |
|---|---|
pnpm install:all |
Force-install all workspace dependencies |
pnpm lint |
Run ESLint across the entire project |
pnpm lint:fix |
Run ESLint with auto-fix |
pnpm typecheck |
TypeScript + Rust type checks |
pnpm test |
Run tooling, mod, frontend, and backend tests |
pnpm test:app |
Run all app tests (frontend + backend) |
pnpm test:app:frontend |
Run frontend tests only (vitest) |
pnpm test:app:backend |
Run backend tests only (cargo test + ts-rs bindings) |
pnpm test:app:frontend:watch |
Run frontend tests in watch mode |
pnpm test:app:frontend:coverage |
Run frontend tests with v8 coverage |
pnpm test:app:backend:coverage |
Run backend tests with llvm-cov coverage |
pnpm check:mod:dump -- <paths> |
Check IL2CPP dumps against the compatibility manifest |
pnpm release:verify -- <macOS> <Windows> |
Require compatible platform dumps before release |
pnpm build |
Build everything (mod library β Tauri app) |
pnpm build:mod |
Build mod library and copy to app/resources/mod/ |
pnpm build:app |
Build mod library + Tauri app bundle |
pnpm icons |
Generate Tauri icons from resources/daystrom.png |
pnpm dev |
Build mod + start Tauri app with hot reload |
| Alias | Resolves to |
|---|---|
@app/* |
modules/app/src/* |
@generated/* |
modules/app/src/generated/* |
@resources/* |
resources/* |
Updater-enabled releases require Windows, Apple, and Tauri signing credentials. See release-signing.md for credential setup and releasing.md for the release process and manifest compatibility rules.
Every release requires a reviewed release-notes/<version>.json containing German and English entries. Release
automation validates this file and uses it for both the GitHub release body and the notes embedded in latest.json.
Shared types between Rust backend and TypeScript frontend are auto-generated by
ts-rs. Rust structs annotated with #[derive(TS)] produce
TypeScript types in app/modules/app/src/generated/ whenever pnpm test:app:backend runs.
Rust doc comments are carried over as JSDoc.
#[derive(Serialize, TS)]
#[ts(export)]
pub struct GameStatus { /* ... */ }import type {GameStatus} from '@generated/GameStatus';Plugins live in modules/plugins/ and are loaded by the main app. The architecture is intentionally modular so that
individual plugins can be developed and maintained independently.
| Variable | Default | Description |
|---|---|---|
DAYSTROM_UPDATE_ENDPOINT |
Configured endpoint | Debug only: override the Daystrom update manifest URL |
DAYSTROM_UPDATE_INTERVAL_SECONDS |
21600 |
Debug only: set the periodic update-check interval |
This project is licensed under the GNU General Public License v3.0.