Releases: nightmarewalker/D-MemFS
v0.4.1
This release focuses on documentation quality — no functional changes.
Documentation
- Added docstrings to all public API classes and methods (
MemoryFileSystem,MemoryFileHandle,AsyncMemoryFileSystem,AsyncMemoryFileHandle,MFSStats,MFSStatResult,MFSQuotaExceededError,MFSNodeLimitExceededError,MFSTextHandle,ArchiveAdapterand related) - Regenerated API reference (
docs/api_md/index.md) — previously missing methods and classes are now fully documented - Added
pydoc-markdown.ymlfor reproducible API reference generation with public-API-only filtering - Added design documents:
spec_v15.md,DetailedDesignSpec_v3.md,DetailedDesignSpec_test_v3.md - README: added
spec_v15link, updatedDetailedDesignSpec/DetailedDesignSpec_testlinks to v3
v0.4.0
v0.4.0 - 2026-03-21
This release adds pluggable archive extraction to D-MemFS. ZIP and TAR archives can now be extracted directly into the virtual filesystem using expand_archive() (atomic, all-or-nothing) or expand_archive_streaming() (low-memory, incremental). Custom archive formats are supported via the ArchiveAdapter base class.
Highlights
- Added
expand_archive()for atomic extraction viaimport_tree()with automatic rollback on failure - Added
expand_archive_streaming()for low-memory streaming extraction withon_conflict="skip"for incremental updates - Added
ArchiveAdapterbase class with built-inZipAdapterandTarAdapter(standard library only) - Added
_sanitize_archive_path()for Zip Slip prevention — absolute paths,../traversal, and backslash paths are silently stripped - Added
on_conflictparameter ("raise"/"overwrite"/"skip") for archive-internal duplicates and MFS existing file collisions - Re-exported
ArchiveAdapter,expand_archive,expand_archive_streamingfromdmemfs - Updated README, README_ja, TESTING, TESTING_ja, CHANGELOG, and examples documentation
Verification
- Standard test run: 436 passed
- Free-threaded test run: 436 passed
- Free-threaded stress tests: 6 passed
Notes
expand_archive()buffers the entire archive in memory (~2× peak) but guarantees all-or-nothing atomicityexpand_archive_streaming()uses O(single-file) memory but does not roll back on failureon_conflict="skip"is available only inexpand_archive_streaming()for incremental extraction- Existing directory collisions always raise
IsADirectoryErrorregardless ofon_conflictsetting
v0.3.0
v0.3.0
This release adds MemoryGuard, an optional physical-memory protection layer for D-MemFS. In addition to the existing logical quota, D-MemFS can now warn or fail early when configured quota or incoming writes exceed available system memory. The default remains memory_guard="none", so existing behavior stays backward compatible.
Highlights
- Added
memory_guard,memory_guard_action, andmemory_guard_intervaltoMemoryFileSystemandAsyncMemoryFileSystem - Added internal physical-memory detection and MemoryGuard strategy modules
- Integrated MemoryGuard into write, truncate, preallocate, import_tree, and copy_tree paths
- Improved
MemoryErrormessages with clearer context and recovery hints - Made chunk-overhead accounting deterministic across standard and free-threaded Python builds
- Added free-threaded CI coverage and updated test/documentation assets
Verification
- Standard test run: 369 passed
- Free-threaded test run: 369 passed
- Free-threaded stress tests: 6 passed
Notes
memory_guard="none"keeps legacy behaviormemory_guard="init"checks at filesystem initializationmemory_guard="per_write"checks before write-path allocations
v0.2.1
Fix relative links in READMEs for PyPI compatibility
v0.2.0
Initial release of D-MemFS — in-process virtual filesystem with hard quota for Python.