Publish a mod

Publish a mod.

A community mod is an ordinary npm package. Add one keyword, publish, and it shows up on the mods page. No approval step.

1. Build the mod

The author CLI scaffolds a typed mod with a /hello command and offline tests:

omd-mod-author create ./my_mod my_mod
cd my_mod
pnpm test

Tests never call a real model. To try it live, pnpm watch STORE reloads the mod in codex on every save, using a practice store from omd-mod init. Full walkthrough.

2. Add the keyword

OMD itself doesn’t need the keyword; it’s how this site finds community mods.

Add omd-mod to keywords in package.json, and publish mod.json at the package root:

{
  "name": "@you/my-mod",
  "version": "0.1.0",
  "keywords": ["omd-mod"],
  "files": ["mod.json", "index.ts"]
}

The mods page reads mod.json for the ID, API version, permissions and settings, and npm for the description, license and author. Keep the version the same in both, remove "private": true, and set license and provenance in mod.json.

  • Leave dependencies empty. @oh-my-diff/mod-api isn’t on npm yet, so list it only as a peer or dev dependency.
  • npm install scripts never run. The tarball can be at most 4 MiB packed, 16 MiB unpacked.

3. Publish

pnpm check && pnpm test && pnpm publish --access public

pnpm check type-checks; add TypeScript once with pnpm add -D typescript@5.9.3.

Your mod appears after the next daily rebuild. People install it with omd install npm:@you/my-mod, or pin a version with @0.1.0. Git works too.

Listing rules

  • Mod IDs that start with omd_ and the @oh-my-diff npm scope are reserved for first-party mods.
  • A package without a valid mod.json at its root is skipped.
  • Community mods are not reviewed. Each one is labeled as community, with the capabilities it asks for shown next to it.
  • A mod that is malicious, impersonates another, or breaks npm’s terms is removed after a report.

Want a mod to ship with OMD+? Suggest it in an issue.