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, and taplo-format, among others. #442

  • Simplified packaging: removed MANIFEST.in and the vestigial [tool.setuptools] configuration left over from before the switch to hatchling. #442

  • Migrated 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. #442

  • Wired up CodeCov coverage reporting with a repo-specific .codecov.yml. #442

  • Grouped 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 main before building. #442

  • Switched 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-report prints 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 a py.typed marker 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 the InstanceBuilder constructor with a filing’s publication time and taxonomy version, which are otherwise derived from an rssfeed metadata file FERC’s archiving process bundles into zip archives alongside the filings. The directory mode now works, reading that same rssfeed file 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 accompanying rssfeed file, so there’s no way to determine its publication time or taxonomy version. Both input types now raise a clear ValueError on invalid input instead of crashing. #444

  • Fixed a crash in ``run_main()`` that occurred whenever --duckdb-path wasn’t passed on the CLI – including via the simplest example command in the README. --duckdb-path now defaults to the sqlite path with a .duckdb suffix instead. #444

  • Fixed a taxonomy-loading retry loop that could have raised a confusing UnboundLocalError instead of a clear error if ever called with max_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, or pudl-archiver since 2022. #444

  • Reordered 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_modifyitems hook in tests/conftest.py sorts test_concurrent_taxonomy_load and the two slowest console_scripts_test.py cases 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#

  • Add DuckDB output support alongside existing SQLite output. #368

  • Pin arelle version to avoid pillow v12.0 compatibility issues. #382

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