Milady is a whitelabel wrapper over elizaOS (@elizaos/*). Product identity is
driven by apps/app/app.config.ts (appName, appId ai.milady.app,
urlScheme milady, web.iconBackgroundColor, branding). The brand accent is
classic-gold #f0b90b (see @elizaos/ui styles/brand-gold.css).
One command rebuilds every app icon + splash (web, Android, iOS, desktop) from a single source mark over the brand palette:
python3 apps/app/scripts/generate-brand-assets.py # needs Pillow- Source mark:
apps/homepage/public/milady-icon.png(override withBRAND_MARK). - Palette:
BRAND_BG/BRAND_INKenv (defaults: gold#f0b90b, ink#0a0a0c). - Tracked masters it emits, consumed by the build:
apps/app/public/brand/app-icon.png— dark mark;run-mobile-build.mjsflattens it ontoweb.iconBackgroundColorfor iOS/Android launcher icons.apps/app/public/launch-bg.png— gold splash master (mobile launch screens).apps/app/public/brand/desktop/appIcon.{png,ico,icns,iconset}— desktop icon master;scripts/sync-desktop-brand-assets.mjscopies it into the Electrobun build beforedesktop-build.mjs(wired intobuild:desktop,dev:desktop, and therelease-electrobunbuild jobs).
To rebrand a fork: change app.config.ts, point BRAND_MARK at a new mark, set
BRAND_BG/BRAND_INK, and re-run the generator.
- Icons/splashes — all native + desktop icons and splashes render the Milady mark on gold (was the elizaOS orange face / "Eliza" mascot / blue placeholder).
- Theme —
brand-gold.cssaccent + first-run tokens are gold (no orange). - Home screen —
MiladyHomeScreen(apps/app/src/) overrides the stock home via thehomeScreenboot-config slot: the elizaOS layout, gold, with a wallet widget beside the clock (live portfolio + address → taps to the wallet view). - Names — first-screen wordmarks (StartupShell, CompactOnboarding,
ChatSurface, en.json) resolve from
branding.appName({{appName}}), so any fork rebrands by settingapp.config.ts. "Eliza Cloud" / "Eliza-1" are kept (real external service / model names). - Release artifacts —
release-electrobunproducesMilady-Setup-*.exe+ Milady bundle id / updater archives;android-releaseshipsMilady-*.aabto Playai.milady.app;apple-store-releaseshipsMilady-*-mas.pkg.
The generic whitelabel seams (host-overridable homeScreen + brandMark
boot-config slots, clockAccessory on HomeScreen, gold first-run tokens, the
{{appName}} naming seam, the config-driven app-icon background) are merged to
elizaos/eliza develop, not carried as a milady patch. Milady CI releases
clone upstream develop, so they ship automatically — no apply-eliza-ci-patches
step required. docs/whitelabel/eliza-whitelabel.patch remains as a reference
snapshot only.
The milady side then just injects its brand into those slots from
apps/app/src/main.tsx: homeScreen: MiladyHomeScreen, brandMark: MiladyMark,
branding.appName: "Milady", web.iconBackgroundColor: "#f0b90b".
Milady builds against the local eliza/ clone (via Vite aliases) but its pinned
npm @elizaos/* is alpha.537, which lags develop. Symbols newer than alpha.537
(e.g. @elizaos/ui/App after the app-shell refactor, the home/brand slots) are
declared in apps/app/src/elizaos-app-core-shim.d.ts so packages-mode typecheck
stays green; the real implementations come from the clone at build time. Drop the
matching shim entries once milady bumps @elizaos/* to a build that includes them.
- iOS bundle id unified to
ai.milady.appeverywhere (app.config → run-mobile-build derives the iOS bundle, app group, extension ids, fastlane id, and android package). Confirm no live App Store / Play listing used the old id. - iOS IPA internal filename is still
Eliza.ipa(the eliza Fastfileoutput_name); the release workflow now collectsbuild/*.ipaso any name is uploaded, but rename the Fastfile output for full polish. - Broader
en.jsonlong-tail (non-first-screen "elizaOS"/"Eliza" strings). - Verify the release pipeline end-to-end on CI (desktop/mobile/store builds were not runnable locally).