Skip to content

About

Assistant app and extended mod for Star Trek Fleet Command, built on the STFC Community Mod

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Repository files navigation

Project Daystrom Version

Crafted with Rust Crafted with TypeScript License: GPL v3 CI

πŸ‡¬πŸ‡§ English | πŸ‡©πŸ‡ͺ Deutsch

A companion app and custom game mod for Star Trek Fleet Command on macOS and Windows.

What is this?

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

Safety and account protection

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.

Installation

Download the latest release for your platform from the Releases page.

  • macOS: Download the .dmg file, open it, and drag the app to your Applications folder.
  • Windows: Download the .exe installer 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.

Acknowledgements

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.

Built with

Project Structure

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

Prerequisites

macOS

  • Apple Silicon β€” local development assumes arm64; the CI handles universal builds
  • Xcode Command Line Tools (xcode-select --install)

Windows

  • 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)

Setup

nvm use
pnpm install

All commands run from the workspace root unless noted otherwise.

Building the mod

The Rust mod in rust-mod/ produces a shared library that gets injected into the game at launch.

pnpm build:mod

This compiles the mod for the current platform and copies the result to app/resources/mod/.

Scripts

Workspace root (run from the project root)

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

Path Aliases

Alias Resolves to
@app/* modules/app/src/*
@generated/* modules/app/src/generated/*
@resources/* resources/*

Release maintenance

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.

App (Tauri + Vue 3 + Vite)

Type generation (ts-rs)

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.

Environment Variables

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

Licence

This project is licensed under the GNU General Public License v3.0.

About

Assistant app and extended mod for Star Trek Fleet Command, built on the STFC Community Mod

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages