Skip to main content

Wework Plugin Icon Guide (wework-plugins)

For maintainers of wework-plugins (and internal plugin repos): how to ship logo / logoDark so icons stay readable in light and dark UI.

The Wework client only applies generic behavior: theme-based selection, a light/dark icon-slot pad, and a neutral default when no logo exists. Brand artwork must live in the plugin package. Do not rely on the client guessing icons by plugin name.

1. What to change​

Per plugin directory (for example plugins/dingtalk/):

plugins/<slug>/
├── .codex-plugin/
│ └── plugin.json # interface.logo / logoDark / composerIcon
└── assets/
├── app-icon.svg # or logo.png: light / shared artwork
└── app-icon-dark.svg # optional: dark-theme artwork

Declare paths in .codex-plugin/plugin.json under interface (relative to the plugin root):

{
"name": "dingtalk",
"version": "1.0.0",
"description": "…",
"interface": {
"displayName": "DingTalk",
"shortDescription": "…",
"logo": "./assets/app-icon.svg",
"composerIcon": "./assets/app-icon.svg",
"logoDark": "./assets/app-icon-dark.svg"
}
}
FieldRequiredRole
logoStrongly recommendedPrimary mark for marketplace, installed list, detail (preferred in light theme)
composerIconOptionalCompact composer icon; falls back to logo
logoDarkWhen neededPreferred in dark theme; otherwise dark falls back to logo / composerIcon

Supported relative asset types: .png / .jpg / .jpeg / .svg / .webp.

2. When logoDark is required​

CaseNeed logoDark?
Color brand mark that reads on both light and dark padsOptional; reuse the same file for logo (and composerIcon)
Near-black / dark mono mark (classic GitHub Octocat style)Required: ship a light-on-dark variant as logoDark
White stroke / light mark on transparencyCheck light theme: if it washes out, put the dark variant in logo, and add a light logoDark for dark UI if needed
No logo at allWework shows a neutral default; official plugins should add logo before publish

Rule of thumb: open marketplace cards, the Slash / menu, and composer plugin previews in both light and dark Wework themes. If either theme fails, fix the package assets—not the client.

3. Steps in wework-plugins​

  1. Add the light (or shared) icon under plugins/<slug>/assets/.
  2. If dark theme contrast is poor, add a dark-specific file (prefer *-dark.svg / logo-dark.png).
  3. Update interface.logo, composerIcon, and logoDark in plugin.json (paths starting with ./assets/).
  4. Bump the plugin SemVer version.
  5. If the slug is already published to the Wegent marketplace, republish / re-seed with the existing official flow (see Plugin Marketplace Developer Guide), then update or reinstall on a device to verify.

Public seed slugs stay in sync with Wegent backend/scripts/seed_wework_public_plugins.py. Internal plugins use your workspace publish path (for example publish_official_plugin.py --visibility workspace).

4. How the client resolves icons​

The desktop task composer shows the plugin picker only before a new task starts. An existing task or conversation messages hide both the entry and any open picker menu. Returning to a new task restores the entry. Starting a new task from the plugin page opens the blank task composer with the plugin picker available.

Dark theme order: logoDark → logo → composerIcon.
Light theme: logo → composerIcon.
None: neutral default icon.

In dark Composer surfaces, a soft translucent light pad is applied only when the package has no usable logoDark and the UI falls back to the light logo / composerIcon. Packages with logoDark, and the neutral default icon, get no pad. Package logo / logoDark remain the brand source of truth.

5. Checklist​

  • A readable primary icon exists under assets/.
  • interface.logo points at it (set composerIcon too when practical).
  • logoDark and its file are added when dark contrast is insufficient.
  • Paths are package-relative and included in Git / the release ZIP.
  • version is bumped and publish or dry-run is done.
  • Verified in Wework light + dark: marketplace, installed list, Slash menu, composer preview.

6. OpenAI upstream mirrors (including GitHub)​

Wegent syncs OpenAI official packages as a passthrough — it does not rewrite logo / logoDark, connectors, or copy. Dark icons for plugins such as GitHub only appear when the official package ships logoDark. Reinstalling installs whatever the official package currently contains.

7. Out of scope​

  • Do not add brand-specific dark SVGs inside the Wegent / Wework repo.
  • Do not rely on client light pads to replace a missing logoDark.
  • Do not invent composerIconDark; use logoDark for dark brand artwork.