Skip to content
AsHyAmS
Network state observed every site read A snapshot, not live telemetry.

Library morrowind active current

dream_archive

Read, extract and write Bethesda BSA and BA2 archives, from Morrowind to Starfield, as a Jess package in Luau.

Indexed from dream_archive. Project metadata is published by the project's own site; AsHyAmS indexes that claim.

stable · current
2.0.0 2026-10-21
development
2.0.1-dev.11 2026-10-24
License
MIT OR Apache-2.0
Versioning
numeric

01Dependencies

From the current release, stable 2.0.0.

The current release declares no relationships.

02Used by

Current releases of indexed projects that point here, by id or through a capability.

dream_archive and its direct relationshipsDependents above, dependencies below. The tables on this page list the same relationships.dream-archivetool requires dream_archiveDreamWind requires dream_archivevfstool_lib requires dream_archivedream_archive · 2.0.0dream_archive2.0.0dream-archivetool · tooldream-archivetooltoolDreamWind · toolDreamWindtoolvfstool_lib · libraryvfstool_liblibrary
Direct relationships. Dependents above, dependencies below; the lists above are the same facts.

03Compatibility

As the publisher declares it for the current release. This index claims nothing further.

Platforms
not restricted

04Releases

14 releases, newest first. Yanked and deprecated releases stay listed.

  1. 2.0.1-dev.11 developmenthead 2026-10-24

    source f7aefa4861b1

    org.dreamweave.dream-archive-2.0.1-dev.11.jpk 255.3 KiB · Jess package
    Verify · sha256 3fa016acf21c…d7ce409e · 1 source
    SHA-256
    3fa016acf21c50581e8423611d66ed752fdc805d998f8a6d4ae82d48d7ce409e
    Size
    261439 bytes
    Media type
    application/vnd.jess.jpk
    publisher
    https://github.com/DreamWeave-MP/dream_archive/releases/download/development/org.dreamweave.dream-archive-2.0.1-dev.11.jpk

    The digest is the publisher's claim, recorded in its manifest. This index did not download the archive. Check it yourself: sha256sum org.dreamweave.dream-archive-2.0.1-dev.11.jpk must print the digest above.

  2. 2.0.0 stablecurrentbreaking notes 2026-10-21

    dream_archive is a Jess package, written in Luau; the Rust crate continues on the rust branch at 1.1.0.

    Publisher's notes

    Breaking changes

    • The library is the Jess package org.dreamweave.dream-archive, module @dream-archive, installed with jess rather than Cargo. The Rust crate dream_archive stays at 1.1.0 on crates.io and on this repository's rust branch, and is no longer developed on main.

    source 7af9ffda3828 · tag dream_archive-2.0.0

    org.dreamweave.dream-archive-2.0.0.jpk 255.3 KiB · Jess package
    Verify · sha256 281c27bf86a2…23035730 · 1 source
    SHA-256
    281c27bf86a2b9ea14dc9baa4959a9a9d213784332acfefcc9a9a9e623035730
    Size
    261432 bytes
    Media type
    application/vnd.jess.jpk
    publisher
    https://github.com/DreamWeave-MP/dream_archive/releases/download/dream_archive-2.0.0/org.dreamweave.dream-archive-2.0.0.jpk

    The digest is the publisher's claim, recorded in its manifest. This index did not download the archive. Check it yourself: sha256sum org.dreamweave.dream-archive-2.0.0.jpk must print the digest above.

  3. 1.1.0 stable 2026-09-30

    Relicensed as MIT OR Apache-2.0 and built on l3i 1.1.0.

    Publisher's notes

    Changed

    • Relicensed from GPL-3.0 to MIT OR Apache-2.0: this is the first release under the new terms, and releases up to and including 1.0.0 stay GPL.
    • Requires dream-path 1.1, its first MIT OR Apache-2.0 release.
    • l3i 1.1.0 comes from crates.io; the @dream/archive module is unchanged.

    source 6cf4005005b5 · tag dream_archive-1.1.0

    dream_archive-1.1.0.crate 7.1 MiB · Rust crate
    Verify · sha256 ef05ce9b63b8…1dbc24c7 · 1 source
    SHA-256
    ef05ce9b63b87ff34e29708aa5d58829608063a64cf236420adbba101dbc24c7
    Size
    7404128 bytes
    Media type
    application/gzip
    publisher
    https://static.crates.io/crates/nil/dream_archive-1.1.0.crate

    The digest is the publisher's claim, recorded in its manifest. This index did not download the archive. Check it yourself: sha256sum dream_archive-1.1.0.crate must print the digest above.

  4. 1.0.0 stablebreaking notesmigration notes 2026-09-29

    First stable release: the Luau binding is an l3i extension providing @dream/archive, every archive family looks entries up by hash, and lookups and zlib reads allocate less.

    Publisher's notes

    Breaking changes

    • The luau feature (lua is the old name of the same feature) binds the crate as an l3i extension, luau::ArchiveExtension, providing @dream/archive. dream_archive::lua, the mlua types and the standalone-lua feature are gone.
    • Building with the luau feature needs l3i's toolchain: clang, lld and cross-language thin LTO.
    • Every open* in Luau returns the one Archive type; archive:entries() is a view of entry handles, not a table of tables.
    • Luau entry hashes are integers: entry.hash and entry.folderHash replace the old tables and fields, with hashHex and folderHashHex for the hex spelling. BA2 hashes are directoryHash, fileHash and extensionHash; sizes and offsets are size, storedSize and offset on every format.
    • Luau integer arguments must be exact: readEntry(1.5) is an error instead of a rounded read.
    • bsa::Error::InvalidFileRecordFlags is gone. Nothing returned it: both flag bits of a TES4 file record are read as the format defines them.

    Added

    • get_by_hash, get_id_by_hash and contains_hash on every archive family, get_id by path, and HashFields::from_numeric.
    • archive:readInto(entry, buffer, offset) in Luau decodes a member straight into a buffer, and archive:getByHash and archive:containsHash take the family's hash shape.
    • Luau type definitions for the whole module, checked by Luau's own type checker in the tests behind the luau-analysis feature.
    • toBuffer() on every Luau builder; only ba2.Builder had it.
    • dream_archive::flate2, the re-exported flate2 whose Compression set_zlib_level takes, so naming a zlib level needs no flate2 dependency of your own.

    Changed

    • Path lookups normalize into a stack buffer instead of allocating: contains over 4096 distinct paths takes 0.39 ms instead of 1.03 ms (TES3) and 1.43 ms (TES4).
    • zlib members inflate from the archive through one inflater per thread: a 64 KiB TES4 member reads in 18 µs instead of 68 µs.
    • Walking entries from Luau is 5 to 23 times faster than with mlua, and small calls such as contains and readEntry take about half as long: 4096 TES3 entries take 0.73 ms instead of 6.15 ms.
    • dream-path 1.0 and l3i 1.0.0 come from crates.io; Rust 1.92.

    Fixed

    • Dx10Builder::add_dds_bytes and add_dds_file take DDS files whose depth field is 1, as many tools write for ordinary textures. A DDS file is a volume texture only when its flags have DDSD_DEPTH or its caps have DDSCAPS2_VOLUME.
    • A cubemap's extended DX10 DDS header has an array size of 1, one cube, as the DDS format and DirectXTex count it: extraction wrote 6, which DirectXTex-based tools read as six cubes, and add_dds_bytes and add_dds_file refused cubemaps saved by texconv. Cubemaps extracted by earlier versions, which say 6 over one cube's data, are still accepted.
    • Every family matches a lookup path the same way, with dream-path's normalization. BA2 lookups kept repeated separators and dropped a trailing one, so meshes//door.nif missed and meshes/door.nif/ found a member a BSA answered the other way round; hash-only TES4 lookups missed a//b/c.nif. Archives without names now hash the normalized path.
    • Luau entry.name is the part of the path after its last separator in every family. For a BA2 entry it was the whole stored path, the same as entry.path.
    • Luau entry.folder is "" for an entry at the root of a TES3 archive or a BA2, as it was for TES4, instead of nil; nil means the archive stores no names.
    • The crate builds with only the ba2 feature: it now enables the lz4_flex feature its compressor needs, which only bsa-tes4 turned on before. Builds with one BSA family alone no longer carry dead code.

    Migration

    Compose dream_archive::luau::ArchiveExtension into the host's l3i RuntimePlan. A host that still wants the dreamArchive global adds RuntimePolicy::compat_global("@dream/archive", "dreamArchive"). That release's Embedding Luau page listed what scripts must change; the Luau port's documentation replaces it.

    source 94f37c74ce28 · tag dream_archive-1.0.0

    dream_archive-1.0.0.crate 7.1 MiB · Rust crate
    Verify · sha256 fe94718bdde6…743d2225 · 1 source
    SHA-256
    fe94718bdde6117e633510a184a036c88bad99d0a745c0d18de21301743d2225
    Size
    7408572 bytes
    Media type
    application/gzip
    publisher
    https://static.crates.io/crates/nil/dream_archive-1.0.0.crate

    The digest is the publisher's claim, recorded in its manifest. This index did not download the archive. Check it yourself: sha256sum dream_archive-1.0.0.crate must print the digest above.

  5. 0.2.3 stable 2026-09-27

    Publisher's notes

    Fixed

    • TES3 entry hashes are read low half first, so Entry::hash equals hash_file(path).0.numeric() for the same path.

    source 3eaa4d22a03a · tag dream_archive-0.2.3

    dream_archive-0.2.3.crate 6.4 MiB · Rust crate
    Verify · sha256 25b1eed987e0…984a149d · 1 source
    SHA-256
    25b1eed987e0302b243cc795cbce18bfc3a1d02db92877edf6bb3784984a149d
    Size
    6689282 bytes
    Media type
    application/gzip
    publisher
    https://static.crates.io/crates/nil/dream_archive-0.2.3.crate

    The digest is the publisher's claim, recorded in its manifest. This index did not download the archive. Check it yourself: sha256sum dream_archive-0.2.3.crate must print the digest above.

  6. 0.2.2 stable 2026-09-26

    Publisher's notes

    Changed

    • Rust 1.88, as mlua 0.12 requires.

    Fixed

    • Fallout 3's voice archives open: their file name block is padded with NUL bytes after the last name.

    source 335dd75d1459 · tag dream_archive-0.2.2

    dream_archive-0.2.2.crate 6.4 MiB · Rust crate
    Verify · sha256 5e7837eaef7d…51ff7a73 · 1 source
    SHA-256
    5e7837eaef7dd893694b275e94f3e46559514adecdfe503d630332d951ff7a73
    Size
    6688798 bytes
    Media type
    application/gzip
    publisher
    https://static.crates.io/crates/nil/dream_archive-0.2.2.crate

    The digest is the publisher's claim, recorded in its manifest. This index did not download the archive. Check it yourself: sha256sum dream_archive-0.2.2.crate must print the digest above.

  7. 0.2.0 stablebreaking notes 2026-09-26

    The Lua API runs on Luau, with camelCase names, and Oblivion's archives open.

    Publisher's notes

    Breaking changes

    • The Lua bindings build against mlua 0.12; standalone-lua selects Luau instead of LuaJIT.
    • Lua names are camelCase (dreamArchive.openPath, archive:readFileRequired), and so are enum values ("bsaTes4", "skyrimSe"); constants are UPPER_SNAKE.
    • dream_path 0.2 and lz4_flex 0.14.

    Fixed

    • Oblivion's BSAs open. Their version 103 headers set the bit that means XMem compression from version 104 on; it is now ignored for 103, as OpenMW ignores it.

    source 891a4dbde556 · tag dream_archive-0.2.0

    dream_archive-0.2.0.crate 6.4 MiB · Rust crate
    Verify · sha256 9b8153b18ab3…9414ae51 · 1 source
    SHA-256
    9b8153b18ab32ccc5447f2fb412c2e91c7259374accc12b0d43349139414ae51
    Size
    6688544 bytes
    Media type
    application/gzip
    publisher
    https://static.crates.io/crates/nil/dream_archive-0.2.0.crate

    The digest is the publisher's claim, recorded in its manifest. This index did not download the archive. Check it yourself: sha256sum dream_archive-0.2.0.crate must print the digest above.

  8. 0.1.6 stable 2026-04-28

    Publisher's notes

    Added

    • open_file, open_file_required and open_entry: a member as a std::io::Read, borrowed straight from the archive when it is stored uncompressed.

    source 49ec1cf1cb2b · tag dream_archive-0.1.6

    dream_archive-0.1.6.crate 6.4 MiB · Rust crate
    Verify · sha256 b430d6bfd34d…905fa08f · 1 source
    SHA-256
    b430d6bfd34d48ba33ac26ea6d78099e205fbb1b04b54a916bed8bb3905fa08f
    Size
    6686453 bytes
    Media type
    application/gzip
    publisher
    https://static.crates.io/crates/nil/dream_archive-0.1.6.crate

    The digest is the publisher's claim, recorded in its manifest. This index did not download the archive. Check it yourself: sha256sum dream_archive-0.1.6.crate must print the digest above.

  9. 0.1.5 stable 2026-04-28

    Publisher's notes

    Added

    • Dx10Builder::add_archive_entry copies a DX10 texture's header, chunk records and stored bytes unchanged, instead of rebuilding them.

    source 275004ee0809 · tag dream_archive-0.1.5

    dream_archive-0.1.5.crate 6.4 MiB · Rust crate
    Verify · sha256 a2fb1512b3bd…892f46b8 · 1 source
    SHA-256
    a2fb1512b3bd0cce7a79d5b5c8fa2d34dc2b559ca6e0d7232fda651c892f46b8
    Size
    6684011 bytes
    Media type
    application/gzip
    publisher
    https://static.crates.io/crates/nil/dream_archive-0.1.5.crate

    The digest is the publisher's claim, recorded in its manifest. This index did not download the archive. Check it yourself: sha256sum dream_archive-0.1.5.crate must print the digest above.

  10. 0.1.4 stable 2026-04-27

    Publisher's notes

    Added

    • A host can add its own Lua methods to the archive userdata: lua::LuaArchive with archive() and path(), create_module_with_archive_methods, register_archive_methods and add_archive_methods.

    source f62c6b2bd38c · tag dream_archive-0.1.4

    dream_archive-0.1.4.crate 6.4 MiB · Rust crate
    Verify · sha256 26a6ca990278…c04e539f · 1 source
    SHA-256
    26a6ca990278ecde7e8ec853ab35b3ef6cc3c250063c92b68263cac0c04e539f
    Size
    6681682 bytes
    Media type
    application/gzip
    publisher
    https://static.crates.io/crates/nil/dream_archive-0.1.4.crate

    The digest is the publisher's claim, recorded in its manifest. This index did not download the archive. Check it yourself: sha256sum dream_archive-0.1.4.crate must print the digest above.

  11. 0.1.3 stable 2026-04-27

    Publisher's notes

    Changed

    • bstr comes through dream_path and is re-exported as dream_archive::bstr; the crate no longer depends on it directly.

    source 31b8a298bd65 · tag dream_archive-0.1.3

    dream_archive-0.1.3.crate 6.4 MiB · Rust crate
    Verify · sha256 84720935c839…aa44aafa · 1 source
    SHA-256
    84720935c8390aeac858dd0e6db8c48b2446531aabaafd7a8653907eaa44aafa
    Size
    6680385 bytes
    Media type
    application/gzip
    publisher
    https://static.crates.io/crates/nil/dream_archive-0.1.3.crate

    The digest is the publisher's claim, recorded in its manifest. This index did not download the archive. Check it yourself: sha256sum dream_archive-0.1.3.crate must print the digest above.

  12. 0.1.2 stable 2026-04-27

    Publisher's notes

    Added

    • dream_path is re-exported.

    Changed

    • The lua feature no longer picks a Lua runtime: the host chooses one through its own mlua. standalone-lua selects vendored LuaJIT.
    • Rust 1.87.

    source c07c7f65e0ff · tag dream_archive-0.1.2

    dream_archive-0.1.2.crate 6.4 MiB · Rust crate
    Verify · sha256 2a92a79eb580…cf345987 · 1 source
    SHA-256
    2a92a79eb58028ad30921937e59b419b6026773c4e8c228559bf73dfcf345987
    Size
    6680411 bytes
    Media type
    application/gzip
    publisher
    https://static.crates.io/crates/nil/dream_archive-0.1.2.crate

    The digest is the publisher's claim, recorded in its manifest. This index did not download the archive. Check it yourself: sha256sum dream_archive-0.1.2.crate must print the digest above.

  13. 0.1.1 stablebreaking notes 2026-04-27

    Builders read files when they write, and can copy entries from an opened archive.

    Publisher's notes

    Breaking changes

    • Builders write with write_seek, to any Write + Seek; write_to is gone.

    Added

    • add_archive_entry on every builder, and add_archive_entry_with_compression on the BA2 and TES4 builders: an entry of an opened archive of the same family, copied when the archive is written.
    • Stable entry ids: entries_with_ids, entry_by_id, entry_by_id_required and extract_entry_by_id; extracted_len and extracted_len_by_id for BA2 and TES4.

    Changed

    • add_file and add_dir record each source's path and size and read it when the archive is written. A source that changed size in between fails the write.

    source fe966096a85f · tag dream_archive-0.1.1

    dream_archive-0.1.1.crate 6.4 MiB · Rust crate
    Verify · sha256 5213b694d2b1…a30c7bce · 1 source
    SHA-256
    5213b694d2b11b6325208dba49f0ae94a37de11331e4ff71149ee933a30c7bce
    Size
    6679730 bytes
    Media type
    application/gzip
    publisher
    https://static.crates.io/crates/nil/dream_archive-0.1.1.crate

    The digest is the publisher's claim, recorded in its manifest. This index did not download the archive. Check it yourself: sha256sum dream_archive-0.1.1.crate must print the digest above.

  14. 0.1.0 stable 2026-04-27

    First release: read, extract and write BA2, TES3 BSA and TES4 BSA archives in pure Rust.

    Publisher's notes

    Added

    • Archive, which detects the family of any supported archive and lists, reads and extracts it.
    • BA2 GNRL and DX10 reading and extraction; DX10 textures come out as DDS files with headers rebuilt from the archive's metadata. GNMF archives are identified, not extracted.
    • TES3 BSA reading, extraction and writing.
    • TES4 BSA reading, extraction and writing for versions 103, 104 and 105: zlib and LZ4 frames, string tables, embedded names, and hash-only archives through extract_to_with_paths.
    • BA2 GNRL writing, and DX10 writing from DDS files or from texture metadata and raw payloads.
    • Legacy filename code pages: encode_filename, decode_filename_lossy and extract_to_with_encoding.
    • Parallel extraction behind the parallel feature.
    • Lua bindings through mlua and vendored LuaJIT, behind the lua feature.

    source 0ee5dcba6cdf · tag dream_archive-0.1.0

    dream_archive-0.1.0.crate 6.4 MiB · Rust crate
    Verify · sha256 345dd3d128d5…41ab7323 · 1 source
    SHA-256
    345dd3d128d5a2bc571f2977e8ca740861618a8ef737b7cc9c18003941ab7323
    Size
    6674592 bytes
    Media type
    application/gzip
    publisher
    https://static.crates.io/crates/nil/dream_archive-0.1.0.crate

    The digest is the publisher's claim, recorded in its manifest. This index did not download the archive. Check it yourself: sha256sum dream_archive-0.1.0.crate must print the digest above.

07Observed changes

What this index saw change in this claim's manifest.

  1. development 2.0.1-dev.10 → 2.0.1-dev.11 development
  2. development 2.0.1-dev.9 → 2.0.1-dev.10 artifactsdevelopment
  3. development 2.0.1-dev.8 → 2.0.1-dev.9 development
  4. development 2.0.1-dev.7 → 2.0.1-dev.8 development
  5. development none → 2.0.1-dev.7, stable 1.1.0 → 2.0.0 releasebreakingartifactsdevelopment
  6. stable 1.0.0 → 1.1.0 releaseartifacts
  7. first observed observed

08People