wikimedia/wikipedia-ios
39.8
Weak · 30 September 2026
154.4k
lines of production code
Swift
with Objective-C
2
measurements over time
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
CI script now uses symlinks for localization directories
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.