forge/docus/dist/raw/getting-started/module-reference.md
Jacob Schmidt 827f3303a2 feat: add initial Docus setup and sync tool for documentation generation
- Created package.json for Docus with necessary scripts and dependencies.
- Implemented sync-docus-docs.mjs to automate the generation of documentation files from source markdown.
- Defined mappings for generated pages and virtual routes to ensure proper linking in documentation.
- Added static content files for the documentation structure, including navigation and index pages.
2026-04-21 16:07:27 -05:00

28 KiB

Module Reference

This reference lists the main Forge modules and where each layer lives.

Directory Map

arma/client/addons/      Client-side Arma addons and browser UIs
arma/server/addons/      Server-side Arma addons and extension bridge
arma/server/extension/   Rust arma-rs extension and SurrealDB adapters
bin/icom/                Interprocess communication helper
lib/models/              Shared domain data models
lib/repositories/        Repository traits and in-memory stores
lib/services/            Domain services and workflow logic
lib/shared/              Cross-crate helpers
tools/                   Web UI build tooling
docs/                    Framework-level documentation

Gameplay Domains

<th>
  Purpose
</th>

<th>
  Client addon
</th>

<th>
  Server addon
</th>

<th>
  Service/model layer
</th>

<th>
  Extension group
</th>
<td>
  Player identity, loadout, position, status, contact identifiers, and persistent character data.
</td>

<td>
  <code>
    arma/client/addons/actor
  </code>
</td>

<td>
  <code>
    arma/server/addons/actor
  </code>
</td>

<td>
  <code>
    lib/models/src/actor.rs
  </code>
  
  , <code>
    lib/services/src/actor.rs
  </code>
</td>

<td>
  <code>
    actor:*
  </code>
</td>
<td>
  Player accounts, cash/bank balances, PIN validation, transfers, checkout charging, and transaction context.
</td>

<td>
  <code>
    arma/client/addons/bank
  </code>
</td>

<td>
  <code>
    arma/server/addons/bank
  </code>
</td>

<td>
  <code>
    lib/models/src/bank.rs
  </code>
  
  , <code>
    lib/services/src/bank.rs
  </code>
</td>

<td>
  <code>
    bank:*
  </code>
  
  , <code>
    bank:hot:*
  </code>
</td>
<td>
  Dispatch requests, assignments, orders, activity stream, profiles, groups, and hydrated dispatcher views.
</td>

<td>
  <code>
    arma/client/addons/cad
  </code>
</td>

<td>
  <code>
    arma/server/addons/cad
  </code>
</td>

<td>
  <code>
    lib/models/src/cad.rs
  </code>
  
  , <code>
    lib/services/src/cad.rs
  </code>
</td>

<td>
  <code>
    cad:*
  </code>
</td>
<td>
  Player vehicle storage with plate IDs, fuel, damage, and hit point state.
</td>

<td>
  <code>
    arma/client/addons/garage
  </code>
</td>

<td>
  <code>
    arma/server/addons/garage
  </code>
</td>

<td>
  <code>
    lib/models/src/garage.rs
  </code>
  
  , <code>
    lib/services/src/garage.rs
  </code>
</td>

<td>
  <code>
    garage:*
  </code>
  
  , <code>
    garage:hot:*
  </code>
</td>
<td>
  Player item storage keyed by classname with category and amount.
</td>

<td>
  <code>
    arma/client/addons/locker
  </code>
</td>

<td>
  <code>
    arma/server/addons/locker
  </code>
</td>

<td>
  <code>
    lib/models/src/locker.rs
  </code>
  
  , <code>
    lib/services/src/locker.rs
  </code>
</td>

<td>
  <code>
    locker:*
  </code>
  
  , <code>
    locker:hot:*
  </code>
</td>
<td>
  Player organizations, membership, treasury, credit lines, shared assets, and fleet data.
</td>

<td>
  <code>
    arma/client/addons/org
  </code>
</td>

<td>
  <code>
    arma/server/addons/org
  </code>
</td>

<td>
  <code>
    lib/models/src/org.rs
  </code>
  
  , <code>
    lib/services/src/org.rs
  </code>
</td>

<td>
  <code>
    org:*
  </code>
  
  , <code>
    org:hot:*
  </code>
</td>
<td>
  Contacts, messages, and email state.
</td>

<td>
  <code>
    arma/client/addons/phone
  </code>
</td>

<td>
  <code>
    arma/server/addons/phone
  </code>
</td>

<td>
  <code>
    lib/models/src/phone.rs
  </code>
  
  , <code>
    lib/services/src/phone.rs
  </code>
</td>

<td>
  <code>
    phone:*
  </code>
</td>
<td>
  Storefront entity setup, catalog hydration, checkout workflows, and checkout charging integration.
</td>

<td>
  <code>
    arma/client/addons/store
  </code>
</td>

<td>
  <code>
    arma/server/addons/store
  </code>
</td>

<td>
  <code>
    lib/models/src/store.rs
  </code>
  
  , <code>
    lib/services/src/store.rs
  </code>
</td>

<td>
  <code>
    store:checkout
  </code>
</td>
<td>
  Server-owned mission/task flows, catalog, ownership, status, participant tracking, rewards, and defuse counters.
</td>

<td>
  none
</td>

<td>
  <code>
    arma/server/addons/task
  </code>
</td>

<td>
  <code>
    lib/models/src/task.rs
  </code>
  
  , <code>
    lib/services/src/task.rs
  </code>
</td>

<td>
  <code>
    task:*
  </code>
</td>
<td>
  Organization or owner-scoped vehicle unlock storage.
</td>

<td>
  via garage/org UI
</td>

<td>
  server extension only
</td>

<td>
  <code>
    lib/models/src/v_garage.rs
  </code>
  
  , <code>
    lib/services/src/v_garage.rs
  </code>
</td>

<td>
  <code>
    owned:garage:*
  </code>
</td>
<td>
  Organization or owner-scoped arsenal unlock storage.
</td>

<td>
  via locker/org UI
</td>

<td>
  server extension only
</td>

<td>
  <code>
    lib/models/src/v_locker.rs
  </code>
  
  , <code>
    lib/services/src/v_locker.rs
  </code>
</td>

<td>
  <code>
    owned:locker:*
  </code>
</td>
Domain
Actor
Bank
CAD
Garage
Locker
Organization
Phone
Store
Task
Owned Garage
Owned Locker

Server and extension guides: Actor, Bank, CAD, Economy, Garage, Locker, Organization, Owned Storage, Phone, Store, Task.

Client guides: Client Overview, Main, Common, Actor, Bank, CAD, Garage, Locker, Notifications, Organization, Phone, Store.

Infrastructure Modules

<th>
  Purpose
</th>

<th>
  Location
</th>
<td>
  Shared SQF helpers, base stores, utility functions, and shared UI bridge pieces.
</td>

<td>
  <code>
    arma/client/addons/common
  </code>
  
  , <code>
    arma/server/addons/common
  </code>
</td>
<td>
  Server SQF bridge around <code>
    forge_server
  </code>
  
   extension calls and chunked transport.
</td>

<td>
  <code>
    arma/server/addons/extension
  </code>
</td>
<td>
  Mod-level configuration, pre-init wiring, and server/client startup glue.
</td>

<td>
  <code>
    arma/client/addons/main
  </code>
  
  , <code>
    arma/server/addons/main
  </code>
</td>
<td>
  Server-side fuel, medical, and service economy helpers. Fuel and repair charge organization hot state; medical charges player bank/cash first, then organization funds with repayable member debt when personal funds cannot cover the bill.
</td>

<td>
  <code>
    arma/server/addons/economy
  </code>
</td>
<td>
  Client notification UI, sounds, and UI event handling.
</td>

<td>
  <code>
    arma/client/addons/notifications
  </code>
</td>
<td>
  Rust helper for interprocess communication and event broadcasting.
</td>

<td>
  <code>
    bin/icom
  </code>
  
  , <code>
    arma/server/extension/src/icom.rs
  </code>
</td>
<td>
  Extension-side terrain export helper.
</td>

<td>
  <code>
    arma/server/extension/src/terrain.rs
  </code>
</td>
<td>
  Chunked request/response handling for large extension payloads.
</td>

<td>
  <code>
    arma/server/extension/src/transport.rs
  </code>
</td>
<td>
  SurrealDB connection lifecycle and status reporting.
</td>

<td>
  <code>
    arma/server/extension/src/surreal.rs
  </code>
</td>
Module
common
extension
main
economy
notifications
icom
terrain
transport
surreal

Extension Command Groups

Commands are invoked with:

"forge_server" callExtension ["group:command", [_arg1, _arg2]];

Nested groups use additional : separators, for example bank:hot:deposit.

Core

<th>
  Purpose
</th>
<td>
  Return the extension version string.
</td>
<td>
  Return SurrealDB connection state.
</td>
<td>
  Return SurrealDB connection state directly from the Surreal module.
</td>
Command
version
status
surreal:status

Actor

<th>
  Purpose
</th>
<td>
  Fetch actor data for a resolved player UID.
</td>
<td>
  Create actor data from JSON.
</td>
<td>
  Apply actor JSON updates.
</td>
<td>
  Return <code>
    true
  </code>
  
   or <code>
    false
  </code>
  
  .
</td>
<td>
  Delete actor data.
</td>
Command
actor:get
actor:create
actor:update
actor:exists
actor:delete
actor:hot:init
  , <code>
    actor:hot:get
  </code>
  
  , <code>
    actor:hot:keys
  </code>
  
  , <code>
    actor:hot:override
  </code>
  
  , <code>
    actor:hot:save
  </code>
  
  , <code>
    actor:hot:remove
  </code>
</td>

<td>
  Manage actor hot state.
</td>

See Actor Usage Guide for examples.

Bank

<th>
  Purpose
</th>
<td>
  Charge a checkout against hot bank state.
</td>
<td>
  Validate a PIN for bank operations.
</td>
Command
bank:get
  , <code>
    bank:create
  </code>
  
  , <code>
    bank:update
  </code>
  
  , <code>
    bank:exists
  </code>
  
  , <code>
    bank:delete
  </code>
</td>

<td>
  Durable bank CRUD.
</td>
bank:hot:init
  , <code>
    bank:hot:get
  </code>
  
  , <code>
    bank:hot:override
  </code>
  
  , <code>
    bank:hot:patch
  </code>
  
  , <code>
    bank:hot:save
  </code>
  
  , <code>
    bank:hot:remove
  </code>
</td>

<td>
  Manage bank hot state.
</td>
bank:hot:deposit
  , <code>
    bank:hot:withdraw
  </code>
  
  , <code>
    bank:hot:deposit_earnings
  </code>
  
  , <code>
    bank:hot:transfer
  </code>
</td>

<td>
  Mutate hot bank balances with operation context.
</td>
bank:hot:charge_checkout
bank:hot:validate_pin

See Bank Usage Guide for examples.

Garage

<th>
  Purpose
</th>
Command
garage:create
  , <code>
    garage:get
  </code>
  
  , <code>
    garage:add
  </code>
  
  , <code>
    garage:update
  </code>
  
  , <code>
    garage:patch
  </code>
  
  , <code>
    garage:remove
  </code>
  
  , <code>
    garage:delete
  </code>
  
  , <code>
    garage:exists
  </code>
</td>

<td>
  Durable player garage operations.
</td>
garage:hot:init
  , <code>
    garage:hot:get
  </code>
  
  , <code>
    garage:hot:override
  </code>
  
  , <code>
    garage:hot:add
  </code>
  
  , <code>
    garage:hot:remove_vehicle
  </code>
  
  , <code>
    garage:hot:save
  </code>
  
  , <code>
    garage:hot:remove
  </code>
</td>

<td>
  Manage player garage hot state.
</td>

See Garage Usage Guide for examples.

Locker

<th>
  Purpose
</th>
Command
locker:create
  , <code>
    locker:get
  </code>
  
  , <code>
    locker:add
  </code>
  
  , <code>
    locker:update
  </code>
  
  , <code>
    locker:patch
  </code>
  
  , <code>
    locker:remove
  </code>
  
  , <code>
    locker:delete
  </code>
  
  , <code>
    locker:exists
  </code>
</td>

<td>
  Durable player locker operations.
</td>
locker:hot:init
  , <code>
    locker:hot:get
  </code>
  
  , <code>
    locker:hot:override
  </code>
  
  , <code>
    locker:hot:save
  </code>
  
  , <code>
    locker:hot:remove
  </code>
</td>

<td>
  Manage player locker hot state.
</td>

See Locker Usage Guide for examples.

Organization

<th>
  Purpose
</th>
<td>
  Runtime organization workflows including registration, invites, credit lines, checkout charging, assets, fleet, leave, disband, save, and remove.
</td>
Command
org:get
  , <code>
    org:create
  </code>
  
  , <code>
    org:update
  </code>
  
  , <code>
    org:exists
  </code>
  
  , <code>
    org:delete
  </code>
</td>

<td>
  Durable organization CRUD.
</td>
org:assets:get
  , <code>
    org:assets:update
  </code>
</td>

<td>
  Manage organization assets.
</td>
org:fleet:get
  , <code>
    org:fleet:update
  </code>
</td>

<td>
  Manage organization fleet entries.
</td>
org:members:get
  , <code>
    org:members:add
  </code>
  
  , <code>
    org:members:remove
  </code>
</td>

<td>
  Manage organization membership.
</td>
org:hot:*

See Org Usage Guide for examples.

Phone

<th>
  Purpose
</th>
<td>
  Initialize phone state for a UID.
</td>
<td>
  Remove phone state for a UID.
</td>
Command
phone:init
phone:contacts:list
  , <code>
    phone:contacts:add
  </code>
  
  , <code>
    phone:contacts:remove
  </code>
</td>

<td>
  Manage contacts.
</td>
phone:messages:list
  , <code>
    phone:messages:thread
  </code>
  
  , <code>
    phone:messages:send
  </code>
  
  , <code>
    phone:messages:mark_read
  </code>
  
  , <code>
    phone:messages:delete
  </code>
</td>

<td>
  Manage messages.
</td>
phone:emails:list
  , <code>
    phone:emails:send
  </code>
  
  , <code>
    phone:emails:mark_read
  </code>
  
  , <code>
    phone:emails:delete
  </code>
</td>

<td>
  Manage emails.
</td>
phone:remove

See Phone Usage Guide for examples.

CAD

<th>
  Purpose
</th>
<td>
  Build grouped CAD state.
</td>
<td>
  Build the dispatcher view model.
</td>
Command Group
cad:activity:append
  , <code>
    cad:activity:recent
  </code>
</td>

<td>
  Append and read recent activity.
</td>
cad:assignments:list
  , <code>
    cad:assignments:assign
  </code>
  
  , <code>
    cad:assignments:acknowledge
  </code>
  
  , <code>
    cad:assignments:decline
  </code>
  
  , <code>
    cad:assignments:upsert
  </code>
  
  , <code>
    cad:assignments:delete
  </code>
</td>

<td>
  Manage dispatch assignments.
</td>
cad:orders:list
  , <code>
    cad:orders:create
  </code>
  
  , <code>
    cad:orders:create_from_context
  </code>
  
  , <code>
    cad:orders:close
  </code>
  
  , <code>
    cad:orders:upsert
  </code>
  
  , <code>
    cad:orders:delete
  </code>
</td>

<td>
  Manage orders.
</td>
cad:requests:list
  , <code>
    cad:requests:submit
  </code>
  
  , <code>
    cad:requests:submit_from_context
  </code>
  
  , <code>
    cad:requests:close
  </code>
  
  , <code>
    cad:requests:upsert
  </code>
  
  , <code>
    cad:requests:delete
  </code>
</td>

<td>
  Manage requests.
</td>
cad:profiles:list
  , <code>
    cad:profiles:update_from_context
  </code>
  
  , <code>
    cad:profiles:upsert
  </code>
  
  , <code>
    cad:profiles:delete
  </code>
</td>

<td>
  Manage profiles.
</td>
cad:groups:build
cad:view:hydrate

See CAD Usage Guide for examples.

Task

<th>
  Purpose
</th>
<td>
  Reset task state.
</td>
<td>
  Clear task state.
</td>
Command Group
task:reset
task:catalog:active
  , <code>
    task:catalog:get
  </code>
  
  , <code>
    task:catalog:upsert
  </code>
  
  , <code>
    task:catalog:delete
  </code>
</td>

<td>
  Manage task catalog entries.
</td>
task:ownership:bind
  , <code>
    task:ownership:release
  </code>
  
  , <code>
    task:ownership:accept
  </code>
  
  , <code>
    task:ownership:reward_context
  </code>
</td>

<td>
  Manage task ownership and rewards.
</td>
task:status:set
  , <code>
    task:status:get
  </code>
  
  , <code>
    task:status:clear
  </code>
</td>

<td>
  Manage task status.
</td>
task:defuse:increment
  , <code>
    task:defuse:get
  </code>
</td>

<td>
  Manage defuse counters.
</td>
task:clear

See Task Usage Guide for examples.

Owned Storage

<th>
  Purpose
</th>
<td>
  Owner-scoped vehicle hot state.
</td>
<td>
  Owner-scoped item hot state.
</td>
Command Group
owned:garage:create
  , <code>
    owned:garage:fetch
  </code>
  
  , <code>
    owned:garage:get
  </code>
  
  , <code>
    owned:garage:add
  </code>
  
  , <code>
    owned:garage:remove
  </code>
  
  , <code>
    owned:garage:delete
  </code>
  
  , <code>
    owned:garage:exists
  </code>
</td>

<td>
  Owner-scoped vehicle storage.
</td>
owned:garage:hot:*
owned:locker:create
  , <code>
    owned:locker:fetch
  </code>
  
  , <code>
    owned:locker:get
  </code>
  
  , <code>
    owned:locker:add
  </code>
  
  , <code>
    owned:locker:remove
  </code>
  
  , <code>
    owned:locker:delete
  </code>
  
  , <code>
    owned:locker:exists
  </code>
</td>

<td>
  Owner-scoped item storage.
</td>
owned:locker:hot:*

See Owned Storage Usage Guide for examples.

Other Extension Groups

<th>
  Purpose
</th>
<td>
  Run store checkout behavior.
</td>
<td>
  Export terrain data as SVG.
</td>
Command Group
store:checkout
icom:connect
  , <code>
    icom:broadcast
  </code>
  
  , <code>
    icom:send_event
  </code>
</td>

<td>
  ICom connection and event forwarding.
</td>
terrain:exportSVG
transport:invoke
  , <code>
    transport:invoke_stored
  </code>
</td>

<td>
  Invoke commands through transport.
</td>
transport:request:append
  , <code>
    transport:request:clear
  </code>
</td>

<td>
  Manage stored request chunks.
</td>
transport:response:get
  , <code>
    transport:response:clear
  </code>
</td>

<td>
  Manage stored response chunks.
</td>

Rust Crates

<th>
  Role
</th>
<td>
  Domain models and validation. Keep these serializable and free of persistence details.
</td>
<td>
  Repository traits and in-memory implementations. Keep these storage-agnostic.
</td>
<td>
  Business rules and workflows. Depend on repository traits, not concrete databases.
</td>
<td>
  Cross-crate helpers. Keep dependencies light.
</td>
<td>
  Arma extension crate. Owns command registration, SurrealDB runtime wiring, and concrete storage adapters.
</td>
<td>
  ICom helper binary and client library.
</td>
Crate
forge-models
forge-repositories
forge-services
forge-shared
forge-server
forge-icom