forge/README.md
Jacob Schmidt fe8f5dbef5 Refactor config loading and update SurrealDB setup documentation
- Refactored the `load` function in `config.rs` to use a new `locate_config_path` function for improved clarity and maintainability.
- Updated SurrealDB setup instructions in `SURREALDB_SETUP.md` and `surrealdb-setup.md` to reflect changes in the installation process and removed outdated script references.
- Added new dependencies for Tauri in `package.json` and `package-lock.json`, including `@tauri-apps/cli` and `@tauri-apps/plugin-dialog`.
- Updated the package-lock to include the latest versions of Tauri dependencies.
2026-06-06 15:34:17 -05:00

93 lines
2.7 KiB
Markdown

# Forge
Forge is a framework for Arma 3 persistent game servers. It combines SQF
addons, a Rust `arma-rs` extension, shared service crates, and web-based client
interfaces for player data, organizations, banking, garages, lockers, phones,
CAD, stores, and task workflows.
## Storage
Durable persistence is backed by SurrealDB. The server extension loads schema
modules at startup and routes domain repositories through the SurrealDB client.
```toml
[surreal]
endpoint = "127.0.0.1:8000"
namespace = "forge"
database = "main"
username = "root"
password = "root"
connect_timeout_ms = 5000
```
## Workspace
```text
arma/
mod/ Shared client/server config addon built as @forge_mod
client/ Client-side addons and browser UIs
server/ Server-side addons and extension crate
bin/
host/ Tauri host control panel for SurrealDB, ICOM, and Arma server
icom/ Interprocess communication helper
lib/
models/ Shared domain models
repositories/ Repository traits and in-memory test stores
services/ Domain business logic
shared/ Cross-crate helpers
tools/ Web UI build tooling
```
## Common Commands
```powershell
cargo test
npm run build:webui
npm run host:dev
.\build-arma.ps1
```
`.\build-arma.ps1` builds `arma/mod`, `arma/client`, and `arma/server`. Load
the resulting `@forge_mod` on both clients and servers, `@forge_client` on
clients, and `@forge_server` on the server only.
## Documentation
- [Framework Documentation](./docs/README.md)
- [Framework Architecture](./docs/FRAMEWORK_ARCHITECTURE.md)
- [Module Reference](./docs/MODULE_REFERENCE.md)
- [Development Guide](./docs/DEVELOPMENT_GUIDE.md)
## Extension Status
```sqf
"forge_server" callExtension ["status", []];
"forge_server" callExtension ["surreal:status", []];
```
Both commands report the persistence connection state.
## Host Control Panel
`bin/host` contains a Tauri control app for local Forge server hosting. It can
start and stop SurrealDB, `forge-icom.exe`, and an Arma 3 dedicated server,
edit their launch commands, and show basic TCP health plus captured logs.
```powershell
# Build ICOM first if the host config points at target/release/forge-icom.exe
cargo build --release -p forge-icom
# Run the host UI during development
npm run host:dev
# Build the packaged desktop app
npm run host:build
```
The app reads the shared `config.toml` from the repo root during development, or
from the current/executable directory in packaged use. If no shared config exists,
it falls back to `bin/host/host.example.toml`; saving from the Settings view writes
the active shared `config.toml`. The shared file includes the host process sections
plus the `[server]` section used by ICOM and the `[surreal]` section used by the
Arma extension.