thunderbird / thunderbird/thunderbird-android

Remote Feature Flags

Open
#11,196 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Kotlin
Stars
14k
Forks
2.8k
Avg merge
3d 3h
Merged PRs (30d)
57

Description

🎯 The objective

The aim of this project is to support safer, more maintainable, and remotely adjustable feature delivery by replacing duplicated per-app and per-build feature flag factories with a declarative feature flag catalogue, then extending that foundation to support remote feature flag updates. Success will be measured by shipping catalogue-backed feature flag resolution that preserves the existing feature flag API and debug override behaviour, removes duplicated factory definitions, validates known flag keys and overrides, and provides privacy-preserving remote updates with clear fallback behaviour.

🎒 Resources

🦮 Rules of the Road

🟢 In Scope
  • Introduce one declarative feature flag catalogue shared by Thunderbird for Android and K-9 Mail.
  • Define per-app and per-build type default overrides in the catalogue.
  • Replace duplicated FeatureFlagFactory definitions with catalogue-backed resolution.
  • Preserve the existing FeatureFlagProvider / FeatureFlagResult app-facing API.
  • Preserve the current debug settings UI and local debug override precedence.
  • Add schema validation and/or generated typed key validation so catalogue entries and overrides cannot drift silently.
  • Define and implement remote feature flag updates.
  • Define privacy, security, hosting, integrity, staleness, and fallback requirements for remote updates.
🔴 Out of Scope
  • Multivariate feature flags, unless explicitly accepted by a later RFC.
  • Managed feature flag vendors, unless explicitly accepted after privacy and security review.
  • Experiments or rollout targeting beyond the scope accepted in the remote updates RFC.
  • Changes to feature flag consumer call sites beyond what is required for migration.
  • Any telemetry, analytics, ads, tracking, or logging of PII, credentials, message content, email addresses, or raw rollout identifiers.
🚧 Technical and/or Business Requirements
  • Feature flag resolution must preserve local debug overrides as the highest-precedence source.
  • The expected remote-capable precedence is: local debug overrides, accepted remote overrides/defaults, bundled app/build-type overrides, bundled defaults, then unavailable for unknown keys.
  • Unknown or invalid override keys must be caught by validation or generation.
  • Supported app and build type values must be validated.
  • Defaults must remain explicit and reviewable for both Thunderbird and K-9 Mail.
  • Remote catalogues must be integrity-protected and must fall back to bundled defaults when unavailable, invalid, unsigned, expired, or malformed.
  • Any rollout identifier or evaluation context must be reviewed for privacy impact before use.
  • The implementation must not send user-identifying data, message data, credentials, or email addresses to a remote feature flag service.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by reviewing the existing FeatureFlagFactory, FeatureFlagProvider, and FeatureFlagResult APIs against the in-scope requirements. The work is done when catalogue-backed resolution preserves debug override behavior, validates keys and app/build types, and remote updates have privacy, integrity, expiry, and bundled-fallback behavior defined and implemented.

Written by the indexing model from the issue text.

Assessment

Tech stack
android, kotlin
Domain
mobile-dev, security
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.