Content Pack Registry

Browse, validate, and understand the structure of community content packs — species definitions, weapon sets, scenarios, and culture bundles.

What this uses

src/sim/body.ts src/sim/bodyplan.ts src/sim/weapon_dynamics.ts src/sim/kinds.ts src/sim/entity.ts @its-not-rocket-science/ananke docs/integration-primer.md

Content packs are JSON manifests describing named entities, species, weapon profiles, armour schemes, and scenarios. The host loads packs at session creation time. Pack validation is the host's responsibility — Ananke provides TypeScript types for each section.

Tier 2 — experimental The content-pack manifest format is not yet part of the stable API contract.

Manifest schema explorer

packId*stringUnique pack identifier, reverse-domain style (e.g. com.example.medieval)
name*stringHuman-readable display name
version*stringSemVer string, e.g. "1.0.0"
anankeMinVersionstringMinimum Ananke version required, e.g. "0.5.0"
weaponsobject[]Array of weapon profiles (see Weapons tab)
armourobject[]Array of armour scheme definitions
archetypesobject[]Entity archetypes — physiology and initial stats
scenariosobject[]Preset world scenarios
provenance*objectAuthor, licence, checksum fields (see Provenance tab)
id*stringUnique weapon id, e.g. "longsword"
name*stringDisplay name
mass_kg*numberMass in kilograms × 1000 (fixed-point Skg integer)
strikeEnergy_JnumberTypical strike kinetic energy in joules × 65536
reachMin_SmnumberMinimum effective reach in sub-metres (1 Sm = 0.0001 m)
reachMax_SmnumberMaximum effective reach
damageTypestring"blunt" | "slash" | "pierce" | "combined"
id*stringUnique armour id
name*stringDisplay name
totalMass_kgnumberFull set mass in Skg
regions*objectPer-region coverage map (head, torso, arms, legs) with absorb_Q values
materialstring"plate" | "mail" | "leather" | "padded" | "none"
id*stringArchetype identifier
name*stringDisplay name
bodyPlanId*stringReference to a body plan id (built-in or from this pack)
mass_kgnumberBody mass in Skg
attributesobjectIndividualAttributes override (strength, speed, cognition…)
defaultWeaponIdstringDefault equipped weapon id
defaultArmourIdstringDefault equipped armour id
id*stringScenario identifier
name*stringDisplay name
worldSeed*numberDeterministic world seed
entitiesobject[]Initial entity placements and states
tickLimitnumberOptional maximum tick count
descriptionstringProse description of scenario goals
author*stringPack author name or organisation
licence*stringSPDX licence identifier, e.g. "MIT", "CC-BY-4.0"
homepagestringURL for pack repository or documentation
sha256stringSHA-256 checksum of the canonical pack JSON (hex string)
createdAtstringISO 8601 creation timestamp
tagsstring[]Discovery tags, e.g. ["medieval","fantasy","weapons"]

Manifest validator

Try this

  1. Start with the root schema — all packs need packId, name, version, and provenance.
  2. Add weapon, armour, and archetype arrays as needed. IDs must be unique within each section.
  3. Use fixed-point integers for all numeric simulation values: mass in Skg (× 1000), energy in J (× 65536), distance in Sm (× 10000).
  4. Provide a SHA-256 checksum in provenance.sha256 for pack integrity verification.
  5. Load the pack at session creation: pass it to createSession({ packs: [myPack] }).