Releases: huggingface/huggingface_hub
[v1.10.1] Fix copy file to folder
- Fix copy file to folder (#4075)
- [CLI ]Improving a bit hf CLI discoverability (#4079)
- Support kernels in list_liked_repos (#4078)
Full Changelog: v1.10.0...v1.10.1
[v1.10.0] Instant file copy and new Kernel repo type
📁 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
[v1.9.2] Fix set_space_volume / delete_space_volume return types
Full Changelog: v1.9.1...v1.9.2
[v1.9.1] Fix: `set_space_volumes` sending bare array instead of object
- Fix
set_space_volumessending bare array instead of object #4054 by @davanstrien
Full Changelog: v1.9.0...v1.9.1
[v1.9.0] Agent-Aware CLI, Spaces Volumes, and more
🚀 Spaces Volumes: Mount Models, Datasets, and Buckets Directly
Hugging Face Spaces now support mounting volumes, giving your Space direct filesystem access to models, datasets, and storage buckets. This replaces the deprecated persistent storage feature.
from huggingface_hub import HfApi, Volume
api = HfApi()
api.set_space_volumes(
repo_id="username/my-space",
volumes=[
Volume(type="model", source="username/my-model", mount_path="/models", read_only=True),
Volume(type="bucket", source="username/my-bucket", mount_path="/data"),
],
)Volumes can also be set at creation time via create_repo(space_volumes=...) and duplicate_repo(space_volumes=...), and from the CLI with the --volume / -v flag:
# Create a Space with volumes mounted
hf repos create my-space --type space --space-sdk gradio \
-v hf://gpt2:/models -v hf://buckets/org/b:/data
# Duplicate a Space with volumes
hf repos duplicate org/my-space my-space --type space \
-v hf://gpt2:/models -v hf://buckets/org/b:/data- Add support for mounted volumes by @Wauplin in #4018
- Support volumes at repo creation and duplication by @Wauplin in #4035
🤖 The hf CLI Now Auto-Detects AI Agents and Adapts Its Output
AI coding agents (Claude Code, Cursor, Codex, Copilot, Gemini, ...) increasingly use the hf CLI to interact with the Hub. Until now, the output was designed for humans - ANSI colors, padded tables, emoji booleans, truncated cells - making it hard for agents to parse reliably.
Starting with v1.9, the CLI automatically detects when it's running inside an agent and adapts its output: no ANSI, no truncation, tab-separated tables, compact JSON, full timestamps. No configuration needed - it just works. This is only a first step toward making the hf CLI the primary entry point to the Hugging Face Hub for AI agents!
Agent mode is auto-detected but you can also force a mode explicitly with --format:
hf models ls --limit 5 # auto-detect
hf models ls --limit 5 --format agent # force agent-friendly output
hf models ls --limit 5 --format json # structured JSON
hf models ls --limit 5 --format quiet # IDs only, great for pipingHere's what an agent sees compared to a human:
hf auth whoami
# Human
✓ Logged in
user: Wauplin
orgs: huggingface, awesome-org
# Agent
user=Wauplin orgs=huggingface,awesome-org
# JSON
{"user": "Wauplin", "orgs": ["huggingface", "awesome-org"]}
hf models ls --author google --limit 3
# Human
ID DOWNLOADS TRENDING_SCORE
-------------------------- --------- --------------
google/embeddinggemma-300m 1213145 17
google/gemma-3-4b-it 1512637 16
google/gemma-3-27b-it 988618 12
# Agent (TSV, no truncation, no ANSI)
id downloads trending_score
google/embeddinggemma-300m 1213145 17
google/gemma-3-4b-it 1512637 16
google/gemma-3-27b-it 988618 12
hf models info google/gemma-3-27b-it
# Human — pretty-printed JSON (indent=2)
{
"id": "google/gemma-3-27b-it",
"author": "google",
...
}
# Agent — compact JSON (~40% fewer tokens)
{"id": "google/gemma-3-27b-it", "author": "google", "card_data": ...}
Commands migrated so far: hf models ls|info, hf datasets ls|info|parquet|sql, hf spaces ls|info, hf papers ls|search|info, hf auth whoami. More commands will be migrated soon
- Add
outoutput singleton with agent/human mode rendering by @hanouticelina in #4005 - Migrate
models,datasets,spaces,paperstooutsingleton by @hanouticelina in #4026 - Add
FormatWithAutoOptwith callback to auto-set output mode by @hanouticelina in #4028 - Add tests for
outoutput singleton by @hanouticelina in #4020 - Add agent detection helpers by @hanouticelina in #4015
- Enrich CLI errors with available options and commands by @hanouticelina in #4034
🧩 Install Agent Skills from the Hugging Face Marketplace
The hf skills add command now supports installing skills directly from the Hugging Face skills marketplace (https://github.com/huggingface/skills) - pre-built tools that give AI agents new capabilities.
# Install a marketplace skill
hf skills add gradio
# Install with Claude Code integration
hf skills add huggingface-gradio --claude
# Upgrade all installed skills
hf skills upgrade- Support skills from hf skills by @burtenshaw in #3956
- Improve
hfCLI skill description for better agent triggering by @hanouticelina in #3973
🔧 More CLI Improvements
- Auto-install official HF CLI extensions on first invocation by @hanouticelina in #4007
- Add
summaryfield tohf papers searchCLI output by @Wauplin in #4006 - Interactive CLI autoupdate prompt by @Wauplin in #3983
🔧 Other Improvements
- Clarify 404 access guidance in errors by @Pierrci in #4010
- Add
HF_HUB_DISABLE_SYMLINKSenv variable to force no-symlink cache by @Wauplin in #4032 - Add CACHEDIR.TAG to cache directories by @Wauplin in #4030
- Support None type in strict dataclass by @Wauplin in #3987
- Reject
bool/intcross-type confusion in@strictdataclass validation by @Wauplin in #3992
🐛 Bug Fixes
- Fix PyTorchModelHubMixin not calling eval() on safetensors load by @joaquinhuigomez in #3997
- Bump to hf-xet 1.4.3 and add regression test by @Wauplin in #4019
- Validate shard filenames in sharded checkpoint index files by @Wauplin in #4033
- Fix test_create_commit_conflict test by @Wauplin in #3986
- Do not scan CACHEDIR.TAG file in cache by @Wauplin in #4036
- Deduplicate repo folder name generation logic by @cphlipot in #4024
📖 Documentation
- Add tip about AI agents skill to CLI guide by @gary149 in #3970
- Link to Hub local cache docs from manage-cache guide by @Wauplin in #3989
- Note that environment variables are read at import time by @Wauplin in #3990
- Add DatasetLeaderboardEntry and EvalResultEntry to docs reference by @pcuenca in #3982
- Fix typos and outdated references in CONTRIBUTING.md by @GopalGB in #4009
- no explicit models/ in hf:// protocol by @lhoestq in #3980
- Add
CLAUDE.mdsymlink pointing toAGENTS.mdby @hanouticelina in #4013
🏗️ Internal
- Bump minimum Python version from 3.9 to 3.10 by @hanouticelina in #4008
- Use
match/casestatements where appropriate by @hanouticelina in #4012 - Fix
tytype-checking errors after latest release by @hanouticelina in #3978 - Prepare for v1.9 release by @Wauplin in #3988
- Update python-release.yml by @hf-security-analysis[bot] in #4011
- Pin GitHub Actions to commit SHAs by @paulinebm in #4029
- Remove claude.yml workflow file by @hf-security-analysis[bot] in #4031
- Generate slack message for prerelease by @Wauplin in #3976
[v1.8.0] Mounted volumes on Jobs, complete papers CLI, and more
🚀 Jobs can now mount volumes
Jobs can now access Hugging Face repositories (models, datasets, Spaces) and Storage Buckets directly as mounted volumes in their containers. This enables powerful workflows like running queries directly against datasets, loading models without explicit downloads, and persisting training checkpoints to buckets.
from huggingface_hub import run_job, Volume
job = run_job(
image="duckdb/duckdb",
command=["duckdb", "-c", "SELECT * FROM '/data/**/*.parquet' LIMIT 5"],
volumes=[
Volume(type="dataset", source="HuggingFaceFW/fineweb", mount_path="/data"),
],
)hf jobs run -v hf://datasets/HuggingFaceFW/fineweb:/data duckdb/duckdb duckdb -c "SELECT * FROM '/data/**/*.parquet' LIMIT 5"📖 Papers CLI is now complete
The hf papers command now has full functionality: search papers by keyword, get structured JSON metadata, and read the full paper content as markdown. The ls command is also enhanced with new filters for week, month, and submitter.
# Search papers
hf papers search "vision language"
# Get metadata
hf papers info 2601.15621
# Read as markdown
hf papers read 2601.15621🖥️ CLI repo ID shorthand
You can now use repo ID prefixes like spaces/user/repo, datasets/user/repo, and models/user/repo as a shorthand for user/repo --type space. This works automatically for all CLI commands that accept a --type flag.
# Before
hf download user/my-space --type space
hf discussions list user/my-dataset --type dataset
# After
hf download spaces/user/my-space
hf discussions list datasets/user/my-dataset🔧 More repo visibility options
Repositories can now be created or updated with explicit visibility settings (--public, --protected) alongside the existing --private flag. This adds a visibility parameter to HfApi.create_repo, update_repo_settings, and duplicate_repo, with --protected available for Spaces only.
Protected Spaces allow for private code while being publicly accessible.
- Add
visibilityparameter toHfApirepo create/update/duplicate methods by @hanouticelina in #3951
🖥️ CLI
- Add space-specific options to
hf repos createandhf repos duplicateby @Wauplin in #3888 - Add
--format jsontohf auth whoamiby @hanouticelina in #3938 — docs - Expand nested groups, inline flags & common options glossary in
SKILL.mdby @hanouticelina in #3941 - Include common options inline in generated
SKILL.mdby @hanouticelina in #3955 - Fix
hf extensions installon uv-managed Python by using uv when available by @hanouticelina in #3957 - Add dataset leaderboard method to HfApi by @davanstrien in #3953
- More explicit spaces hot-reload docs by @cbensimon in #3964
- Update hardware flavors with HF Hub (cpu-performance, sprx8, h200, inf2x6) by @cbensimon in #3965 — docs
🔧 Other QoL Improvements
- Rename
.envto.venvin virtual environment instructions by @julien-c in #3939 — docs - Fix typo in
--everyhelp text by @julien-c in #3950 - More robust stream to stdout in
hf cpcommand by @Wauplin in #3968
🐛 Bug and typo fixes
- Use module logger consistently and narrow bare except clauses by @mango766 in #3924
- Fix HfFileSystem glob in missing subdir by @lhoestq in #3935
🏗️ Internal
- Remove conda workflow by @Wauplin in #3928
- Replace
huggingface-cliwithhfin brew upgrade command by @hanouticelina in #3946 - Fix version check message leaking into generated
SKILL.mdby @hanouticelina in #3949 - Mention
hf-mountin CLI skill by @hanouticelina in #3966 - Use
huggingface-hub-botfor post-release PR creation inrelease.ymlby @Wauplin in #3967
[1.7.2] `hf` CLI skill improvements, `uv` extension installs & bug fixes
🛠️ CLI improvements
hf CLI skill now fully expands subcommand groups and inlines all flags and options, making the CLI self-describing and easier for agents to discover.
- Expand nested groups, inline flags & common options glossary in SKILL.md (#3941) by @hanouticelina
- include common options inline (#3955) by @hanouticelina
hf extension install now uses uv for Python extension installation when available making extension installation faster:
> hyperfine "hf extensions install alvarobartt/hf-mem --force"
# Before
Benchmark 1: hf extensions install alvarobartt/hf-mem --force
Time (mean ± σ): 3.490 s ± 0.220 s [User: 1.925 s, System: 0.445 s]
Range (min … max): 3.348 s … 4.097 s 10 runs
# After
Benchmark 1: hf extensions install alvarobartt/hf-mem --force
Time (mean ± σ): 519.6 ms ± 119.7 ms [User: 216.6 ms, System: 95.2 ms]
Range (min … max): 371.6 ms … 655.2 ms 10 runs
- Use uv python extension installation when available (#3957) by @hanouticelina
Other QoL improvements:
- Add
--format jsontohf auth whoami(#3938) by @hanouticelina - Replace
huggingface-cliwithhfin brew upgrade command (#3946) by @hanouticelina
🐛 Bug & Typo fixes
- Fix HfFileSystem glob in missing subdirectory (#3935) by @lhoestq
- Fix: use module logger consistently and narrow bare except clauses (#3924) by @mango766
- Fix typo in --every help text (#3950) by @julien-c
📚 Docs
🏗️ Internal
- Remove conda workflow (#3928) by @Wauplin
- Fix version check message leaking into generated SKILL.md (#3949) by @hanouticelina
Full Changelog: v1.7.1...v1.7.2
[v1.7.0] pip-installable CLI extensions and multiple QoL improvements
This release brings major improvements to the hf CLI with extension discoverability, unified list commands, and multiple QoL improvements in the CLI.
🎉 The Homebrew formula of the Hugging Face CLI has been renamed to hf. Existing users just need to run brew update - Homebrew handles the rename automatically. New users can install with brew install hf.
🧩 CLI Extensions: pip-installable packages and discoverability
The hf CLI extensions system gets a major upgrade in this release. Extensions can now be full Python packages (with a pyproject.toml) installed in isolated virtual environments, in addition to the existing shell script approach. This means extension authors can use Python dependencies without conflicting with the user's system. The install command auto-detects whether a GitHub repo is a script or a Python package and handles both transparently.
A new hf extensions search command lets users discover available extensions directly from the terminal by querying GitHub repositories tagged with the hf-extension topic. Results are sorted by stars and show whether each extension is already installed locally. Additionally, a comprehensive guide on how to build, publish, and make extensions discoverable has been added to the documentation.
# Install a Python-based extension
hf extensions install alvarobartt/hf-mem
# Discover available extensions
hf extensions search
NAME REPO STARS DESCRIPTION INSTALLED
------ ----------------------- ----- ----------------------------------- ---------
claude hanouticelina/hf-claude 2 Extension for `hf` CLI to launch... yes
agents hanouticelina/hf-agents HF extension to run local coding...- [CLI] Add pip installable repos support to hf extensions by @Wauplin in #3892
- [CLI] Add
hf extensions searchcommand by @julien-c in #3905 - [Docs] How to build a CLI extension guide by @Wauplin in #3908
📚 Documentation: Create a CLI extension
🔐 hf auth login CLI update
A new --force flag lets you explicitly go through the full login flow again when needed, for example to switch tokens.
# Already logged in — returns immediately
hf auth login
# Force re-login to switch tokens
hf auth login --force- Default to skipping login if already logged in and add
--forceflag by @hanouticelina in #3920
📚 Documentation: CLI guide
📦 Xet optimizations and fixes
hf-xet has been bumped to v1.4.2 with some optimizations:
- Avoid duplicate sha256 computation when uploading to a model/dataset repo
- Skip sha256 computation when uploading to a bucket
This should greatly improve upload speed of large files.
The hf-xet bump also comes with a fix for deadlocks / stall on large file downloads.
See hf-xet release notes for more details.
- feat: pass pre-computed SHA-256 to hf_xet upload by @XciD in #3876
- feat: pass skip_sha256=True to hf_xet for bucket uploads by @Wauplin in #3900
🖥️ CLI QoL Improvements
- Add num_parameters filtering to hf API and CLI by @evalstate in #3897 — docs
- [CLI] Normalize all list/ls commands to use
list | lsalias by @julien-c in #3901 - [CLI] Add --format and --quiet options to
hf papers lsby @julien-c in #3903 - [CLI] Add hidden
--jsonshorthand for--format jsonby @Wauplin in #3919 - Allow 'hf skills add' default directory by @Wauplin in #3923
🔧 Other QoL Improvements
- Add
used_storagefield to ModelInfo, DatasetInfo, and SpaceInfo by @julien-c in #3911 - Make sure all expand attributes are official ModelInfo/DatasetInfo/SpaceInfo by @Wauplin in #3918
📖 Documentation
- [Docs] Update some community CLI examples by @Wauplin in #3899
- [Docs] Update Homebrew install command to
hfby @julien-c in #3902
🐛 Bug and typo fixes
- snapshot_download operation raises the generic exception even when actual error is different. by @pavankumarch470 in #3914
🏗️ Internal
- [Internal] Don't trigger Skills sync workflow on release candidate by @hanouticelina in #3893
- [Internal] Fix skills path in Skills sync workflow by @hanouticelina in #3894
- [CI] All-in-one Github Action for releases by @Wauplin in #3916
[v1.6.0] New CLI commands, Bucket fsspec support, and more
This release brings significant new CLI commands for managing Spaces, Datasets, Discussions, and Webhooks, along with HfFileSystem support for Buckets and a CLI extension system.
🚀 New CLI commands
We've added several new CLI command groups to make interacting with the Hub even easier from your terminal.
New hf spaces dev-mode command
You can now enable or disable dev mode on Spaces directly from the CLI. When enabling dev mode, the command waits for the Space to be ready and prints connection instructions (web VSCode, SSH, local VSCode/Cursor). This makes iterating on Spaces much faster by allowing you to restart your application without stopping the Space container.
# Enable dev mode
hf spaces dev-mode username/my-space
# Disable dev mode
hf spaces dev-mode username/my-space --stopNew hf discussions command group
You can now manage discussions and pull requests on the Hub directly from the CLI. This includes listing, viewing, creating, commenting on, closing, reopening, renaming, and merging discussions and PRs.
# List open discussions and PRs on a repo
hf discussions list username/my-model
# Create a new discussion
hf discussions create username/my-model --title "Feature request" --body "Description"
# Create a pull request
hf discussions create username/my-model --title "Fix bug" --pull-request
# Merge a pull request
hf discussions merge username/my-model 5 --yes- Add
hf discussionscommand group by @Wauplin in #3855 - Rename
hf discussions viewtohf discussions infoby @Wauplin in #3878
New hf webhooks command group
Full CLI support for managing Hub webhooks is now available. You can list, inspect, create, update, enable/disable, and delete webhooks directly from the terminal.
# List all webhooks
hf webhooks ls
# Create a webhook
hf webhooks create --url https://example.com/hook --watch model:bert-base-uncased
# Enable / disable a webhook
hf webhooks enable webhook_id
hf webhooks disable webhook_id
# Delete a webhook
hf webhooks delete webhook_id- Add
hf webhooksCLI commands by @omkar-334 in #3866
New hf datasets parquet and hf datasets sql commands
Two new commands make it easy to work with dataset parquet files. Use hf datasets parquet to discover parquet file URLs, then query them with hf datasets sql using DuckDB.
# List parquet URLs for a dataset
hf datasets parquet cfahlgren1/hub-stats
hf datasets parquet cfahlgren1/hub-stats --subset models --split train
# Run SQL queries on dataset parquet
hf datasets sql "SELECT COUNT(*) FROM read_parquet('https://huggingface.co/api/datasets/...')"- Add
hf datasets parquetandhf datasets sqlcommands by @cfahlgren1 in #3833
New hf repos duplicate command
You can now duplicate any repository (model, dataset, or Space) using a unified command. This replaces the previous duplicate_space method with a more general solution.
# Duplicate a Space
hf repos duplicate multimodalart/dreambooth-training --type space
# Duplicate a dataset
hf repos duplicate openai/gdpval --type dataset🪣 Bucket support in HfFileSystem
The HfFileSystem now supports buckets, providing S3-like object storage on Hugging Face. You can list, glob, download, stream, and upload files in buckets using the familiar fsspec interface.
from huggingface_hub import hffs
# List files in a bucket
hffs.ls("buckets/my-username/my-bucket/data")
# Read a remote file
with hffs.open("buckets/my-username/my-bucket/data/file.txt", "r") as f:
content = f.read()
# Read file content as string
hffs.read_text("buckets/my-username/my-bucket/data/file.txt")- Add bucket API support in HfFileSystem by @lhoestq in #3807
- Add docs on
hf://bucketsby @lhoestq in #3875 - Remove bucket warning in docs by @Wauplin in #3854
📦 Extensions now support pip install
The hf extensions system now supports installing extensions as Python packages in addition to standalone executables. This makes it easier to distribute and install CLI extensions.
# Install an extension
> hf extensions install hanouticelina/hf-claude
> hf extensions install alvarobartt/hf-mem
# List them
> hf extensions list
COMMAND SOURCE TYPE INSTALLED DESCRIPTION
--------- ----------------------- ------ ---------- -----------------------------------
hf claude hanouticelina/hf-claude binary 2026-03-06 Launch Claude Code with Hugging ...
hf mem alvarobartt/hf-mem python 2026-03-06 A CLI to estimate inference memo...
# Run extension
> hf claude --help
Usage: claude [options] [command] [prompt]
Claude Code - starts an interactive session by default, use -p/--print for non-interactive outputShow installed extensions in hf --help
The CLI now shows installed extensions under an "Extension commands" section in the help output.
- Show installed extensions in
hf --helpby @hanouticelina in #3884
Other QoL improvements
- Add NVIDIA provider support to InferenceClient by @manojkilaru97 in #3886
- Bump
hf_xetminimal package version to>=1.3.2for better throughput by @Wauplin in #3873 - Fix CLI errors formatting to include repo_id, repo_type, bucket_id by @Wauplin in #3889
📚 Documentation updates
- Fixed sub-headings for hf cache commands in the doc by @mostafatouny in #3877
🐛 Bug and typo fixes
- Fix: quote uv args in bash -c to prevent shell redirection by @XciD in #3857
- Fix typo in generated Skill by @hanouticelina in #3890
- Fix ty diagnostics in upload, filesystem, and repocard helpers by @hanouticelina in #3891
💔 Breaking changes
🏗️ Internal
- Release note skill attempt by @Wauplin in #3853
- Prepare for v1.6 by @Wauplin in #3860
- Skip git clone test by @Wauplin in #3881
- Add Sync
hfCLI Skill workflow by @hanouticelina in #3885 - [Release notes] doc diffs, better skill, concurrent fetching by @Wauplin in #3887
- Propagate filtered headers to xet by @bpronan in #3858
[v1.5.0]: Buckets API, Agent-first CLI, Spaces Hot-Reload and more
This release introduces major new features including Buckets (xet-based large scale object storage), CLI Extensions, Space Hot-Reload, and significant improvements for AI coding agents. The CLI has been completely overhauled with centralized error handling, better help output, and new commands for collections, papers, and more.
🪣 Buckets: S3-like Object Storage on the Hub
Buckets provide S3-like object storage on Hugging Face, powered by the Xet storage backend. Unlike repositories (which are git-based and track file history), buckets are remote object storage containers designed for large-scale files with content-addressable deduplication. Use them for training checkpoints, logs, intermediate artifacts, or any large collection of files that doesn't need version control.
# Create a bucket
hf buckets create my-bucket --private
# Upload a directory
hf buckets sync ./data hf://buckets/username/my-bucket
# Download from bucket
hf buckets sync hf://buckets/username/my-bucket ./data
# List files
hf buckets list username/my-bucket -R --treeThe Buckets API includes full CLI and Python support for creating, listing, moving, and deleting buckets; uploading, downloading, and syncing files; and managing bucket contents with include/exclude patterns.
- Buckets API and CLI by @Wauplin in #3673
- Support bucket rename/move in API + CLI by @Wauplin in #3843
- Add 'sync_bucket' to HfApi by @Wauplin in #3845
- hf buckets file deletion by @Wauplin in #3849
- Update message when no buckets found by @Wauplin in #3850
- Buckets doc
hfinstall by @julien-c in #3846
📚 Documentation: Buckets guide
🤖 AI Agent Support
This release includes several features designed to improve the experience for AI coding agents (Claude Code, OpenCode, Cursor, etc.):
- Centralized CLI error handling: Clean user-facing messages without tracebacks (set
HF_DEBUG=1for full traces) by @hanouticelina in #3754 - Token-efficient skill: The
hf skills addcommand now installs a compact skill (~1.2k tokens vs ~12k before) by @hanouticelina in #3802 - Agent-friendly
hf jobs logs: Prints available logs and exits by default; use-fto stream by @davanstrien in #3783 - Add AGENTS.md: Dev setup and codebase guide for AI agents by @Wauplin in #3789
# Install the hf-cli skill for Claude
hf skills add --claude
# Install for project-level
hf skills add --project- Add
hf skills addCLI command by @julien-c in #3741 hf skills addinstalls to central location with symlinks by @hanouticelina in #3755- Add Cursor skills support by @NielsRogge in #3810
🔥 Space Hot-Reload (Experimental)
Hot-reload Python files in a Space without a full rebuild and restart. This is useful for rapid iteration on Gradio apps.
# Open an interactive editor to modify a remote file
hf spaces hot-reload username/repo-name app.py
# Take local version and patch remote
hf spaces hot-reload username/repo-name -f app.py- feat(spaces): hot-reload by @cbensimon in #3776
- fix hot reload reference part.2 by @cbensimon in #3820
🖥️ CLI Improvements
New Commands
- Add
hf papers lsto list daily papers on the Hub by @julien-c in #3723 - Add
hf collectionscommands (ls, info, create, update, delete, add-item, update-item, delete-item) by @Wauplin in #3767
CLI Extensions
Introduce an extension mechanism to the hf CLI. Extensions are standalone executables hosted in GitHub repositories that users can install, run, and remove with simple commands. Inspired by gh extension.
# Install an extension (defaults to huggingface org)
hf extensions install hf-claude
# Install from any GitHub owner
hf extensions install hanouticelina/hf-claude
# Run an extension
hf claude
# List installed extensions
hf extensions list- Add
hf extensionby @hanouticelina in #3805 - Add
hf extalias by @hanouticelina in #3836
Output Format Options
- Add
--format {table,json}and-q/--quiettohf models ls,hf datasets ls,hf spaces ls,hf endpoints lsby @hanouticelina in #3735 - Align
hf jobs psoutput with standard CLI pattern by @davanstrien in #3799 - Dynamic table columns based on
--expandfield by @hanouticelina in #3760
Usability
- Improve
hfCLI help output with examples and documentation links by @hanouticelina in #3743 - Add
-has short alias for--helpby @assafvayner in #3800 - Add hidden
--versionflag by @Wauplin in #3784 - Add
--typeas alias for--repo-typeby @Wauplin in #3835 - Better handling of aliases in documentation by @Wauplin in #3840
- Print first example only in group command --help by @Wauplin in #3841
- Subfolder download:
hf download repo_id subfolder/now works as expected by @Wauplin in #3822
Jobs CLI
List available hardware:
✗ hf jobs hardware
NAME PRETTY NAME CPU RAM ACCELERATOR COST/MIN COST/HOUR
--------------- ---------------------- -------- ------- ----------------- -------- ---------
cpu-basic CPU Basic 2 vCPU 16 GB N/A $0.0002 $0.01
cpu-upgrade CPU Upgrade 8 vCPU 32 GB N/A $0.0005 $0.03
cpu-performance CPU Performance 32 vCPU 256 GB N/A $0.3117 $18.70
cpu-xl CPU XL 16 vCPU 124 GB N/A $0.0167 $1.00
t4-small Nvidia T4 - small 4 vCPU 15 GB 1x T4 (16 GB) $0.0067 $0.40
t4-medium Nvidia T4 - medium 8 vCPU 30 GB 1x T4 (16 GB) $0.0100 $0.60
a10g-small Nvidia A10G - small 4 vCPU 15 GB 1x A10G (24 GB) $0.0167 $1.00
...Also added a ton of fixes and small QoL improvements.
- Support multi GPU training commands (
torchrun,accelerate launch) by @lhoestq in #3674 - Pass local script and config files to job by @lhoestq in #3724
- List available hardware with
hf jobs hardwareby @Wauplin in #3693 - Better jobs filtering in CLI: labels and negation (
!=) by @lhoestq in #3742 - Accept namespace/job_id format in jobs CLI commands by @davanstrien in #3811
- Pass namespace parameter to fetch job logs by @Praful932 in #3736
- Add more error handling output to hf jobs cli commands by @davanstrien in #3744
- Fix
hf jobscommands crashing without a TTY by @davanstrien in #3782
🤖 Inference
- Add
dimensions&encoding_formatparameter to InferenceClient for output embedding size by @mishig25 in #3671 - feat: zai-org provider supports text to image by @tomsun28 in #3675
- Fix fal image urls payload by @hanouticelina in #3746
- Fix Replicate
image-to-imagecompatibility with different model schemas by @hanouticelina in #3749 - Accelerator parameter support for inference endpoints by @Wauplin in #3817
🔧 Other QoL Improvements
- Support setting Label in Jobs API by @Wauplin in #3719
- Document built-in environment variables in Jobs docs (JOB_ID, ACCELERATOR, CPU_CORES, MEMORY) by @Wauplin in #3834
- Fix ReadTimeout crash in no-follow job logs by @davanstrien in #3793
- Add evaluation results module (
EvalResultEntry,parse_eval_result_entries) by @hanouticelina in #3633 - Add source org field to
EvalResultEntryby @hanouticelina in #3694 - Add limit param to list_papers API method by @Wauplin in #3697
- Add
num_papersfield to Organization class by @cfahlgren1 in #3695 - Update MAX_FILE_SIZE_GB from 50 to 200 by @davanstrien in #3696
- List datasets benchmark alias (
benchmark=True→benchmark="official") by @Wauplin in #3734 - Add notes field to
EvalResultEntryby @Wauplin in #3738 - Make
task_idrequired inEvalResultEntryby @Wauplin in #3718 - Repo commit count warning for
upload_large_folderby @Wauplin in #3698 - Replace deprecated is_enterprise boolean by
planstring in org info by @Wauplin in #3753 - Update hardware list in SpaceHardware enum by @lhoestq in #3756
- Use HF_HUB_DOWNLOAD_TIMEOUT as default httpx timeout by @Wauplin in #3751
- No timeout by default when using httpx by @Wauplin in #3790
- Log 'x-amz-cf-id' on http error (if no request id) by @Wauplin in #3759
- Parse xet hash from tree listing by @seanses in #3780
- Require filelock>=3.10.0 for
mode=parameter support by @Wauplin in #3785 - Add overload decorators to
HfApi.snapshot_downloadfor dry_run typing by @Wauplin in #3788 - Dataclass doesn't call original
__init__by @zucchini-nlp in #3818 - Strict dataclass sequence validation by @Wauplin in #3819
- Check if
dataclass.repr=Truebefore wrapping by @zucchini-nlp in #3823
💔 Breaking Changes
hf jobs psremoves old Go-template--format '{{.id}}'syntax. Use-qfor IDs or--format json | jqfor custom extraction by @davanstrien in #3799- Migrate to
hf reposinstead ofhf repo(old command still works but shows deprecation warning) by @Wauplin in #3848 - Migrate
hf repo-files deletetohf repo delete-files(old command hidden from help, shows deprecation warning) by @Wauplin in #3821
🐛 Bug and typo fixes
- Fix severe performance regression in streaming by keeping a byte iterator in HfFileSystemStreamFile by @leq6c in #3685
- Fix endpoint not forwarded in CommitUrl by @Wauplin in #3679
- Fix
HfFileSystem.resolve_path()with special char@by @lhoestq in #3704 - Fix cache verify incorrectly reporting folders as missing files by @Mitix-EPI in #3707
- Fix multi user cache lock permissions by @hanouticelina in #3714
- Default _endpoint to None in CommitInfo, fixes tiny regression from v1.3.3 by @tomaarsen in #3737
- Filter datasets by benchmark:official by @Wauplin in #3761
- Fix file corruption when server ignores Range header on download retry by @XciD in #3778
- Fix Xet token invalid on repo recreation...