vinihcrosaandClaude Opus 5 09498c024f
CI / Linux x86_64 (push) Canceled after 0s
CI / macOS ARM64 (push) Canceled after 0s
CI / WASM + JS workspaces (push) Canceled after 0s
docs: add MIT license and repository description (#4)
Repo had no license file and no description metadata. Adds MIT LICENSE,
a license badge and section in the README, and description/license/
repository fields in package.json.

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-30 17:32:52 -03:00

Ymir

License: MIT

6-DOF naval physics simulator — rigid-body hydrodynamics for ships and floating platforms under current, wind, waves, thrusters, rudders, and tug interactions.

The engine is domain-agnostic by design. The naval module is the first application.

Repository layout

ymir/
├── apps/
│   ├── server/        real-time server (WebSocket, Protobuf, API handlers)
│   └── fast-time/     batch accelerated simulation (no live clients)
├── libs/
│   ├── common/        math utilities, physical constants, shared types
│   ├── physics/       bodies, force modules, CVODE integrator
│   ├── simulation/    tick orchestration, event system
│   ├── world/         wave engine, environment, terrain state
│   ├── vessel/        vessel config, control modes, actuator state
│   └── persistence/   JSON scenario reader (SQLite planned)
├── tests/             mirrors libs/ structure
└── docs/
    ├── architecture/  architecture wiki and ADR index
    ├── guides/        building.md, contributing.md
    └── adr/           Architecture Decision Records

Bounded contexts

Each context is a CMake static library. The linker enforces dependency rules — no target may link to a context it does not depend on.

Context CMake target Include prefix Directory
Common ymir_common ymir/common/ libs/common/
Physics ymir_physics ymir/physics/ libs/physics/
Simulation ymir_simulation ymir/simulation/ libs/simulation/
World ymir_world ymir/world/ libs/world/
Vessel ymir_vessel ymir/vessel/ libs/vessel/
Persistence ymir_persistence ymir/persistence/ libs/persistence/

Common — shared math, physical constants, and primitive types; no dependencies on other Ymir libraries.
Physics — rigid-body dynamics: state integration, force accumulation, and all force-module implementations.
Simulation — tick orchestration, real-time vs. fast-time loop, deterministic step sequence, pub/sub event system.
World — state repository for all entities and environment; wave engine, terrain, ambient conditions.
Vessel — vessel configuration, mutable actuator/control state, control modes (drift, LOS, berth maneuver).
Persistence — I/O adapters translating between external formats (JSON) and domain objects.

See docs/architecture/bounded-contexts.md for the full dependency table and responsibility breakdown.

Building

Prerequisites

Requirement Version
C++ compiler GCC 9+ or Clang 10+ (C++17)
CMake 3.20+
SUNDIALS 6.x (SUNDIALS::cvode)
Catch2 3.x (tests)
nlohmann/json any recent release (persistence)

Commands

cmake -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build
ctest --test-dir build

Further reading

  • docs/architecture/README.md — architecture wiki: bounded-context map, data-flow diagrams, ADR index
  • AGENTS.md — contributor rules, coding standards, include conventions, commit discipline

License

MIT — see LICENSE.

S
Description
6-DOF ship dynamics simulator (C++)
Readme MIT
3.2 MiB
0 Stars 1 Watchers 0 Forks
Languages
C++ 58.1%
TypeScript 39.1%
CMake 1.5%
Shell 0.8%
Dockerfile 0.3%