Skip to main content

diff-diff

diff-diff: Difference-in-Differences causal inference in Python - sklearn-like API with Callaway-Sant'Anna, Synthetic DiD, Honest DiD, and Event Studies

PyPI version Python versions License: MIT Downloads DOI

A Python library for Difference-in-Differences (DiD) causal inference - sklearn-like estimators with statsmodels-style outputs, built for econometricians, marketing analysts, and data scientists running campaign-lift, policy, and staggered-rollout analyses.

Installation

pip install diff-diff

For development:

git clone https://github.com/igerber/diff-diff.git
cd diff-diff
pip install -e ".[dev]"

Quick Start

import pandas as pd
from diff_diff import DifferenceInDifferences  # or: DiD

data = pd.DataFrame({
    'outcome': [10, 11, 15, 18, 9, 10, 12, 13],
    'treated': [1, 1, 1, 1, 0, 0, 0, 0],
    'post': [0, 0, 1, 1, 0, 0, 1, 1],
})

did = DifferenceInDifferences()
results = did.fit(data, outcome='outcome', treatment='treated', post='post')
print(results)              # DiDResults(ATT=3.0000, SE=1.7321, p=0.1583)
results.print_summary()     # full statsmodels-style table

Documentation

For AI Agents

If you are an AI agent or LLM using this library, call diff_diff.get_llm_guide() for a concise API reference with an 8-step practitioner workflow (based on Baker et al. 2025). The workflow ensures rigorous DiD analysis - testing assumptions, running sensitivity analysis, and checking robustness, not just calling fit().

from diff_diff import get_llm_guide

get_llm_guide()                 # concise API reference
get_llm_guide("practitioner")   # 8-step workflow (Baker et al. 2025)
get_llm_guide("full")           # comprehensive documentation
get_llm_guide("autonomous")     # autonomous-agent variant

The guides are bundled in the wheel - accessible from a pip install with no network access. After estimation, call practitioner_next_steps(results) for context-aware guidance on remaining diagnostic steps.

For Data Scientists

Measuring campaign lift? Evaluating a product launch? Rolling out a policy in waves? diff-diff handles the causal inference so you can focus on the business question.

  • Which method fits my problem? - start from your business scenario (campaign in some markets, staggered rollout, survey data) and find the right estimator
  • Getting started for practitioners - end-to-end walkthrough from marketing campaign to causal estimate to stakeholder-ready result
  • Brand awareness survey tutorial - full example with complex survey design, brand funnel analysis, and staggered rollouts
  • Have BRFSS/ACS/CPS individual records? Use aggregate_survey() to roll respondent-level microdata into a geographic-period panel with inverse-variance precision weights for second-stage DiD

BusinessReport and DiagnosticReport are experimental preview classes that produce plain-English output and a structured to_dict() schema from any fitted estimator result except the two rejected by type (EventStudyResults surfaces and DurationDiDResults) - wording and schema will evolve. See docs/methodology/REPORTING.md for usage and stability notes.

Practitioner Workflow (Baker et al. 2025)

For rigorous DiD analysis, follow these 8 steps. Skipping diagnostic steps produces unreliable results.

  1. Define target parameter - ATT, group-time ATT(g,t), or event-study ATT_es(e). State whether weighted or unweighted.
  2. State identification assumptions - which parallel trends variant (unconditional, conditional, PT-GT-Nev, PT-GT-NYT), no-anticipation, overlap.
  3. Test parallel trends - simple 2x2: check_parallel_trends(), equivalence_test_trends(); staggered: inspect CS event-study pre-period coefficients (generic PT tests are invalid for staggered designs). Insignificant pre-trends do NOT prove PT holds.
  4. Choose estimator - staggered adoption -> CS/SA/BJS (NOT plain TWFE); few treated units -> SDiD; factor confounding -> TROP; simple 2x2 -> DiD. Run BaconDecomposition to diagnose TWFE bias.
  5. Estimate - estimator.fit(data, ...). Always print the cluster count first and choose inference method based on the result (cluster-robust if >= 50 clusters, wild bootstrap if fewer - for DifferenceInDifferences pass cluster=; TwoWayFixedEffects auto-clusters at unit level).
  6. Sensitivity analysis - compute_honest_did(results) for bounds under PT violations (MultiPeriodDiD, CS, or dCDH natively; the TwoWayFixedEffects event_study=True surface and a StackedDiD results.aggregate('event_study') container also admit - Stacked needs kappa_pre >= 2), run_all_placebo_tests() for 2x2 falsification, specification comparisons for staggered designs.
  7. Heterogeneity - CS: results.aggregate('group')/'event_study' (post-fit, no refit); SA: results.event_study_effects / to_dataframe(level='cohort'); Stacked: results.aggregate('event_study')/'simple' post-fit views (surface always computed since 3.9); EDiD: results.aggregate(...) post-fit from retained EIFs (3.9); ImputationDiD/TwoStageDiD: results.aggregate(...) post-fit from panel-backed kits (3.9); ContinuousDiD: results.aggregate('dose'/'simple'/'event_study') post-fit (3.9; dose/simple are views, event_study recomputes); subgroup re-estimation.
  8. Robustness - compare 2-3 estimators (CS vs SA vs BJS), report with and without covariates (shows whether conditioning drives identification), present pre-trends and sensitivity bounds.

Full guide: diff_diff.get_llm_guide("practitioner").

Estimators

  • DifferenceInDifferences - basic 2x2 DiD with robust/cluster-robust SEs, wild bootstrap, formula interface, and fixed effects
  • TwoWayFixedEffects - panel data DiD with unit and time fixed effects via within-transformation or dummies
  • MultiPeriodDiD - event study design with period-specific treatment effects for dynamic analysis (deprecated 3.9 - use TwoWayFixedEffects event_study=True)
  • CallawaySantAnna - Callaway & Sant'Anna (2021) group-time ATT estimator for staggered adoption
  • ChaisemartinDHaultfoeuille - de Chaisemartin & D'Haultfœuille (2020/2022) for reversible (non-absorbing) treatments with multi-horizon event study, normalized effects, cost-benefit delta, sup-t bands, and dynamic placebos. The most general option for treatments that switch on AND off (see also LPDiD/TROP non_absorbing). Alias DCDH.
  • SunAbraham - Sun & Abraham (2021) interaction-weighted estimator for heterogeneity-robust event studies
  • ImputationDiD - Borusyak, Jaravel & Spiess (2024) imputation estimator, most efficient under homogeneous effects
  • TwoStageDiD - Gardner (2022) two-stage estimator with GMM sandwich variance
  • SpilloverDiD - Butts (2021) ring-indicator spillover-aware DiD identifying direct effect on treated + per-ring spillover on near-control units; handles non-staggered and staggered timing; supports survey-design variance under survey_design= for HC1 / CR1 (Wave E.1 Binder TSL) and Conley (Wave E.2 panel-aware stratified-Conley sandwich on per-period PSU totals; extended in Wave E.2 follow-up to conley_lag_cutoff > 0 via panel-block composition with within-PSU serial Bartlett HAC — lag>0 requires an effective PSU via explicit survey_design.psu or injected cluster=<col>); SurveyDesign.subpopulation() preserves full-design n_psu / df_survey via zero-padded scores (Wave E.3, R svyrecvar(subset()) form)
  • SyntheticDiD - Synthetic DiD combining standard DiD and synthetic control for few treated units
  • SyntheticControl - Abadie, Diamond & Hainmueller (2010) classic synthetic control for a single treated unit (donor-weight counterfactual, nested/cv/inverse-variance/custom V; in-space placebo permutation inference via in_space_placebo(), plus ADH-2015 leave_one_out() + in_time_placebo() robustness, Firpo-Possebom (2018) test-inversion confidence sets, and Chernozhukov-Wüthrich-Zhu (2021) conformal inference)
  • TripleDifference - triple difference (DDD) estimator for designs requiring two criteria for treatment eligibility; serves both the 2x2x2 and the staggered-adoption design from one signature (fit(..., first_treat=) selects the staggered engine)
  • ContinuousDiD - Callaway, Goodman-Bacon & Sant'Anna (2024) continuous treatment DiD with dose-response curves
  • HeterogeneousAdoptionDiD - de Chaisemartin, Ciccia, D'Haultfœuille & Knau (2026) for designs where no unit remains untreated; local-linear estimator at the dose support boundary returning Weighted Average Slope (WAS) on Design 1' (d̲ = 0 / QUG) or WAS_{d̲} on Design 1 (d̲ > 0, continuous-near-d̲ or mass-point), with a multi-period event-study extension (last-treatment cohort, pointwise CIs). Panel-only in this release - repeated cross-sections rejected by the validator. Alias HAD.
  • RegressionDiscontinuity - Calonico, Cattaneo & Titiunik (2014) sharp, fuzzy, AND covariate-adjusted regression discontinuity with robust bias-corrected inference and rdrobust-parity bandwidth selection (all 10 selectors, mass-point handling; fuzzy via takeup= with a first-stage block and weak-identification warning; covariates via covariates= - CCFT 2019, same estimand, covariate-aware bandwidths). Canonical att is the bias-corrected estimate with a coherent robust CI (rdrobust's printed headline is att_conventional). Alias RDD.
  • StackedDiD - Wing, Freedman & Hollingsworth (2024) stacked DiD with Q-weights and sub-experiments; optional covariate balancing (Ustyuzhanin 2026)
  • EfficientDiD - Chen, Sant'Anna & Xie (2025) efficient DiD with optimal weighting for tighter SEs
  • TROP - Triply Robust Panel estimator (Athey et al. 2025) with nuclear norm factor adjustment
  • StaggeredTripleDifference - Ortiz-Villavicencio & Sant'Anna (2025) staggered DDD with group-time ATT (deprecated 3.9 - use TripleDifference with first_treat=)
  • WooldridgeDiD - Wooldridge (2023, 2025) ETWFE: saturated OLS, logit/Poisson QMLE (ASF-based ATT). Alias ETWFE.
  • LPDiD - Dube, Girardi, Jorda & Taylor (2025) Local Projections DiD: per-horizon long-difference event study on clean controls (no negative weighting), variance- or equally-weighted ATT, for absorbing or non-absorbing (reversible) treatment
  • ChangesInChanges - Athey & Imbens (2006) nonlinear/distributional DiD for the 2x2 design: full counterfactual distribution and quantile treatment effects via CDF transformation, plus the QDiD comparison estimator via method="qdid"; bootstrap inference; R qte parity. Alias CiC
  • LWDiD - Lee & Wooldridge (2025, 2026) rolling-transformation DiD: unit-specific demean/detrend converts panel to cross-section, staggered adoption, estimation_method in reg/ipw/dr/psm (the papers' RA/IPW/IPWRA plus propensity-score matching), exact small-N inference on the classical collapsed regression
  • DMLDiD - Chang (2020) double/debiased machine learning DiD: staggered ATT(g,t) with cross-fitted ML nuisance learners (DML2) and Neyman-orthogonal scores, for flexible/high-dimensional covariate adjustment under conditional parallel trends; panel or declared repeated cross sections (panel=False); survey/cluster support on both lanes (bad-control lane: panel only, cluster= only); Caetano, Callaway, Payne & Sant'Anna (2026) bad-control score via fit(bad_control=, bad_control_covariates=)
  • DurationDiD - Deaner & Ku (2026) causal duration DiD for a binary absorbing outcome (spell ended) in a two-group common-timing design: restricts the groups' untreated hazards (method="cd" additive gap or method="ph" ratio) instead of outcome levels, imputes the treated counterfactual survival, reports the per-date absorption ATT with whole-individual bootstrap pointwise and simultaneous bands plus a fixed-anchor pre-treatment specification test
  • BaconDecomposition - Goodman-Bacon (2021) decomposition for diagnosing TWFE bias in staggered settings

Diagnostics & Sensitivity

  • Bad-control pre-test - Caetano, Callaway, Payne & Sant'Anna (2026) Remark 6 ATT_X(g,t): the effect of treatment on a suspected bad control itself, per (g,t) cell (DMLDiDResults.bad_control_summary(); analytical SE; pre-period rows pre-test the identifying assumptions MP-5 / MP-8 and should be zero, post-period rows are the Condition-2 check that treatment affects the covariate)
  • RD Plots - Calonico, Cattaneo & Titiunik (2015) optimal data-driven RD plots (RDPlot): all 8 rdrobust binselect bin selectors, implied-scale/WIMSE-weight reporting, optional matplotlib rendering
  • Manipulation Testing - Cattaneo, Jansson & Ma (2020) density-discontinuity test (RDDensityTest): rddensity 3.0 parity, robust bias-corrected inference, unrestricted/restricted models, mass-point adjustment
  • Parallel Trends Testing - simple and Wasserstein-robust parallel trends tests, equivalence testing (TOST)
  • Placebo Tests - placebo timing, group, permutation, leave-one-out
  • Honest DiD - Rambachan & Roth (2023) sensitivity analysis: robust CI under PT violations, breakdown values
  • Pre-Trends Power Analysis - Roth (2022) minimum detectable violation and power curves
  • Power Analysis - analytical and simulation-based MDE, sample size, power curves for study design
  • MMM Calibration Export - convert experiment results into MMM calibration inputs: PyMC-Marketing lift-test frames and Google Meridian lognormal ROI priors
  • Conley spatial HAC SE (vcov_type="conley") on cross-sectional LinearRegression / compute_robust_vcov plus panel DifferenceInDifferences / MultiPeriodDiD / TwoWayFixedEffects (with conley_lag_cutoff for within-unit Bartlett temporal HAC) - Conley (1999) spatial-correlation-aware SEs with parity vs R conleyreg on cross-sectional + panel fixtures, optional combined spatial + cluster product kernel via explicit cluster=, auto-activating sparse k-d-tree fast path for n > 5_000

Survey Support

Most estimators accept an optional survey_design parameter (or survey= / weights= for HeterogeneousAdoptionDiD) for design-based variance estimation. Coverage and supported weight types vary by estimator - see the Survey Design Support compatibility matrix for the per-estimator support table.

  • Design elements available across the supported set: strata, PSU, FPC, lonely PSU handling, nest. Weight types vary by estimator: some surfaces (e.g. CallawaySantAnna, StackedDiD, the HAD continuous path) accept pweight only; others accept pweight / fweight / aweight.
  • Variance methods: Taylor Series Linearization (TSL via Binder 1983), replicate weights (BRR / Fay / JK1 / JKn / SDR), survey-aware bootstrap
  • Diagnostics: DEFF per coefficient, effective n, subpopulation analysis, weight trimming, CV on estimates
  • Repeated cross-sections: CallawaySantAnna(panel=False) for BRFSS, ACS, CPS
  • Weight calibration / raking: upstream by design - pair with Meta's balance package, whose balance.interop.diff_diff adapter hands raked samples straight to diff-diff; see the composition-drift tutorial

No other Python or R DiD package offers design-based variance estimation for modern heterogeneity-robust estimators.

Requirements

  • Python 3.9 - 3.14
  • numpy >= 1.20
  • pandas >= 1.3
  • scipy >= 1.10

Development

# Install with dev dependencies
pip install -e ".[dev]"

# Run tests
pytest

# Format code
black diff_diff tests
ruff check diff_diff tests

References

This library implements methods from a wide body of econometric and causal-inference research. See the full bibliography on Read the Docs for citations spanning DiD foundations, modern staggered estimators, sensitivity analysis, and synthetic controls.

Citing diff-diff

If you use diff-diff in your research, please cite it:

@software{diff_diff,
  title = {diff-diff: Difference-in-Differences Causal Inference for Python},
  author = {Gerber, Isaac},
  year = {2026},
  url = {https://github.com/igerber/diff-diff},
  doi = {10.5281/zenodo.19646175},
  license = {MIT},
}

The DOI above is the Zenodo concept DOI - it always resolves to the latest release. To cite a specific version, look up its versioned DOI on the Zenodo project page.

See CITATION.cff for the full citation metadata.

Note on authorship: academic citation (CITATION.cff, the BibTeX above) lists individual authors with ORCIDs per scholarly convention. Package metadata surfaces (pyproject.toml, Sphinx docs) list "diff-diff contributors" to acknowledge the collective - see CONTRIBUTORS.md for the full list.

License

MIT License

Release files for diff-diff 3.12.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for diff-diff 3.12.0
File Size Uploaded
diff_diff-3.12.0.tar.gz 2.1 MB Details

Built distributions (wheels)

Table of built distributions (wheels) for diff-diff 3.12.0
File
diff_diff-3.12.0-cp314-cp314-win_amd64.whl CPython 3.14 CPython 3.14 Windows x86-64 Details
diff_diff-3.12.0-cp314-cp314-manylinux_2_28_x86_64.whl CPython 3.14 CPython 3.14 Linux glibc 2.28+ x86-64 Details
diff_diff-3.12.0-cp314-cp314-manylinux_2_28_aarch64.whl CPython 3.14 CPython 3.14 Linux glibc 2.28+ ARM64 Details
diff_diff-3.12.0-cp314-cp314-macosx_11_0_arm64.whl CPython 3.14 CPython 3.14 macOS 11.0+ ARM64 Details
diff_diff-3.12.0-cp313-cp313-win_amd64.whl CPython 3.13 CPython 3.13 Windows x86-64 Details
diff_diff-3.12.0-cp313-cp313-manylinux_2_28_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.28+ x86-64 Details
diff_diff-3.12.0-cp313-cp313-manylinux_2_28_aarch64.whl CPython 3.13 CPython 3.13 Linux glibc 2.28+ ARM64 Details
diff_diff-3.12.0-cp313-cp313-macosx_11_0_arm64.whl CPython 3.13 CPython 3.13 macOS 11.0+ ARM64 Details
diff_diff-3.12.0-cp312-cp312-win_amd64.whl CPython 3.12 CPython 3.12 Windows x86-64 Details
diff_diff-3.12.0-cp312-cp312-manylinux_2_28_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.28+ x86-64 Details
diff_diff-3.12.0-cp312-cp312-manylinux_2_28_aarch64.whl CPython 3.12 CPython 3.12 Linux glibc 2.28+ ARM64 Details
diff_diff-3.12.0-cp312-cp312-macosx_11_0_arm64.whl CPython 3.12 CPython 3.12 macOS 11.0+ ARM64 Details
diff_diff-3.12.0-cp311-cp311-win_amd64.whl CPython 3.11 CPython 3.11 Windows x86-64 Details
diff_diff-3.12.0-cp311-cp311-manylinux_2_28_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.28+ x86-64 Details
diff_diff-3.12.0-cp311-cp311-manylinux_2_28_aarch64.whl CPython 3.11 CPython 3.11 Linux glibc 2.28+ ARM64 Details
diff_diff-3.12.0-cp311-cp311-macosx_11_0_arm64.whl CPython 3.11 CPython 3.11 macOS 11.0+ ARM64 Details
diff_diff-3.12.0-cp310-cp310-win_amd64.whl CPython 3.10 CPython 3.10 Windows x86-64 Details
diff_diff-3.12.0-cp310-cp310-manylinux_2_28_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.28+ x86-64 Details
diff_diff-3.12.0-cp310-cp310-manylinux_2_28_aarch64.whl CPython 3.10 CPython 3.10 Linux glibc 2.28+ ARM64 Details
diff_diff-3.12.0-cp310-cp310-macosx_11_0_arm64.whl CPython 3.10 CPython 3.10 macOS 11.0+ ARM64 Details
diff_diff-3.12.0-cp39-cp39-win_amd64.whl CPython 3.9 CPython 3.9 Windows x86-64 Details
diff_diff-3.12.0-cp39-cp39-manylinux_2_28_x86_64.whl CPython 3.9 CPython 3.9 Linux glibc 2.28+ x86-64 Details
diff_diff-3.12.0-cp39-cp39-manylinux_2_28_aarch64.whl CPython 3.9 CPython 3.9 Linux glibc 2.28+ ARM64 Details
diff_diff-3.12.0-cp39-cp39-macosx_11_0_arm64.whl CPython 3.9 CPython 3.9 macOS 11.0+ ARM64 Details

Total release size: 180.2 MB

Release files / diff_diff-3.12.0.tar.gz

Download URL diff_diff-3.12.0.tar.gz
Size 2.1 MB
Tags Source
SHA-256 checksum
How to use checksums
87556489736d3f48926e2594402d29ef7fa5a6a8d03d1d9bc312f6a08f5da937
BLAKE2b-256 checksum
How to use checksums
1309a323cf4f4890c82c4fa5b66907ce2a4d5dbef38c65ddfee0dc4ffcc36020
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 8, 2026.

Transparency log

Release files / diff_diff-3.12.0-cp314-cp314-win_amd64.whl

Download URL diff_diff-3.12.0-cp314-cp314-win_amd64.whl
Size 3.1 MB
Tags CPython 3.14 Windows x86-64
SHA-256 checksum
How to use checksums
db553e05c400f941903ac7712b3df172780a880c0f9e7c0b3d28c4d466d1ad78
BLAKE2b-256 checksum
How to use checksums
355073036451b9fdae48950e61f3e3f62e20308a879dde10becdaf0aa0806935
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 8, 2026.

Transparency log

Release files / diff_diff-3.12.0-cp314-cp314-manylinux_2_28_x86_64.whl

Download URL diff_diff-3.12.0-cp314-cp314-manylinux_2_28_x86_64.whl
Size 15.6 MB
Tags CPython 3.14 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
463df928c510060ba6354d6a581ae0c70dfc5efcd425a3ceffee7ab65658a4d9
BLAKE2b-256 checksum
How to use checksums
071420a054046056f3555a28a36cfa814fc0e56a0771c261d17c8fb0feac65c8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 8, 2026.

Transparency log

Release files / diff_diff-3.12.0-cp314-cp314-manylinux_2_28_aarch64.whl

Download URL diff_diff-3.12.0-cp314-cp314-manylinux_2_28_aarch64.whl
Size 8.1 MB
Tags CPython 3.14 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
036860fdbc8f9402d72fba333aed24cb1bc83df2d2adf31e55e571bf9996c54d
BLAKE2b-256 checksum
How to use checksums
922be1ebdb16ef2cea1cb3507125ec1e2e5e799912dfee86294571076f6c7426
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 8, 2026.

Transparency log

Release files / diff_diff-3.12.0-cp314-cp314-macosx_11_0_arm64.whl

Download URL diff_diff-3.12.0-cp314-cp314-macosx_11_0_arm64.whl
Size 2.8 MB
Tags CPython 3.14 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
f34b38976aae638f3cf3834213e958039e9df8b2484bc559f9f3e7d1593d07b9
BLAKE2b-256 checksum
How to use checksums
810bae3a6f74e12b1dc010937e79756e9b65f294c7a3d05fd479f9b658b775b4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 8, 2026.

Transparency log

Release files / diff_diff-3.12.0-cp313-cp313-win_amd64.whl

Download URL diff_diff-3.12.0-cp313-cp313-win_amd64.whl
Size 3.1 MB
Tags CPython 3.13 Windows x86-64
SHA-256 checksum
How to use checksums
799a114675f181d62b1bed6c7870b890d46dddf9eb3f3377e0dd64b10b1421b4
BLAKE2b-256 checksum
How to use checksums
da5948e3fde98344d1964c43cc862219b254470194ba9f98632e945883a924e6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 8, 2026.

Transparency log

Release files / diff_diff-3.12.0-cp313-cp313-manylinux_2_28_x86_64.whl

Download URL diff_diff-3.12.0-cp313-cp313-manylinux_2_28_x86_64.whl
Size 15.6 MB
Tags CPython 3.13 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
4c6861fe1208b70692fd0435369d0a2fc1fe999810fd7e4deaf9310f208adc3b
BLAKE2b-256 checksum
How to use checksums
17b7c3825df9061c3e0b72ca74725ec8ae4e7688449c58721005aae50ff9df65
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 8, 2026.

Transparency log

Release files / diff_diff-3.12.0-cp313-cp313-manylinux_2_28_aarch64.whl

Download URL diff_diff-3.12.0-cp313-cp313-manylinux_2_28_aarch64.whl
Size 8.1 MB
Tags CPython 3.13 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
87d3b51532a59f1f63ff4d4fea40b3c5ea13cc05139a49516997d33262fffa6f
BLAKE2b-256 checksum
How to use checksums
fd255f32d0977dc0def81c398f80cf09638b947dccb5506d9c1764c61b7ab1b0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 8, 2026.

Transparency log

Release files / diff_diff-3.12.0-cp313-cp313-macosx_11_0_arm64.whl

Download URL diff_diff-3.12.0-cp313-cp313-macosx_11_0_arm64.whl
Size 2.8 MB
Tags CPython 3.13 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
ef1f67308d7a41f9e7701869a3dea54d1ffffba3ed76735b4174f6ca42e7ecca
BLAKE2b-256 checksum
How to use checksums
3998200605bb90a23fe682c430a41ac68b4ad129f96f26085fc92046b4040d8e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 8, 2026.

Transparency log

Release files / diff_diff-3.12.0-cp312-cp312-win_amd64.whl

Download URL diff_diff-3.12.0-cp312-cp312-win_amd64.whl
Size 3.1 MB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
5e648fe807e604d67a5e37bbc8fb85ec3a7a65102367df0cd93f7f9e2ac89a6e
BLAKE2b-256 checksum
How to use checksums
4f9d336ada5e97645d6689a32ac4f0bb40e9ad225a829b517f90afe52a810c18
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 8, 2026.

Transparency log

Release files / diff_diff-3.12.0-cp312-cp312-manylinux_2_28_x86_64.whl

Download URL diff_diff-3.12.0-cp312-cp312-manylinux_2_28_x86_64.whl
Size 15.6 MB
Tags CPython 3.12 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
0ad6471817528b79c69d60aa7f0a263ee84f37bc514211c0fab17b45917aaa96
BLAKE2b-256 checksum
How to use checksums
13d24c71c24e4962ce6c620d26f341b4133cfe3dadb1b6dd82f5927251f6160c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 8, 2026.

Transparency log

Release files / diff_diff-3.12.0-cp312-cp312-manylinux_2_28_aarch64.whl

Download URL diff_diff-3.12.0-cp312-cp312-manylinux_2_28_aarch64.whl
Size 8.1 MB
Tags CPython 3.12 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
361f6e4d2b983a96fd20fad496a04bd3c972e02a929ce19e6472df7684347fa3
BLAKE2b-256 checksum
How to use checksums
5ccbc27509a34249ddd370d7676fe4b0d994d46b69d0f113a0d74d13e6bcf041
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 8, 2026.

Transparency log

Release files / diff_diff-3.12.0-cp312-cp312-macosx_11_0_arm64.whl

Download URL diff_diff-3.12.0-cp312-cp312-macosx_11_0_arm64.whl
Size 2.8 MB
Tags CPython 3.12 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
b9891bb4a7eb95499c3c164ae5405f96a82ea4b78bee687dd6bfeb26c7ce3366
BLAKE2b-256 checksum
How to use checksums
a31e526cd5607ef2978730397747d1894f18dadaa9ce0a4c5b0ab804a067112a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 8, 2026.

Transparency log

Release files / diff_diff-3.12.0-cp311-cp311-win_amd64.whl

Download URL diff_diff-3.12.0-cp311-cp311-win_amd64.whl
Size 3.1 MB
Tags CPython 3.11 Windows x86-64
SHA-256 checksum
How to use checksums
c255c5f8196c42f0c904d4e46094c12432b3357b088d6a4fc22b71887c79bbe3
BLAKE2b-256 checksum
How to use checksums
feb5ac9e74aab79e0d81e114eb7028d6cb3a8819772911adbd88734b3bff7500
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 8, 2026.

Transparency log

Release files / diff_diff-3.12.0-cp311-cp311-manylinux_2_28_x86_64.whl

Download URL diff_diff-3.12.0-cp311-cp311-manylinux_2_28_x86_64.whl
Size 15.6 MB
Tags CPython 3.11 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
2cb1abc76d9820fb68dab1465f1068b60d16b3801ccd6b3e82885a0fb90a3db0
BLAKE2b-256 checksum
How to use checksums
d1bb8cabebfddcfa43be1d8224090e87d963bf1cf75424a0d0ebd5f2fa992132
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 8, 2026.

Transparency log

Release files / diff_diff-3.12.0-cp311-cp311-manylinux_2_28_aarch64.whl

Download URL diff_diff-3.12.0-cp311-cp311-manylinux_2_28_aarch64.whl
Size 8.1 MB
Tags CPython 3.11 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
be64de8eaa4396daf0a80ee197c7fd763af52f88218b5af77883b1ccaef2e135
BLAKE2b-256 checksum
How to use checksums
df963c4606916423f5c8158ef5cc3f4ed9e2fe76e64be787dead1c80a847066e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 8, 2026.

Transparency log

Release files / diff_diff-3.12.0-cp311-cp311-macosx_11_0_arm64.whl

Download URL diff_diff-3.12.0-cp311-cp311-macosx_11_0_arm64.whl
Size 2.8 MB
Tags CPython 3.11 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
96ddd2084fb7de773d82cc7c092ff7e5b55ceac08421583c875b79d314e9e092
BLAKE2b-256 checksum
How to use checksums
0ab3f44907c0017fdaa61fe4f144c3745dcb7df7f04b605686c64f097207a83e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 8, 2026.

Transparency log

Release files / diff_diff-3.12.0-cp310-cp310-win_amd64.whl

Download URL diff_diff-3.12.0-cp310-cp310-win_amd64.whl
Size 3.1 MB
Tags CPython 3.10 Windows x86-64
SHA-256 checksum
How to use checksums
1b457f34bcb6f43516acbc955499421f95c18969201a3bf97ea46cdd5523165b
BLAKE2b-256 checksum
How to use checksums
a5a361441fd8efd0d6558a9708ebe0e01bdfa9fb0e5a3f38240cb624db53d905
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 8, 2026.

Transparency log

Release files / diff_diff-3.12.0-cp310-cp310-manylinux_2_28_x86_64.whl

Download URL diff_diff-3.12.0-cp310-cp310-manylinux_2_28_x86_64.whl
Size 15.6 MB
Tags CPython 3.10 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
f7a1e909440ba70ee6dd5d1633a861230dfde064b955bb30a4ef82d38afce716
BLAKE2b-256 checksum
How to use checksums
075c8ad8fbde04a32c9f88cb00e2e8626f6b4f5fe435c90ffd17724a4bb295a0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 8, 2026.

Transparency log

Release files / diff_diff-3.12.0-cp310-cp310-manylinux_2_28_aarch64.whl

Download URL diff_diff-3.12.0-cp310-cp310-manylinux_2_28_aarch64.whl
Size 8.1 MB
Tags CPython 3.10 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
5638c90580912855a0e50454af3416cf66bcaa0fc012762e2a7b616283fa6e27
BLAKE2b-256 checksum
How to use checksums
ccd141b879ce7621df75e959cc4a3dd7f7c0b9a26cf457eb973d5b11c72f0ffb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 8, 2026.

Transparency log

Release files / diff_diff-3.12.0-cp310-cp310-macosx_11_0_arm64.whl

Download URL diff_diff-3.12.0-cp310-cp310-macosx_11_0_arm64.whl
Size 2.8 MB
Tags CPython 3.10 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
0345674f0adfa39ab74d8bad781853d2220b7f21db556a4aa36982761c3a597b
BLAKE2b-256 checksum
How to use checksums
c5dde769a67b765c8505cef4af9ac3270e7c8f395d93a1aaa0721282b8acae04
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 8, 2026.

Transparency log

Release files / diff_diff-3.12.0-cp39-cp39-win_amd64.whl

Download URL diff_diff-3.12.0-cp39-cp39-win_amd64.whl
Size 3.1 MB
Tags CPython 3.9 Windows x86-64
SHA-256 checksum
How to use checksums
e3fb1768dc3c7592c530052d2740bf6a6db37eaadbe7ebde33794d4c521c7d26
BLAKE2b-256 checksum
How to use checksums
fb434d7b2533adc2be9d9ed4f33eb3b81f4afc66d8a81cb179ab9784d9febac6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 8, 2026.

Transparency log

Release files / diff_diff-3.12.0-cp39-cp39-manylinux_2_28_x86_64.whl

Download URL diff_diff-3.12.0-cp39-cp39-manylinux_2_28_x86_64.whl
Size 15.6 MB
Tags CPython 3.9 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
bf32a0106cd3e8a3e3e3d9fc810d6bb7509f37bfbe0eb3884847994cd6d336f5
BLAKE2b-256 checksum
How to use checksums
3100eb5c6795c2abc6781d27c07137a0dc5702e0ecfbafdcf69af7dfee986f8a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 8, 2026.

Transparency log

Release files / diff_diff-3.12.0-cp39-cp39-manylinux_2_28_aarch64.whl

Download URL diff_diff-3.12.0-cp39-cp39-manylinux_2_28_aarch64.whl
Size 8.1 MB
Tags CPython 3.9 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
257c7fb08f324867ed0e7717353667faba3a0f5cdcffbece65390f143656a734
BLAKE2b-256 checksum
How to use checksums
2ad6147c5774021721a09df6e2472e2ca9e42c90f105c90acb42973061ab5dd0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 8, 2026.

Transparency log

Release files / diff_diff-3.12.0-cp39-cp39-macosx_11_0_arm64.whl

Download URL diff_diff-3.12.0-cp39-cp39-macosx_11_0_arm64.whl
Size 2.8 MB
Tags CPython 3.9 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
f35034f981c6afa790b2e7490f2753f78c9e304959f7b5479d6f8139330f66c1
BLAKE2b-256 checksum
How to use checksums
e87f80d9da91a0ff8ee2b7edfd6cc9dc1ff5ea555751d2cb40840960f87e91e4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 8, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

3.12.0 This release

25 release files

3.9.1

25 release files

3.9.0

25 release files

3.8.0

25 release files

3.6.0

25 release files

3.5.3

25 release files

3.4.2

25 release files

3.4.1

25 release files

3.4.0

25 release files

3.3.3

25 release files

3.3.2

25 release files

3.3.1

25 release files

3.3.0

25 release files

3.2.0

25 release files

3.1.3

25 release files

3.1.2

25 release files

3.1.1

25 release files

3.1.0

25 release files

3.0.2

25 release files

2.8.0

21 release files

2.7.6

21 release files

2.7.5

21 release files

2.7.4

21 release files

2.7.3

21 release files

2.7.2

16 release files

2.7.1

16 release files

2.7.0

16 release files

2.6.0

16 release files

2.5.0

16 release files

2.4.3

16 release files

2.4.2

16 release files

2.4.1

16 release files

2.4.0

16 release files

2.3.2

16 release files

2.3.1

13 release files

2.2.0

13 release files

2.1.9

9 release files

2.1.8

9 release files

2.1.7

9 release files

2.1.6

9 release files

2.1.5

9 release files

2.1.4

9 release files

2.1.3

9 release files

2.1.2

9 release files

2.1.1

9 release files

2.1.0

9 release files

2.0.4

9 release files

2.0.3

9 release files

2.0.2

9 release files

2.0.1

9 release files

2.0.0

9 release files

1.4.0

2 release files

1.3.1

2 release files

1.3.0

2 release files

1.2.1

2 release files

1.2.0

2 release files

1.1.0

2 release files

1.0.0

2 release files

0.6.0

2 release files

0.5.0

2 release files

0.4.0

2 release files

0.3.0

2 release files

0.2.0

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page