Skip to content

pulse0ne/AstroMFD

Repository files navigation

AstroMFD

AstroFMD Logo

An open-source, configurable multi-function display (MFD) panel builder for space sims and flight games. Design custom button layouts on your desktop, then use any phone or tablet as a touch-screen control panel over your local network.

Built with Tauri, React, and Rust.

Features

  • Visual drag-and-drop editor: place buttons, sliders, labels, panels, carousels, and images on a canvas with snap guides and alignment tools
  • Action sequences: bind multi-step macros to a single button press (key combos, delays, sounds)
  • Mobile client: any device with a browser becomes a control panel (served over your local network)
  • Screen effects: scanlines, LCD grid, phosphor glow, vignette, flicker, chromatic aberration, noise
  • Elite Dangerous integration: journal file watching with live status events (WIP)
  • Input backends: VJoy (Windows), evdev virtual device (Linux)
  • Auto-update: checks GitHub Releases on startup and prompts to install

Usage

After installation, launch the app and create a new screen set. Use the editor to design your layout, then connect your mobile device to the same Wi-Fi network and open the provided URL (or scan the QR code) to access your custom control panel.

Important Note for Windows Users: vJoy is required for handling inputs

Demo video

Getting Started Developing

Prerequisites

Development

yarn install
yarn tauri dev

This starts both the Vite dev server (frontend hot-reload) and the Tauri backend.

Building

yarn tauri build

Produces platform-specific installers in src-tauri/target/release/bundle/.

Architecture

AstroMFD/
├── src/                  # Desktop editor (React + Konva)
├── mobile-client/        # Mobile touch client (React, served via HTTP)
├── shared/               # Shared TypeScript types
├── src-tauri/            # Rust backend
│   └── src/
│       ├── commands/     # Tauri IPC commands
│       ├── input/        # Input device abstraction (VJoy/evdev/mock)
│       ├── journal/      # Elite Dangerous journal watcher
│       ├── widget/       # Widget/screen model + serialization
│       └── lib.rs        # App setup, axum server, plugin registration
└── sfx/                  # Bundled sound effects

How it works

  1. The desktop app runs an HTTP + WebSocket server on a configurable port (default 11011)
  2. Mobile devices connect via browser to http://<your-ip>:<port>
  3. Button presses on the mobile client are sent over WebSocket
  4. The Rust backend translates them into virtual joystick inputs (vJoy on windows, evdev on linux) or keyboard events (linux only)

Configuration

Settings are accessible via the gear icon on the home screen:

Setting Description Default
Mobile Client Port Port the mobile server listens on 11011
Journal Path Elite Dangerous journal directory Auto-detect
VJoy Device ID Virtual joystick device number (Windows only) 2

Settings are stored in ~/.local/share/AstroMFD/settings.json (Linux/macOS) or the equivalent AppData/Local path on Windows. Changes require an app restart.

Releasing

Releases are built via GitHub Actions when a version tag is pushed:

# Bump version in tauri.conf.json and package.json, then:
git tag v0.2.0
git push origin v0.2.0

The workflow builds for macOS (ARM + Intel), Windows, and Linux, then creates a draft GitHub Release. Review and publish to make it available to the auto-updater.

Building without auto-update

To build a standalone version without the auto-update plugin, pass --no-default-features:

yarn tauri build -- --no-default-features

Development Notes

Dependency Descriptions

Rust:

  • tauri - app framework, IPC, window management
  • axum - HTTP/WebSocket server for the mobile client
  • tokio - async runtime
  • rodio - audio playback for action sounds
  • serde / serde_json - serialization
  • font-kit - system font enumeration
  • notify - filesystem watching (journal)
  • rfd - native file dialogs
  • local-ip-address - LAN IP for QR code display
  • tauri-plugin-updater - auto-update from GitHub Releases
  • vjoy (Windows) - virtual joystick driver
  • evdev (Linux) - virtual input device

TypeScript:

  • react + react-dom - UI framework
  • react-konva / konva - canvas editor
  • zustand + immer - state management with undo/redo
  • react-colorful - color picker
  • react-icons - icon pack
  • reactjs-popup - modals and menus
  • qrcode - QR code generation for mobile connection
  • @tauri-apps/plugin-updater - update check + install from frontend

Recommended IDE Setup

OR

About

A Tauri-based MFD creator for space-sims

Topics

Resources

Contributing

Stars

Watchers

Forks

Packages

 
 
 

Contributors