Skip to content
CAI
Software that uses CAICheck a score

wikimedia/wikipedia-ios

39.8

Weak · 30 September 2026

154.4k

lines of production code

Swift

with Objective-C

2

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

This system is the iOS client for Wikipedia, providing a comprehensive platform for reading, editing, and interacting with Wikimedia content. It features a modernized SwiftUI-based interface with personalized home feeds, semantic search capabilities, and integrated daily games like 'Which Came First.' The application also supports user engagement through activity tracking, reading lists, talk page discussions, and a native donation system, all backed by robust local caching and remote notification management.

How it got here

2013–2021 — iOS widget and notification expansion

56 changes.

The project significantly expanded its iOS presence by introducing a comprehensive suite of home screen and lock screen widgets, alongside a robust new remote notifications framework with enriched push support. This period also focused on modernizing the development infrastructure through Swift 6.2 adoption, automated build and distribution pipelines, and extensive Core Data model migrations to support these new features.

2023–2024 — WMFData architecture and SwiftUI migration

57 changes.

This period focused on restructuring the data layer through the introduction of the WMFData module, which centralized networking, Core Data storage, and feature-specific controllers for donations, watchlists, and experiments. Simultaneously, the UI layer underwent a significant migration to SwiftUI, establishing a new design system with standardized components, theming, and shared utilities across the application.

2025–2026 — Home feed and SwiftUI migration

87 changes.

This period focused on launching a new personalized Home feed experience with customizable modules and migrating key screens like History, Settings, and Search to SwiftUI. It also introduced significant new features including the 'Which Came First' daily game, semantic search capabilities, and temporary account support, while establishing a robust analytics instrumentation framework.

Features

Activity Tab: New customizable modules and timeline view

The Activity Tab now features a new UI with customizable modules, including Time Spent Reading, Reading Insights, Editing Insights, and a Timeline of Behavior. Users can toggle these modules on or off via a new customization view. The tab displays reading statistics, top categories, saved articles, and a timeline of recent activity (reads, edits, saves). It also includes a 'Your Impact' section showing total edits, best streak, thanks received, and recent activity. A 'Year in Review' card is displayed at the top for logged-in users or pinned at the bottom for logged-out users. The tab supports both logged-in and logged-out states, with appropriate empty states and login prompts.

WMFComponents/Sources/WMFComponents/Components/Activity Tab · high confidence

Add Community feed module settings screen

Users can now customize which modules appear in their Community home feed. A new settings interface allows toggling Featured article, Top read, In the news, On this day, and Picture of the day modules on or off, with changes immediately reflected in the feed.

WMFComponents/Sources/WMFComponents/Components/Settings/Home/Community · high confidence

Add FLAnimatedImage library to WMF framework

The WMF framework now includes the FLAnimatedImage library, providing the FLAnimatedImage and FLAnimatedImageView classes. This enables the application to display high-performance animated GIFs with intelligent frame caching and memory management.

WMF Framework/Third Party/FLAnimatedImage, Wikipedia/Third Party Code/NYTPhotoViewer · high confidence

Add MediaWiki icon support to project icon view

The WMFProjectIconView component now renders a specific icon for the MediaWiki project. Previously, the view handled Wikipedia (text-based), Wikidata, and Commons; this change adds a case for .mediawiki that displays the 'project-mediawiki' asset, ensuring consistent visual representation for MediaWiki projects in the UI.

WMFComponents/Sources/WMFComponents/Components/Shared/Project Icons · high confidence

Add Picture of the day widget

A new 'Picture of the day' widget is introduced, implemented as a WidgetKit extension. The addition includes the necessary Info.plist and entitlements files, configuring the extension to use the WidgetKit framework and granting access to the app's shared application group for data sharing.

Widgets · high confidence

Add Wikipedia Stickers extension for iOS 13+ arm64 devices

The Wikipedia Stickers app extension has been added, enabling users to send Wikipedia-themed stickers via iMessage. The extension is configured as an XPC service targeting iOS 13 and later, restricted to arm64 devices, and utilizes the standard message payload provider extension point.

Wikipedia Stickers · high confidence

Add Year in Review settings toggle

Users can now enable or disable the Year in Review feature via a new toggle in the app's Settings. This change introduces the \WMFYearInReviewSettingsView\ and its associated view model, which display a dedicated section with a switch to control the feature's active state and persist the user's preference.

WMFComponents/Sources/WMFComponents/Components/Settings/Year In Review · high confidence

Add article sync settings to WMFComponents

The Storage and Syncing settings view now includes controls for managing article synchronization. Users can toggle whether saved articles are synced and choose whether to display saved reading lists, with a dedicated button available to trigger an immediate sync with the server.

WMFComponents/Sources/WMFComponents/Components/Settings/Storage and Syncing · high confidence

Add choose editor sheet component

A new sheet component allows users to select between visual and source editing modes when starting an edit. The interface presents an options card for mode selection, a 'Don't show this again' checkbox to suppress future prompts, and a Continue button that passes the chosen mode and preference back to the caller.

WMFComponents/Sources/WMFComponents/Components/Editors/Choose Editor · high confidence

Add donation reminder setup screen

Users can now configure donation reminders via a new setup screen that allows selecting trigger conditions (based on articles read) and donation amounts (preset or custom). The interface includes a toggle to enable/disable reminders, validates minimum and maximum donation amounts, and adapts its layout and theme to the app's current settings. The screen is accessible from banners, settings, and 'not now' toasts, with specific behaviors for each entry point.

WMFComponents/Sources/WMFComponents/Components/Donation Reminder · high confidence

Add dynamic text rendering component for article bottom module

A new \TextViewWrapper\ SwiftUI view has been introduced in the Article Tabs BottomModule to render HTML content with dynamic height adjustment. This component supports theme-aware styling (including bold, italic, and link colors) and enforces a maximum font point size of 21 to ensure consistent display across different accessibility settings.

WMFComponents/Sources/WMFComponents/Components/Article Tabs/BottomModule · high confidence

Add generic slideshow component

Introduces a new reusable slideshow component (\WMFSlideshowView\) that displays a titled, horizontally paged carousel of illustrated cards. The component supports primary and secondary action buttons, page-dot indicators, and a close button. It adapts its layout for accessibility by switching from a horizontal carousel to a vertically stacked scroll view when dynamic type sizes are large. The implementation includes a view model for managing slide data and state, a dedicated view controller for navigation bar configuration, and individual slide views that handle images, assets, and GIFs.

WMFComponents/Sources/WMFComponents/Components/Shared/Slideshow · high confidence

Add instrumentation SDK with funnel tracking and custom database support

The WMFTestKitchen SDK now includes an instrumentation layer that allows tracking user interactions with support for funnels. Users can start and stop funnels to measure duration and sequence, and the \submitInteraction\ method now accepts a custom \mediawikiDatabase\ parameter to specify the database context for events, in addition to supporting \pageData\ and \experimentData\.

WMFTestKitchen/Sources/WMFTestKitchen/Instrument · high confidence

Add semantic search entry point component

A new SwiftUI view and view model have been added to present a semantic search entry point above search suggestions. This component displays the user's query, an explanatory description, and a 'Try it now' call to action (visible until first use). It includes interactive controls for showing information about the feature and hiding the entry point, with all touch targets sized to a 44-point minimum for accessibility.

WMFComponents/Sources/WMFComponents/Components/Search/EntryPoint · high confidence

Add settings screen for managing 'For You' feed modules

Users can now configure which content modules appear in their personalized 'For You' feed via a new settings interface. This screen provides toggles to enable or disable three specific modules: 'Based on your interests' (articles tailored to chosen topics), 'Because you read' (suggestions based on recent history), and 'Continue reading' (resuming unfinished articles). Turning off a module hides it from the feed, and these preferences can be adjusted at any time through this dedicated view.

WMFComponents/Sources/WMFComponents/Components/Settings/Home/For You · high confidence

Add shared error view component

A new reusable error view component (WMFErrorView) and its associated view model (WMFErrorViewModel) have been added to the shared components library. The view displays a customizable image, title, subtitle, and a primary action button, utilizing the current app theme for background and text colors. The view model is now equatable, enabling efficient diffing in SwiftUI environments.

WMFComponents/Sources/WMFComponents/Components/Shared/Error View · high confidence

Add viewed article population options to database population tool

The Database Population tool now includes a new "Viewed Articles" section, allowing users to configure the number of viewed articles to add and whether to randomize them across languages. A date range picker has been added to filter these articles by time period (Past Year, Month, Week, or 3 Days), enabling more granular control over the simulated reading history during database population.

Wikipedia/Code/Database Population · high confidence

Added "Open in Safari" share sheet activity

The app now includes a built-in UIActivity subclass that allows users to open current content URLs directly in the Safari browser via the system share sheet. This change introduces the TUSafariActivity component along with localized strings for the "Open in Safari" action in multiple languages (including Catalan, Czech, German, English, Spanish, Basque, Finnish, French, Italian, Japanese, Korean, Dutch, Norwegian, Polish, Portuguese, Russian, Slovak, and Chinese), ensuring the option is available and correctly labeled for international users.

Wikipedia/Third Party Code/TUSafariActivity · high confidence

Added Belarusian localization for the Continue Reading widget

The Continue Reading widget now supports the Belarusian language. Users with their device language set to Belarusian will see the widget's display name and bundle name localized as "Wikipedia continue reading" instead of the default English text.

ContinueReadingWidget/be.lproj · high confidence

Added Claude skills for crash forensics and UI test debugging

New \.claude/skills\ files have been added to guide the AI assistant in investigating iOS crashes and debugging UI tests. The \crash-forensics\ skill provides a structured workflow for analyzing crash reports (including symbolication strategies and regression dating) to produce root-cause diagnoses and reproduction steps. The \ui-test-debugger\ and \ui-test-writer\ skills, along with their Swift templates, establish a 'Robots pattern' for writing and diagnosing \WikipediaUITests\, emphasizing fixture-backed testing, visible touch recording, and evidence-based fixes for intermittent failures.

.claude · high confidence

Added Did You Know data model

Introduced the WMFDidYouKnow struct to represent 'Did You Know' content, providing a Codable model with html and text fields for parsing this data type within the application.

WMFData/Sources/WMFData/Models/Did You Know · high confidence

Added EXTScope and metamacros third-party utilities

The WMF Framework now includes the EXTScope and metamacros headers and implementation files from the extobjc library. This adds support for scope-based cleanup via the @onExit macro and safe block variable referencing with @weakify/@strongify, along with a suite of C preprocessor metaprogramming macros for argument handling and iteration.

WMF Framework/Third Party · high confidence

Added Mantle third-party framework to WMF

The WMF framework now includes the Mantle library (along with its extobjc dependencies), enabling model serialization to and from JSON dictionaries and supporting NSCoding for archiving and unarchiving model instances. This adds the capability to map object properties to JSON keys and handle value transformations automatically.

WMF Framework/Third Party/Mantle · high confidence

Added data controller and models for fetching global user information

Introduced a new \WMFGlobalUserInfoDataController\ actor and associated \GlobalUserInfo\/\GlobalUserInfoResponse\ models to retrieve global user data (such as edit count, ID, and registration date) from the MediaWiki API. This change adds the specific data-fetching logic and data structures required for this feature, contributing to the broader capability of accessing global user profiles.

WMFData/Sources/WMFData/Data Controllers/GlobalUserInfo, WMFData/Sources/WMFData/Models/GlobalUserInfo · high confidence

Centralized accessibility identifiers and new utility components for UI testing and card rendering

This change introduces a centralized \AccessibilityIdentifiers\ enum in WMFComponents, providing stable, shared identifiers for articles, search, onboarding, interests, and other UI elements to ensure consistency between app code and UI tests. It also adds several new utility modules: \HTMLUtils\ for robust HTML-to-NSAttributedString conversion with support for custom tags and line break modes; \WMFCardGridColumns\ to calculate responsive grid column counts for interests and article tabs; \WMFContrast\ to enforce WCAG AA contrast ratios for text over card backgrounds; \WMFFaceDetectionCache\ to cache Vision framework face detection results for image cropping; and \WMFImageColorSampler\ to extract readable background colors from images for card styling.

WMFComponents/Sources/WMFComponents/Utility · high confidence

Consolidated command-line utility for updating language configurations

A new command-line tool has been added to centralize the generation of prebuilt language lists, lookup tables, and namespace/magic word data for the app. This utility fetches site metadata from the Wikimedia sitematrix API and per-language site info, then writes consolidated JSON files (including \wikipedia-languages.json\, namespace definitions, and magic word lists) to the project. It also introduces support for 'Test' and 'Test 2' languages, corrects the labeling of Alemannisch (using ISO code 'gsw' instead of 'als'), and handles specific workarounds for Norwegian and duplicate language entries.

Command Line Tools/Update Languages · high confidence

Expanded mock data layer for testing article tabs, feeds, and developer settings

The WMFDataMocks module now includes comprehensive mock implementations for several data controllers and services, enabling more robust testing of app features. New mocks cover article tab management (WMFMockArticleTabsDataController), feed fetching (WMFMockFeedDataController), and developer settings toggles (WMFMockDeveloperSettingsDataController). Additionally, the module adds mocks for growth tasks (WMFMockGrowthTasksService), watchlist operations (WMFMockWatchlistMediaWikiService), and key-value storage (WMFMockKeyValueStore), alongside service-level mocks for handling network responses, including success, server errors, and no-internet scenarios.

WMFData/Sources/WMFDataMocks · high confidence

Image recommendations onboarding and feedback tracking

The Image Recommendations feature now tracks whether users have seen the onboarding modal and tooltips, persisting this state in user defaults. Additionally, users can now submit feedback on recommended images (accepting or rejecting them with reasons and captions) via a new PUT API endpoint, allowing the system to learn from user interactions.

WMFData/Sources/WMFData/Data Controllers/Image Recommendations · high confidence

Initial implementation of the WMFTestKitchen analytics client

The WMFTestKitchen source directory now contains the core logic for an analytics instrumentation client. This includes the \TestKitchenClient\ which handles event submission and configuration, a \ContextController\ that enriches events with specific agent, MediaWiki, and performer data based on stream configuration, and supporting protocols like \ClientDataCallback\ and \EventSender\. An error logging extension is also added to standardize error descriptions.

WMFTestKitchen/Sources/WMFTestKitchen · high confidence

Introduce Activity Tab data controller with customizable insights and timeline toggles

The new WMFActivityTabDataController provides the backend logic for the Activity Tab, introducing granular user controls to toggle Time Spent Reading, Reading Insights, Editing Insights, and the Timeline of Behavior. It calculates reading statistics (minutes/hours over the past 7 days, articles read in the last 30 days, and weekly reads for the current month) and manages onboarding and survey visibility states via user defaults.

WMFData/Sources/WMFData/Data Controllers/Activity Tab · high confidence

Introduce Continue Reading widget

Adds a new Today View widget that displays the most recently read article, including its title, subtitle, and a relative date label (e.g., 'days ago'). The widget supports theming, handles empty states with localized messages, and opens the corresponding article in the app when tapped.

ContinueReadingWidget · high confidence

Introduce Continue Reading widget with localized branding and empty-state UI

The Continue Reading widget now displays a localized bundle name ("Wikipedia continue reading") and features a dedicated storyboard layout that includes an article image, headline, subhead, and a "days ago" timestamp. It also provides a visible empty state with localized text ("No recently read articles" and "Explore Wikipedia for more articles to read") when no data is available, ensuring the interface remains informative rather than blank.

ContinueReadingWidget/Base.lproj · high confidence

Introduce Event Platform Client for analytics event collection

The app now uses the Event Platform Client (EPC) to collect and send analytics events. This new framework includes a persistent storage layer (Core Data) to buffer events locally, a sampling controller to determine which events are included in analytics streams, and a worker to periodically post buffered events to the remote intake service. It defines specific streams (e.g., login, navigation, edit attempt) and corresponding schema versions, replacing the previous event logging mechanism.

WMF Framework/Event Platform · high confidence

Introduce Event data model for WMFTestKitchen

The WMFTestKitchen SDK now includes an \Event\ class that structures telemetry data for encoding. This model aggregates metadata (stream, schema, timestamp), instrument details (name, funnel info), and interaction specifics (action, element, page, experiment data) into a single encodable object, enabling the capture and serialization of user interaction events within the test kitchen environment.

WMFTestKitchen/Sources/WMFTestKitchen/Event · high confidence

Introduce Home feed data controllers and experiment assignment

The Home tab now uses dedicated data controllers to manage feed content and user preferences. WMFFeedDataController fetches the daily featured article from the Wikimedia REST API, while WMFHomeDataController handles A/B experiment assignment (control vs. group B) for the home feed, persists user settings such as the selected language and "see first" content preference, and manages community module visibility toggles. WMFPageInterestDataController tracks user page interests via Core Data, enabling the system to fetch personalized "For You" content based on reading history.

WMFData/Sources/WMFData/Data Controllers/Home · high confidence

Introduce Image Recommendations component in Suggested Edits

Adds a new Image Recommendations feature to the Suggested Edits section, allowing users to browse and insert suggested images into articles. The implementation includes a SwiftUI-based main view for displaying article summaries and an empty state, a UIKit bottom-sheet for reviewing individual image recommendations with Yes/No/Skip actions, and an integrated survey for collecting rejection feedback. The component also features a multi-step onboarding flow and contextual tooltips to guide users through the new workflow.

WMFComponents/Sources/WMFComponents/Components/Suggested Edits · high confidence

Introduce NotificationServiceExtension for enriched push notifications

A new NotificationServiceExtension has been added to the app, enabling the system to fetch and display richer notification content before it appears in the notification center. The extension communicates with the RemoteNotificationsAPIController to retrieve unread notifications, using a shared cache to persist state across app launches. It enhances user experience by assigning specific interruption levels and relevance scores (available on iOS 15+) to individual notifications, bundling multiple mentions on the same talk page into a single high-priority notification, and providing localized fallback text if content retrieval fails or times out.

NotificationServiceExtension · high confidence

Introduce SchemeHandler for custom URL scheme support in WKWebView

The app now includes a new SchemeHandler component (RemoteSubHandler, DefaultHandler, and SchemeHandler) that enables handling of custom URL schemes within WKWebView. This implementation manages network requests via URLSession, integrates with the permanent URL cache, and captures page load latency metrics for analytics. It also handles error states by showing error banners on cache loads when server-side failures occur, and ensures thread-safe deallocation of URL scheme tasks to prevent crashes.

Wikipedia/Code/SchemeHandler · high confidence

Introduce WMFGamesDataController for Core Data game state management

Added WMFGamesDataController to handle persistence of game sessions and statistics via Core Data. This new data controller manages the creation, fetching, and archiving of game session data (including scores and completion status) for the 'Which Came First' game, ensuring thread-safe access through a background managed object context. It provides the backend storage layer required for game state persistence across app launches.

WMFData/Sources/WMFData/Data Controllers/Games · high confidence

Introduce Year in Review report and slide data models

Added the core data models for the Year in Review feature, including \WMFYearInReviewReport\ and \WMFYearInReviewSlide\. These models define the structure for a report containing a list of personalized slides (such as read count, edit count, top articles, and location) and provide the mapping logic to convert Core Data entities into the application's domain objects.

WMFData/Sources/WMFData/Models/Year In Review · high confidence

Introduce Year in Review slideshow component

Added the Year in Review component scaffolding, including a SwiftUI-based view hierarchy and hosting controller. The feature presents a portrait-only, vertically paging slideshow of slides that can display Rive animations, with a toolbar for sharing and donating, a progress indicator, and accessibility support for VoiceOver.

WMFComponents/Sources/WMFComponents/Components/Year in Review · high confidence

Introduce article tabs data controller with experiment gating

Added the \WMFArticleTabsDataController\ singleton to manage article tab state via Core Data, providing methods to create, delete, and persist tabs along with their associated articles. The controller includes logic to gate the 'More Dynamic Tabs' feature behind an A/B experiment assignment (Group C) with an eligibility check and an expiration date of January 15, 2026, while also supporting developer settings and user defaults for hiding article suggestions.

WMFData/Sources/WMFData/Data Controllers/Article Tabs · high confidence

Introduce centralized experiment assignment logic

The new WMFExperimentsDataController centralizes how experiments are assigned to users, supporting five specific experiments: More Dynamic Tabs V2, YIR Login Prompt, Home Tab, Donation Reminder, and Semantic Search. It handles bucketing logic (including three-way bucketing for Donation Reminder), persists assignments via a key-value store, and allows developers to force specific bucket assignments for testing purposes.

WMFData/Sources/WMFData/Data Controllers/Experiments · high confidence

Introduce new Home feed components and architecture

This change introduces the core SwiftUI components and view models for the new Home feed experience, including the 'For You' personalized feed and the 'Community' tab. It adds \WMFForYouView\ and \WMFForYouViewModel\ to handle the vertical paging layout, module visibility settings, and card rendering for the 'For You' segment, along with \WMFForYouModulePreloader\ to prefetch content for smoother scrolling. The 'Community' tab is supported by \WMFCommunityFeedView\ and \WMFHomeCommunityViewModel\, which display sections like Featured Article, Top Read, and In the News. Additionally, \WMFForYouEndOfFeedCardView\ provides the end-of-feed and empty-state UI, while \WMFHomeView\ serves as the main container managing the segmented control and header chrome for both segments.

WMFComponents/Sources/WMFComponents/Components/Home · high confidence

Introduce new Remote Notifications framework

The app now uses a new Remote Notifications framework to manage fetching, caching, and marking notifications as read. This includes a new API controller for handling server requests, a Core Data model for local persistence, and an operations controller to manage background fetching and import processes. The system supports marking notifications as read/unread, filtering by project and type, and handles push notification content via a service extension helper. It also includes a refresh deadline controller to prevent excessive API calls.

WMF Framework/Remote Notifications · high confidence

Introduce new search results UI with semantic search support

The search results screen now uses a new SwiftUI-based component structure (WMFSearchResultsView and WMFSearchResultRow) that displays results in a list with swipe actions (share, save/unsave) and a context menu (open, open in new tab, view on map, share). A key behavioral change is that when a search yields no lexical results, the interface now shows a semantic search entry point card instead of the standard 'no results' empty state, allowing users to initiate a semantic search directly from the results view.

WMFComponents/Sources/WMFComponents/Components/Search/Results · high confidence

Introduce reusable onboarding component library

Added a new set of SwiftUI-based components for onboarding flows, including WMFOnboardingView, WMFOnboardingCell, and their associated view model and view controller wrappers. This allows product teams to present feature announcements or guided tours with customizable titles, subtitles, icon cells, and primary/secondary action buttons, while supporting swipe-to-dismiss gestures and a close button.

WMFComponents/Sources/WMFComponents/Components/Shared/Onboarding · high confidence

Introduce semantic search data fetching and experiment gating

The Semantic Search data controller now fetches search results and attribution signals from the MediaWiki API, returning paginated results with snippets and trust metrics (contributor count, reference count, last updated date). Access to the feature is gated by an A/B experiment (control vs. group B) and restricted to specific target languages (defaulting to French, Arabic, and Japanese until remote configuration is available). The entry point visibility and settings controls are exposed based on experiment assignment and user interaction state.

WMFData/Sources/WMFData/Data Controllers/Semantic Search · high confidence

Introduce semantic search results sheet and card component

This change adds the UI components for the semantic search feature, including a sheet that displays passages found within articles and individual result cards. The card displays the relevant passage with language-specific quotation marks, the article title and section, and attribution details such as contributor count, reference count, and last update date (shown as month and year when reference data is unavailable). The layout respects the search language's direction (RTL/LTR), and tapping a card opens the corresponding article at the specific passage.

WMFComponents/Sources/WMFComponents/Components/Search/Semantic Search Results · high confidence

Introduce structured context data models for the Test Kitchen SDK

The Test Kitchen SDK now includes a set of new data structures in the Context module to define and serialize interaction context. This adds \AgentData\ for device and app details, \PerformerData\ for user session and identity information, \ExperimentData\ for A/B test enrollment, \PageData\ for page metadata, and \MediawikiData\ for database context. These models are aggregated in \ClientData\ and referenced in \InteractionData\, with \ContextValue\ defining the required property keys (such as \mediawiki\_database\ and agent identifiers) needed to submit interactions.

WMFTestKitchen/Sources/WMFTestKitchen/Context · high confidence

Introduce structured key-value storage and centralized user defaults keys

The Store layer now includes a new \WMFKeyValueStore\ protocol and a \WMFUserDefaultsStore\ implementation that supports saving and loading Codable objects using hierarchical keys (e.g., \directory.key\), along with a method to list keys within a specific directory. This structured approach is backed by a new \WMFUserDefaultsKey\ enum that centralizes all user defaults keys, covering features such as Year in Review 2026, donation reminders, home feed preferences, and developer settings. Additionally, a \WMFSharedCacheDirectoryNames\ enum defines shared cache directories for donor experience, watchlists, experiments, and developer settings.

WMFData/Sources/WMFData/Store · high confidence

Introduce temporary account availability check for wikis

Added WMFTempAccountDataController to verify whether a wiki supports temporary accounts by querying the MediaWiki API's siteinfo endpoint. The controller caches the list of wikis with temporary accounts enabled and exposes a primary wiki status flag, allowing the editing flow to check deployment status before allowing edits.

WMFData/Sources/WMFData/Data Controllers/Temp Accounts · high confidence

Introduce the 'Which Came First' daily game component

This change adds the core SwiftUI view, view model, and hosting controller for the 'Which Came First' game. Users can now play a daily trivia game where they choose which of two Wikipedia articles was published first. The component handles the full game loop including loading questions, submitting answers, revealing feedback, and displaying a results screen with options to share scores or view related articles.

WMFComponents/Sources/WMFComponents/Components/Games/Which Came First/Core · high confidence

Introduces Core Data model for remote notifications and key-value storage

The app now persists remote notification data and general key-value pairs using Core Data. The new model defines a RemoteNotification entity to store details such as the affected page ID, agent, category, timestamp, unique ID, message content, state number, type, and associated wiki. It also includes a WMFKeyValue entity for flexible storage, featuring a compound fetch index on key, group, and date to optimize lookup performance.

WMF Framework/Remote Notifications/Model/RemoteNotifications.xcdatamodeld/RemoteNotifications.xcdatamodel · high confidence

Introduces configurable sparkline views with compact and expanded styles

Adds a new Sparkline view component that renders time-series data as a smooth curve, supporting distinct visual styles including a compact layout (with an optional view count variant) and an expanded layout. The component includes a SparklineGrid for background gridlines and adapts its appearance (such as container background color and line width) based on the selected style and system color scheme.

Widgets/Views · high confidence

Introduces coordinator delegates for navigation and analytics

This change adds a set of new protocol definitions and action enums within the Coordinator module to standardize how various screens communicate user intents back to their parent controllers. Specifically, it introduces delegates for the Donate, Profile, Settings, and Year in Review features, defining specific actions such as showing notifications, handling donation taps, managing user profile interactions, and logging Year in Review slide events. These protocols establish the contract for navigation and analytics tracking, allowing the coordinator to manage complex flows like the donation form or the Year in Review slideshow while keeping the view controllers decoupled from the navigation logic.

WMFComponents/Sources/WMFComponents/Coordinator · high confidence

Introduces legacy saved articles data controller with alert types and delegate pattern

A new \WMFLegacySavedArticlesDataController\ class has been added to manage legacy saved articles, introducing a delegate-based architecture for fetching and deleting articles. The controller exposes specific alert types (such as list limits, entry limits, and sync errors) via the \WMFSavedArticleAlertType\ enum and defines the \WMFSavedArticle\ model with fields for ID, title, project, saved date, reading list names, and alert status. This component serves as a bridge for legacy persistence, forwarding fetch and delete operations to its delegate while handling Sendable conformance for main actor view models.

WMFData/Sources/WMFData/Data Controllers/Legacy Saved Articles · high confidence

Introduces logic for the evergreen account creation prompt

Adds the data controller for the evergreen account creation feature, which determines when to show the account creation prompt to logged-out readers. The implementation tracks app open days and reading history to evaluate eligibility, manages prompt impressions and outcomes (such as 'Maybe later'), and ensures the prompt respects context-specific rules like avoiding deep links or overlapping with other UI elements.

WMFData/Sources/WMFData/Data Controllers/Evergreen Account Creation · high confidence

Introduces new capsule-shaped button components and Liquid Glass styling

The shared button library now features a suite of new SwiftUI and UIKit components with a unified capsule (pill) shape and support for the new Liquid Glass visual language on iOS 26+. This includes \WMFLargeButton\ and \WMFMediumButton\ (with primary and secondary styles), \WMFSmallButton\ (supporting trailing icons), and \WMFSelectablePillButton\ for option groups. A new \CapsuleButtonStyle\ handles the visual rendering, applying glass effects on iOS 26+ and falling back to standard capsule fills on earlier versions. Additionally, dedicated close button components (\WMFLargeCloseButton\, \WMFSmallCloseButton\, and \CloseButtons\ helpers) and a \WMFSmallMenuButton\ with a SwiftUI counterpart have been added to standardize navigation and menu interactions.

WMFComponents/Sources/WMFComponents/Components/Shared/Buttons · high confidence

Introduction of Growth Tasks Data Controller for Image Recommendations

A new data controller, WMFGrowthTasksDataController, has been added to manage growth task data, specifically focusing on image recommendations. This component provides methods to retrieve combined image recommendations from the MediaWiki API, cache them in memory for performance, and check for the existence of recommendations. It handles the parsing of API responses into structured recommendation objects and exposes functionality to remove or reset cached recommendations for specific projects, supporting both Swift and Objective-C callers.

WMFData/Sources/WMFData/Data Controllers/Growth Tasks · high confidence

Introduction of Wikipedia iOS Widget family

The app now includes a suite of iOS widgets accessible from the home screen and lock screen. This release adds widgets for the Picture of the Day, Random article, On This Day, Top Read, and Featured Article. A Search widget and Lockscreen Search widget are also included but are currently restricted to debug builds only.

Widgets/Extension · high confidence

Introduction of centralized app environment state management

A new WMFAppEnvironment singleton has been added to the WMFComponents module to centralize and broadcast app-wide state changes. This component tracks the current theme, user interface trait collection, and article/editor text size, allowing subscribed components to react to updates via a Combine publisher.

WMFComponents/Sources/WMFComponents/Environment · high confidence

Introduction of donation logging protocol and action types

A new \WMFDonateLoggingDelegate\ protocol and \WMFDonateLoggingAction\ enum have been added to the \WMFComponents\ library. This introduces a structured set of logging events for the donation flow, covering user interactions such as appearing forms, triggering errors, selecting payment methods (including Apple Pay details), and completing transactions. This change provides the underlying infrastructure for tracking donation-related user actions.

WMFComponents/Sources/WMFComponents/LoggingDelegate · high confidence

Native SwiftUI donation form with Apple Pay and recurring options

The donation form in WMFComponents has been replaced with a new native SwiftUI implementation (WMFDonateView). This update introduces a unified interface for selecting preset amounts or entering custom values, with support for Apple Pay integration via PassKit. Users can now opt into transaction fee coverage, set up monthly recurring donations, and subscribe to email updates. The form includes validation for minimum and maximum donation amounts, displays relevant fine print, and provides help links for tax deductibility and other ways to give.

WMFComponents/Sources/WMFComponents/Components/Donate Form · high confidence

New 'About' page and 'Find in Page' highlighting styles

The app now includes a dedicated 'About' page (assets/about.html and about.js) that displays version information, contributors, translators, libraries, and repository details, featuring a new Wikimedia Foundation logo that adapts to light and dark themes. Additionally, the article view now supports 'Find in Page' functionality with specific CSS styles (styleoverrides.css) to correctly highlight search matches in both light and dark/sepia themes, ensuring text remains readable against the highlight background.

Wikipedia/assets · high confidence

New 'What's driving your feed' settings screen

Users can now access a dedicated settings screen titled 'What's driving your feed' to manage the factors influencing their 'For You' feed. This new interface presents three configurable sections: 'Your interests' for editing topics, 'Reading history' to browse recently read articles, and 'Languages' to adjust preferred languages. The screen is implemented as a new SwiftUI view with a corresponding view controller and view model, providing a centralized location for these personalization controls.

WMFComponents/Sources/WMFComponents/Components/Settings/Home/For You/Whats Driving · high confidence

New 'Your Interests' settings screen for customizing the For You feed

Users can now customize their For You feed via a new 'Your Interests' settings screen. This interface allows users to select topic chips, search for specific articles to add as interests, and manage their selections with a 'Deselect all' option. The screen features a responsive article grid that adapts to viewport size (showing more columns on iPad) and respects Dynamic Type limits to maintain layout integrity. Selections are persisted to the device, and changes trigger a refresh of the For You feed.

WMFComponents/Sources/WMFComponents/Components/Settings/Home/For You/Whats Driving/Your Interests · high confidence

New Account Settings UI component

A new \WMFAccountSettingsView\ and its associated ViewModel have been added to the WMFComponents library. This component provides a user interface for managing account-related preferences, specifically displaying the current username, offering an option to vanish the account, and allowing users to toggle the 'auto-sign discussions' setting.

WMFComponents/Sources/WMFComponents/Components/Settings/Account · high confidence

New Developer Settings interface for testing and diagnostics

A new Developer Settings screen has been added, providing a centralized UI for toggling and overriding various internal features. Users can now force the Year in Review 2026 entry point and announcement, override fundraising behaviors (such as bypassing donations, forcing campaign banners, using test wiki configs, and overriding the current date), and manage Semantic Search experiments (enabling the entry point, forcing experiment groups, and clearing assignments). The interface also includes diagnostic tools for Widgets (viewing cache summaries and last fetch logs) and a section for general developer toggles like enabling Home Phase 2, forcing hCaptcha challenges, and allowing pinch-to-zoom in article webviews.

WMFComponents/Sources/WMFComponents/Components/Developer Settings · high confidence

New Fastlane automation for iOS builds and TestFlight/App Store submissions

This change introduces a new Fastlane configuration (Fastfile, Appfile, and .env) to automate the building and distribution of the Wikipedia iOS app. It defines four specific lanes: 'internal\_beta' for internal TestFlight testing, 'external\_beta' for external TestFlight testing with beta review submission, 'submit\_for\_review' for App Store submission with phased release enabled, and 'design\_review' for the Experimental app. The configuration uses App Store Connect API keys for authentication and includes logic to clean up ephemeral development certificates created during CI runs to prevent quota exhaustion.

fastlane · high confidence

New Home Feed Settings screen for customizing modules

A new Home Feed Settings interface has been added, allowing users to customize their feed experience. The screen presents a 'For you' section with options to toggle 'For You' modules and view 'What's Driving your feed' (topics and articles shaping content). A 'Community' section is also included, but it is gated behind the 'home-phase-2' developer setting; when disabled, the legacy Explore feed settings remain in the main Settings screen instead.

WMFComponents/Sources/WMFComponents/Components/Settings/Home/Main · high confidence

New Search Settings screen with semantic search toggle

Users can now configure specific search behaviors via a dedicated settings view. This includes toggles to show the language bar in search results, set the app to open directly to the Search tab, and enable the semantic search entry point (labeled "Search within articles"), which allows users to jump straight into relevant passages within articles.

WMFComponents/Sources/WMFComponents/Components/Settings/Search · high confidence

New SwiftUI-based form component with multi-select support

Added a new set of SwiftUI views and view models for building forms, including single-select, multi-select, and accessory-row selection modes. The \WMFFormView\ renders these sections using an inset group list style, allowing users to interact with selectable items that update their state via Combine publishers.

WMFComponents/Sources/WMFComponents/Components/Shared/Forms · high confidence

New Watchlist Data Controller Implementation

A new \WMFWatchlistDataController\ class has been introduced to manage watchlist data operations. This component handles fetching watchlist items from MediaWiki APIs, managing filter settings (such as project selection, change types, and activity filters) via local storage, and calculating active filter counts. It supports multiselect helpers for projects and change types, and includes logic for caching API responses and handling network errors.

WMFData/Sources/WMFData/Data Controllers/Watchlist · high confidence

New advanced settings for image insertion

Users can now configure detailed options for images inserted into articles via a new Advanced Settings screen. This includes toggling text wrapping around images, selecting the image position (right, left, or center), choosing the image type (thumbnail, frameless, frame, or basic), and setting custom image dimensions (width and height) when the custom size option is enabled. These settings are presented in a themed, localized interface with dedicated sub-screens for position and type selection.

Wikipedia/Code/Advanced Settings · high confidence

New archive view for tracking Which Came First game history

A new archive interface has been added to the Which Came First game, allowing users to view their past activity via a calendar card. The view displays a header with localized titles and subtitles, and integrates a UICalendarView bridge that highlights days where games were completed with a badge decoration. Tapping a completed day shows a toast with the user's score, while tapping an unplayed or paused day within the archive range (starting June 1, 2024) allows the user to select that date to resume or start a game.

WMFComponents/Sources/WMFComponents/Components/Games/Which Came First/Archive · high confidence

New article summary view for Which Came First game results

A new 'Articles from today's game' section has been added to the Which Came First results screen, displaying cards for each unique article mentioned during the game. Each card shows the article title, a thumbnail, and a text snippet fetched from the summary API. Tapping a card opens the related game event, while a long-press context menu allows users to open the article in a new tab, open it in a background tab, save it for later, unsave it, or share it. The layout adapts to accessibility settings by collapsing to a single column for larger type sizes, and uses two columns on iPhone and three on iPad under normal conditions.

WMFComponents/Sources/WMFComponents/Components/Games/Which Came First/Results/Articles View · high confidence

New async and saved article row components with improved accessibility and swipe actions

The shared Page component library introduces three new SwiftUI views: WMFAsyncPageRow, WMFAsyncPageRowSaved, and WMFPageRow. WMFAsyncPageRow handles asynchronous loading of article descriptions and thumbnails for general page rows. WMFAsyncPageRowSaved provides a dedicated view for saved articles, featuring a context menu with actions to open, share, and manage tabs, as well as swipe actions for deletion and sharing. WMFPageRow offers a flexible base row with configurable swipe actions for delete, share, and save/unsave operations. All components include enhanced accessibility labels and support for dynamic type sizing to improve readability and screen reader support.

WMFComponents/Sources/WMFComponents/Components/Shared/Page · high confidence

New build configurations and entitlements for background tasks, Apple Pay, and universal links

The Wikipedia app now includes dedicated Info.plist files (Experimental, Local, Staging, and Release) and an entitlements file that configure support for background app refresh and database housekeeping tasks, Apple Pay via Adyen, and universal links (associated domains) for wikipedia.org and its beta subdomains. The app also registers the 'wikipedia-official' URL scheme alongside 'wikipedia' to distinguish it from other clients, enables time-sensitive notifications, and sets up application groups for data sharing across extensions.

Wikipedia · high confidence

New card component for the 'Which Came First' game

Added the \WMFWhichCameFirstCardView\ SwiftUI component and its associated \WMFWhichCameFirstCardViewModel\ to the 'Which Came First' game module. This new view renders individual game cards, displaying event text, thumbnails, and date pills, while handling user selection states and revealing correct/incorrect answers with visual feedback. The component includes logic for responsive height adjustments based on screen size and manages asynchronous image loading for card thumbnails.

WMFComponents/Sources/WMFComponents/Components/Games/Which Came First/Core/Cards · high confidence

New centralized developer settings controller for feature toggles and overrides

The app introduces a unified \WMFDeveloperSettingsDataController\ to manage developer-facing feature flags and debugging overrides. This controller centralizes toggles for bypassing donation flows, forcing hCaptcha challenges, enabling pinch-to-zoom in article webviews, and controlling the visibility of the Year in Review 2026 entry point and announcement. It also manages the Home tab's evolution, allowing developers to enable the new Community feed (Home Phase 2) or force specific tab assignments. Additionally, it provides mechanisms to fetch and apply feature configurations from a Test Wiki, enabling remote configuration testing in production builds.

WMFData/Sources/WMFData/Data Controllers/Developer Settings · high confidence

New command-line utility for consolidating localization updates

A new Swift-based command-line tool has been added to the 'Command Line Tools/Update Localizations' directory to streamline the management of app localizations. This utility automates the workflow by extracting localizations from source code, exporting them, and importing updates from Translatewiki (TWN) in a single execution. It includes logic to parse various localization token formats (including Wikipedia-style, iOS native, and legacy constructor tokens) and correctly maps pluralization rules from Translatewiki prefixes to iOS stringsdict keys, ensuring consistent language support across the application.

Command Line Tools/Update Localizations · high confidence

New controllers for editing article descriptions

Added \ShortDescriptionController\ and \WikidataDescriptionController\ to handle editing short descriptions on Wikipedia articles and Wikidata entities respectively. These controllers implement the \ArticleDescriptionControlling\ protocol, enabling users to add or change descriptions with appropriate edit tags, default summaries, and validation warnings (such as length and casing checks).

Wikipedia/Code/Controllers · high confidence

New data controller for saved articles with deduplication and limited thumbnails

A new \WMFSavedArticlesDataController\ has been introduced to manage saved article data via CoreData. This controller deduplicates articles in the timeline by tracking seen article keys (projectID + title), ensuring each article appears only once. It also limits the number of image thumbnails fetched to a maximum of three, optimizing performance for the saved articles module. The controller provides methods to fetch saved article snapshots, counts, recently saved articles, and timeline pages, all while handling CoreData context management and error states.

WMFData/Sources/WMFData/Data Controllers/Saved Articles · high confidence

New data controllers for donation reminders, local history, and fundraising campaigns

The Donor Experience data layer now includes dedicated controllers to manage the donation reminder experiment, local donation history, and fundraising campaign banners. WMFDonationReminderDataController handles the NL\_2026\_09 experiment, tracking user progress (articles read, time elapsed) to trigger follow-up reminders and managing a wrap-up window through November 15. WMFDonateDataController manages fetching and caching donation configurations and payment methods, while WMFDonateLocalHistory records local donation events. WMFFundraisingCampaignDataController loads active campaign assets, handles 'maybe later' and permanent hiding states, and supports developer overrides for testing.

WMFData/Sources/WMFData/Data Controllers/Donor Experience · high confidence

New data models for donation configuration and image recommendations

This change introduces a new set of Swift data models in the WMFData module to support updated donor experience and image recommendation features. Specifically, it adds \WMFDonateConfig\ and \WMFDonateConfigResponse\ to handle fundraising configuration, including logic to calculate maximum donation amounts for non-USD currencies based on USD defaults, and to manage payment method availability such as Apple Pay networks. It also introduces \WMFFundraisingCampaignConfig\ for campaign assets, \WMFPaymentSubmissionResponse\ for payment status, and a suite of models (\WMFGrowthTask\, \WMFImageRecommendation\, \WMFImageRecommendationAPIResponse\) to parse and structure image suggestion data from the Growth API.

WMFData/Sources/WMFData/Models/Donor Experience · high confidence

New date formatting and accessibility extensions for consistent UI presentation

The WMFComponents library now includes a suite of new extension files to standardize how dates, numbers, and UI elements are rendered. DateFormatter extensions provide localized formats for full dates, weekday/month/day, month/day, and smart 'Last Read' logic that shows time for today's entries. A new DynamicTypeSize extension bridges SwiftUI's dynamic type caps to UIKit, ensuring fonts scale correctly under accessibility constraints. Additionally, NSAttributedString extensions simplify HTML-to-attribute conversion, and View/UIView extensions add snapshot capabilities for sharing or exporting views as images.

WMFComponents/Sources/WMFComponents/Extensions · high confidence

New design system tokens and theme definitions in WMFComponents

The WMFComponents library now includes a centralized style system with new enums for colors (WMFColor), corner radii (WMFCornerRadius), spacing (WMFSpacing), and icons (WMFIcon/WMFSFSymbolIcon), alongside a comprehensive WMFTheme struct defining Light, Sepia, and Dark modes. This provides a unified set of design tokens for UI consistency across the app, replacing ad-hoc styling with standardized values for typography, spacing, and theming.

WMFComponents/Sources/WMFComponents/Style · high confidence

New developer tooling and automation scripts

The repository now includes a comprehensive suite of new scripts to streamline development workflows. These include \setup\ and \brew\_install\ for automated environment configuration, \setup\_git\_hooks\ to enforce code formatting via \clang\_format\_all\ and \clang\_format\_git\_diff\, and \lint-localizations.sh\ to catch formatting errors in translation files. Localization management is enhanced with \localization\_extract\ for source string extraction and \GenerateTopicsStrings.swift\ to fetch topic strings from the MediaWiki API. Additional utilities cover icon generation (\icons\), widget feed contract validation (\check-widget-feed-contract.sh\), and UI test linting (\lint-ui-tests.sh\).

scripts · high confidence

New editing preferences settings screen

A new settings screen has been added that allows users to choose between visual and source editing modes. This screen displays the current preference and persists any changes made by the user, updating the default editing mode for the app.

WMFComponents/Sources/WMFComponents/Components/Settings/Editing Preferences · high confidence

New multi-step app onboarding flow with feed personalization

The app now features a new multi-step onboarding experience that guides users through an intro, data & privacy notice, language selection, and interest personalization before setting up their home feed. Users can choose between community-related content or personalized content (based on selected interests), with live preview cards showing what they will see. The flow includes a final loading step with a Lottie animation while the feed initializes, and supports large accessibility type sizes throughout.

WMFComponents/Sources/WMFComponents/Components/App Onboarding · high confidence

New push notification settings screen in WMFComponents

A new push notification settings view and its associated ViewModel have been added to the WMFComponents library. This component provides a user interface for managing push notification preferences, including a toggle to enable or disable notifications and a link to open system settings when permissions are denied. The ViewModel handles the logic for checking notification permission status, persisting the user's subscription preference via UserDefaults, and displaying an error alert if permission requests fail.

WMFComponents/Sources/WMFComponents/Components/Settings/Push Notifications · high confidence

New remote feature configuration model for Year in Review and iOS settings

The app now supports a new \WMFFeatureConfigResponse\ model that fetches and parses remote configuration data. This enables dynamic control over the 'Year in Review' feature, including specific year settings, active and data date ranges, and country-based visibility rules (such as hiding donate buttons). It also introduces remote toggles for iOS-specific features like the visual editor and semantic search languages, allowing these behaviors to be adjusted without an app update.

WMFData/Sources/WMFData/Models/Developer Settings · high confidence

New results screen for the Which Came First game

Users can now view a dedicated results page after playing the Which Came First game. This screen displays the final score, a countdown to the next available game, and a 'Play Archive' button to replay past rounds. Logged-in users see detailed statistics including games played, current and best streaks, and average score, while non-logged-in users are prompted to log in to access these stats. The view also lists the articles featured in the game session.

WMFComponents/Sources/WMFComponents/Components/Games/Which Came First/Results · high confidence

New reusable article preview component for SwiftUI

Introduced WMFArticlePreviewView and WMFArticlePreviewViewModel as a reusable SwiftUI component for displaying article previews. The view supports rendering article titles, descriptions, and snippets, with visual headers that can display either a remote image (loaded via AsyncImage) or a combination of foreground and background images. The component adapts its layout based on the presence of visual assets and respects the current app theme for colors and typography.

WMFComponents/Sources/WMFComponents/Components/ArticlePreview · high confidence

New reusable splash screen for the 'Which Came First' game

A new, reusable splash screen component has been added for the 'Which Came First' game. This screen displays the game's icon, title, and subtitle, along with a 'Play' button that dynamically updates its label based on the current session status (e.g., 'Play Today's Game', 'Continue', or 'Review results'). It also includes an 'About this game' button and a navigation bar with a close button and an overflow menu offering 'Learn more' and 'Report a problem' options. The navigation bar is styled to be transparent with white text to match the game's background.

WMFComponents/Sources/WMFComponents/Components/Games/Splash Screen · high confidence

New settings screen for temporary accounts with session end option

Users can now access a dedicated settings view for temporary accounts, which displays the user's talk page and includes a new 'End session' option. Selecting 'End session' prompts a confirmation alert to log out, permanently ending the temporary account session.

Wikipedia/Code/Temp Accounts · high confidence

New shareable results view for the 'Which Came First' game

A new SwiftUI view and its accompanying ViewModel have been added to the 'Which Came First' game component, enabling users to generate and share a summary image of their game results. This view displays the user's score, a list of the topics included in the game session, and visual indicators for correct or incorrect answers, specifically designed to be rendered synchronously into an image for sharing.

WMFComponents/Sources/WMFComponents/Components/Games/Which Came First/Results/Sharing View · high confidence

New shared Rive animation component for dynamic content

Introduced a new shared Rive animation component (WMFRiveView) that loads and renders Rive animations with support for dynamic text and number bindings. The component includes a ViewModel to manage loading states and a sentence-splitting utility (WMFRiveSentence) that handles localized strings with placeholders, ensuring correct word order across languages. It also features automatic system font substitution for missing fonts and respects accessibility settings for reduced motion.

WMFComponents/Sources/WMFComponents/Components/Shared/Rive · high confidence

New shared UI components for article summaries, beta badges, and editing modes

Added a suite of new shared SwiftUI components to the library: WMFArticleSummaryView for displaying article titles and extracts, WMFBetaBadge for marking beta features, WMFEditModeOptionsCard and WMFEditModeCopy for selecting visual or source editing modes, and supporting views like WMFCheckmarkView, WMFHtmlText, WMFSearchBarRepresentable, and WMFToggleView. These components provide consistent styling, theme integration, and accessibility support for common UI patterns across the app.

WMFComponents/Sources/WMFComponents/Components/Shared · high confidence

New shared data controllers for articles, images, and user contributions

The app introduces a suite of new shared data controllers in the WMFData layer to handle specific data-fetching and persistence tasks. These include WMFArticleDataController for fetching article info (watch status, rollback rights, categories), WMFArticleSearchDataController for prefix-based article search, WMFArticleSummaryDataController for fetching and caching article summaries, and WMFImageDataController for downloading and caching images with request merging. Additionally, UserContributionsDataController fetches recent edits and edit counts, WMFCategoriesDataController persists and queries article categories via CoreData, WMFPageTopicsDataController manages article topic persistence and aggregation, and WMFOnThisDayDataController fetches historical events. These controllers centralize API interactions and local storage logic for these features.

WMFData/Sources/WMFData/Data Controllers/Shared · high confidence

New shared data models for articles, topics, projects, and game sessions

The WMFData module introduces a suite of new shared models to support richer content presentation and engagement features. Users will benefit from improved article previews via the new \WMFArticleSummary\ model, which provides display titles, HTML extracts, and thumbnail URLs. Content discovery is enhanced by \WMFArticleTopic\ and \WMFPageTopic\, enabling topic-based article selection and reading summaries. The \WMFProject\ model now explicitly supports MediaWiki and handles language variants (e.g., distinguishing Chinese simplified/traditional) to ensure correct site URLs and RTL layout handling. Additionally, new models for game sessions (\WMFGameSession\, \WMFWhichCameFirstGameState\) and user impact data (\WMFUserImpactData\) support the persistence and display of interactive quiz features and personalized reading statistics.

WMFData/Sources/WMFData/Models/Shared · high confidence

New shared feature announcement component

A new reusable feature announcement component has been added to WMFComponents, providing a consistent way to present feature highlights to users. The implementation includes a SwiftUI view (WMFFeatureAnnouncementView) that supports rich content such as static images, background overlays, and animated GIFs, along with a view model for configuration and a UIKit wrapper (WMFFeatureAnnouncementViewController) for integration. The component presents announcements via a popover or adaptive sheet with a custom detent, allowing other parts of the app to easily announce new features with a standardized look and feel.

WMFComponents/Sources/WMFComponents/Components/Shared/Feature Announcement · high confidence

New shared survey component with single/multi-select and character limits

A new reusable \WMFSurveyView\ component has been added to the shared library, allowing apps to present configurable surveys. The component supports both single and multiple selection modes, optional headings and instructions, and an 'Other' text input field that can enforce a character limit with a live counter and error state. It uses an inset-grouped list style, includes a close button in the navigation bar, and exposes localized strings for all user-facing copy.

WMFComponents/Sources/WMFComponents/Components/Shared/Survey · high confidence

New style extension helpers for fonts, colors, and list views

The WMFComponents library adds three new Swift extensions to simplify styling in SwiftUI and UIKit. \Font+Extensions\ provides a convenience initializer to convert internal \WMFFont\ definitions to SwiftUI \Font\ objects. \UIColor+Extensions\ adds hex-based initializers, allowing colors to be created directly from integer hex values. \View+Extensions\ introduces two list-specific modifiers: \listBackgroundColor\ for applying consistent background colors across scroll content, and \listCustomSectionSpacing\ for applying custom spacing between list sections where supported by the OS.

WMFComponents/Sources/WMFComponents/Style/Extensions · high confidence

New temporary account notification UI components

Added a SwiftUI sheet view (WMFTempAccountsSheetView) and a UIKit banner view (WMFTempAccountsToastView) to communicate temporary account status to users. The sheet provides a modal interface with informational text and action buttons, while the banner serves as a persistent notification under the navigation bar on login and account creation screens, featuring a title, a 'Read More' link, and theme-aware styling.

WMFComponents/Sources/WMFComponents/Components/Temp Accounts · high confidence

New utility classes for image sizing, URL building, and reading analytics

The WMFData module now includes several new utility files: ImageUtils defines a standardized set of MediaWiki image widths and helper methods for thumbnail, lead, and gallery images; WMFURLUtils provides functions to build canonical Wikipedia article URLs and manage language variant codes via associated objects; WMFReadingIntervalTracker extracts article reading-time logic into a testable struct that accurately tracks intervals based on screen visibility and app activity; and WMFWikitextUtils adds capabilities for locating text ranges in wikitext and inserting image wikitext after templates. Additionally, WMFLockIsolated is introduced to provide thread-safe mutable state for NSObject-based classes under Swift 6 concurrency rules.

WMFData/Sources/WMFData/Utility · high confidence

New widgets added: Featured Article, Picture of the Day, Top Read, On This Day, Search, and Lockscreen Search

This update introduces six new iOS widgets to the app. The Featured Article widget displays a daily curated article with its thumbnail and description. The Picture of the Day widget showcases a daily photo selected by the community, with images downsampled to fit widget archival limits. The Top Read widget highlights the most-read articles on Wikipedia, including reader counts and sparkline charts. The On This Day widget presents historical events that occurred on the current date. Additionally, a Search widget and a Lockscreen Search widget provide quick access to Wikipedia search functionality directly from the home screen and lockscreen.

Widgets/Widgets · high confidence

Source editor now supports toggling wiki markup formatting via toolbar buttons

The Source Editor now includes a set of new formatter extensions that allow users to toggle various wiki markup styles directly from the editor interface. These changes introduce functionality for bold, italics, templates, comments, headings (including subheadings), links (with wizard support for editing and inserting), lists (with bullet/number toggling and indent controls), strikethrough, subscript, superscript, underline, and references. Each extension handles the specific logic for adding, removing, or modifying the corresponding formatting strings (such as ''' for bold, == for headings, or \[\[ for links\]) within the text view, improving the ease of editing structured content.

WMFComponents/Sources/WMFComponents/Components/Editors/Source Editor/Formatter Extensions · high confidence

Widget utility extensions for image handling, scheduling, and UI styling

This update introduces a suite of utility extensions within the Widgets module to support new widget features and improve stability. A new UIImage extension implements memory-safe image downsampling using ImageIO, decoding large images at subsampled sizes to prevent out-of-memory crashes in the widget extension process. A Date extension provides a method to schedule random refresh times within the first 30 minutes after midnight, aiding in load distribution. Additionally, View extensions are added to handle iOS 17-specific container background clearing, list background styling, and shadow effects, while CGPoint and UIColor extensions provide helper methods for geometry calculations and color conversion.

Widgets/Utilities · high confidence

Year in Review 2026 data controller and configuration

The Year in Review data controller now supports the 2026 reporting cycle, introducing a new data-fetching architecture that separates edit counts and user contributions into dedicated API response models. The system distinguishes between 'data-rich' and 'low-data' user experiences based on distinct article reads, while a local configuration file provides placeholder global statistics and active date ranges for the 2026 campaign. This change also establishes the underlying data structures for personalized slides, including saved article counts and edit metrics, preparing the app for the upcoming Year in Review feature launch.

WMFData/Sources/WMFData/Data Controllers/Year In Review · high confidence

Behavioural changes

3319 commits (213 fixes) modifying Wikipedia/Localizations

A change to existing behaviour in Wikipedia/Localizations — 3319 commits (213 fixs), 280 files.

(repo-wide) · medium confidence · unverified

Activity tab view models refactored into modular components

The Activity tab's view model logic has been split into distinct, specialized classes to improve maintainability and separation of concerns. New view models now handle specific data domains: \TimelineViewModel\ manages the activity feed and deletion logic; \ContributionsViewModel\ calculates monthly edit counts and last-edit dates; \AllTimeImpactViewModel\ displays total edits, streaks, and thanks; \ArticleViewsViewModel\ and \RecentActivityViewModel\ generate 30-day line graphs for views and edits; \ArticlesReadViewModel\ and \ArticlesSavedViewModel\ handle reading stats and saved article lists; \MostViewedArticlesViewModel\ presents top viewed articles; \WMFActivityTabCustomizeViewModel\ manages user toggle preferences; and \WMFActivityTabYearInReviewViewModel\ handles the Year in Review entry point. This change centralizes data fetching and formatting within these dedicated components.

WMFComponents/Sources/WMFComponents/Components/Activity Tab/View Models · high confidence

Add Xcode Cloud build automation scripts

New shell scripts in the ci\_scripts directory configure Xcode Cloud workflows to manage build metadata and tagging. The pre-build script sets date-based version strings and computes build numbers from git tags (betas/alphas), while the post-build script tags successful Nightly and Experimental builds. Additional scripts handle copying source root paths for unit tests and resetting environment variables in Info.plist files.

_ci\scripts · high confidence

Added Belarusian and Serbian Latin app display name localizations

The app now includes native localization files for the Belarusian (be) and Serbian Latin (sr-Latn) languages, ensuring the app display name appears correctly in these locales. This change adds the specific InfoPlist.strings entries for these languages, which were previously missing or incomplete, allowing users with these language settings to see the properly localized app name on their device home screen.

Wikipedia/InfoPlist Native Localizations · high confidence

Added Serbian Latin localization for the Continue Reading widget

The Continue Reading widget now supports Serbian Latin (sr-Latn) localization. Users with this language setting will see the widget's display name and bundle name translated as "Wikipedia continue reading" in the system interface.

ContinueReadingWidget/sr-Latn.lproj · high confidence

Added Xcode scheme and workspace configuration for WMFData

The WMFData module now includes an Xcode scheme (WMFData.xcscheme) and a workspace check file (IDEWorkspaceChecks.plist). The scheme configures the build, test, launch, profile, analyze, and archive actions for the WMFData target and its associated tests, ensuring the module can be built and tested directly within the Xcode IDE.

WMFComponents/.swiftpm, WMFData/.swiftpm · high confidence

The CI scripts for the Wikipedia project now reference localization resources via symlinks instead of direct paths. Specifically, the 'Localizations' and 'iOS Native Localizations' directories within the CI script location are now symbolic links pointing to their counterparts in the main Wikipedia source tree, ensuring that the build environment accesses the correct localization files.

_ci\scripts/Wikipedia · high confidence

Cache data model upgraded to version 2 with new grouping and type changes

The Core Data cache schema has been updated from version 1 to version 2, introducing a new CacheGroup entity to organize cache items into groups. The CacheItem entity now supports a many-to-many relationship with these groups and includes a new 'mustHaveCacheItems' relationship. Additionally, the 'variant' attribute on CacheItem has changed from an Integer 64 type to a String type, and new fetch indexes have been added for efficient querying by date and compound key/variant combinations.

WMF Framework/Cache.xcdatamodeld · high confidence

Centralized UI test launch configuration for deterministic testing

The UI test harness now uses a centralized \UITestConfiguration\ struct to manage launch arguments, ensuring deterministic test environments by explicitly controlling onboarding state, theme, language, and network profiles. This change introduces new launch argument flags to suppress specific user-facing features during testing, including activity tab onboarding, games announcements, and tips, while also allowing tests to enable or disable the home tab and reset preferred languages.

WikipediaUITests/Config · high confidence

Centralized notification definitions for app state changes

The app now uses a centralized \WMFNSNotification\ enum to define notification names for key state changes, including tab deletions, home tab toggles, For You interest updates, and Year in Review badge updates. This standardizes how components communicate these specific events, ensuring consistent naming and easier management of user-facing state transitions across the application.

WMFData/Sources/WMFData/Notifications · high confidence

Centralized settings management with new editing and Year in Review controls

The app introduces a new \WMFSettingsDataController\ to centralize user preferences, replacing scattered defaults access. This change adds explicit controls for the default editing mode (Visual or Source) and a separate setting to skip the editor-choice sheet, allowing users to bypass the prompt if they have already made a selection. It also integrates Year in Review settings, enabling users to toggle the feature and delete associated personalized data, while maintaining existing preferences for auto-signing talk page discussions and search bar visibility.

WMFData/Sources/WMFData/Data Controllers/Settings · high confidence

Core Data model introduces Page/View split and YearInReview entities

The WMFData Core Data model has been updated to support new data structures. A new 'CDPage' entity is introduced with attributes for namespace, project, timestamp, and title, along with fetch indexes for efficient querying by project and namespace. This entity has a one-to-many relationship to a new 'CDPageView' entity, which tracks individual view timestamps. Additionally, the model now includes 'CDYearInReviewReport' and 'CDYearInReviewSlide' entities to support year-in-review features, where slides contain binary data, display flags, evaluation status, and unique IDs linked to their parent report.

WMFData/Sources/WMFData/Resources/WMFData.xcdatamodeld/WMFData.xcdatamodel · high confidence

Core Data model updated for reading lists and article metadata

The Wikipedia Core Data model has been updated to support reading list functionality and enhanced article data. New entities include ReadingList and ReadingListEntry, which manage lists of articles with attributes for sorting, error codes, and local sync status. The WMFArticle entity now includes fields for Wikidata IDs, geo-location data, thumbnail URLs, and download status. Additionally, the model introduces WMFContent and WMFContentGroup for managing full article content, and WMFKeyValue for key-value storage, with various fetch indexes added to optimize query performance.

WMF Framework/Wikipedia.xcdatamodeld/Wikipedia.xcdatamodel · high confidence

Core Data model updated to version 8

The application's Core Data persistent store schema has been advanced to version 8. This update modifies the underlying data model structure, which may require a migration strategy for existing user data stored in previous versions of the app.

WMF Framework/Wikipedia.xcdatamodeld · high confidence

Core Data model updated to version 8 with new topic and interest tracking

The WMFData Core Data model has been advanced to version 8, introducing new entities to support richer user engagement tracking. Specifically, the model now includes CDPageTopic to store topic scores associated with pages, and CDPageInterest to record when a user expresses interest in a page. These additions allow the application to persist and query article topics and user interests alongside existing reading history and game session data.

WMFData/Sources/WMFData/Resources/WMFData.xcdatamodeld · high confidence

Core Data model updated with new entities and relationships

The WMFData Core Data model has been updated to support new features and data structures. A new CDCategory entity has been added to track categories associated with pages, establishing a bidirectional relationship with CDPage. Tracking capabilities have been enhanced by adding a numberOfSeconds attribute to CDPageView and implementing a linked-list structure via nextPageViews and previousPageView relationships within CDPageView. Additionally, new entities CDYearInReviewReport and CDYearInReviewSlide have been introduced to support Year in Review functionality, including attributes for slide data, display status, and evaluation state.

WMFData/Sources/WMFData/Resources/WMFData.xcdatamodeld/WMFData 2.xcdatamodel · high confidence

Core Data model version 3 introduces article tab structure and year-in-review entities

The application's Core Data schema has been updated to version 3, introducing new entities to support article tab navigation and year-in-review features. The model now includes CDArticleTab and CDArticleTabItem entities, allowing pages to be organized into ordered tabs with unique identifiers. Additionally, CDYearInReviewReport and CDYearInReviewSlide entities have been added to store year-in-review data, including slide metadata and binary content. Existing entities like CDPage and CDCategory remain, with CDPage now linked to article tab items and categories.

WMFData/Sources/WMFData/Resources/WMFData.xcdatamodeld/WMFData 3.xcdatamodel · high confidence

Core Data model version 3 introduces download tracking and conversion flags

The app's local data store has been updated to version 3, adding new attributes to the WMFArticle entity to support better download management and content conversion. Specifically, the model now tracks download reliability with downloadRetryDate and downloadAttemptCount, and includes isConversionFromMobileViewNeeded to flag articles requiring format conversion. Additionally, the housekeeper fetch index has been restructured to optimize how the app identifies and manages downloaded articles for cleanup.

WMF Framework/Wikipedia.xcdatamodeld/Wikipedia 3.xcdatamodel · high confidence

Core Data model version 6 adds language variant support for articles, reading lists, and talk pages

The app's local data store has been upgraded to version 6, introducing a new 'variant' attribute to the WMFArticle, ReadingListEntry, and TalkPage entities. This change allows the application to store and retrieve the specific language variant (e.g., en.wikipedia.org vs. en.m.wikipedia.org) for saved articles, reading list items, and talk page discussions, ensuring that content is correctly associated with its source language context when reloading or syncing.

WMF Framework/Wikipedia.xcdatamodeld/Wikipedia 6.xcdatamodel · high confidence

Core data model updated for Talk Pages and Article metadata

The local data model now includes new entities to support Talk Pages, specifically TalkPage, TalkPageTopic, TalkPageReply, and TalkPageTopicContent, allowing users to view and interact with talk page discussions and track read status via the new isRead attribute. Additionally, the WMFArticle entity has been extended with an ns (namespace) attribute to better categorize content, and the WMFContentGroup entity now includes a placement attribute to support feed ordering and display logic.

WMF Framework/Wikipedia.xcdatamodeld/Wikipedia 2.xcdatamodel · high confidence

Default file header template updated to require manual deletion

A new IDE template macro file has been added to configure the default file header for newly created source files. The header now contains a specific placeholder string ('\~\~\~\*\DELETE THIS HEADER\\*\~\~\~') that serves as a reminder for developers to remove the boilerplate text before committing code, ensuring cleaner file headers in the project.

Wikipedia.xcodeproj/xcshareddata · high confidence

Fix Core Data transformer warnings and add missing transformer

The Core Data model for the Wikipedia framework has been updated to resolve value transformer warnings. Specifically, a missing transformer has been added for the \pageViews\ attribute on the \WMFArticle\ entity, and the configuration for transformable properties has been broadened to allow \NSSet\ in addition to \WMFMTLModel\ across all entities.

WMF Framework/Wikipedia.xcdatamodeld/Wikipedia 4.xcdatamodel · high confidence

Implemented language-aware caching for Did You Know facts

The Did You Know feature now caches fetched facts locally to avoid redundant network requests within the same day. The new \WMFFeedDidYouKnowFetcher\ checks a stored date to determine if fresh data is needed, serving cached items if available. Caching is scoped per language variant and site, ensuring that users see facts relevant to their specific language setting without unnecessary data usage.

WMF Framework/Did You Know · high confidence

Improved image selection for 'In the news' stories and updated feed model structure

The Home feed now displays the correct article image for 'In the news' stories by identifying the specific article marked as 'pictured' in the story's HTML, rather than defaulting to the first link which may lack a thumbnail. This change introduces a new extension to parse story content and match titles to select the visual representative. Additionally, the underlying data models for the feed response have been restructured and renamed (e.g., \originalImage\ to \originalimage\ in coding keys, \WMFFeedResponse\ to \WMFFeedAPIResponse\) and updated to conform to Swift's \Sendable\ protocol for thread safety.

WMFData/Sources/WMFData/Models/Home · high confidence

Improved notification import reliability and new read-status management

The remote notifications system now persists import progress (continue IDs) and completion flags, allowing the app to resume fetching notifications after termination and ensuring each project is imported only once per install. A paging bug that caused imports to occur instead of refreshes has been fixed, with refresh operations now correctly stopping when existing notifications are detected. Additionally, users can now mark notifications as read or unread via new operations that optimistically update the local database before syncing with the API.

WMF Framework/Remote Notifications/Operations · high confidence

Introduce SwiftUI-based 'All Articles' view for Saved items

The Saved \> All Articles section now uses a new SwiftUI implementation (WMFSavedAllArticlesView) with a dedicated view model, replacing the previous UI approach. This change brings a consistent visual style with theme-aware backgrounds, a plain list style for articles, and an editing toolbar that allows users to batch-add or unsave selected articles. The view model handles article loading, filtering via search, and state management (loading, empty, data), ensuring the interface updates correctly as the user interacts with their saved content.

WMFComponents/Sources/WMFComponents/Components/Saved · high confidence

Introduce WMFService networking abstraction with HTTP error logging

The WMFData service layer now uses a new \WMFService\ protocol and \WMFBasicService\ implementation to handle network requests, replacing previous internal structures. This change introduces structured HTTP error logging for responses with status codes \>= 400 to the \mediawiki.client.error\ stream, providing better visibility into network failures. The new service layer also supports both form-encoded and JSON content types for POST requests and includes protocols (\WMFURLSession\) designed to facilitate network fixture mocking in tests.

WMFData/Sources/WMFData/Service · high confidence

Introduce new Core Data model and filtering for the Notifications Center

The Notifications Center now uses a new Core Data schema (RemoteNotification) to store and manage notification history, replacing the previous storage mechanism. This change introduces granular filtering capabilities, allowing users to sort notifications by specific types such as mentions, reverts, login alerts, and milestones. The update also improves deep-linking reliability by manually encoding URL fragments for talk page topics and adds support for interruption levels and relevance scores to better prioritize time-sensitive alerts like user talk messages and failed logins.

WMF Framework/Remote Notifications/Model · high confidence

Introduce new UIKit-based toast component with accessibility and glass-morphism support

The app now uses a new \WMFToastPresenter\ system to display notifications, replacing the previous alert/hint mechanism. This new component is built with UIKit (\WMFToastCardView\) and features a modern glass-morphism visual style on iOS 26+, along with improved layout handling that positions toasts above the keyboard and adjusts for the absence of a bottom tab bar. Key user-facing improvements include VoiceOver announcements for accessibility, the ability to update toast content (such as loading a thumbnail) without restarting the timer, and a design that prevents dismissal via background taps to ensure user attention. The presenter also handles animations using property animators and manages dismissal events (duration, swipe, or outside tap) more robustly.

WMFComponents/Sources/WMFComponents/Components/Shared/Toasts · high confidence

Introduce new Watchlist data models and filter settings

The Watchlist module now uses a new set of Swift data models to represent watchlist data and user preferences. This includes \WMFWatchlist\ for the list of items (containing details like title, revision IDs, user info, and timestamps), \WMFUndoOrRollbackResult\ for undo/rollback operations, and \WMFWatchlistExpiryType\ for expiration options. Additionally, \WMFWatchlistFilterSettings\ defines the available filtering criteria, such as activity level, contribution type (bot/human), significance, and change types (edits, creations, logged actions).

WMFData/Sources/WMFData/Models/Watchlist · high confidence

Introduce new article tabs overview UI with V2 grid, previews, and close-all functionality

The article tabs overview component has been replaced with a new SwiftUI-based implementation that supports a V2 grid layout for displaying tab thumbnails. This update adds context menu previews for individual tabs, a 'Close all tabs' action accessible via the overflow menu, and an empty state view. The navigation bar now dynamically updates its title to reflect the current tab count, and the layout includes logic to handle scrolling to the current tab and adjusting column counts based on screen size.

WMFComponents/Sources/WMFComponents/Components/Article Tabs · high confidence

Introduce structured configuration models for event streams

The WMFTestKitchen app now uses dedicated \SourceConfig\ and \StreamConfig\ classes to manage event stream settings. These models support decoding JSON configurations (including nested producer and metrics platform settings) and provide a lookup mechanism to retrieve specific stream configurations by name, replacing the previous ad-hoc or removed configuration approaches.

WMFTestKitchen/Sources/WMFTestKitchen/Config · high confidence

Introduces new base component classes for unified theming and lifecycle management

The WMFComponents library now provides a set of new base classes—WMFComponentView, WMFComponentViewController, WMFComponentHostingController, and WMFComponentNavigationController—that automatically subscribe to AppEnvironment changes to keep UI elements like status bar style and navigation bar appearance in sync with the current theme. These classes replace older patterns (such as RootNavigationController) and introduce a shared navigation bar setup method that applies system-default translucent gradients on iOS 26+ while maintaining legacy opaque theming for older versions. Additionally, a WMFCanvasViewController is provided to simplify embedding these components with automatic layout pinning.

WMFComponents/Sources/WMFComponents/Base · high confidence

Introduction of HistoryRecord struct and HistoryItem view model

The diff introduces a new \HistoryRecord\ struct to represent raw data from the store and a \HistoryItem\ class to serve as a view-model for SwiftUI lists. The \WMFHistoryDataController\ now groups these records into \HistorySection\s by day and exposes methods to delete, save, and unsave items via dependency-injected closures. This change adds new public types and data-fetching behavior to the history data controller.

WMFData/Sources/WMFData/Data Controllers/History · high confidence

Introduction of WMF-branded error handling and background task definitions

The WMFData module now includes a dedicated Errors.swift file defining specific error enums for data controllers (such as WMFDataControllerError and WMFDonateDataControllerError) and services, replacing previous naming conventions. Additionally, a new WMFBackgroundTasksNameKey file establishes a specific background task identifier for populating Year in Review report data, supporting the new reporting flow.

WMFData/Sources/WMFData · high confidence

Native localizations moved to Swift Package with plural support

Native iOS localizations have been migrated into the WMFNativeLocalizations Swift Package. This change introduces a centralized CommonStrings class for shared app text and adds proper pluralization support (Localizable.stringsdict) for languages such as Abkhazian, Afrikaans, Arabic, Assamese, Asturian, Avar, and Azerbaijani, ensuring correct grammar for counts in notifications, reading lists, and activity summaries.

WMFLocalizations/Sources · high confidence

New API URL helpers and standardized date encoding

This change introduces a suite of new extension methods in WMFData to standardize how the app constructs API URLs and formats dates. For URL generation, new helpers now build paths for MediaWiki, Wikimedia REST, and Payment APIs, with specific logic to fetch feature and donation configuration from test.wikipedia.org in staging environments. It also adds URL-safe character sets and dictionary encoding to ensure page titles and query parameters are correctly percent-encoded for API requests. Additionally, dedicated date formatters are added to handle MediaWiki API timestamps, metrics, and localized display strings, ensuring consistent date handling across different data sources.

WMFData/Sources/WMFData/Extensions · high confidence

New SwiftUI-based History view component

The History screen now uses a new SwiftUI implementation (WMFHistoryView, WMFHistoryViewModel, and WMFHistoryHostingController) to replace the previous UIKit version. This change introduces a List-based interface with sectioned history items, swipe actions for delete/share/save, and a context menu with article preview. The view model is isolated to the MainActor to prevent main-thread hangs, and the hosting controller disables automatic content inset adjustments to fix spacing issues when the search bar is unfocused. Users will see a refreshed history list with improved performance and consistent theming.

WMFComponents/Sources/WMFComponents/Components/History · high confidence

New SwiftUI-based Profile screen with unified navigation and notification badges

The Profile component has been rewritten in SwiftUI, introducing a new list-based UI that displays user-specific sections such as Notifications, User Page, Talk Page, Watchlist, Settings, and Donate. This update adds visual notification indicators, including numeric counts for unread messages, and integrates a coordinator pattern to handle navigation actions like logging out or viewing the donate page. The view also supports dynamic theming and handles localized strings for all menu items.

WMFComponents/Sources/WMFComponents/Components/Profile · high confidence

New SwiftUI-based Recently Searched view with swipe-to-delete

The Recently Searched component in the search interface has been replaced with a new SwiftUI implementation (WMFRecentlySearchedView). Users can now see their recent search terms in a list, tap a term to select it, swipe left on an item to delete it individually, or use the 'Clear All' button to remove the entire history. The view also displays a message when no searches are available and respects the app's theme for text and background colors.

WMFComponents/Sources/WMFComponents/Components/Search/Recently Searched · high confidence

New SwiftUI-based Settings interface

The Settings screen has been replaced with a new implementation built using SwiftUI. This change introduces a new \WMFSettingsView\ and \WMFSettingsViewController\ that render settings rows with support for icons, beta badges, toggles, and chevrons, driven by a new \WMFSettingsViewModel\. The new interface includes sections for account management, feed preferences (Home/Explore), donations, privacy, and other app settings, replacing the previous Objective-C based settings view controller.

WMFComponents/Sources/WMFComponents/Components/Settings · high confidence

New WidgetContentFetcher and updated WidgetController for widget data fetching

The widget framework introduces a new \WidgetContentFetcher\ class to handle fetching featured content, image data, and other widget-specific content via network requests, replacing or supplementing previous direct fetch patterns. The \WidgetController\ has been updated to support this new fetcher, manage widget timelines more effectively, and handle cache invalidation and updates for various widget types including featured articles, top reads, and picture of the day. This change improves the reliability and structure of data retrieval for widgets.

WMF Framework/Widget · high confidence

New Xcode schemes for app extensions and specialized testing

The project now includes dedicated Xcode schemes for the ContinueReadingWidget, NotificationServiceExtension, and WidgetsExtension app extensions, as well as for the WMF framework, Staging, Experimental, and RTL build configurations. Additionally, new schemes are provided for the Wikipedia Stickers extension and for running localization and language update utilities. A dedicated Performance Testing scheme has been added to run specific manual performance tests with the main thread checker disabled, and the main Wikipedia scheme has been updated to use a test plan and skip performance tests by default.

Wikipedia.xcodeproj/xcshareddata/xcschemes · high confidence

New editor toolbar and find-and-replace input accessory views

The editor's input accessory area now uses a redesigned expanding toolbar and a dedicated find-and-replace view. The expanding toolbar (WMFEditorToolbarExpandingView) presents primary actions (format text, reference, link, template, image, find in page) and secondary actions (lists, indentation, cursor navigation) in a scrollable, expandable interface, with buttons sized to a minimum 36x36 touch target and updated to use registerForTraitChanges for trait updates. The find-and-replace view (WMFFindAndReplaceView) provides text fields for find/replace, next/previous navigation, and a replace-type switch, with live match-count display and button states driven by a view model. Both views are loaded from XIBs, use SFSymbols for icons, and are configured for accessibility labels and dynamic type adjustments.

WMFComponents/Sources/WMFComponents/Components/Editors/Common Views · high confidence

New navigation bar configuration system and SwiftUI hosting support

The navigation bar component has been refactored to use a new configuration-driven architecture (WMFNavigationBarConfiguring) that standardizes title alignments (leading large, center compact, hidden, custom leading large), back button truncation, profile button accessibility, and search bar setup. This change introduces support for hosting SwiftUI views directly within navigation bar items via a new WMFBarButtonHostingView, ensuring proper sizing and vertical bar compatibility on newer iOS versions. Additionally, a new WMFNavigationBarHiding protocol provides helper methods to manage safe area overlays and prevent the navigation bar from sticking when scrolled to the top, improving consistency across views that hide the bar on scroll.

WMFComponents/Sources/WMFComponents/Extensions/Navigation Bar · high confidence

New test fixture serializes singleton resets to prevent test corruption

A new \WMFDataTestFixture\ helper has been added to the \WMFDataTestSupport\ module to manage test environment setup and teardown. This fixture introduces an async global state lease mechanism to serialize access to shared singletons, preventing race conditions and crashes (such as double-release errors) that occurred when parallel test suites attempted to reset shared data controllers concurrently. It also ensures that test environment snapshots are properly restored and temporary directories are cleaned up, even if a test fails unexpectedly.

WMFData/Sources/WMFDataTestSupport · high confidence

New test plans for UI, components, data, and unit tests

Added four new test plan files (UITests, WMFComponents, WMFData, Wikipedia) to standardize test execution. The UI test plan introduces configurations for multiple themes (light, sepia, dark, black) and languages (English, Hebrew, German, Vietnamese), including an E2E profile, while enabling code coverage. The Wikipedia unit test plan enables code coverage, locks the time zone to America/New\_York, and skips specific performance and manual tests to improve stability. The WMFData and WMFComponents plans enable code coverage, with WMFData also enabling Core Data concurrency debugging.

Test Plans · high confidence

Persistent cache model updated with variant support and new indexes

The Core Data model for the persistent cache has been updated to support image variants and improve query performance. A new 'variant' string attribute has been added to the PersistentCacheItem entity, and a new 'mustHaveCacheItems' relationship has been introduced to link cache items to specific groups. Additionally, fetch indexes have been added for the 'date' and a compound key of 'key' and 'variant' to optimize data retrieval.

WMF Framework/PersistentCache.xcdatamodeld · high confidence

Prepared Swift 6.2 concurrency migration configuration

A new shared configuration file (SwiftConcurrency.xcconfig) has been added to define the flags required for the Swift 6.2 concurrency migration. This file outlines a four-stage migration plan—ranging from targeted warnings to full language mode adoption—but all flags are currently commented out, meaning this change introduces no immediate behavioral changes to the build. It serves as groundwork, allowing specific targets to opt into stricter concurrency checks incrementally without altering the current build output.

Configurations · high confidence

Recovery of 2026 Reading Challenge completion status

The app now restores the completion status for the 2026 Reading Challenge (a 25-day streak between May 11 and June 18, 2026) for users who completed it before the feature was removed. This is achieved by checking a legacy widget flag and, if absent, recomputing the longest consecutive-day reading streak from local page view history, then persisting the result to a durable user defaults flag.

WMFData/Sources/WMFData/Data Controllers/Reading Challenge · high confidence

Relocates localization handling to prevent build script conflicts

The localization handling classes have been moved to a dedicated folder that is excluded from the automated localization script. This change prevents build errors and build system trips caused by the script processing these specific files, while maintaining the existing Objective-C and Swift wrapper interfaces for string resolution.

WMF Framework/Localization · high confidence

Remote Notifications Core Data model updated to version 3

The Core Data model for remote notifications has been advanced to version 3, as indicated by the new \.xccurrentversion\ file pointing to \RemoteNotifications 3.xcdatamodel\. This change ensures the application uses the latest schema version for storing and managing remote notification data.

WMF Framework/Remote Notifications/Model/RemoteNotifications.xcdatamodeld · high confidence

Replace Objective-C empty view with new SwiftUI component

The shared empty state view has been replaced with a new SwiftUI-based \WMFEmptyView\ component. This new implementation supports configurable themes, action closures, image sizing, and a compact button option. It also introduces a non-scrollable mode for cases where scrolling is not desired, while maintaining accessibility features like dynamic type size capping and safe area handling.

WMFComponents/Sources/WMFComponents/Components/Shared/Empty View · high confidence

Replaced legacy UI test helpers with explicit robot pattern

The UI test suite in WikipediaUITests/Robots has been restructured to use a dedicated robot pattern, introducing new driver classes for key app surfaces including the onboarding flow (OnboardingRobot, NewOnboardingRobot), article reading (ArticleRobot), search (SearchRobot), explore tab (ExploreRobot), image gallery (ImageGalleryRobot), and language selection (AllLanguagesRobot, PreferredLanguagesRobot). These robots encapsulate screen assertions, navigation actions, and content interactions, providing a more explicit and maintainable interface for end-to-end tests compared to the previous ad-hoc helpers.

WikipediaUITests/Robots · high confidence

Replaced legacy UI tests with a structured robot-based test suite

The WikipediaUITests target has been restructured to use a 'robot' pattern, where test files now express high-level user journeys (such as onboarding, explore, and article controls) while reusable XCUITest mechanics are centralized in robot classes. This change introduces new test files for app onboarding, article controls, image galleries, and the explore tab, alongside comprehensive documentation (ARCHITECTURE.md, ROBOTS.md, WRITING\_UI\_TESTS.md) and a dedicated E2E smoke test list (E2ESmokeTests.txt) to ensure deterministic, fixture-backed regression coverage.

WikipediaUITests · high confidence

SWStepSlider now supports RTL layouts and accessibility

The SWStepSlider component has been updated to automatically flip 180 degrees when the application is in Right-to-Left (RTL) interface mode, ensuring correct visual orientation for users in RTL locales. Additionally, the slider is now configured as an accessibility element with the 'adjustable' trait, allowing screen readers to properly interpret and interact with the control.

Wikipedia/Third Party Code/SWStepSlider · high confidence

Source editor syntax highlighting rewritten in Swift

The source editor's syntax highlighting engine has been rewritten from Objective-C to Swift, introducing dedicated formatters for bold, italics, comments, headings, links, lists, and find-and-replace operations. This change updates how the editor visually distinguishes wiki markup (such as bold/italic markers, headers, and links) using specific color and font attributes, ensuring consistent styling and improved maintainability for users editing source text.

WMFComponents/Sources/WMFComponents/Components/Editors/Source Editor · high confidence

Standardized code formatting and linting configuration

The project now enforces consistent code style through the addition of \.clang-format\ for Objective-C and \.swiftlint.yml\ for Swift, replacing previous tooling. A pre-commit hook is automatically configured during setup to run ClangFormat on Objective-C files, ensuring that code contributions adhere to the defined formatting rules before being committed.

(repo-wide) · high confidence

Updated ArticleData Core Data model schema

The ArticleData Core Data model has been updated to version 2, introducing a new entity structure for storing article content and associated media. This change adds support for tracking article sections (Section entity) and section-specific images (SectionImage entity), while also refining the Image entity to better handle binary data storage and relationships with galleries and sections. Existing entities like Article, History, and Saved remain but are now part of this expanded schema, ensuring that local caching of Wikipedia articles includes detailed structural data for improved offline reading and navigation.

Wikipedia/Code/ArticleData.xcdatamodeld · high confidence

Updated Core Data model for article tabs and year-in-review reports

The local data store schema has been updated to support article tab management and year-in-review features. New entities include CDArticleTab and CDArticleTabItem to track user-curated article collections, and CDYearInReviewReport and CDYearInReviewSlide to store annual summary data. The existing CDPage entity now maintains relationships with these new structures, and fetch indexes have been added to optimize queries for pages by project and namespace.

WMFData/Sources/WMFData/Resources/WMFData.xcdatamodeld/WMFData 4.xcdatamodel · high confidence

Updated Core Data model schema to version 5

The local storage schema has been migrated to version 5, introducing new entities for article tab management (CDArticleTab, CDArticleTabItem) and year-in-review reports (CDYearInReviewReport, CDYearInReviewSlide), while renaming the saved page entity to CDPageSavedInfo and updating related relationships.

WMFData/Sources/WMFData/Resources/WMFData.xcdatamodeld/WMFData 5.xcdatamodel · high confidence

Updated data model for reading lists and articles

The app's local data model has been updated to version 8, introducing a new \isSavedMigrated\ boolean attribute on the \WMFArticle\ entity to track migration status. This change ensures that the core data schema for reading lists, entries, and articles is synchronized with the latest application requirements.

WMF Framework/Wikipedia.xcdatamodeld/Wikipedia 8.xcdatamodel · high confidence

Updated remote notifications data model with new fields and read state tracking

The Core Data model for remote notifications has been upgraded to version 3, introducing several new attributes to the RemoteNotification entity including agentId, agentName, messageHeader, revisionID, section, titleFull, titleNamespace, titleNamespaceKey, titleText, and utcUnixString to support richer notification metadata. The model now explicitly tracks the read status of notifications via an isRead boolean attribute (defaulting to YES) and maintains a uniqueness constraint on the key field to ensure data integrity. Additionally, the WMFKeyValue entity remains part of the schema with its existing compound index.

WMF Framework/Remote Notifications/Model/RemoteNotifications.xcdatamodeld/RemoteNotifications 3.xcdatamodel · high confidence

Updated third-party library attributions and added privacy manifest

The app now includes a new \LibrariesUsed.plist\ file that consolidates license texts and attribution links for third-party dependencies, including updates for Apple Maps (pointing to the new SSL attribution page), Lottie, and HCaptcha, while removing references to deprecated libraries like HockeyApp, Piwik, hpple, and Masonry. Additionally, a \PrivacyInfo.xcprivacy\ file has been added to declare the use of \UserDefaults\ and disk space APIs, ensuring compliance with Apple's privacy requirements.

Wikipedia/Resources · high confidence

Updated workspace build system settings

The Xcode workspace configuration has been updated to use the latest build system. This is achieved by adding a new workspace data file, enabling workspace checks, and setting the BuildSystemType to 'Latest' in the workspace settings, ensuring consistent build behavior across the project.

Wikipedia.xcodeproj/project.xcworkspace · high confidence

WMFDataEnvironment now uses explicit locking for thread-safe service and store access

The WMFDataEnvironment singleton now explicitly guards its mutable service and store slots (such as mediaWikiService, basicService, and various stores) with an NSLock to ensure thread safety when accessed from background Core Data contexts and actors. While the environment itself is marked @unchecked Sendable to allow safe concurrent reading of the .current instance, the internal state changes are synchronized. Additionally, a new testing API (snapshotForTesting/restoreForTesting) allows tests to capture and reset this shared state, and the environment now exposes utilities for HTTP error logging and app language identification.

WMFData/Sources/WMFData/Environment · high confidence

Watchlist filter UI now uses a prominent check icon for the close button

The Watchlist filter screen has been updated to use a prominent check icon for its close button, aligning with the visual style used in article tabs, settings, and notifications. This change is implemented in the new \WMFWatchlistFilterHostingController\ and \WMFWatchlistFilterView\ components, which configure the navigation bar using the shared \WMFNavigationBarConfiguring\ protocol and the \WMFLargeCloseButtonConfig\ with \.prominentCheck\ image type. The filter view itself is built on SwiftUI and wraps a form view to display the various filtering options.

WMFComponents/Sources/WMFComponents/Components/Watchlist/Filter · high confidence

Watchlist view restructured with new SwiftUI components and user menu actions

The Watchlist component has been refactored to use a new SwiftUI-based view hierarchy (WMFWatchlistView) and a dedicated view model (WMFWatchlistViewModel) that organizes items by day. A new enum (WMFWatchlistUserButtonAction) defines specific user menu actions, including a new 'thank' action for revisions. The UI now displays edit summaries with distinct styling for empty comments and uses a small menu button for user interactions, while the view controller handles navigation bar configuration and filter state updates.

WMFComponents/Sources/WMFComponents/Components/Watchlist · high confidence

Widgets now handle feed errors gracefully and show diagnostics

The widget models have been updated to prevent the Featured Article, Picture of the Day, and Top Read widgets from going blank when the feed API returns malformed data or omits required fields (such as \view\_history\ for trending articles). The system now decodes each widget section independently and falls back to previously cached content if a fetch fails or results in partial data. Additionally, fetch outcomes and specific decoding errors are now recorded in \WidgetFetchDiagnostics\, which are visible in the Developer Settings to help troubleshoot widget content issues.

WMF Framework/Widget/Models · high confidence

Year in Review slide data controllers refactored for modularity and new metrics

The Year in Review feature's data layer has been restructured into distinct, modular slide data controllers (e.g., DonateCount, MostReadCategories, MostReadDate, SaveCount, ViewCount, EditCount, Location, ReadCount, TopArticles) managed by a central factory. This change introduces new personalized metrics, including a donate count slide, a top articles list (filtered to pages with 2+ visits), and a most-read categories slide (limiting to categories with 2+ underscores and hiding the slide if fewer than 3 are found). The data fetching logic now relies on specific configuration dates (\dataStartDate\, \dataEndDate\) and delegates for legacy page views and saved articles, ensuring that slide data is populated only when relevant and configurable.

WMFData/Sources/WMFData/Data Controllers/Year In Review/Slide Data Controllers · high confidence

Fixes

Updated Core Data model for remote notifications

The app now uses a new version (v2) of the Core Data model for remote notifications. This version includes the RemoteNotification entity with attributes for page ID, agent, category, date, ID, message, state number, type, and wiki, along with a fetch index on state number. It also includes the WMFKeyValue entity with attributes for date, group, key, and value, along with a compound fetch index on key, group, and date.

WMF Framework/Remote Notifications/Model/RemoteNotifications.xcdatamodeld/RemoteNotifications 2.xcdatamodel · high confidence

Test coverage

Added German-language Wikipedia test fixtures; Added missing PageContentService test fixtures; Added onboarding loading animation asset; Added tests for StreamConfig JSON decoding; Added tests for edit mode and editor sheet suppression settings; Added tests for localization string resolution and fallback behavior; Added unit tests for HTML link parsing, onboarding, donation, and UI components; Added unit tests for Notifications Center cell view models and service helpers; Added unit tests for image insertion wikitext generation; Added unit tests for short description handling and Wikidata API response parsing; Added unit tests for the Choose Editor view model; Added unit tests for the editing preferences settings view model; Expanded unit test coverage for WMFData components; Expanded unit test coverage for article preview, language links, and async utilities; New test fixtures and tests for search network behavior; New test infrastructure and mocks for WikipediaUnitTests; Updated test fixtures for search, feed, and metrics APIs.

Dependencies

Adopt Swift 6.2 concurrency and update third-party dependencies

The project now requires iOS 17+ for the main application modules (WMFComponents, WMFData, WMFTestKitchen) and iOS 16+ for localization resources, reflecting a shift to Swift 6.2 toolchains. WMFComponents adopts Swift 6.2's 'approachable concurrency' by defaulting all declarations to MainActor isolation while maintaining Swift 5 language mode for backward compatibility. Third-party dependencies have been updated: SDWebImage is pinned to 5.19.0+, Lottie to 4.5.0+, and Rive is added at exact version 6.26.0. The resolved package list also includes CocoaLumberjack 3.9.0, hCaptcha iOS SDK 2.13.0, RxSwift 6.10.2, and swift-log 1.6.4.

(dependencies) · high confidence

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

How this codebase got here

Score

  • CAI 40 → 40 (+0.2)
  • Rubric changed (rubric-2026.09.11 → rubric-2026.09.18) — scores are not directly comparable.

Lenses

  • Code Health 85 → 84 (-0.5)
  • Architecture 93 → 82 (-10.8)
  • Maturity 64 → 65 (+0.0)
  • Readiness 48 → 46 (-2.1)
  • Security 43 → 52 (+9.3)
  • Domain Modelling 91 → 91 (-0.2)
  • Accessibility 23 → 23 (+0.0)
  • Performance 60 (new)

Resolved (73)

  • Boundary-crossing change coupling: WMFYearInReviewBodyView.swift ↔ YearInReviewCoordinator.swift (WMFComponents/Sources/WMFComponents/Components/Year in Review/Views/WMFYearInReviewBodyView.swift)
  • Boundary-crossing change coupling: WMFYearInReviewContributorSlideViewModel.swift ↔ YearInReviewCoordinator.swift (WMFComponents/Sources/WMFComponents/Components/Year in Review/View Models/WMFYearInReviewContributorSlideViewModel.swift)
  • Boundary-crossing change coupling: WMFYearInReviewScrollView.swift ↔ YearInReviewCoordinator.swift (WMFComponents/Sources/WMFComponents/Components/Year in Review/Views/WMFYearInReviewScrollView.swift)
  • ClassTooLong: WMFYearInReviewViewModel (WMFComponents/Sources/WMFComponents/Components/Year in Review/View Models/WMFYearInReviewViewModel.swift)
  • ClassTooLong: YearInReviewCoordinator (Wikipedia/Code/YearInReviewCoordinator.swift)
  • Documentation: no project overview (README.md)
  • Duplicated block (10–11 lines × 2) (WMFComponents/Sources/WMFComponents/Components/Shared/Toasts/WMFToastPresenter.swift)
  • Duplicated block (12 lines × 2) (WMFComponents/Sources/WMFComponents/Components/Year in Review/View Models/WMFYearInReviewIntroV3ViewModel.swift)
  • Duplicated block (12 lines × 3) (WMFComponents/Sources/WMFComponents/Components/Donate Form/WMFDonateViewModel.swift)
  • Duplicated block (12 lines × 5) (WMFComponents/Sources/WMFComponents/Components/Donate Form/WMFDonateViewModel.swift)
  • Duplicated block (12–14 lines × 2) (Wikipedia/Code/WMFAccountCreationViewController.swift)
  • Duplicated block (13 lines × 2) (Wikipedia/Code/YearInReviewCoordinator.swift)
  • Duplicated block (14 lines × 2) (WMFComponents/Sources/WMFComponents/Components/Shared/Toasts/WMFReadingListToastPresenter.swift)
  • Duplicated block (15–16 lines × 2) (WMFComponents/Sources/WMFComponents/Components/Year in Review/View Models/WMFYearInReviewViewModel.swift)
  • Duplicated block (18 lines × 2) (WMFComponents/Sources/WMFComponents/Components/Profile/WMFProfileViewModel.swift)
  • Duplicated block (18–19 lines × 2) (WMF Framework/Widget/WidgetController.swift)
  • Duplicated block (21 lines × 2) (WMF Framework/Widget/WidgetController.swift)
  • Duplicated block (21 lines × 2) (WMFComponents/Sources/WMFComponents/Components/Donate Form/WMFDonateViewModel.swift)
  • Duplicated block (21 lines × 2) (WMFComponents/Sources/WMFComponents/Components/Profile/WMFProfileViewModel.swift)
  • Duplicated block (5 lines × 2) (WMFComponents/Sources/WMFComponents/Components/Year in Review/Views/Shareable Slide Views/WMFYearInReviewSlideLocationShareableView.swift)
  • …and 53 more

New (178)

  • ArticlePeekPreviewViewController.contextMenuItems (cognitive 36) (Wikipedia/Code/ArticlePeekPreviewViewController.swift)
  • ArticlePeekPreviewViewController.contextMenuItems (cyclomatic 23) (Wikipedia/Code/ArticlePeekPreviewViewController.swift)
  • Boundary-crossing change coupling: WMFYearInReviewView.swift ↔ YearInReviewCoordinator.swift (WMFComponents/Sources/WMFComponents/Components/Year in Review/WMFYearInReviewView.swift)
  • ClassTooLong: HtmlUtils (WMFComponents/Sources/WMFComponents/Utility/HTMLUtils.swift)
  • ClassTooLong: WMFActivityTabView (WMFComponents/Sources/WMFComponents/Components/Activity Tab/WMFActivityTabView.swift)
  • Duplicated block (10 lines × 2) (WMFComponents/Sources/WMFComponents/Components/Settings/Home/For You/Whats Driving/Your Interests/WMFHomeFeedInterestsSettingsView.swift)
  • Duplicated block (10 lines × 2) (Wikipedia/Code/UIViewController+Extensions.swift)
  • Duplicated block (10–11 lines × 2) (WMFComponents/Sources/WMFComponents/Components/Activity Tab/WMFActivityTabInfoCardView.swift)
  • Duplicated block (10–11 lines × 2) (WMFComponents/Sources/WMFComponents/Components/Activity Tab/WMFImpactViews.swift)
  • Duplicated block (10–12 lines × 2) (Wikipedia/Code/ViewControllerRouter.swift)
  • Duplicated block (11 lines × 2) (Widgets/Widgets/FeaturedArticleWidget.swift)
  • Duplicated block (11 lines × 2) (Wikipedia/Code/TalkPageReplyComposeContentView.swift)
  • Duplicated block (11 lines × 3) (WMFComponents/Sources/WMFComponents/Components/Donate Form/WMFDonateViewModel.swift)
  • Duplicated block (12 lines × 2) (WMFComponents/Sources/WMFComponents/Components/Shared/Page/WMFPageRow.swift)
  • Duplicated block (12 lines × 2) (WMFData/Sources/WMFData/Extensions/URL+API.swift)
  • Duplicated block (12 lines × 7) (WMFComponents/Sources/WMFComponents/Components/Donate Form/WMFDonateViewModel.swift)
  • Duplicated block (12 lines × 8) (WMFComponents/Sources/WMFComponents/Components/Settings/Account/WMFAccountSettingsView.swift)
  • Duplicated block (13 lines × 6) (WMFComponents/Sources/WMFComponents/Components/Settings/Account/WMFAccountSettingsView.swift)
  • Duplicated block (13–14 lines × 2) (Wikipedia/Code/DiffController.swift)
  • Duplicated block (14 lines × 2) (WMF Framework/MWKDataStore+LegacyPageViews.swift)
  • …and 158 more

Changes since last survey

  • 218 commits — 202 feature/other, 16 fixes

By area

  • (repo) — 76 commits
  • WMFComponents/Sources — 54 commits
  • Wikipedia/Code — 37 commits
  • WMFData/Sources — 21 commits
  • WMFLocalizations/Sources — 9 commits
  • WMF Framework/Widget — 4 commits
  • Wikipedia/Localizations — 3 commits
  • (root) — 2 commits
  • .github/workflows — 2 commits
  • Wikipedia.xcodeproj/project.pbxproj — 2 commits
  • Wikipedia/assets — 2 commits
  • WMF Framework/WMFFaceDetectionAdapter.swift — 1 commit
  • WMFComponents/Package.swift — 1 commit
  • WMFComponents/Tests — 1 commit
  • WMFData/Tests — 1 commit
  • Wikipedia/Resources — 1 commit
  • WikipediaUnitTests/Code — 1 commit

Notable commits

  • fix: Camel case fix
  • fix: Fix Kartographer map requests on iOS
  • fix: Fix Xcode 27 compile failure
  • fix: Fix crash when the image info response has no pages
  • fix: Fix empty states
  • fix: Fix for iPad
  • fix: Fix illustration for semantic search
  • fix: Fix the VoiceOver order and focus in the search results
  • fix: Fix the retain cycle in the Search settings bindings and type the callbacks
  • fix: Fix theming
  • fix: Merge pull request #6036 from wikimedia/bugfix/T355134
  • fix: Merge pull request #6098 from slpaulson/423204-fix-activity-customization-close-button-alignment
  • fix: Merge pull request #6208 from wikimedia/feature/T437359/fix-entry-point-illustration
  • fix: Merge pull request #6224 from wikimedia/fix/kartographer-map-referer
  • fix: Merge pull request #6229 from wikimedia/bugfix/T439445/image-info-empty-response
  • fix: Revert "Remove YIR settings"
  • change: 2026 -> 2025
  • change: ADDS app open, new install onboarding start
  • change: Add 2026 YiR coordinator to activity tab
  • change: Add Rive Library
  • …and 198 more

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

wikimedia/wikipedia-ios was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.

About this page

  • The score is its most recent published measurement, taken on 30 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit 2d6cd1d1a578bee0e19fb89b65302fdc96c2714d — the exact code this score is about.
  • Scored under rubric-2026.09.18 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-cb25ca4feafa.