OpenCode AI e9899d2e6d
Some checks failed
Android CI Build / check (push) Has been cancelled
Android CI Build / package-apks (push) Has been cancelled
Docs Deploy / build (push) Has been cancelled
Module Market Check / Validate modules/ (push) Has been cancelled
Module Market Publish / Generate submissions.json (push) Has been cancelled
Docs Deploy / deploy (push) Has been cancelled
Initial DruksCode V2: fresh fork of web-to-app (f3b488e) with DruksCode identity
- Package rename com.webtoapp -> br.com.drukstech.codeapp
- Product rename WebToApp/web-to-app -> DruksCode/drukscode
- Design system Wta* -> Dkc*
- applicationId br.com.drukstech.codeapp (.play for gplay flavor)
- rootProject.name DruksCode
- Fresh git history (upstream kept as remote for sync)
2026-09-12 02:42:02 +02:00

3.0 KiB

Publish to the Market

The Module Market is a GitHub-backed catalog of community JS/CSS extension modules. There is no backend — the app fetches catalog files straight from this repository, so contributing is a normal pull-request flow.

::: info Canonical rules The authoritative submission rules, field schemas, reviewer checklist, and CI validation live in modules/README.md. This page is a quick start. :::

Catalog layout

modules/
├── registry.json        # app-facing catalog
├── submissions.json     # CI-generated PR / contributor metadata
├── README.md            # contributor guide
└── <module-folder>/     # each module

The app fetches both registry.json and submissions.json and only shows modules present in both, keeping the in-app catalog aligned with actually-merged PRs.

Add a module

  1. Create a kebab-case folder under modules/:

    modules/my-module/
    ├── module.json    # required
    ├── main.js        # required
    ├── style.css      # optional
    └── icon.png       # optional, ≤256KB
    
  2. Add an entry to registry.json:

    {
      "id": "my-module",
      "path": "my-module",
      "name": "My Module",
      "description": "What it does",
      "icon": "star",
      "category": "CONTENT_ENHANCE",
      "tags": ["demo"],
      "version": "1.0.0",
      "author": { "name": "You" },
      "runAt": "DOCUMENT_END",
      "permissions": ["DOM_ACCESS"],
      "urlMatches": [{ "pattern": "*://example.com/*" }],
      "hasCss": false
    }
    

    Note: in registry.json, version is a semver string (unlike module.json, where it's an object), and there are two extra fields — path and hasCss.

  3. Keep registry.json and module.json consistent — id, name, version, runAt, and permissions must agree. CI enforces this.

  4. Open a pull request. CI runs the validator automatically.

What CI validates

python3 .github/scripts/ci/validate_modules.py checks:

  • JSON validity and required fields
  • Allowed enum values (category, runAt, permissions, configItems.type)
  • registry.json ↔ module.json consistency
  • kebab-case folder names; no orphan or ghost entries; no duplicate id/path
  • Required files present; hasCss agrees with the presence of style.css
  • iconUrl size/extension limits
  • No top-level return in main.js
  • getConfig keys correspond to declared configItems

Browser extensions are different

The community market carries only JS/CSS modules. MV3 browser extensions are not a community catalog — the Browser Extensions tab searches the Chrome Web Store live instead. See Chrome MV3 Extensions.

Mirrors

Catalog files and module icons route through a global mirror first, with raw.githubusercontent.com and jsDelivr as automatic fallbacks, so the store loads fast everywhere (including mainland China). The default client cache is one hour, so merged modules propagate without an app update.