NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #148 most downloaded on PyPI
Fast transfer of large files with the Hugging Face Hub.
Last release 11 days ago
24 Sep 2026
Release timing varies
gaps range from 1 weeks to 3 months
Nearly every release is documented
notes for 32 of 34 stable releases
1 version withdrawn
withdrawn after publishing
2 years old
44 releases · first in 2025
One column per month.
Full Changelog : v1.7.0-dev0...v1.7.0-dev1
Full Changelog: v1.7.0-dev0...v1.7.0-dev1
Full Changelog : v1.6.0...v1.6.1-a0
Full Changelog: v1.6.0...v1.6.1-a0
Stream shard finalization progress via POST /v2/shards , so large-shard validation/commit is visible instead of blocking silently after upload
POST /v2/shards, so large-shard validation/commit is visible instead of blocking silently after uploadauto-initialize feature to avoid build failures when that feature is combined with a Python built --disable-sharedFull Changelog: v1.5.2...v1.6.0
[hf-xet v1.6.0] Stream shard finalization progress Latest
Latest
Compare
bump hf-xet Python to 1.6.0
bump hf-xet Python to 1.6.0 (#924)
Nothing published for this version
hf-xet 1.5.3 dev release
hf-xet 1.5.3 dev release
This release fixes a bug in HTTP request retry configuration that could cause apparent hangs under poor network conditions when a request was retried
Full Changelog: v1.5.1...v1.5.2
Full Changelog: https://github.com/huggingface/xet-core/compare/v1.5.1...v1.5.2
[hf-xet v1.5.2] Fix HTTP Request Retry
Compare
Nothing published for this version
Nothing published for this version
Missing final progress update — Progress was only emitted on a fixed poll interval, so the last snapshot could be skipped when upload/download finishe
Problems addressed
Missing final progress update — Progress was only emitted on a fixed poll interval, so the last snapshot could be skipped when upload/download finished between ticks (e.g. UI stuck below 100%).
Panic on shutdown — The background progress thread used Python::attach while the interpreter was tearing down, which can panic when the GIL is no longer available.
Full Changelog: 1.5.0...v1.5.1
[hf-xet v1.5.1] Progress Reporting Improvement
Compare
Nothing published for this version
Nothing published for this version
…hf_xet import upload_files etc., but now emit DeprecationWarning .
Replaces the old upload_files / download_files / hash_files Python functions with a new object-oriented API that exposes XetSession and its child objects directly as PyO3 classes. This gives Python callers full control over session lifecycle, connection pooling, and progress reporting.
The previous module-level functions are kept under hf_xet/src/legacy/ and remain importable as from hf_xet import upload_files etc., but now emit DeprecationWarning.
import hf_xet
# Optional: create a custom config (immutable; use .with_config() to derive updates)
config = hf_xet.XetConfig().with_config("data.max_concurrent_file_ingestion", 8)
# Create session; config is optional (defaults to XetConfig() with HF_XET_* env overrides)
session = hf_xet.XetSession(config=config)
# Upload — multiple files, bytes, and streaming within one commit
with session.new_upload_commit(
endpoint="https://cas.xethub.hf.co",
token="jwt", token_expiry_unix_secs=9999999999,
token_refresh_url="https://…/xet-write-token/main",
token_refresh_headers={"Authorization": "Bearer hf_…"},
) as commit:
h1 = commit.start_upload_file("/path/to/model.bin")
h2 = commit.start_upload_file("/path/to/tokenizer.json", sha256="f2358d9a…")
h3 = commit.start_upload_bytes(b"...", name="config.json")
with commit.start_upload_stream(name="big.bin") as stream:
for chunk in produce_chunks():
stream.write(chunk)
# on normal exit: wait_to_finish() is called automatically
# on exception: abort() is called automatically
# SHA-256 sentinels
commit.start_upload_file("/path/to/model.bin", sha256=hf_xet.COMPUTE_SHA256) # default
commit.start_upload_file("/path/to/model.bin", sha256=hf_xet.SKIP_SHA256) # skip
# Progress callback — receives (GroupProgressReport, dict[UniqueID, ItemProgressReport])
def on_progress(group, items):
bar.n = group.total_bytes_completed
bar.refresh()
with session.new_upload_commit(
token_refresh_url="https://…/xet-write-token/main",
token_refresh_headers={"Authorization": "Bearer hf_…"},
progress_callback=on_progress,
progress_interval_ms=100,
) as commit:
commit.start_upload_file("/path/to/model.bin")
# File download — multiple files within one group (downloads run concurrently)
file_info_a = hf_xet.XetFileInfo(hash_a, size_a)
file_info_b = hf_xet.XetFileInfo(hash_b, size_b)
with session.new_file_download_group(
token_refresh_url="https://…/xet-read-token/main",
token_refresh_headers={"Authorization": "Bearer hf_…"},
) as group:
group.start_download_file(file_info_a, dest_path_a)
group.start_download_file(file_info_b, dest_path_b)
# Streaming download — start/end are both optional (open-ended ranges supported)
group = session.new_download_stream_group(
token_refresh_url="https://…/xet-read-token/main",
token_refresh_headers={"Authorization": "Bearer hf_…"},
)
for chunk in group.download_stream(file_info): # whole file
f.write(chunk)
for chunk in group.download_stream(file_info, start=1024): # 1024 .. EOF
f.write(chunk)
for chunk in group.download_stream(file_info, start=0, end=4096): # 0 .. 4096
f.write(chunk)
for offset, chunk in group.download_unordered_stream(file_info):
buf[offset:offset+len(chunk)] = chunk
# Ctrl-C handling
try:
with session.new_upload_commit(...) as commit:
commit.start_upload_file("model.bin")
except KeyboardInterrupt:
session.sigint_abort()
raiseFull Changelog: v1.4.3...1.5.0
fix: truncate local file on full-file download to prevent corruption ( @XciD in #764 )
Full Changelog: v1.4.2...v1.4.3
Full Changelog: https://github.com/huggingface/xet-core/compare/v1.4.2...v1.4.3
[hf-xet v1.4.3] File Truncation Hotfix
Compare
This release includes significant improvements in performance and critical fixes in both uploading and downloading large files. It is strongly recomme
This release includes significant improvements in performance and critical fixes in both uploading and downloading large files. It is strongly recommended to upgrade to this release.
Note: v1.4.2 replaces v1.4.1 which had a packaging issue (version bump was merged after the release was built). The code is identical.
Full Changelog: v1.3.2...v1.4.2
This release includes significant improvements in performance and critical fixes in both uploading and downloading large files. It is strongly recommended to upgrade to this release.
Note: v1.4.2 replaces v1.4.1 which had a packaging issue (version bump was merged after the release was built). The code is identical.
Full Changelog: https://github.com/huggingface/xet-core/compare/v1.3.2...v1.4.2
[hf-xet v1.4.2]: Performance Optimizations and critical fixes
Compare
This release includes significant improvements in performance and critical fixes in both uploading and downloading large files. It is strongly recomme
This release includes significant improvements in performance and critical fixes in both uploading and downloading large files. It is strongly recommended to upgrade to this release.
Full Changelog: https://github.com/huggingface/xet-core/compare/v1.3.2...v1.4.1
[hf-xet v1.4.1]: Performance Optimizations and critical fixes
Compare
Nothing published for this version
Up to 4x speedup on downloads when downloading multiple files at once by @Hugoch in https://github.com/huggingface/xet-core/pull/668
Full Changelog: https://github.com/huggingface/xet-core/compare/v1.3.1...v1.3.2
[hf-xet v1.3.2]: Download Performance Fix
Compare
Add Windows ARM64 build support by @rajatarya in https://github.com/huggingface/xet-core/pull/662
Full Changelog: https://github.com/huggingface/xet-core/compare/v1.3.0...v1.3.1
[hf-xet v1.3.1]: Windows 11 ARM64 Support
Compare
hf-xet uploads and downloads now intelligently control concurrency, make the best use of bandwidth while keeping reasonable memory usage.
hf-xet uploads and downloads now intelligently control concurrency, make the best use of bandwidth while keeping reasonable memory usage.
Full Changelog: https://github.com/huggingface/xet-core/compare/v1.2.0...v1.3.0
Nothing published for this version
New file-based logging system to support enhanced diagnostics and debugging (by @hoytak in https://github.com/huggingface/xet-core/pull/502)
Full Changelog: https://github.com/huggingface/xet-core/compare/v1.1.10...v1.2.0
Comprehensive Diagnostic Scripts - New debugging tools for Linux and Windows
🔧 Improvements & Tools:
🐛 Bug Fixes:
Full Changelog: https://github.com/huggingface/xet-core/compare/v1.1.9...v1.1.10
Improve parallelism in parutils by removing async_scoped
🚀 Performance Improvements: • Improve parallelism in parutils by removing async_scoped • Increase soft file limits for MacOS
🐛 Bug Fixes: • Update hf_xet PyPI metadata
🔧 Reliability & Maintenance: • Improved debuggability with tokio console support • Add CI builds for MacOS
hf-xet by @rajatarya in https://github.com/huggingface/xet-core/pull/472Full Changelog: https://github.com/huggingface/xet-core/compare/v1.1.8...v1.1.9
Client Caching - Reuses reqwest Client across RemoteClient objects to share connection pools
🚀 Performance Improvements: • Client Caching - Reuses reqwest Client across RemoteClient objects to share connection pools • Connection Limits - Limits idle connections to prevent resource exhaustion
🐛 Bug Fixes: • Singleflight Fix - Critical fix preventing permanent error caching when owner tasks are dropped • DataHash Serialization - Ensures consistent little-endian byte order across platforms
🔧 Reliability & Maintenance: • Retry Logic Restoration - Restores retry logic accidentally removed in versions 1.1.6 and 1.1.7
Full Changelog: https://github.com/huggingface/xet-core/compare/v1.1.7...v1.1.8
Remove telemetry code; eliminate Mutex on logging setup. by @hoytak in https://github.com/huggingface/xet-core/pull/441
Full Changelog: https://github.com/huggingface/xet-core/compare/v1.1.6...v1.1.7
Proxy support, easing use behind corporate networks. (#413 by @hoytak; addresses #400 - thanks @albertodepaola and @goodsonjr for the initial reports)
hf_xet logging; providing facility to log events to a formatted file (#428 by @hoytak)os.fork() safer. (#429 by @hoytak; addresses #415 - thanks @John6666cat for the report)NUM_RANGE_CONCURRENT_GETS value to 64 to better respect file descriptor limits (#438 by @assafvayner; addresses #436 - thanks @djholt and @gary149 for the reports)Full Changelog: https://github.com/huggingface/xet-core/compare/v1.1.5...v1.1.6
This release includes a fix for certificate issues in certain network environments and loading optimizations for dedup lookups.
This release includes a fix for certificate issues in certain network environments and loading optimizations for dedup lookups.
upload_files startup time. Author: Hoyt Koepkeload_native_certs() for efficiency. Author: Hoyt KoepkeFull Changelog: https://github.com/huggingface/xet-core/compare/v1.1.4...v1.1.5
Fixed DNS resolution issues: Implemented custom DNS resolver to force absolute DNS name resolution, addressing issues where DNS resolvers struggled wi
Arc<[u8]> to bytes::Bytes for better memory efficiency and reduced copying. Separated boundary calculation logic from chunk building for future optimization workFull Changelog: https://github.com/huggingface/xet-core/compare/v1.1.3...v1.1.4
Resume Uploads for interrupted sessions
Full Changelog: https://github.com/huggingface/xet-core/compare/v1.1.2...v1.1.3
Much Smaller Binaries: In this release we’ve dropped the installed binary size across all platforms (ex. Linux went from ~96MB → ~14MB).
hf-xet can be compiled using best practices for Python package sdist installation. Thanks @tiran and @szalpal for the original bug reports!Full Changelog: https://github.com/huggingface/xet-core/compare/v1.1.1...v1.1.2
In this release, we've halved our installed binary size on Linux distributions and added some performance improvements during chunking and compression
In this release, we've halved our installed binary size on Linux distributions and added some performance improvements during chunking and compression evaluation.
Full Changelog: https://github.com/huggingface/xet-core/compare/v1.1.0...v1.1.1
In this release, we’ve added the ability to upload to xet using a byte array. In addition to upload_files , we now have upload_bytes which enables pyt
In this release, we’ve added the ability to upload to xet using a byte array. In addition to upload_files , we now have upload_bytes which enables python clients using hf-xet directly to upload a Python bytes array. Additionally, we have parallelized our dedupe and chunking passes to increase our upload performance.
upload_bytes and pointer file "removal" by @bpronan in https://github.com/huggingface/xet-core/pull/273Full Changelog: https://github.com/huggingface/xet-core/compare/v1.0.5...v1.1.0
Suppresses benign errors reported during download (thanks @lewtun @fakerybakery for reporting these!)
Full Changelog: https://github.com/huggingface/xet-core/compare/v1.0.4...v1.0.5
In this release, instead of manually tuning performance flags, we added a simple HF_XET_HIGH_PERFORMANCE flag to set to True (or 1 or Yes) that will a
In this release, instead of manually tuning performance flags, we added a simple HF_XET_HIGH_PERFORMANCE flag to set to True (or 1 or Yes) that will attempt to saturate all system resources when performing uploads & downloads. Consider this analogous to using hf-transfer before, but now with hf-xet. If you are uploading or downloading big files from HF, set this flag to get the most performance from your machine. Set it with:
export HF_XET_HIGH_PERFORMANCE=1
huggingface-cli ...
In this release we improved our automated testing and release process to ensure we don't break our integration with huggingface-hub. Now, prior to releasing a new hf-xet package we will verify it does not break existing tests in huggingface-hub (which include the packages that depend on huggingface-hub like transformers, diffusers, etc).
Full Changelog: https://github.com/huggingface/xet-core/compare/v1.0.3...v1.0.4
No longer using $TMPDIR env variable as part of the upload process, now will use $HF_XET_CACHE location instead
Full Changelog: https://github.com/huggingface/xet-core/compare/v1.0.2...v1.0.3
In this minor release we changed how we expose configuration flags for hf-xet. This change adds consistency across the other environment variables. Th
In this minor release we changed how we expose configuration flags for hf-xet. This change adds consistency across the other environment variables. These configuration flags will enable high performance if your machine has lots of cores, network, and really fast disk. The defaults in hf-xet are unchanged and are intentionally modest to support the broadest range of hardware. Use these knobs to get great download speeds when downloading from a machine with lots of network and lots of cores.
# This is number of concurrent terms (range of bytes from within a xorb) downloaded from S3 per file.
# Increasing this will help with the speed of downloading a file if there is network bandwidth available.
HF_XET_NUM_CONCURRENT_RANGE_GETS=16
# hf-xet is designed for SSD/NVMe disks to be used (using parallel writes). If you are using an HDD, setting this
# will change disk writes to be sequential instead of parallel.
# To set, HF_XET_RECONSTRUCT_WRITE_SEQUENTIALLY=true
(Note that hf-xet will have at most HF_XET_MAX_CONCURRENT_DOWNLOADS * HF_XET_NUM_CONCURRENT_RANGE_GETS
parallel GETs from S3).
# Default cache size. Increasing this will give more space for caching terms/chunks fetched from S3.
# A larger cache can better take advantage of deduplication across repos & files.
HF_XET_CHUNK_CACHE_SIZE_BYTES=10737418240 (10GiB)
# setting this changes where the chunk cache is located (ideally set to a local SSD/nvme vs shared/distributed filesystem)
HF_XET_CACHE=~/.cache/huggingface/xet
# setting this will change where the chunk cache is located (`$HF_HOME/xet`). Lower precedence than `HF_XET_CACHE`
HF_HOME=~/.cache/huggingface
# If your network bandwidth is >> disk speed, e.g. 10 Gbps link vs SATA SSD or worse
# Disabling the xet cache will increase your performance. To disable xet cache, set HF_XET_CHUNK_CACHE_SIZE_BYTES=0.
XET_ environment variables to tune things before, please update to using HF_XET_ instead.Full Changelog: https://github.com/huggingface/xet-core/compare/v1.0.0...v1.0.2
Nothing published for this version
Now, we will work hard to prevent any breaking changes going forward.
hf-xet is ready for 1.0.0 now. We have been onboarding internal and external Hugging Face users over the last several weeks and have hardened this package, along with the backend services it relies on. Now, we will work hard to prevent any breaking changes going forward.
In this release we 2x the download performance for xet files. With some preliminary benchmarking, hf-xet is faster than hf-transfer.
You can start using Xet today by installing the optional dependency:
pip install -U huggingface_hub[hf_xet]
With that, you can seamlessly download files from Xet-enabled repositories! And don’t worry—everything remains fully backward-compatible if you’re not ready to upgrade yet.
Blog post: Xet on the Hub
Docs: Storage backends → Xet
[!TIP]
Want to store your own files with Xet? We’re gradually rolling out support on the Hugging Face Hub, sohf_xetuploads may need to be enabled for your repo. Join the waitlist to get onboarded soon!
Full Changelog: https://github.com/huggingface/xet-core/compare/v0.1.4...v1.0.0
Fix calling async from sync inside async runtime by @seanses in https://github.com/huggingface/xet-core/pull/170
Full Changelog: https://github.com/huggingface/xet-core/compare/v0.1.3...v0.1.4
Profiler by @hoytak in https://github.com/huggingface/xet-core/pull/143
Full Changelog: https://github.com/huggingface/xet-core/compare/v0.1.2...v0.1.3
disable client telemetry by default by @assafvayner in https://github.com/huggingface/xet-core/pull/142
Full Changelog: https://github.com/huggingface/xet-core/compare/v0.1.1...v0.1.2
Deadlock fix. by @hoytak in https://github.com/huggingface/xet-core/pull/140
Full Changelog: https://github.com/huggingface/xet-core/compare/v0.1.0...v0.1.1
Only load the shard chunk dedup tables for the upload path by @hoytak in https://github.com/huggingface/xet-core/pull/129
Full Changelog: https://github.com/huggingface/xet-core/compare/v20241218-00-dedup-upload-ctrlc...v0.1.0
Your coding agent can read these notes before it upgrades. Set up the MCP server →