[feature]: Configurable instance branding for self-hosted (name, logo, support links)
Nobody has claimed this yet.
- Dominant language
- TypeScript
- Stars
- 59.6k
- Forks
- 5.8k
- Avg merge
- 1d 22h
- Merged PRs (30d)
- 49
Description
Is there an existing issue for this?
- I have searched the existing issues
Summary
Self-hosted operators need runtime instance branding (name, logo, favicon, support email, website) without rebuilding frontend images. Config should live on the instance (God Mode + optional Docker env seed), expose via GET /api/instances/, and drive login/sidebar/emails. Empty values keep Plane defaults. Prefer HIDE_PLANE_MARKETING=0/1 over an inverted isBranding flag.
Why should this be worked on?
Many self-hosters white-label Plane for internal teams. Today instance_name exists, but logos and support links are hardcoded (PlaneLogo, plane.so, email header assets). Build-time VITE_* is a poor fit for Docker operators who expect .env + restart. Runtime InstanceConfiguration (same pattern as ENABLE_SIGNUP) fixes chrome without rewriting LICENSE, package names, or test fixtures.
Proposed approach
- Seed keys:
BRAND_LOGO_URL,BRAND_LOGO_DARK_URL,BRAND_FAVICON_URL,BRAND_SUPPORT_EMAIL,BRAND_WEBSITE_URL,HIDE_PLANE_MARKETING - Expose on public instance GET config
- God Mode general form editors
- Shared
BrandMark(custom img or PlaneLogo) - Email templates receive
brand_name/brand_logo_url - Optional hide of Plane marketing / powered-by / upsell CTAs
- i18n:
{{brand}}placeholders (not wholesale locale rewrites)
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with the existing runtime InstanceConfiguration pattern and the GET /api/instances/ endpoint. Trace the God Mode general form, shared BrandMark, email templates, and i18n usage described in the proposal. Done means the listed branding values can be configured at runtime, empty values retain Plane defaults, and the optional marketing visibility setting is respected across the named surfaces.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- docker, python, typescript
- Domain
- api, backend, devops, frontend
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100