Files
letro-ios/FORK_DIVERGENCE.md
2026-04-22 17:23:16 +03:30

7.9 KiB
Raw Blame History

FORK_DIVERGENCE

This document tracks the functional and behavioral differences between this forked repository and its upstream baseline. Each entry represents a deliberate divergence introduced to meet the specific needs of this fork.


D-0002: Letro colour palette, gradient buttons, URL corrections, and live-location permission

  • Upstream baseline commit: e0ca2acc43649d4c80194d84d2179a7a9310d7eb
  • Fork commit (merge): bbdee132f18c9bfe90f448aa1f3956ddd79df39b (PR #4 — p-num/letroMain)
  • Type: Behavioral
  • Date: 2026-04-16

Description

Follow-up polish to the D-0001 rebrand: expands Letro's colour tokens and applies them more broadly, replaces flat primary buttons with a gradient, corrects remaining element.io/matrix.org URLs to letro.com, adds the background-location usage description required for live-location sharing, and refines localisation strings.

Upstream vs. Fork Behavior

Area Upstream (Element X) Fork (Letro)
Primary button background Flat fill using bgActionPrimaryRest token Linear gradient (letroGradient1 → letroGradient5) via custom makePrimaryBackground in CompoundButtonStyle
Compound colour overrides Not overridden Extended: gradientAction stops, bgActionPrimaryRest/Pressed/Disabled, textActionPrimary all mapped to Letro gradient palette
letroPrimary colour #C20000 (D-0001) #F32D1B; letroSecondary (#F9BC15) and five gradient steps (#CB2000#F7B000) added
App URLs Leftover element.io/matrix.org references elementWebHosts, accountProvisioningHost, pushGatewayBaseURL, analyticsTermsURL, bugReportApplicationID corrected to letro.com/letro
App Store link Element Pro app Letro Pro app (id6758909629)
Live-location permission NSLocationWhenInUseUsageDescription only NSLocationAlwaysAndWhenInUseUsageDescription added for background live-location

Files Modified

  • ElementX/Sources/Application/Settings/AppSettings.swift
  • ElementX/Sources/Letro/Extensions/CompoundExtensions.swift
  • ElementX/Sources/Letro/Extensions/SwiftUIExtensions.swift
  • ElementX/SupportingFiles/Info.plist
  • ElementX/SupportingFiles/target.yml
  • ElementX/Resources/Localizations/en.lproj/Letro.strings
  • ElementX/Resources/Localizations/en.lproj/Letro.stringsdict
  • compound-ios/Sources/Compound/BaseStyles/CompoundButtonStyle.swift

Impact & Risk

  • Impact: Visual impact on all primary action buttons and gradient surfaces. URL changes affect bug reporting, analytics, web-link handling, and push gateway routing. Background-location permission is required for live-location feature to work correctly on iOS.
  • Risk Level: MEDIUM. Colour and URL changes are self-contained; gradient button logic modifies a shared Compound component and must be retested on iOS 26.

AGPL Relevance

Not Applicable


D-0001: Letro rebranding — identity, UI, configuration, and behaviour customisations

  • Upstream baseline commit: 0fc0e68346f90488e4af21fd5528b2e978aa3247
  • Fork commit (merge): e0ca2acc43649d4c80194d84d2179a7a9310d7eb (PR #1 — p-num/letroMain)
  • Type: Behavioral
  • Date: 2026-04-10

Description

A comprehensive rebrand and product customisation of Element X iOS into "Letro". The changes span the app's identity (name, bundle ID, icons), its visual design (colours, shapes, custom assets), several screens (authentication, home, spaces, settings), and supporting infrastructure (string-override mechanism, SwiftGen template, entitlements).

Upstream vs. Fork Behavior

Area Upstream (Element X) Fork (Letro)
App identity Bundle ID io.element.elementx, display name "Element X", dev team 7J4U792NQT Bundle ID com.letro.cloudclient, display name "Letro", dev team 44TCX5L4G2
Default Matrix server matrix.org ess.postnumber.com
Colour theme System (light/dark) Forced light theme; Compound gradient/accent tokens overridden with orange palette
Avatar shape Circular throughout Rounded rectangle throughout
Authentication screen Element-branded scrollable layout with logo and sign-in buttons Custom background image, logo type, "Get Started" → bottom-sheet flow showing sign-in buttons; hardcoded non-localised promo text
String localisation Standard Localizable.strings lookup Additional Letro.strings/Letro.stringsdict override table checked first, allowing any string to be shadowed without editing upstream files
Icons (tab bar / new button) Compound icon set Custom SVGs (letro-icon-chat, letro-icon-space, letro-icon-new); CompoundIcon patched with static override registry
Tab bar label colours Default Compound accent Custom letroGray (normal) / letroPrimary red (selected)
Settings screen Shows "Report a problem" and "Analytics" rows Both rows commented out / hidden
Onboarding analytics prompt Shown when analytics consent is pending Always skipped (requiresAnalyticsSetup hardcoded to false)
New-chat / new-space toolbar button CompoundIcon(\.plus) with .super style Custom letro-icon-new image; iOS 26 sharedBackgroundVisibility hidden
App URLs All point to element.io All point to letro.com (website, copyright, privacy, OIDC redirect, etc.)
Push (NSE) entitlement Present Temporarily removed to allow TestFlight submission
App version 26.04.1 / build 1 1.0.3 / build 3

Files Modified

  • app.yml
  • project.yml
  • ElementX/SupportingFiles/target.yml
  • ElementX/SupportingFiles/ElementX.entitlements
  • NSE/SupportingFiles/NSE.entitlements
  • ElementX/Sources/Application/Application.swift
  • ElementX/Sources/Application/Navigation/NavigationTabCoordinator.swift
  • ElementX/Sources/Application/Settings/AppSettings.swift
  • ElementX/Sources/FlowCoordinators/OnboardingFlowCoordinator.swift
  • ElementX/Sources/Generated/Assets.swift
  • ElementX/Sources/Generated/Strings.swift
  • ElementX/Sources/Letro/Extensions/CompoundExtensions.swift (new)
  • ElementX/Sources/Letro/Extensions/SwiftUIExtensions.swift (new)
  • ElementX/Sources/Other/Avatars.swift
  • ElementX/Sources/Other/SwiftUI/Views/RoomAvatarImage.swift
  • ElementX/Sources/Other/SwiftUI/Views/TombstonedAvatarImage.swift
  • ElementX/Sources/Screens/Authentication/StartScreen/View/AuthenticationStartScreen.swift
  • ElementX/Sources/Screens/HomeScreen/View/Filters/RoomListFilterView.swift
  • ElementX/Sources/Screens/HomeScreen/View/HomeScreen.swift
  • ElementX/Sources/Screens/RoomDetailsEditScreen/View/RoomDetailsEditScreen.swift
  • ElementX/Sources/Screens/Settings/SettingsScreen/View/SettingsScreen.swift
  • ElementX/Sources/Screens/Spaces/SpacesScreen/View/SpacesScreen.swift
  • ElementX/Resources/Localizations/en.lproj/Letro.strings (new)
  • ElementX/Resources/Localizations/en.lproj/Letro.stringsdict (new)
  • ElementX/Resources/AppIcon.icon/ (icon assets replaced)
  • ElementX/Resources/Assets.xcassets/images/ (new Letro image assets)
  • compound-ios/Sources/Compound/Icons/CompoundIcon.swift
  • Tools/SwiftGen/Templates/Strings/structured-swift5-element.stencil
  • ElementX.xcodeproj/project.pbxproj
  • ElementX.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved
  • ElementX.xcodeproj/xcshareddata/xcschemes/*.xcscheme (scheme renames/updates)

Impact & Risk

  • Impact: Touches app identity, all major screens, the global colour/icon system, the string localisation pipeline, onboarding flow, and build configuration. Any upstream merge must re-apply or carefully reconcile every change. New image assets and the Letro.strings override table must be maintained alongside upstream string additions.
  • Risk Level: HIGH. The breadth of changes (authentication screen, string layer, Compound overrides, entitlements) means upstream updates carry a significant merge-conflict and regression risk.

AGPL Relevance

Not Applicable