Release Notes#
1.11.1 (Unreleased)#
Bug fixes#
You know there will be some…
1.11.0 (2026-08-03)#
Modernize tooling and packaging#
Switched from pre-commit to prek as the hook runner, and added several new hooks:
detect-secrets,typos,actionlint,markdownlint-cli2, andtaplo-format, among others. #442Simplified packaging: removed
MANIFEST.inand the vestigial[tool.setuptools]configuration left over from before the switch to hatchling. #442Migrated documentation hosting from Read the Docs to GitHub Pages, see https://docs.catalyst.coop/ferc-xbrl-extractor. #442
Switched the documentation theme from furo to pydata-sphinx-theme, matching the look and feel of our other documentation sites, including shared social links in the footer. #442
Added ``llms.txt`` and per-page Markdown alternates (via
sphinx-llm) to make the documentation more easily consumable by LLM agents. #442Wired up CodeCov coverage reporting with a repo-specific
.codecov.yml. #442Grouped Dependabot PRs for both Python and GitHub Actions dependencies to reduce bot PR noise. #442
Simplified the bot auto-merge workflow, and added a guard to the release workflow that verifies a release tag points at the current head of
mainbefore building. #442Switched release notifications from Slack to Zulip. #434
Routine dependency and GitHub Actions version bumps.
Add static type checking with pyrefly#
Type checking is now enforced using pyrefly as a blocking check in both pre-commit and CI, along with a 95% type annotation coverage floor across
src/–hatch run types:coverage-reportprints a human-readable, per-module breakdown of that metric. The goal is to catch bugs, make future changes safer, and help support IDEs and LLMs in parsing the codebase. The package now also ships apy.typedmarker indicating consumers can rely on inline types. #447 #443
Bug fixes#
Adding type checking (see above) surfaced several bugs.
Fixed a long-standing crash in ``get_instances()``’s directory and bare-file input modes, and removed the bare-file mode, which can’t be fixed. Both had always crashed with a confusing
TypeError: they never supplied theInstanceBuilderconstructor with a filing’s publication time and taxonomy version, which are otherwise derived from anrssfeedmetadata file FERC’s archiving process bundles into zip archives alongside the filings. The directory mode now works, reading that samerssfeedfile from disk instead of from inside a zip – useful for local debugging, where it’s convenient to edit filings directly rather than repackaging them into a zip after every change. The bare single-file mode is removed: a lone filing has no room for an accompanyingrssfeedfile, so there’s no way to determine its publication time or taxonomy version. Both input types now raise a clearValueErroron invalid input instead of crashing. #444Fixed a crash in ``run_main()`` that occurred whenever
--duckdb-pathwasn’t passed on the CLI – including via the simplest example command in the README.--duckdb-pathnow defaults to the sqlite path with a.duckdbsuffix instead. #444Fixed a taxonomy-loading retry loop that could have raised a confusing
UnboundLocalErrorinstead of a clear error if ever called withmax_retries < 1. #447
Test suite cleanup#
Removed the long-dead ``XBRLType.get_pandas_type()`` method. It was introduced alongside a pandas-DataFrame-based extraction path that was replaced by the current frictionless-datapackage-based path two weeks later; the cleanup commit at the time removed every caller but missed the method itself, leaving it with no callers in this package,
pudl, orpudl-archiversince 2022. #444Reordered integration tests so the three slowest run first. Under pytest-xdist’s default scheduler, tests are dispatched to workers in collection order; a slow test dispatched late tends to run alone after every other worker has emptied its queue, stretching total wall-clock time. A new
pytest_collection_modifyitemshook intests/conftest.pysortstest_concurrent_taxonomy_loadand the two slowestconsole_scripts_test.pycases to the front of collection so they run in parallel with the rest of the suite instead of at the tail. #444
1.10.0 (2026-05-13)#
Stopped generating a resource or table in the output datapackage for XBRL instant or duration tables that are entirely null. #428
1.9.0 (2026-05-07)#
Added support for writing extracted XBRL data directly to Parquet files, in addition to the existing SQLite and DuckDB outputs. #427
Routine dependency and GitHub Actions version bumps.
1.8.0 (2025-12-28)#
Modernize build and packaging#
Migrated from tox to Hatch for environment and task management, providing faster dependency resolution and a more modern Python packaging experience.
Adopted uv as the package installer.
Modernized build system from setuptools to hatchling with hatch-vcs for version management from git tags.
Reorganized CI workflows into parallel jobs for testing, linting, and documentation building, improving CI speed and clarity.
Added support for Python 3.14.
Consolidated development documentation from separate CONTRIBUTING.md into README.rst
Updated README with instructions for using Hatch and uv.
Updated ReadTheDocs configuration to use uv and Hatch.
Loosened dependency version constraints Removed upper bounds where appropriate to reduce dependency conflicts for downstream users.
Added build attestations for supply chain security using GitHub’s attestation action.
Adopted OIDC trusted publishing to PyPI, eliminating the need for API tokens.
Removed twine dependency (Hatch validates packages during build).
Split pytest workflow into separate test, lint, and docs-build jobs for better parallelization.
See PR #405.
1.7.3 (2025-12-03)#
Revert to treating dates as strings, deferring cleaning until downstream processing. #396
1.7.2 (2025-11-26)#
Fix datetime type for publication date to ensure proper handling across database backends. #392
1.7.1 (2025-11-19)#
Improve dtype handling for DuckDB and SQLite outputs. #388
Add integration test to verify DuckDB and SQLite tables are identical.
1.7.0 (2025-11-16)#
Support Output to DuckDB#
1.6.0 (2025-04-28)#
Make table name pattern more robust to handle edge cases in XBRL taxonomy parsing. #320
1.5.2 (2025-04-12)#
Add Python 3.13 support. #318
1.5.1 (2024-07-17)#
Multi-Taxonomy Support#
Fix datapackage generation from multiple taxonomies. #242
Improve datapackage formatting.
Fix examples in README with updated sample filings.
Improve docstrings and comments throughout the codebase.
1.5.0 (2024-07-02)#
Minor dependency updates and maintenance release.
1.4.0 (2024-04-14)#
Update to Frictionless v5 and ensure all tests pass with the new version. #213
1.3.3 (2024-03-26)#
Add retry logic for taxonomy reading to improve reliability with network issues. #205
1.3.2 (2024-01-20)#
Add support for pandas 2.2.
Cache dimension snakecase operations for better performance.
1.3.1 (2023-11-29)#
Fix warning suppression by using ‘ignore’ instead of ‘once’.
1.3.0 (2023-11-28)#
Update to Pydantic v2 and migrate from Black to Ruff formatting. #169
Add Zenodo DOI badge to README.
1.2.1 (2023-10-18)#
Add Python 3.12 support.
1.2.0 (2023-10-12)#
Instead of combining multiple filings from one year, we track publication time of each filing and keep all filings. This allows downstream users to deduplicate facts from multiple filings.
1.1.0 (2023-09-22)#
Fix high memory usage in v1.0.
1.0.1 (2023-09-13)#
Minor patch for Pydantic 2.0 compatibility.
1.0.0 (2023-09-07)#
Match facts that are missing some dimensions to their corresponding fact tables - see this issue.
Multiple filings from one entity in a year are now combined as if later ones are updates to earlier ones instead of duplicated.
Separate taxonomy archives from data archives, since data refers to taxonomies from a specific year.
Update to Pandas 2.0 and loosen dependency pins on
arelle(now “>=2.3,<3”)
0.7.0 (2022-12-9)#
Group taxonomy metadata by table#
Change taxonomy metadata extraction to group by table name
0.6.0 (2022-12-8)#
Use official Arelle package#
Change Arelle dependency to point to official PyPI package
Explicitly reset locale to avoid error caused by Arelle
0.5.0 (2022-11-23)#
Fix bug causing some records to be excluded#
Use sorted tuple keys when looking up facts during parsing
0.4.0 (2022-10-6)#
Parse archived taxonomies#
Add support for parsing taxonomies from a local zipfile
0.3.0 (2022-08-27)#
Enable publication of raw SQLite databases to Datasette#
Add support for specifying a subset of tables for extraction
Add options for specifying output path for datapackage descriptors
Fix docs generation, as well as various other CI improvements
0.2.0 (2022-07-28)#
Support All Forms#
Tested with FERC forms 1, 2, 6, 60, 714
Adds options for selecting taxonomies from CLI
0.1.0 (2022-06-28)#
Initial Release#
The FERC XBRL extractor supports extracting data from XBRL filings to produce a SQLite database
It provides a CLI that takes a link to a taxonomy and a set of filings and can produce a database containing the extracted data.
FERC form 1 is the only form that is officially tested and supported