Firefox Application Services
A platform for building cloud-powered applications that target Firefox users
What's this all about?
This repository hosts the code and docs needed to integrate with the products offered by the Firefox
Application Services
team.
If you are interested in getting involved in the development of those products
then you're in the right place! Please review the more detailed guide on
how to contribute to this project as well as
the Community Participation Guidelines.
If that's not why you're here, then instead you might enjoy:
- The Application Services Product
Portal, if you're looking to
use those products in your application. - The Application Services Team Home
on Mana, if you're trying to find out more about how we build them.
Overview
This repository is used to build client-side libraries for integrating with
Firefox Application services such as Firefox Accounts, Firefox Sync and Push.
Each of these is called a "component" and is built using a core of shared code
written in Rust, wrapped with native language bindings for different platforms.
The end result is an application that can be assembled from re-usable components
that are largely shared across platforms, like this:
The code for these components is organized as follows:
- ./libs/ contains infratructure for building some native dependencies,
such as NSS. - ./components/ contains the source for each component, and its
FFI bindings.- See ./components/logins/ for an example, where you can
find:- The shared rust code.
- The mapping into a C FFI.
- The Kotlin bindings for use by Android
applications. - The Swift bindings for use by iOS applications.
- See ./components/logins/ for an example, where you can
- ./megazords/ contains infrastructure for bundling multiple rust
components into a single build artifact called a "megazord library"
for easy consumption by applications.
For more details on how the client libraries are built and published, please see
the Guide to Building a Rust Component.
This repository also hosts the website source for the Application
Services Product Portal, which
provides consumer-facing documentation on how to integrate with various
Application services products.
The ./docs/ directory holds intenal documentation about working with the
code in this repository, and is most likely only of interest to contributors.
Components
The currently-available Rust Components in this repo are:
- fxa-client - for applications that need to sign in
with FxA, access encryption keys for sync, and more. - sync15 - shared library for accessing data in Firefox
Sync - logins - for storage and syncing of a user's saved login
credentials - places - for storage and syncing of a user's saved
browsing history - push - for applications to receive real-time updates via
WebPush - rc_log - for connecting component log output to the
application's log stream - support - low-level utility libraries
- support/ffi - utilities for building a component's
FFI bindings - support/sql - utilities for storing data locally
with SQL
- support/ffi - utilities for building a component's