froe 0.8.0

Reader and offline maintenance toolkit for Apache Jackrabbit Oak segment-tar (TarMK) repositories: parse archives and records, extract node data, compact, back up, and recover.
Documentation

froe

A Rust implementation of Apache Jackrabbit Oak's segment-tar ("TarMK") storage format — the repository format used by Apache Jackrabbit Oak and Adobe Experience Manager.

This crate opens a segment store directly from disk, without a running Oak instance. The reading API (store, content, tooling) is read-only and safe against a live repository: it neither takes the lock nor writes. Like Oak, it memory-maps archives and relies on the store's never-modify-in-place file protocol; an external process that truncates or rewrites an archive would disturb both froe and a running Oak instance.

The mutating writing API (writer) covers commits, checkpoints, applying cleanup, compaction, backup, restore, and journal recovery. It takes the exclusive repository lock and produces stores byte-for-byte compatible with Oak (apart from the documented extreme-subnormal double_to_text rendering residue), so a subsequent AEM start consumes the result cleanly. Planning cleanup is the read-only exception and never takes the lock. Run mutations only against a stopped repository. The writer currently requires a Unix operating-system entropy source and therefore refuses to open on Windows. If repo.lock is absent, opening any writer also requires same-directory hard-link and durable directory-fsync support to publish the new mode-0600 lock safely; an unsupported filesystem fails closed.

The writing API is verified against a real Oak instance: the workspace interoperability suite round-trips it through Apache Jackrabbit Oak oak-segment-tar 1.90.0 — Oak writes the store, froe commits, checkpoints, compacts, cleans up, backs up, restores and recovers the journal, and Oak then boots against each result and serves a byte-identical content tree without logging any of its own repair messages. Still unverified against a live instance: store.version=1 stores, external blob stores, native macOS or Windows execution, and Adobe AEM itself, which ships its own Oak build. Writing still requires a stopped repository, and keeping a copy before a destructive operation on irreplaceable data remains ordinary prudence.

See the workspace repository for the complete feature map and storage format documentation, including the cleanup safety guide, and the froe-cli crate for the command-line interface.

Large inline binaries can be consumed without materializing their full contents through content::read_binary_stream, whose returned BinaryStream implements std::io::Read. The bounded opener does not follow a long external blob-identifier record merely to report that local content is unavailable; the legacy materializing helper retains its identifier-bearing error. The read-only gc_journal module parses both legacy six-field and current seven-field gc.log histories even when the repository itself cannot resolve a head. Its default readers preserve Oak's empty result for unavailable or undecodable optional journals, while returning typed errors instead of silently discarding entries that exceed froe's configurable resource limits.

Low-level diagnostics expose tooling::dump_segment_bytes, which preserves a raw hex dump even when segment parsing fails, and tooling::debug_archive_with_options, which applies explicit retained-row, retained-text, total-work, per-node child/name, pending-traversal, and graph row/edge budgets. Archive graphs are totalized to one row per segment and reconstructed archive-locally when the stored graph is missing or corrupt.

Licensed under the Apache License, Version 2.0.