Written and maintained by CASRAI Editorial Board
Last updated
Brightway is an open-source Python framework designed for matrix-based Life Cycle Assessment (LCA) and computational environmental impact modeling. Rather than relying on a closed graphical user interface, Brightway provides high-performance libraries that allow environmental scientists, industrial ecologists, and sustainability analysts to automate life cycle inventory (LCI) processing, execute parameterized scenarios, and conduct rapid life cycle impact assessment (LCIA) calculations.
For researchers evaluating complex industrial systems or regional supply chains, Brightway provides direct programmatic control over underlying linear systems. It integrates with NumPy, SciPy, and pandas, enabling reproducible workflows that connect directly into scientific computing pipelines.
What Brightway is
Brightway is a specialized computational platform developed to solve the matrix mathematics of life cycle assessment. In LCA methodology, industrial processes, economic inputs, and environmental elementary flows are represented through systems of linear equations: the technosphere matrix A describing inter-process exchanges, the intervention or biosphere matrix B describing resource extraction and emissions, and the characterization matrix C mapping flows to impact categories.
Brightway exposes these relationships directly through dedicated modular packages:
- bw2data: Manages project workspaces, database storage, activities, exchanges, and metadata through an embedded SQLite backend.
- bw2calc: Solves sparse matrix linear systems (such as inventory calculation g = B · A-1 · f for functional demand f), executing static calculations, characterization, and Monte Carlo iterations.
- bw2io: Manages data extraction, schema mapping, and import strategies for external inventories, including ecoinvent, SimaPro CSV, and Ecospold formats.
- bw2analyzer: Provides tools for contribution analysis, supply chain graph traversal, and impact category diagnostics.
The current stable generation is Brightway 2.5 (distributed via the brightway25 metapackage). It utilizes the bw_processing standardized data package format to accelerate calculations on large background databases.
Who maintains Brightway and what it covers
Brightway was created by Dr. Chris Mutel during doctoral research, supported by Professor Stefanie Hellweg at ETH Zürich and the Paul Scherrer Institute (PSI). The primary academic reference is Mutel’s 2017 publication in the Journal of Open Source Software (DOI: 10.21105/joss.00236). The ecosystem is maintained by the Brightway Developers community across academia and industry under permissive BSD licensing terms (predominantly the BSD 3-Clause license, copyright held by Brightway Developers, ETH Zürich, and Paul Scherrer Institute).
Brightway covers the core analytical lifecycle of an environmental assessment study:
- Inventory management: Importing and searching background databases (such as ecoinvent, USEEIO, and FORWAST) alongside foreground system inventories.
- Impact assessment libraries: Housing characterization factors across standard LCIA methods, including IPCC global warming potentials, ReCiPe, EF, and TRACI.
- Matrix calculations: Solving linear systems with sparse solvers such as PARDISO and SuiteSparse (via scikit-umfpack).
- Uncertainty analysis: Propagating parameter distributions through Monte Carlo sampling.
How to install and run Brightway: Step-by-step workflow
Executing an LCA calculation in Brightway follows a structured sequence: configuring the environment, opening an isolated project, installing baseline biosphere flows, loading inventory data, preparing functional inputs, and solving the matrix equations.
Step 1: Set up the environment and install packages
Brightway requires Python 3.9 or newer. Using an isolated Conda or virtual environment is recommended. For environment setup instructions, see our guide to install Anaconda Python.
To install Brightway 2.5 with its linear algebra solver via Conda or Mamba on 64-bit Linux, Windows, or macOS (x86_64):
conda create -n brightway -c conda-forge -c cmutel brightway25
conda activate brightway
Alternatively, via pip in a virtual environment:
pip install brightway25 pypardiso
On Apple Silicon (ARM) macOS, install SuiteSparse via Homebrew (brew install swig suite-sparse) and install scikit-umfpack alongside brightway25, as pypardiso is x86-only.
Step 2: Initialize or switch project workspaces
Brightway organizes databases and calculation configurations into distinct project directories:
import bw2data as bd
# Check current active project
print(bd.projects.current)
# Set active project workspace
bd.projects.set_current("building_materials_lca")
In Brightway 2.5, legacy bw2setup() is deprecated and must not be used, as it installs outdated flow schemas that conflict with current databases.
Step 3: Install baseline biosphere data
Before importing background databases, install standard elementary biosphere flows and LCIA methods via bw2io:
import bw2io as bi
# Install modern biosphere and default LCIA methods
bi.remote.install_project("ecoinvent-3.10-biosphere", "building_materials_lca")
Step 4: Import foreground and background databases
Users with an ecoinvent account can import release datasets directly through the automated interface:
bi.import_ecoinvent_release(
version="3.10",
system_model="cutoff",
username="ecoinvent_user",
password="ecoinvent_password"
)
For custom institutional datasets stored in Ecospold2, SimaPro CSV, or Excel format, run the corresponding importer:
importer = bi.SingleOutputEcospold2Importer(
dirpath="/path/to/ecospold_files",
db_name="custom_facility_inventory"
)
importer.apply_strategies()
importer.match_database("ecoinvent-3.10-cutoff")
if importer.all_linked:
importer.write_database()
For principles of structuring external datasets, review our guides on what is data integration and what is data lineage.
Step 5: Define the functional unit and prepare calculation inputs
Define a demand dictionary specifying the target activity and quantity, then assemble calculation objects with prepare_lca_inputs:
import bw2calc as bc
# Find activity in database
db = bd.Database("custom_facility_inventory")
activity = db.search("structural steel beam")[0]
# Define functional unit (e.g., 1000 kg steel) and impact method
functional_unit = {activity: 1000.0}
method = ("IPCC 2021", "climate change", "global warming potential (GWP100)")
# Assemble calculation inputs
demand, data_objs, _ = bd.prepare_lca_inputs(functional_unit, method=method)
Step 6: Compute LCI and characterized LCIA results
Initialize the LCA object with prepared inputs and execute the inventory and characterization steps:
# Solve matrix equations
lca = bc.LCA(demand=demand, data_objs=data_objs)
lca.lci()
lca.lcia()
# Retrieve cumulative impact score
print("Total Impact:", lca.score)
Step 7: Export results for downstream analysis
Export the characterized inventory matrix directly to a pandas DataFrame for reporting:
# Convert results to DataFrame
df_results = lca.to_dataframe(matrix_label="characterized_inventory")
To inspect and reshape tabular outputs, see our tutorial on how to create a DataFrame in Python.
Strengths and limitations for research workflows
Brightway offers distinct trade-offs for academic and technical research compared to desktop LCA tools.
Core strengths
- Computational flexibility: Allows arbitrary looping, parameterized scenario analysis, and custom optimization routines impossible in GUI tools.
- Direct matrix visibility: Exposes raw A, B, and C matrices for custom linear algebra and sensitivity inspection.
- High computational speed: Sparse matrix solvers like PARDISO invert large technosphere networks in milliseconds.
- Reproducibility: Model definitions, code, and calculation pipelines can be version-controlled in Git repositories.
Key limitations
- Programming prerequisites: Requires practical knowledge of Python and matrix mathematics.
- No native GUI: Exploring supply chain graphs requires external tools or custom visualization scripts.
- Strict user responsibility: The framework does not guard against ill-conditioned systems or non-invertible matrices created by incorrect user input.
Alternatives to Brightway
Researchers balance programmatic automation against graphical convenience when choosing an LCA modeling environment:
| Platform | Primary Interface | Licensing Model | Scripting & Automation | Best Suited For |
|---|---|---|---|---|
| Brightway | Python API & CLI | Open Source (BSD 3-Clause) | Native Python (NumPy, SciPy, pandas) | Scripted pipelines, Monte Carlo simulations, and academic research |
| Activity Browser | Desktop GUI (PyQt) | Open Source (LGPL / GPL) | Runs Brightway backend underneath GUI | Visual project navigation and process exploration using Brightway data |
| openLCA | Desktop GUI (Java) | Open Source (MPL 2.0) | Python IPC and REST API plugins | Standardized institutional modeling with graphical process flows |
| SimaPro | Desktop & Web GUI | Commercial Proprietary | COM interface / REST API (tiered) | Industrial environmental product declarations (EPD) and consulting |
Frequently asked questions
What is the difference between brightway2 and brightway25?
brightway2 was the initial release series of the framework. brightway25 (Brightway 2.5) is the modern package architecture requiring Python 3.9 or higher. It introduces the bw_processing standardized datapackage format, updates database backend storage, and incorporates accelerated linear algebra solvers including pypardiso and scikit-umfpack.
Why is bw2setup() deprecated in Brightway?
In older tutorials, projects were initialized with bw2setup(). In Brightway 2.5, this command is deprecated because it installs hardcoded elementary flow schemas that conflict with newer ecoinvent versions (3.8 and above). Users should use bi.remote.install_project() or bi.import_ecoinvent_release() instead.
Does Brightway include a graphical user interface?
No, core Brightway is a Python programming library for scripts and Jupyter Notebooks. Practitioners seeking a point-and-click GUI while retaining Brightway’s underlying data model can use Activity Browser, an open-source PyQt desktop application built on top of Brightway.
Can Brightway perform Monte Carlo uncertainty analysis?
Yes. Brightway natively supports stochastic calculations through bw2calc. Exchange parameters containing uncertainty distributions (such as lognormal, normal, or uniform distributions) can be evaluated across thousands of Monte Carlo iterations to calculate output distributions.
Sources
- Mutel, C. (2017). Brightway: An open source framework for Life Cycle Assessment. Journal of Open Source Software, 2(12), 236. https://doi.org/10.21105/joss.00236 (Read 2026-11-07).
- Brightway Documentation: Installation Guide. https://docs.brightway.dev/en/latest/content/installation/index.html (Read 2026-11-07).
- Brightway Documentation: Projects & Database Cheatsheet. https://docs.brightway.dev/en/latest/content/cheatsheet/projects.html and https://docs.brightway.dev/en/latest/content/cheatsheet/databases.html (Read 2026-11-07).
- Brightway Documentation: Importing Data & Ecoinvent. https://docs.brightway.dev/en/latest/content/cheatsheet/importing.html (Read 2026-11-07).
- Brightway Documentation: LCA Calculations Cheatsheet. https://docs.brightway.dev/en/latest/content/cheatsheet/lca.html (Read 2026-11-07).
- Brightway Documentation: Credits and Licensing. https://docs.brightway.dev/en/latest/content/other/credits.html (Read 2026-11-07).







