Skip to content

synthalorian/sc-synthesis

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

24 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

                               _      _   _
                              | |    (_) | |

___ ___ ___ ___ ___ ___ | | ___ | |() __ __ _ / |/ |/ _ / | / / _ / |/ __| | __| | '_ \ / _ | _ \ (| / ( | (| __/ (| | (| | || | | | | (| | |/_|_|_()_|_,|_||_||| ||_, | _____ _ _ _ _ / | / | () | | | () |/ | (_ _ __ | || |__ _ __ ___ _ _ __ ___ ___ | '_ | | | ' | '/ | | ' \ / _
___) | | | | | || | | | | | (
| | | | | / |/|| |||_|| ||_| _||| |_|__|

                 A Star Citizen Companion App
         ~ synthwave ships, offline-first, Rust-fast ~

SC:Synthesis β€” Offline Star Citizen Companion

Buy Me a Coffee 238 Ships Offline Flutter Rust

SC:Synthesis brings the full Star Citizen ship database to your pocket (or desktop) with a retro-synthwave aesthetic, native Rust performance, and zero network requirements. No server, no API calls, no internet needed.


Features

πŸ›Έ 238 ships, 100% offline β€” The complete FleetYards ship catalog is bundled in a local SQLite database via a Rust FFI bridge. No network calls. Never. Works on a plane, in a bunker, or in the black.

⚑ Rust-native performance β€” Search, filter, and sort 200+ ships through a Rust rusqlite backend exposed to Flutter via flutter_rust_bridge. Sub-millisecond queries on-device.

πŸ”Ž Ship browser β€” Full-text search by name or manufacturer, filter by size (Small, Medium, Large, Capital), filter by manufacturer, sort by name, price, or size. Instant results.

✨ Ship detail screens β€” Glassmorphism synthwave design with full stats (crew, cargo capacity, speed, weapons, shields), description, manufacturer info, and price. One-tap link to FleetYards.net for complete specifications.

πŸ“Š Ship comparison β€” Compare 2–3 ships side by side with stat bars. Pick ships from the browser or your fleet, see which one has more firepower, cargo space, or quantum fuel.

πŸ›‘οΈ Local Fleet Manager β€” Track ships you own and build a wishlist. Everything is stored in SharedPreferences β€” no account, no login, no sync. Just your fleet, locally.

πŸ“ Per-ship personal notes β€” Add custom notes to any ship on its detail screen. Jot down loadout ideas, upgrade plans, or just your thoughts. Saved locally.

🎨 6 retro themes β€” Synthwave '84 (default), OutRun, Vaporwave, Cyberpunk, Dark, and Light. Switch on the fly from the Settings tab β€” no restart needed.

βš™οΈ Settings & About β€” App version, local database stats (ships loaded, cached entries), theme picker, Buy Me a Coffee link, and credits. All in one place.

πŸ”— FleetYards.net integration β€” One-tap links from every ship card to the FleetYards web page for community reviews, pledge store prices, and detailed component specs.

πŸŒ™ Shimmer loading β€” Skeleton shimmer placeholders while the SQLite database initialises on first launch.


Screenshots

  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
  β”‚  [screenshot_01.png] β”‚  β”‚  [screenshot_02.png] β”‚  β”‚  [screenshot_03.png] β”‚
  β”‚   Ship List          β”‚  β”‚   Ship Detail         β”‚  β”‚   Ship Comparison    β”‚
  β”‚   (Synthwave '84)    β”‚  β”‚   (Glassmorphism)     β”‚  β”‚   (Cyberpunk theme)  β”‚
  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Screenshots will be added after the first public release.


Architecture

  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
  β”‚                      SC:Synthesis App                            β”‚
  β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
  β”‚  β”‚                  Flutter (Dart) Layer                      β”‚  β”‚
  β”‚  β”‚                                                            β”‚  β”‚
  β”‚  β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚  β”‚
  β”‚  β”‚  β”‚  Fleet   β”‚  β”‚  Ships   β”‚  β”‚ Compare  β”‚  β”‚ Settings  β”‚ β”‚  β”‚
  β”‚  β”‚  β”‚  Screen  β”‚  β”‚  Screen  β”‚  β”‚  Screen  β”‚  β”‚ & About   β”‚ β”‚  β”‚
  β”‚  β”‚  β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”˜ β”‚  β”‚
  β”‚  β”‚       β”‚              β”‚             β”‚               β”‚       β”‚  β”‚
  β”‚  β”‚  β”Œβ”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β” β”‚  β”‚
  β”‚  β”‚  β”‚                  Core / Services                      β”‚ β”‚  β”‚
  β”‚  β”‚  β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚ β”‚  β”‚
  β”‚  β”‚  β”‚  β”‚  Database    β”‚  β”‚   Fleet      β”‚  β”‚   Theme    β”‚  β”‚ β”‚  β”‚
  β”‚  β”‚  β”‚  β”‚  Service     β”‚  β”‚   Manager    β”‚  β”‚   Manager  β”‚  β”‚ β”‚  β”‚
  β”‚  β”‚  β”‚  β”‚ (Rust SQLite)β”‚  β”‚ (SharedPrefs)β”‚  β”‚            β”‚  β”‚ β”‚  β”‚
  β”‚  β”‚  β”‚  β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚ β”‚  β”‚
  β”‚  β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚  β”‚
  β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
  β”‚               β”‚                                                  β”‚
  β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
  β”‚  β”‚  flutter_rust_bridge  β€’  FFI  β€’  auto-generated bindings  β”‚  β”‚
  β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
  β”‚                             β”‚                                    β”‚
  β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
  β”‚  β”‚                  Rust Bridge Crate                         β”‚  β”‚
  β”‚  β”‚  sc_synthesis_bridge β€” compiled to .so / .dylib / .dll    β”‚  β”‚
  β”‚  β”‚                                                            β”‚  β”‚
  β”‚  β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                   β”‚  β”‚
  β”‚  β”‚  β”‚  rusqlite      β”‚  β”‚  serde / json  β”‚                   β”‚  β”‚
  β”‚  β”‚  β”‚  (embedded DB) β”‚  β”‚  (ship models) β”‚                   β”‚  β”‚
  β”‚  β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                   β”‚  β”‚
  β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
  β”‚                                                                  β”‚
  β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
  β”‚  β”‚  Assets β€” ships.json (238 ships, bundled at compile time)  β”‚  β”‚
  β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

No server. No backend. No network. The entire ship catalog is bundled at compile time and seeded into an embedded SQLite database on first launch. The Fleet Manager (owned ships + wishlist + notes) lives in Dart-side SharedPreferences. The Rust bridge handles all ship queries β€” search, filter, sort, and detail lookups β€” through a single RustDatabaseService abstraction.


Quick Start

Prerequisites

  • Flutter SDK 3.11+ (flutter doctor should pass)
  • Rust toolchain (rustup, stable)
  • Cargokit (included in rust_builder/ β€” no manual install needed)

1. Clone & enter

git clone https://github.com/synthalorian/sc-synthesis.git
cd sc-synthesis

2. Generate FFI bindings

cd app
flutter pub get
flutter_rust_bridge_codegen generate

Note: If you cloned from a published release, the generated Dart bindings in lib/src/rust/ are pre-committed and you can skip this step.

3. Run (Linux desktop)

cd app
flutter run -d linux

4. Run (Android)

cd app
flutter run

Make sure you have a device connected or an emulator running.


Build for Distribution

Android APK / App Bundle

cd app
flutter build apk --release             # universal APK
flutter build appbundle --release        # Play Store AAB

APK output: app/build/app/outputs/flutter-apk/ AAB output: app/build/app/outputs/bundle/release/

Linux (native .deb / AppImage)

cd app
flutter build linux --release

The binary lives in app/build/linux/x64/release/bundle/. Package with your favourite tool (e.g. makeself, dpkg-deb, or linuxdeploy).

iOS / macOS

cd app
flutter build ios --release             # requires Xcode
flutter build macos --release           # requires macOS + Xcode

Project Structure

sc-synthesis/
β”œβ”€β”€ app/                                  # Flutter application
β”‚   β”œβ”€β”€ lib/
β”‚   β”‚   β”œβ”€β”€ main.dart                    # Entry point
β”‚   β”‚   β”œβ”€β”€ app.dart                     # App shell: bottom nav, theme selector
β”‚   β”‚   β”œβ”€β”€ src/
β”‚   β”‚   β”‚   └── rust/                    # (AUTO-GENERATED) FRB bindings
β”‚   β”‚   β”œβ”€β”€ core/
β”‚   β”‚   β”‚   β”œβ”€β”€ data/                    # RustDatabaseService, FleetManager
β”‚   β”‚   β”‚   β”œβ”€β”€ theme/                   # 6 themes + app_theme.dart
β”‚   β”‚   β”‚   β”‚   └── themes/              # synthwave84, outrun, vaporwave, ...
β”‚   β”‚   β”‚   └── widgets/                 # FleetYardsLink, ShimmerLoading, StatBar
β”‚   β”‚   └── features/
β”‚   β”‚       β”œβ”€β”€ fleet/                   # Fleet dashboard screen
β”‚   β”‚       β”œβ”€β”€ ships/                   # Ship list + ship detail + comparison
β”‚   β”‚       └── settings/                # Settings & About tab
β”‚   β”œβ”€β”€ rust/                            # Rust bridge crate
β”‚   β”‚   β”œβ”€β”€ src/api/
β”‚   β”‚   β”‚   β”œβ”€β”€ model.rs                # Ship struct (serde)
β”‚   β”‚   β”‚   └── database.rs             # SQLite open, migrate, search, import
β”‚   β”‚   └── Cargo.toml
β”‚   β”œβ”€β”€ rust_builder/                    # (AUTO-GENERATED) Cargokit harness
β”‚   β”œβ”€β”€ assets/
β”‚   β”‚   └── data/ships.json             # 238 ships, bundled offline
β”‚   β”œβ”€β”€ pubspec.yaml
β”‚   └── flutter_rust_bridge.yaml
β”‚
β”œβ”€β”€ README.md
└── .gitignore

Tech Stack

Layer Technology
UI Framework Flutter 3.11+ β€’ Dart 3.x
State Riverpod 2.x (flutter_riverpod, riverpod_annotation)
Navigation go_router 14.x
Native Bridge flutter_rust_bridge 2.12 β€’ FFI β€’ Cargokit
Rust rusqlite 0.32 (bundled SQLite), serde, chrono, uuid
Database SQLite (bundled per-platform binary via rusqlite)
Local Storage SharedPreferences (fleet, wishlist, notes, settings)
Data Source Bundled ships.json (frozen FleetYards snapshot)
Charts fl_chart 0.70 (comparison stat bars)
Animation flutter_animate 4.x
Links url_launcher (FleetYards.net deep links)

Network required: Never. Zero. The app makes zero HTTP calls at runtime.


Themes

SC:Synthesis ships with six hand-crafted themes inspired by the synthwave / outrun / cyberpunk aesthetic.

Theme Palette Highlights Default?
Synthwave84 Neon pink #ff2d95, cyan #00f0ff, deep purple Yes
OutRun Sunset orange #ff6b35, magenta #e91e63
Vaporwave Pastel teal #00ced1, lavender #b388ff
Cyberpunk Acid green #39ff14, electric yellow #ffe74c
Dark Slate grey, subtle accent
Light Clean off-white, low-contrast for daylight

Switch themes at runtime from the Settings tab β€” no restart required.


Contributing

Contributions are welcome! Here's how to get started:

  1. Fork the repository on GitHub.
  2. Create a feature branch (git checkout -b feat/my-cool-thing).
  3. Make your changes β€” see the architecture diagram above for guidance on where code lives.
  4. Run the linter & tests:
    cd app
    flutter analyze
    flutter test
  5. Commit with a descriptive message β€” conventional commits encouraged.
  6. Open a pull request against main.

Code style

  • Dart: follow flutter_lints (included in pubspec.yaml).
  • Rust: rustfmt with default settings.
  • Keep the Flutter UI layer free of Rust FFI calls; go through the RustDatabaseService abstraction in core/data/.

What needs help?

  • Additional theme contributions
  • iOS/macOS build verification and CI
  • WebAssembly (wasm) support for the Rust bridge
  • More comparison stat visualisations
  • Localisation (i18n)
  • Tests β€” unit, widget, integration

Support

If you find SC:Synthesis useful, consider buying me a coffee:

Buy Me a Coffee


Credits

Developed by synth (synthalorian) with assistance from synthshark 🎹🦈 β€” a digital entity from the neon grid of 1984.


"Every city tells a story. Your repo is no different." πŸŒ†

License

MIT License

Copyright (c) 2025 SC:Synthesis Contributors

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

Fly safe, Citizen. o7

About

πŸ›Έ SC:Synthesis β€” fully offline Star Citizen companion. 238 ships, loadout builder, fleet manager. Flutter + Rust. Developed by synth with synthclaw.

Topics

Resources

License

Stars

1 star

Watchers

0 watching

Forks

Packages

 
 
 

Contributors