Revision control

Copy as Markdown

---
about:
description: The root level Feature Manifest for Firefox for iOS
ios:
class: FxNimbus
module: Client
channels:
- developer
- beta
- release
features:
general-app-features:
description: The feature that contains feature flags for the entire application
variables:
pull-to-refresh:
description: "This property defines whether or not the feature is enabled"
type: GeneralFeature
default:
{
"status": true
}
report-site-issue:
description: "This property defines whether or not the feature is enabled"
type: GeneralFeature
default:
{
"status": false
}
shake-to-restore:
description: "This property defines whether or not the feature is enabled"
type: GeneralFeature
default:
{
"status": false
}
defaults:
- channel: beta
value: {
"pull-to-refresh": {
"status": true
},
"report-site-issue": {
"status": true
},
"shake-to-restore": {
"status": true
}
}
- channel: developer
value: {
"pull-to-refresh": {
"status": true
},
"report-site-issue": {
"status": true
},
"shake-to-restore": {
"status": true
}
}
start-at-home-feature:
description: The controls for Start at Home feature
variables:
setting:
description: "This property provides a default setting for the startAtHomeFeature"
type: StartAtHome
default: after-four-hours
defaults:
- channel: beta
value: {
"setting": after-four-hours
}
- channel: developer
value: {
"setting": after-four-hours
}
onboarding-feature:
description: The feature that controls whether to show or not Upgrade onboarding
variables:
upgrade-flow:
description: >
If true, we show the Upgrade onboarding screen when the user upgrades the version.
type: Boolean
default: false
first-run-flow:
description: >
If true, we show the new Onboarding screen when the user for v106 version.
type: Boolean
default: true
defaults:
- channel: beta
value: {
"upgrade-flow": false,
"first-run-flow": true
}
- channel: developer
value: {
"upgrade-flow": false,
"first-run-flow": true
}
spotlight-search:
description: Add pages as items findable with Spotlight.
variables:
enabled:
description: If this is true, then on each page load adds a new item to Spotlight.
type: Boolean
default: false
searchable-content:
type: Option<PageContent>
default: text-excerpt
description: >
The text content that is made searchable.
If this is `null` then no additional content is used, and only the title and URL will be used.
icon-type:
type: Option<IconType>
default: letter
description: >
The icon that is displayed next to the item in the search results.
If this is `null`, then no icon is displayed.
keep-for-days:
type: Option<Int>
default: null
description: >
Number of days to keep the item before automatic deletion.
If this is left `null`, then it is left to iOS's default.
defaults:
- value:
enabled: false
- channel: developer
value:
enabled: true
icon-type: screenshot
search:
description: >
Configuring the functionality to do with search.
This will be separated into smaller sub-features in later releases.
variables:
awesome-bar:
type: AwesomeBar
description: Configuring the awesome bar.
default: {}
defaults:
- value:
awesome-bar:
use-page-content: false
search-highlights: false
position:
is-position-feature-enabled: true
is-bottom: true
is-toolbar-cfr-on: true
- channel: developer
value:
awesome-bar:
search-highlights: false
position:
is-position-feature-enabled: true
is-bottom: false
is-toolbar-cfr-on: true
- channel: beta
value:
awesome-bar:
search-highlights: false
position:
is-position-feature-enabled: true
is-bottom: false
is-toolbar-cfr-on: true
homescreenFeature:
description: The homescreen that the user goes to when they press home or new tab.
variables:
sections-enabled:
description: >
This property provides a lookup table of whether or not the given section should be enabled.
If the section is enabled, it should be toggleable in the settings screen, and on by default.
type: Map<HomeScreenSection, Boolean>
default:
{
"top-sites": true,
"jump-back-in": true,
"recently-saved": true,
"recent-explorations": true,
"pocket": true
}
sponsored-tiles:
description: >
This property defines the sponsored tile feature on the
homepage, which is not a section therein.
type: SponsoredTiles
default:
{
"status": true,
"max-number-of-tiles": 2
}
pocket-sponsored-stories:
description: >
This property defines whether pocket sponsored
stories appear on the homepage.
type: Boolean
default: false
jump-back-in-synced-tab:
description: >
This property defines whether the synced tab card
appears on the homepage in the jump back in section.
type: Boolean
default: true
defaults:
- channel: developer
value: {
"sections-enabled": {
"top-sites": true,
"jump-back-in": true,
"recently-saved": true,
"recent-explorations": true,
"pocket": true
},
"sponsored-tiles": {
"status": true,
"max-number-of-tiles": 2
},
"wallpaper-feature": {
"status": true
},
"pocket-sponsored-stories": true,
"jump-back-in-synced-tab": true
}
- channel: beta
value: {
"sections-enabled": {
"top-sites": true,
"jump-back-in": true,
"recently-saved": true,
"recent-explorations": true,
"pocket": true
},
"sponsored-tiles": {
"status": true,
"max-number-of-tiles": 1
},
"wallpaper-feature": {
"status": true
},
"pocket-sponsored-stories": false,
"jump-back-in-synced-tab": true
}
search-term-groups-feature:
description: The feature that controls whether or not search term groups are enabled.
variables:
grouping-enabled:
description: "This property provides a lookup table of whether or not the given grouping should be enabled."
type: Map<SearchTermGroups, Boolean>
default:
{
"history-groups": true,
"tab-tray-groups": false,
}
defaults:
- channel: beta
value: {
"grouping-enabled": {
"history-groups": true,
"tab-tray-groups": true,
}
}
- channel: developer
value: {
"grouping-enabled": {
"history-groups": true,
"tab-tray-groups": true,
}
}
tabTrayFeature:
description: The tab tray screen that the user goes to when they open the tab tray.
variables:
sections-enabled:
description: "This property provides a lookup table of whether or not the given section should be enabled.
If the section is enabled, it should be toggleable in the settings screen, and on by default."
type: Map<TabTraySection, Boolean>
default:
{
"inactive-tabs": true,
}
contextual-hint-feature:
description: This set holds all features pertaining to contextual hints.
variables:
features-enabled:
description: This property provides a lookup table of whether specific contextual hints are enabled.
type: Map<ContextualHint, Boolean>
default:
{
"jump-back-in-synced-tab-contextual-hint": true,
"toolbar-hint": false
}
defaults:
- channel: developer
value: {
"features-enabled": {
"jump-back-in-synced-tab-contextual-hint": true,
"toolbar-hint": true
}
}
- channel: beta
value: {
"features-enabled": {
"jump-back-in-synced-tab-contextual-hint": true,
"toolbar-hint": true
}
}
messaging:
description: >
Configuration for the messaging system.
In practice this is a set of growable lookup tables for the
message controller to piece together.
variables:
message-under-experiment:
description: Id or prefix of the message under experiment.
type: Option<String>
default: null
messages:
description: A growable collection of messages, where the Key is the message identifier and the value is its associated MessageData.
type: Map<String, MessageData>
default: {}
triggers:
description: >
A collection of out the box trigger
expressions. Each entry maps to a
valid JEXL expression.
type: Map<String, String>
default: {}
styles:
description: >
A map of styles to configure message
appearance.
type: Map<String, StyleData>
default: {}
actions:
type: Map<String, String>
description: A growable map of action URLs.
default: {}
on-control:
type: ControlMessageBehavior
description: What should be displayed when a control message is selected.
default: show-next-message
defaults:
- value:
triggers:
NOT_INSTALLED_TODAY: days_since_install > 0
NOT_LAUNCHED_YESTERDAY: app_cycle.foreground|eventLastSeen('Days', 1) > 1
AFTER_THREE_LAUNCHES_THIS_WEEK: app_cycle.foreground|eventSum('Weeks', 1, 0) >= 3
USER_RECENTLY_INSTALLED: days_since_install < 7
USER_RECENTLY_UPDATED: days_since_update < 7 && days_since_install != days_since_update
USER_TIER_ONE_COUNTRY: ('US' in locale || 'GB' in locale || 'CA' in locale || 'DE' in locale || 'FR' in locale)
USER_EN_SPEAKER: "'en' in locale"
USER_DE_SPEAKER: "'de' in locale"
USER_FR_SPEAKER: "'fr' in locale"
DEVICE_ANDROID: os == 'Android'
DEVICE_IOS: os == 'iOS'
I_AM_DEFAULT_BROWSER: "is_default_browser"
I_AM_NOT_DEFAULT_BROWSER: "is_default_browser == false"
SUPPORTS_DEFAULT_BROWSER: os_version|versionCompare('14.!') >= 0
ALWAYS: "true"
NEVER: "false"
actions:
OPEN_SETTINGS: ://deep-link?url=settings/general
OPEN_SETTINGS_NEW_TAB: ://deep-link?url=settings/newtab
OPEN_SETTINGS_HOMESCREEN: ://deep-link?url=settings/homepage
OPEN_SETTINGS_WALLPAPERS: ://deep-link?url=settings/wallpaper
OPEN_SETTINGS_EMAIL: ://deep-link?url=settings/mailto
OPEN_SETTINGS_SEARCH_ENGINE: ://deep-link?url=settings/search
OPEN_SETTINGS_PRIVACY: ://deep-link?url=settings/clear-private-data
OPEN_SETTINGS_FXA: ://deep-link?url=settings/fxa
OPEN_SETTINGS_THEME: ://deep-link?url=settings/theme
VIEW_BOOKMARKS: ://deep-link?url=homepanel/bookmarks
VIEW_TOP_SITES: ://deep-link?url=homepanel/top-sites
VIEW_READING_LIST: ://deep-link?url=homepanel/reading-list
VIEW_HISTORY: ://deep-link?url=homepanel/history
VIEW_DOWNLOADS: ://deep-link?url=homepanel/downloads
ENABLE_PRIVATE_BROWSING: ://deep-link?url=homepanel/new-private-tab
MAKE_DEFAULT_BROWSER: ://deep-link?url=default-browser/system-settings
MAKE_DEFAULT_BROWSER_WITH_TUTORIAL: ://deep-link?url=default-browser/tutorial
styles:
FALLBACK:
priority: 40
max-display-count: 20
DEFAULT:
priority: 50
max-display-count: 5
PERSISTENT:
priority: 50
max-display-count: 20
SURVEY:
priority: 55
max-display-count: 10
WARNING:
priority: 60
max-display-count: 10
URGENT:
priority: 100
max-display-count: 10
messages:
default-browser:
title: Default Browser/DefaultBrowserCard.Title
text: Default Browser/DefaultBrowserCard.Description
action: "MAKE_DEFAULT_BROWSER_WITH_TUTORIAL"
trigger: ["I_AM_NOT_DEFAULT_BROWSER", "SUPPORTS_DEFAULT_BROWSER"]
style: "FALLBACK"
button-label: Default Browser/DefaultBrowserCard.Button.v2
wallpaper-feature:
description: This property defines the configuration for the wallpaper feature
variables:
configuration:
description: This property defines the configuration for the wallpaper feature
type: WallpaperConfiguration
default:
{
"status": true,
"version": v1,
}
onboarding-sheet:
description: This property defines whether the wallpaper onboarding is shown or not
type: Boolean
default: true
defaults:
- channel: beta
value: {
"configuration": {
"status": true,
"version": v1,
},
"onboarding-sheet": true
}
- channel: developer
value: {
"configuration": {
"status": true,
"version": v1,
},
"onboarding-sheet": true
}
share-sheet:
description: This feature define the redesign of the share sheet
variables:
move-actions:
description: If true copy and send to device are moved to share sheet
type: Boolean
default: false
toolbar-changes:
description: If true share option is shown on the toolbar
type: Boolean
default: false
defaults:
- channel: developer
value: {
"move-actions": true,
"toolbar-changes": true
}
- channel: beta
value: {
"move-actions": true,
"toolbar-changes": true
}
credit-card-autofill:
description: This property defines the credit card autofill feature
variables:
credit-card-autofill-status:
description: If true, we will allow user to use the credit autofill feature
type: Boolean
default: false
defaults:
- channel: developer
value: {
"credit-card-autofill-status": true
}
- channel: beta
value: {
"credit-card-autofill-status": true
}
types:
objects:
GeneralFeature:
description: "The configuration for the a feature that can be enabled or disabled"
fields:
status:
type: Boolean
description: Whether or not the feature is enabled
default: false
AwesomeBar:
description: A configuration option for the awesome bar. Part of the `search` feature.
fields:
min-search-term:
description: The minimum number of characters that the user types before searching in the page.
type: Int
default: 3
use-page-content:
description: Search in the open tab's text content when typing.
type: Boolean
default: false
search-highlights:
description: "Whether or not search highlights are enabled"
type: Boolean
default: false
position:
description: >
This property defines whether or not the feature is
enabled, and the position of the search bar
type: SearchBarPositionFeature
default:
is-position-feature-enabled: true
is-bottom: true
is-toolbar-cfr-on: true
SearchBarPositionFeature:
description: "The configuration for the bottom search bar on the homescreen"
fields:
is-position-feature-enabled:
type: Boolean
description: Whether or not the feature is enabled
default: true
is-bottom:
type: Boolean
description: Whether or not the default position is at the bottom
default: true
is-toolbar-cfr-on:
type: Boolean
description: Whether or not the toolbar CFR shows. This is a temporary hack for Nimbus
default: true
SponsoredTiles:
description: "The configuration for the sponsored tile on the homescreen"
fields:
status:
type: Boolean
description: Whether or not the feature is enabled
default: false
max-number-of-tiles:
type: Int
description: The maximum number of sponsored tiles a user can see
default: 2
MessageData:
description: >
An object to describe a message. It uses human
readable strings to describe the triggers, action and
style of the message as well as the text of the message
and call to action.
fields:
action:
type: String
description: >
A URL of a page or a deeplink.
This may have substitution variables in.
# This should never be defaulted.
default: ""
title:
type: Option<Text>
description: "The title text displayed to the user"
default: null
text:
type: Text
description: "The message text displayed to the user"
# This should never be defaulted.
default: ""
is-control:
type: Boolean
description: "Indicates if this message is the control message, if true shouldn't be displayed"
default: false
button-label:
type: Option<Text>
description: >
The text on the button. If no text
is present, the whole message is clickable.
default: null
style:
type: String
description: >
The style as described in a
`StyleData` from the styles table.
default: DEFAULT
trigger:
type: List<String>
description: >
A list of strings corresponding to
targeting expressions. The message will be
shown if all expressions `true`.
default: []
surface:
type: MessageSurfaceId
description: Each message will tell us the surface it is targeting with this.
# To start, we default to the new-tab-card
default: new-tab-card
StyleData:
description: >
A group of properities (predominantly visual) to
the describe style of the message.
fields:
priority:
type: Int
description: >
The importance of this message.
0 is not very important, 100 is very important.
default: 50
max-display-count:
type: Int
description: >
How many sessions will this message be shown to the user
before it is expired.
default: 5
WallpaperConfiguration:
description: "The configuration for the a feature that can be enabled or disabled"
fields:
status:
type: Boolean
description: Whether or not the feature is enabled
default: false
version:
type: WallpaperVariantVersion
description: Which version of the wallpaper sytem to use
default: legacy
enums:
IconType:
description: The icon that will be added to the item in the device's search engine.
variants:
screenshot:
description: A screenshot of the page at load time.
favicon:
description: The favicon of the page
letter:
description: An icon generated from the first letter of the base domain.
PageContent:
description: The page content that will be added as an item in the device's search engine.
variants:
text-excerpt:
description: Only use the first paragraph
text-content:
description: Use all the page as text
html-content:
description: Use all the page as HTML
MessageSurfaceId:
description: >
For messaging, we would like to have a message tell us which surface its associated with.
This is a label that matches across both Android and iOS.
variants:
new-tab-card:
description: This is the card that appears at the top on the Firefox Home Page.
survey:
description: This is a full-page that appears providing a survey to the user.
Unknown:
description: A message has NOT declared its target surface.
StartAtHome:
description: The identifiers for the different types of options for StartAtHome
variants:
disabled:
description: App always opens to the last tab the user was on.
after-four-hours:
description: App opens to a new homepage tab after four hours of inactivity
always:
description: App opens to a new homepage tab after five minutes of inactiviny
HomeScreenSection:
description: The identifiers for the sections of the homescreen.
variants:
top-sites:
description: The frecency and pinned sites.
recently-saved:
description: The sites the user has bookmarked recently.
jump-back-in:
description: The tabs the user was looking immediately before being interrupted.
recent-explorations:
description: The tab groups
pocket:
description: The pocket section. This should only be available in the US.
TabTraySection:
description: The identifiers for the sections of the tab tray.
variants:
inactive-tabs:
description: Tabs that have been automatically closed for the user.
ContextualHint:
description: The identifiers for a individual contextual hints.
variants:
jump-back-in-synced-tab-contextual-hint:
description: The contextual hint bubble that appears to indicate a synced tab has appeared within the Jump Back In section.
toolbar-hint:
description: The contextual hint bubble that appears to provide a hint about the toolbar.
SearchTermGroups:
description: The identifiers for the different types of search term groups.
variants:
history-groups:
description: Grouping for items in History and RecentlyVisited
tab-tray-groups:
description: Grouping for items in the Tab Tray and in JumpBackIn
ControlMessageBehavior:
description: An enum to influence what should be displayed when a control message is selected.
variants:
show-next-message:
description: The next eligible message should be shown.
show-none:
description: The surface should show no message.
WallpaperVariantVersion:
description: An enum to identify which version of the wallpaper system to use
variants:
legacy:
description: The legacy wallpaper version
v1:
description: The 2022 MR version