3.1 KiB
3.1 KiB
Changelog
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[Unreleased]
[0.1.0] - 2026-03-21
Added
- Streaming tar-based export (
--export) producing.keep.tararchives without loading entire files into memory - Streaming tar-based import (
--import) extracting.keep.tararchives with new IDs - Server endpoints
GET /api/exportandPOST /api/import - ID-based filtering for
--list(keep -l 1 2 3lists specific items by ID) - Server API accepts optional
idsquery parameter onGET /api/item/ --ids-onlyflag for--listmode for scriptinginferandtree_magic_minimeta plugins for MIME type detection- Native
zstdcompression plugin as default - Configurable compression via
--compressionflag - Export/import modes with format detection (JSON, YAML, binary)
XDG_CONFIG_HOMEsupport for default config file locationXDG_DATA_HOMEsupport for default storage location- Tilde (
~) expansion in config file paths
Changed
CompressionType::Nonerenamed toCompressionType::Raw(with"none"as alias for backward compatibility)items.sizecolumn renamed toitems.uncompressed_size- Added
items.compressed_sizecolumn tracking compressed file size on disk - Added
items.closedcolumn tracking whether an item is fully written - Default
list_formatin config now matches CLI default (7 vs 5 columns) - All filter plugins share deduplicated option implementations
Refactored
- Extracted
spawn_body_reader()andcheck_binary_content()helpers for streaming uploads - Extracted
yaml_value_to_string()helper for meta plugins - Extracted
item_path()helper inItemServiceto reduce path duplication - Unified
get_item_meta_name/valueto take&strinstead ofString - Shared
ItemInfostruct between client and server - Compression service now returns
Resulttypes instead of panicking via.expect() ApiResponse::ok()andApiResponse::empty()constructorsmeta_filter()helper onSettingsfor consistent filtering- Added
tag_names()method onItemWithMeta filter_clone_box!macro for filter plugin cloning
Fixed
- Panic guards in diff, compression engine, and spawned threads
- Pre-existing borrow errors in export handler and
TryFromimplementation - TOCTOU race in
stream_raw_content_response - Swallowed write errors in meta plugins (digest, magic_file, exec)
- Truncated uploads (413) now properly store compressed data
term::stderr().unwrap()panic initem_service.unwrap()panics in compression engineRead/Writeimpls- Client API errors now propagate to user instead of being swallowed
- Import endpoint returns 413 on
max_body_sizeinstead of truncating keep --listuseslist_formatfrom config in all modes- All tables respect
table_configfrom settings DisplayListItemstruct removed (was unused)#[serde(alias = "size")]onImportMetafor backward compatibility