Skip to main content

FLiberator

FLiberator is a small open-source software package that does exactly one thing: it liberates the downloadable Florida statutes from a weird proprietary format.

Florida publishes its statutes in bulk only as a Windows application built on Rocket® NXT, a proprietary "Infobase" container. FLiberator turns that into ordinary HTML — one file per section — plus a JSON sidecar with the ordering and hierarchy the HTML can't carry.

License: MIT

Quick start

Requires uv and Python 3.12+. Two commands, from a fresh clone:

uv sync                      # create .venv and install the package
uv run fliberate --download  # fetch Florida's bulk data, then decode it

That's the whole pipeline. It takes about two minutes, nearly all of it the download:

downloading https://www.leg.state.fl.us/Statutes/FLLawDL2025.zip
  248,586,704 bytes / 248,586,704 (100%)
extracted 13 .nxt files (371,822,592 bytes)
       edition: 2025
      statutes: 24,866 documents  <- fs2025.nxt
  constitution:    213 documents  <- flcnst2025.nxt
          laws:    255 documents  <- lf2025.nxt
         total: 25,334 documents written to output/

You need roughly 820 MB of free disk: 249 MB for the zip, 372 MB unpacked, 201 MB of output. Decoding by itself, once the data is on disk, takes about 18 seconds.

Already have the data? Drop --download and it decodes what's in download/ — the download and unzip steps are both skipped automatically if their results are already there, so re-running --download is safe and cheap.

What you get

Output lands in the git-ignored output/ folder:

output/
  metadata.json                            ordering, hierarchy, provenance
  statutes/0001/1.01.html                  24,866 sections
  constitution/article-01/section-03.html      213 sections
  laws/2025-1.html                             255 session laws

What's covered: the three files holding Florida primary law — the statutes, the Florida Constitution, and the Laws of Florida. The bulk distribution's eight finding-aid files (subject and definition indexes, cross-reference and tracing tables), the bundled US Constitution, and the help PDF are deliberately out of scope.

Footnotes are rewritten as semantic HTML5: each reference becomes a <sup><a role="doc-noteref">, and the note bodies are collected into a <section role="doc-endnotes"> at the end of the section, with one backlink per referrer.

metadata.json carries what the HTML can't — canonical ordering (documents are stored in build order, which has nothing to do with statutory order), the full Title → Chapter → Part hierarchy, per-document footnote counts, and the edition year plus the SHA-256 of each source file so two years' output can be told apart.

The edition year is discovered from the filenames (fs2025.nxt, flcnst2025.nxt, lf2025.nxt), never hardcoded, so next year's data needs no code change.

Commands

uv run fliberate --download          # fetch + unzip into download/, then decode
uv run fliberate                     # decode the newest edition already in download/
uv run fliberate --library DIR       # decode a specific Library/ directory
uv run fliberate --output DIR        # write somewhere other than output/
uv run fliberate --version

The package is also importable, if you'd rather drive it yourself:

from fliberator import decode, depage

records = depage.load_records("download/FLLawDL2025/Library/fs2025.nxt")
html = decode.decode(records[0], 0, len(records[0]))[0]

How it works

  1. Download. FLiberator fetches the "Advanced Legislative Search & Browse" application zip from its download page into the git-ignored download/ folder. It scrapes the page for the current year's link (currently FLLawDL2025.zip) rather than hardcoding a year.
  2. Unzip, also into download/ — extracting only the 13 .nxt data files, not the 1,369 other entries of the Windows viewer application Florida wraps them in.
  3. Decode the Rocket NXT files directly into HTML plus the JSON sidecar. This is two layers: a paged storage layer (the file is a store of 4 KB pages, and a document is a chain of fragments scattered across non-adjacent ones, which must be reassembled before any byte is read as content) and a content layer (a thin opcode wrapper around otherwise-literal HTML). See docs/nxt-format.md for how the format was reverse-engineered.

Development

uv run pytest                # the test suite
uv run ruff check .          # lint
uv run ruff format .         # format
uv run python scripts/release_check.py  # build and validate release artifacts

scripts/ holds the analysis and validation code the reverse-engineering was done with — not part of the package, but still useful as regression checks against the live leg.state.fl.us pages. See plans/re-plan.md for phase-by-phase status.

Background

  • Florida provides a downloadable Windows desktop application called "Advanced Legislative Search & Browse", which contains a bulk dataset of the Florida statutes: https://www.leg.state.fl.us/Statutes/index.cfm?Mode=Statutes%20Download&Submenu=7&Tab=statutes.
  • After extracting the zip file for the application, there are several .nxt files. This is a proprietary "Infobase" container format produced by Rocket® NXT / Folio NXT software (the Folio Views product line).
  • The Florida statutes file is Library/fs2025.nxt.
  • .nxt files turn out to contain tokenized-but-mostly-literal HTML: a thin, partially-reverse-engineered opcode layer wraps ordinary markup and text rather than replacing it. That made it possible to decode .nxt straight to HTML, without ever producing an intermediate Folio Flat File (.fff) or depending on the folioxml converter — an earlier plan for this project, abandoned once the NXT content layer itself turned out to be understandable and sufficient on its own. See docs/nxt-format.md for the full technical writeup.

Release files for fliberator 0.1.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 fliberator 0.1.0
File Size Uploaded
fliberator-0.1.0.tar.gz 63.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for fliberator 0.1.0
File Interpreter ABI Platform
fliberator-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 93.4 kB

Release files / fliberator-0.1.0.tar.gz

Download URL fliberator-0.1.0.tar.gz
Size 63.6 kB
Tags Source
SHA-256 checksum
How to use checksums
d342110e998afecbcecd9f3f9a97ec666a6265ac64ce9f3389951ae68814a2f0
BLAKE2b-256 checksum
How to use checksums
055ab7b6e04418ccace75008538e00edd28f13936d7e3ca240471eaffa029d6a
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 Aug 8, 2026.

Transparency log

Release files / fliberator-0.1.0-py3-none-any.whl

Download URL fliberator-0.1.0-py3-none-any.whl
Size 29.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
8fdc61c9a411e21db3cb264a3d2b2f4f1d1ddd451a90c11dff48958870e0bdbb
BLAKE2b-256 checksum
How to use checksums
b2a6a8764c426975bae426d238273dfdf6c7839b5333a6fae151fe3af5ec9844
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 Aug 8, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.1.0 This release

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