2.0.0 #209
james-pre
announced in
Announcements
2.0.0
#209
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
-
2.0 is finally here! The main reason for a semver-major release is that a lot of cleanup was needed that involved breaking changes (like removing deprecated APIs). This release does include some big features though!
How many downloads?
Before getting into the details of this release, I wanted to thank the users of ZenFS. ZenFS and Utilium have now received over 1,000,000 downloads (yes, one million). I'm proud of what ZenFS has matured into, and I couldn't have done this without the community. So, thank you all for supporting the project, even if just by downloading it.
Extended attributes / xattr
This release adds full support for extended attributes (a.k.a xattr), which behave the same as on Linux. Node.js doesn't even have an API for this yet! This allows you to store arbitrary metadata on files, though a limit of 1 KiB per attribute value is imposed for performance and sanity. Like Linux, xattr names are namespaced— you will need to use the
user
namespace. See #189 for the initial issue.ioctl
and inode flagsWith the new
ioctl
andioctlSync
functions, you can do a few cool things:1. Inode flags
Using the
IOC.GetFlags
andIOC.SetFlags
commands, the flags on an file can be changed. At the moment, these are the flags that affect VFS behavior:NoAtime
: When set, theatime
of files will not be updated. This replaces the experimentaldisableUpdateOnRead
configuration flag.Sync
: When set, files will be synced to the file system immediately following any changes. This is off by default, meaning any changes will only be synced once the file is closed. This replaces the experimentalonlySyncOnClose
configuration flag.These flags are currently only available on a per-file basis, though support for FS-wide flags will likely be added to
mount
in a minor release in the near future.2. File "versions"
IOC.GetVersion
andIOC.SetVersion
manipulate theversion
field of inodes. While this field isn't used internally, it could be useful for some use cases— go crazy!3. File system commands
Note
Other than
IOC.GetLabel
/IOC.SetLabel
, the FS-levelioctl
commands only exist for completeness and should not be used.IOC.GetLabel
andIOC.SetLabel
can be used to read and write the label of a file system.IOC.GetUUID
will retrieve the UUID of a file system. At the moment, each file system instance is assigned a random UUID when instantiated. OnlySingleBuffer
persists the UUID.IOC.GetSysfsPath
just gives you/sys/fs/${fs.name}/${fs.uuid}
.sysfs
is very complicated and has not be implemented.IOC.GetXattr
/IOC.SetXattr
are not related to extend attributes. These are for working with astruct fsxattr
. This structure has not been fully implemented, you should not use it.As of this release, there is not mechanism for file systems to register
ioctl
command handlers. This is planned for a future minor release.Contexts
This release makes contexts more powerful by introducing context
id
s,parent
/children
tracking, context-dependent working directories, and context-dependent file descriptors. The exportedboundContexts
Map
can be used to access all of the bound contexts (a notable use case is /proc). You can create a child of aBoundContext
using itsbind
method.Also, this release fixed
CredentialsInit
not being plural, improves the types ofBoundContext
, and changeschroot
to always be in-place and perform more anti-escape checks.mounts
is no longer accessible on thefs
namespace export, since this could be used to escape a context.Internally, a "default" context is used for unbound operations. This absorbs the old "default"/unbound credentials.
Internal API changes: metadata, synchronization, and files
This release significantly improves how metadata and synchronization is handled internally.
File
class has been completely absorbed into the VFS. This comes with some nice performance and maintainability benefits. You can look atSyncHandle
for the synchronous logic fromFile
.id
property ofFileSystem
has been renamed totype
, since it is used to identify the class rather than the instance, which was ambiguous.touch
method has been added toFileSystem
.touch
only updates metadata. All of the internal metadata updates now go through this new method.FileSystem.sync
no longer takes any parameters. It is a no-op for current backends, though it can likely be used as a barrier for asynchronous operations in the future.InodeLike
orInode
instead ofStatsLike
.ctime
is now changed automatically.createFile
andmkdir
methods ofFileSystem
have had theirmode
parameter merged intoCreationOptions
. (PureCreationOptions
has been removed).hasAccess
function, so permissions can be checked without copying an inode and creating a newStats
instance, significantly improving performance.Configuration and logging
type
of an option is now supported.MountConfiguration
used for a backend is now passed to that backend'sisAvailable
function. (resolveMountConfig
doesn't pass configuration toisAvailable
#196)type
.Configuration.log
is no longer experimental.log.fancy
for more information.Other changes
readLines
method ofFileHandle
has finally been implemented. This actually involved implementing most of thenode:readline
module, which can be imported from@zenfs/core/readline.js
.src/vfs/path.ts
has been moved tosrc/path.ts
. You can import from@zenfs/core/path.js
.s
).Device
inode data can now be customized by the device driver.ReadStream
. (Fix: _read method is now only called by Readable class #193)Port
backend has been consolidated intosrc/backends/port.ts
.Passthrough
is no longer normalized. (PassthroughFS
path resolution incorrect on Windows #203)vfs/config.ts
for performance.SingleBuffer
. (SingleBuffer
: Add missing offset toMetadataBlock
constuctor #205, thanks @tbrockman)symlinkSync
not closing the file it opened.statSync
.Port
has been refactored.encode
/decode``UTF8
/Raw
functions andConcrete
type have been moved to Utilium.This discussion was created from the release 2.0.0.
Beta Was this translation helpful? Give feedback.
All reactions