📁 Instant file copy between Buckets and Repositories
This release introduces server-side file copy operations that let you move data between Hugging Face storage without downloading and re-uploading. You can now copy files from one Bucket to another, from a repository (model, dataset, or Space) to a Bucket, or between Buckets — all without bandwidth costs. Files tracked with Xet are copied directly by hash (no data transfer), while small text files not tracked with Xet are automatically downloaded and re-uploaded.
>>> from huggingface_hub import copy_files
# Bucket to bucket (same or different bucket)
>>> copy_files(
... "hf://buckets/username/source-bucket/checkpoints/model.safetensors",
... "hf://buckets/username/destination-bucket/archive/model.safetensors",
... )
# Repo to bucket
>>> copy_files(
... "hf://datasets/username/my-dataset/processed/",
... "hf://buckets/username/my-bucket/datasets/processed/",
... )The same capability is available in the CLI:
# Bucket to bucket
>>> hf buckets cp hf://buckets/username/source-bucket/logs/ hf://buckets/username/archives/logs/
# Repo to bucket
>>> hf buckets cp hf://datasets/username/my-dataset/data/train/ hf://buckets/username/my-bucket/datasets/train/Note that copying files from a Bucket to a Repository is not yet supported.
📚 Documentation: Buckets guide
HfApi.copy_filesmethod to copy files remotely and update 'hf buckets cp' by @Wauplin in #3874- Add bucket to collection by @coyotte508 in #4041
⚛️ Introducing Kernel repositories
Tip
For building, publishing, and using kernel repos, please use the dedicated kernels package.
The Hub now supports a new kernel repository type for hosting compute kernels. This release adds first-class (but explicitly limited) support for interacting with kernel repos via the Python API. Only a subset of methods are officially supported: kernel_info, hf_hub_download, snapshot_download, list_repo_refs, list_repo_files, and list_repo_tree. Creation and deletion are also supported but restricted to a small subset of allowed users and organizations on the Hub.
>>> from huggingface_hub import kernel_info
>>> kernel_info("kernels-community/yoso")
KernelInfo(id='kernels-community/yoso', author='kernels-community', downloads=0, gated=False, last_modified=datetime.datetime(2026, 4, 3, 22, 27, 25, tzinfo=datetime.timezone.utc), likes=0, private=False)📚 Documentation: Repository guide
- [Kernels] Minimal kernel repo type support (create/delete, download files, list refs/files/tree) by @drbh in #4068
📖 Documentation
🐛 Bug and typo fixes
- Fix custom
tqdm_classsilently broken in non-TTY environments by @hanouticelina in #4056 - Fix set_space_volumes sending bare array instead of object by @davanstrien in #4054
- Fix set_space_volume / delete_space_volume return types by @abidlabs in #4061
🏗️ Internal
- [CI] Slack-message reads draft release from GitHub directly by @Wauplin in #4044
- [CI] Fix upgrading release notes to latest release by @Wauplin in #4045
- Add live Slack notifications to release workflow by @Wauplin in #4046
- Post-release: bump version to 1.10.0.dev0 by @huggingface-hub-bot[bot] in #4047
- skills publish script run in action to sync up descriptions etc. by @evalstate in #4048
- [CI] Harden release workflow permissions and inputs by @Wauplin in #4072
- [CI] Fix Opencode checksum validation by @Wauplin in #4073