Skip to content
HallownestAPI

Project

Contributing

Every entity is a file in git. Pull requests are the contract.

Anatomy of an entry

Data lives in data/<type>/<slug>.ts. Each file exports a single, Zod-parsed entity. Validation runs at module load — if you mis-type a field, the build fails.

data/bosses/false-knight.ts
import { BossSchema, type Boss } from "@/lib/schema";

const data: Boss = BossSchema.parse({
  slug: "false-knight",
  name: "False Knight",
  game: "hk",
  hp: { base: 300 },
  geo: 200,
  area: { slug: "forgotten-crossroads", name: "Forgotten Crossroads" },
  summary: "First major boss of Hollow Knight...",
  verified: false,
  sources: ["https://hollowknight.fandom.com/wiki/False_Knight"],
});

export default data;

Adding a new boss

  1. Fork the repo.
  2. Add a new file at data/bosses/<slug>.ts.
  3. Register the import in data/bosses/index.ts.
  4. Run npm run dev and visit /bosses/<slug> to verify.
  5. Open a PR. Include a wiki link or in-game source in sources.

Verification

Set verified: true only if you have first-hand confirmation (you played the fight, or you cross-referenced the decompiled Assembly-CSharp.dll). Otherwise leave it false — the UI shows an “unverified” badge.