- Rust 100%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
SQLite holds player-changed state while the galaxy is generated from a seed, so expeditions, wrecks, and routes persist across asynchronous players. |
||
| client | ||
| common | ||
| server | ||
| tools | ||
| .gitignore | ||
| Cargo.lock | ||
| Cargo.toml | ||
| FRONTIER_game_design.md | ||
| README.md | ||
FRONTIER
Persistent asynchronous multiplayer exploration, as specified in FRONTIER_game_design.md.
Players fly fragile expeditions through a generated star graph, leave routes and wrecks, and push a shared civilization forward. Individual characters die; the world keeps their traces.
Layout
common/ protocol, events, types, deterministic galaxy generation
server/ authoritative simulation + SQLite + HTTP API
client/ ratatui terminal client
tools/ worldgen, admin CLI, simulation runner
Run
# server (creates frontier.db on first launch)
cargo run -p frontier-server -- --db frontier.db --bind 127.0.0.1:8080
# terminal client (drop-in identity, no account gate)
cargo run -p frontier-client -- --server http://127.0.0.1:8080
# print a galaxy without touching the database
cargo run -p frontier-tools --bin frontier-worldgen -- --seed 42 --systems 48
# inspect a live database
cargo run -p frontier-tools --bin frontier-admin -- --db frontier.db history
cargo run -p frontier-tools --bin frontier-admin -- --db frontier.db players
# run automated explorers against the simulation
cargo run -p frontier-tools --bin frontier-sim -- --players 8 --steps 50
Tests
cargo test --workspace
Commands (client)
scan travel <system> orbit [n] survey land [n] collect build beacon|outpost|colony [name] transmit <msg> return distress rescue <id> name <place> recover contribute exotic_matter [qty] new scout|pioneer|survey|rescue|freighter refuel help quit
Travel asks for confirmation with a fuel/risk estimate before it commits.
Persistence
SQLite stores only player-changed state: discoveries, routes, outposts, wrecks, fame, history, characters. Unexplored systems exist as generated data until someone interacts with them.