Architecture of OpenFisca

Depending on your goals, you will interact with one or several components of OpenFisca.

OpenFisca architecture

Country Packages

Country packages are what most users will interact with when using OpenFisca. They model the rules of a jurisdiction by defining Parameters, Variables and Entities.

For example, openfisca-france models French law.

Extensions Packages

Extensions add functionalities to a country package while maintaining situation description compatibility, by adding or redefining parameters and variables but not entities.

This architecture enables communities to maintain subsets of the rules of a country, especially those that are too specific to be of interest to the broader OpenFisca community of that country.

For example, openfisca-paris extends openfisca-france with benefits specific to the town of Paris and is maintained by the Paris City Council.


OpenFisca Core provides the API, domain-specific language (DSL) and testing tools. The country and extension packages are constructed with the Core.

The core defines the Python API through which the country packages can be queried.

The Core also includes an optional web API, which makes it possible to expose Parameters and calculate Variables over HTTP and JSON.


Country and extension packages are maintained by different communities and depend on their legal and cultural contexts. OpenFisca includes two neutral templates aimed at demonstrating their capabilities independently from these contexts: country-template and extension-template. These templates can also be used as boilerplate for creating a new country or extension package.

Code examples throughout the OpenFisca documentation use rules defined in both country-template and extension-template.