Repository navigation
Releases: mayneyao/xmeta
Release list
xmeta v0.6.0
xmeta 0.6.0
xmeta queries and folder schemas
- Bundle SQLite and the existing
fs_metaextension inxmeta.xmeta query [PATH] [SQL]queries a folder without a separate SQLite installation,.loadstep, index, or database file. - Add
xmeta schema get/set/clear. Versioned field declarations are stored in the root folder's<metadata-namespace>.schemaxattr or NTFS ADS. Schema edits leave file properties unchanged. - The extension reads folder schemas when
fieldsis omitted. Explicit fields, includingfields='', take precedence. CLI and application integrations share the same scanner, column conversions, and query behavior. - CLI queries are read-only and support bound JSON parameters, paged JSON/TSV results, and a SQLite progress-handler timeout. SQL writes, extension loading, and mutating scalar functions are blocked.
- Existing file metadata and direct read/write commands require no migration. No Web UI or application runtime is added to the CLI.
xmeta 0.5.0
xmeta CLI
- Add
xmeta, a native command-line interface for reading and writing namespace properties. It does not need SQLite, a database file, or an externalattr/xattrpackage. - Commands:
get,set,unset,patch, andclear. - Use
KEY=VALUEfor strings andKEY:=JSONfor typed values, or pass a JSON object withpatch --from(including stdin). - Support
--dry-run,--print,--replace,--json,--text, and--raw. - Exit codes distinguish I/O failures, usage errors, missing paths/keys, invalid data, unsupported filesystems, and set/remove conflicts.
- Configure the default namespace with
xmeta config set, a project-level.xmeta.json, an explicit--configfile, orFS_META_NAMESPACE. Project config is discovered from the target path and takes precedence over the user config. - CLI and SQL scalar functions now share
src/properties.rs, so validation, patch semantics, size limits, symlink/hardlink policy, and error messages stay aligned.
Compatibility
fs_meta_readandfs_meta_patchkeep their behavior. Their output uses deterministic object key ordering on subsequent writes.- Existing metadata requires no migration. The CLI reads and writes the same xattr/ADS envelopes.
- The CLI is intentionally single-target in this release; recursive and batch writes remain out of scope.
xmeta 0.4.0
Directory properties
- Store custom properties on directories using native xattr on macOS/Linux and NTFS alternate data streams on Windows.
- Query directories, including empty folders, alongside regular files in virtual tables. Use
is_dir = 1to select folders, then update or clear their properties with the same SQL operations and transaction/savepoint rollback as files. - Use
fs_meta_readandfs_meta_patchon directories, including the virtual table's root. Directory properties belong to the folder itself and are not inherited by its children. - Discover directory support through the new
directory-propertiescapability. - Directory scans read fresh filesystem metadata so Windows folder modification times match point lookups.
Compatibility and deletion
Virtual-table scans now include directories by default. Add WHERE is_dir = 0 to queries that should return only files. The root itself has no table row; access its properties through the scalar functions. Directory rows have an empty extension and NULL attachment/MIME columns. Their size is the native filesystem metadata length, not the total size of their contents.
The default DELETE clears only the selected entry's metadata namespace, preserving the folder and its children. With on_delete='delete_file', physical deletion accepts only empty directories and never recursively removes contents. Physical deletion remains irreversible by SQL rollback.
Directory symbolic links and Windows reparse points are rejected, including paths with trailing directory separators. Existing stored properties require no migration.
v0.5.0
sqlite-fs-meta 0.5.0
This release adds xmeta, a standalone native CLI for file and directory metadata. It reads and writes the same xattr/ADS properties as the SQLite extension, without requiring SQLite or a database file.
CLI
- Read and write metadata with
get,set,unset,patch, andclear. - Use
KEY=VALUEfor strings andKEY:=JSONfor typed values, or pass a JSON object withpatch --from, including stdin. - Support dry runs, replacement, JSON/text/raw output, and distinct exit codes for common failures.
- Configure namespaces with
xmeta config, project.xmeta.json,--config,FS_META_NAMESPACE, or a per-command override. - Share validation, patch behavior, size limits, and symlink/hardlink handling with the SQL scalar functions.
xmeta focuses on single-target metadata reads and writes. Use Eidos for visual metadata management. Existing metadata requires no migration.
Downloads
| Platform | CLI archive |
|---|---|
| macOS Apple Silicon | xmeta-v0.5.0-aarch64-apple-darwin.tar.gz |
| macOS Intel | xmeta-v0.5.0-x86_64-apple-darwin.tar.gz |
| Linux x86-64 | xmeta-v0.5.0-x86_64-unknown-linux-gnu.tar.gz |
| Linux ARM64 | xmeta-v0.5.0-aarch64-unknown-linux-gnu.tar.gz |
| Windows x86-64 | xmeta-v0.5.0-x86_64-pc-windows-msvc.zip |
Verify downloads against SHA256SUMS, extract the archive, and place xmeta (xmeta.exe on Windows) on your PATH.
The release also includes the SQLite extension as raw libraries and fs_meta-v0.5.0-<target> archives. CLI and extension downloads are packaged separately.
See the CLI reference for commands, configuration, and exit codes.
v0.4.0
sqlite-fs-meta 0.4.0
Directory properties
- Store custom properties on directories using native xattr on macOS/Linux and NTFS alternate data streams on Windows.
- Query directories, including empty folders, alongside regular files in virtual tables. Use
is_dir = 1to select folders, then update or clear their properties with the same SQL operations and transaction/savepoint rollback as files. - Use
fs_meta_readandfs_meta_patchon directories, including the virtual table's root. Directory properties belong to the folder itself and are not inherited by its children. - Discover directory support through the new
directory-propertiescapability. - Directory scans read fresh filesystem metadata so Windows folder modification times match point lookups.
Compatibility and deletion
Virtual-table scans now include directories by default. Add WHERE is_dir = 0 to queries that should return only files. The root itself has no table row; access its properties through the scalar functions. Directory rows have an empty extension and NULL attachment/MIME columns. Their size is the native filesystem metadata length, not the total size of their contents.
The default DELETE clears only the selected entry's metadata namespace, preserving the folder and its children. With on_delete='delete_file', physical deletion accepts only empty directories and never recursively removes contents. Physical deletion remains irreversible by SQL rollback.
Directory symbolic links and Windows reparse points are rejected, including paths with trailing directory separators. Existing stored properties require no migration.
v0.3.0
sqlite-fs-meta 0.3.0
What's new
- Read a file's complete metadata namespace with
fs_meta_read(path, namespace), including properties outside a virtual table's declared columns. - Update selected properties with
fs_meta_patch(path, namespace, set_json, remove_json). Unchanged keys are preserved, JSON null remains a value, and named keys can be removed explicitly. - Discover these functions through the
metadata-apicapability. They use native extended attributes on macOS/Linux and alternate data streams on Windows.
Existing virtual tables remain compatible and require no metadata migration. Namespace operations take effect immediately, outside SQL transaction rollback; applications coordinating multiple processes must serialize writers. Hosts remain responsible for validating file access scope.
v0.2.4
sqlite-fs-meta 0.2.4
This patch fixes the creation timestamp reported by filesystem virtual tables.
_created_atnow uses the filesystem's actual creation time instead of modification time, for both directory scans and individual file lookups. It returns SQLNULLwhen creation time is unavailable.- Editing file metadata no longer appears to change the file's creation time on Windows.
_updated_atandmtimecontinue to report actual filesystem modification time; Windows alternate data stream writes can still change that time. - Cross-platform regression checks cover creation timestamps, metadata edits and rollback. SQLite CLI integration tests now use extension-enabled SQLite, platform-specific library names and valid Windows paths, and fail explicitly when extension loading is unavailable.
No metadata migration is required. This release does not restore historical filesystem timestamps changed by other programs.
v0.2.3
sqlite-fs-meta 0.2.3
This release delivers the changes prepared for 0.2.1 and 0.2.2, whose release validation did not complete successfully.
- Resolve relative scan roots against the owning database directory, including attached databases, and decode escaped SQL string arguments.
- Support JSON field definitions with independent storage keys. Field names may contain spaces, Unicode and quotes; renaming a column can preserve existing attributes.
- Restore exact metadata envelopes on transaction and savepoint rollback. Reject dropping a virtual table with pending metadata writes, and support transactional cleanup of retired keys after schema changes.
- Resolve file attachment URIs relative to the database directory, including nested scan roots. In-memory databases retain scan-root-relative URIs.
- Reject symlink traversal during file lookup, preserve scalar text values and refuse to overwrite malformed metadata.
- Require an existing regular file for Windows metadata operations, preventing rollback from recreating a deleted file through an alternate data stream.
- Qualify default Linux extended attributes with
user.and ship a Linux arm64 binary alongside macOS arm64/x64, Linux x64 and Windows x64.
fs_meta_capabilities() exposes the new storage-key, rollback and attachment-path capabilities. Legacy comma-separated field definitions remain supported.
Rollback journals are in memory. These changes do not provide crash atomicity across SQLite and filesystem attributes, or isolation from independent filesystem writers. Opt-in physical file deletion remains irreversible.
v0.2.0
v0.1.0
Full Changelog: https://github.com/mayneyao/sqlite-fs-meta/commits/v0.1.0