1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
|
# Adding python3-hf_xet as a separate SlackBuild
Plan for packaging the `hf_xet` Rust/PyO3 extension that accelerates
`huggingface_hub` with Xet storage (chunk-based deduplication). Research only,
nothing has been built or committed yet.
Written 2026-08-11. All upstream versions and checksums were verified on that
date. Re-verify before acting if a new hf-xet release has shipped.
---
## Conclusions up front
**Package it as `python3-hf_xet`, a separate package.** It is an optional
accelerator, not a hard runtime dependency of `huggingface_hub`, so it should
not be added to `python3-hf_xet`'s REQUIRES. Without it, `huggingface_hub`
falls back to regular HTTP download and prints a warning, which is the
behaviour that motivated this plan (see `TODO-AND-NOTES.md`).
**The SBo name is free.** Searched slackbuilds.org for both `hf_xet` and
`hf-xet`: no results.
**Build system is maturin (PyO3).** SBo-stable already has `python3-maturin`
1.14.1, which satisfies `maturin>=1.7,<2.0`. That package REQUIRES `rust-opt`
(currently 1.97.1), which provides `/opt/rust/bin/cargo` and `rustc`. Rust
edition 2024 is used, which needs rustc 1.85+, so 1.97.1 is fine.
**The closest SBo precedent is `python3-orjson`** — same stack: Rust/PyO3
extension built with maturin, same SlackBuild pattern (PATH and
LD_LIBRARY_PATH for rust-opt, `python3 -m build --no-isolation`, `python3 -m
installer`). The new script should follow it closely.
**The sdist does not vendor cargo dependencies.** The PyPI sdist
(`hf_xet-1.6.0.tar.gz`, 920 KB) contains the workspace source (the `hf_xet`
crate plus sibling path-dependency crates: `xet_pkg`, `xet_runtime`,
`xet_client`, `xet_core_structures`, `xet_data`) and `Cargo.lock` (148 KB),
but not the crates.io dependencies. Building from sdist requires network
access to fetch from crates.io. This is the main decision point, see below.
---
## What hf_xet is
`hf-xet` enables `huggingface_hub` to use Xet storage for uploading and
downloading from the HF Hub. Xet storage provides chunk-based deduplication,
efficient storage/retrieval with local disk caching, and backwards
compatibility with Git LFS. The library is not meant to be used directly, it
is imported by `huggingface_hub` when available.
As of `huggingface_hub` 0.32.0, `hf_xet` is installed automatically as a
dependency. On this system, where `python3-huggingface_hub` is built from
source without it, the CLI prints:
```
Xet Storage is enabled for this repo, but the 'hf_xet' package is not
installed. Falling back to regular HTTP download. For better performance,
install the package with: `pip install huggingface_hub[hf_xet]` or
`pip install hf_xet`
```
That warning is the reason this package is wanted.
### Upstream facts (verified 2026-08-11)
| Item | Value |
|---|---|
| PyPI name | `hf-xet` |
| Import name | `hf_xet` |
| Latest version | `1.6.0` |
| License | Apache-2.0 |
| requires_python | `>=3.8` |
| Build system | maturin (`>=1.7,<2.0`) |
| Rust edition | 2024 (needs rustc 1.85+) |
| PyO3 version | 0.29, abi3-py38 (one wheel for all CPython 3.8+) |
| Runtime deps | none (only `pytest` for the `tests` extra) |
| Homepage | `https://github.com/huggingface/xet-core` |
| sdist | `hf_xet-1.6.0.tar.gz`, 920,527 bytes, md5 `bf1ab4c595afa39ed1391294dc1d9f01` |
| sdist URL | `https://files.pythonhosted.org/packages/source/h/hf-xet/hf_xet-1.6.0.tar.gz` |
### Workspace structure
`hf_xet` lives in the `huggingface/xet-core` monorepo, excluded from the main
workspace but depending on sibling crates via path deps:
```
xet-core/
├── Cargo.toml # workspace, excludes hf_xet
├── Cargo.lock # 148 KB, shared across the workspace
├── hf_xet/ # the PyO3 bindings (this package)
│ ├── Cargo.toml # path deps to ../xet_pkg, ../xet_runtime, ../xet_client
│ └── pyproject.toml # maturin build backend
├── xet_pkg/ # consolidated package, depends on the rest
├── xet_runtime/ # async runtime, config, logging
├── xet_client/ # HTTP client for CAS and Hub backend
├── xet_core_structures/ # MerkleHash, metadata shards, shared structs
└── xet_data/ # chunking, dedup, file reconstruction
```
The maturin sdist includes the `hf_xet` crate and the sibling path-dep crates,
so it is self-contained at the workspace level. It is not self-contained at
the crates.io level.
---
## Decision: online build vs vendored build
This is the only real design choice. Everything else follows the `python3-orjson`
template.
### Option A: online build (recommended)
Do not set `CARGO_NET_OFFLINE=true`. Cargo fetches dependencies from crates.io
at build time. The build needs network access, which the Docker test-build
container and the buildsystem VM both have.
Pros:
- Simplest script, fewest moving parts.
- No vendored tarball to generate, host, or keep in sync across version bumps.
- Matches how most Rust Python extensions are built outside SBo.
Cons:
- Not SBo-conventional. SBo packages are expected to build offline.
- If submitting to SBo later, a vendored tarball would need to be added.
### Option B: vendored build
Generate a vendored cargo deps tarball via `cargo vendor`, host it (the SBo
maintainer `fourtysixandtwo` hosts on `slackware.uk`), and add it as a second
`DOWNLOAD`/`MD5SUM` entry. Set `CARGO_NET_OFFLINE=true` and point
`CARGO_HOME` at the vendored directory.
Pros:
- SBo-conventional offline build.
- No network dependency at build time.
Cons:
- The vendored tarball would be roughly 50-200 MB (the dep tree includes
`reqwest`, `tokio`, `pyo3`, `git2`, `blake3`, `hyper`, etc.).
- Needs hosting somewhere.
- Every version bump requires regenerating and re-hosting the tarball.
- `python3-maturin` ships a `mkvendored.sh` script that could be used as a
reference, but the workflow is still manual.
### Recommendation
Start with option A (online build). It gets the package working with the
least effort. If submitting to SBo becomes the goal, switch to option B at
that point, the script change is small (add the second `DOWNLOAD`, set
`CARGO_NET_OFFLINE=true`, point `CARGO_HOME` at the vendor dir).
---
## Plan
### Step 1: create the package files
Create `python3-hf_xet/` with the standard four files:
```
python3-hf_xet/
├── python3-hf_xet.SlackBuild
├── python3-hf_xet.info
├── README
└── slack-desc
```
#### SlackBuild
Base the script on `python3-orjson` (`/var/lib/sbopkg/SBo-stable/python/python3-orjson/python3-orjson.SlackBuild`),
which is the closest analog. Key points:
- `PRGNAM=python3-hf_xet`, `SRCNAM=hf_xet` (the PyPI sdist name).
- Standard ARCH detection, SLKCFLAGS, LIBDIRSUFFIX.
- Extract: `tar xvf $CWD/$SRCNAM-$VERSION.tar.gz`.
- Set up rust-opt:
```sh
export PATH="/opt/rust/bin:$PATH"
export LD_LIBRARY_PATH="/opt/rust/lib$LIBDIRSUFFIX${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"
```
- `export MATURIN_NO_INSTALL_RUST=1` — prevents maturin from auto-installing
rust if rust-opt is missing.
- `export CARGO_HOME=$(pwd)/.cargo` — keeps cargo writes inside `$TMP`.
- Do **not** set `CARGO_NET_OFFLINE=true` (online build, option A).
- Build and install:
```sh
python3 -m build --wheel --no-isolation
python3 -m installer --destdir "$PKG" dist/*.whl
```
- Strip, docs (`LICENSE README*`), slack-desc, makepkg.
#### .info
```
PRGNAM="python3-hf_xet"
VERSION="1.6.0"
HOMEPAGE="https://github.com/huggingface/xet-core"
DOWNLOAD="https://files.pythonhosted.org/packages/source/h/hf-xet/hf_xet-1.6.0.tar.gz"
MD5SUM="bf1ab4c595afa39ed1391294dc1d9f01"
DOWNLOAD_x86_64=""
MD5SUM_x86_64=""
REQUIRES="python3-maturin"
MAINTAINER="danix"
EMAIL="danix@danix.xyz"
```
`REQUIRES="python3-maturin"` because maturin is the build backend. `rust-opt`
is pulled in transitively through `python3-maturin`'s own REQUIRES. No runtime
REQUIRES, `hf_xet` is a standalone extension module.
#### slack-desc
11 lines, `python3-hf_xet:` prefix. Short description: "Rust extension for
Hugging Face Hub Xet storage (dedup and fast transfers)."
#### README
Standard SBo README: what it is, what it does, that it is an optional
accelerator for `huggingface_hub`, build deps (rust-opt, python3-maturin).
### Step 2: add nvchecker entry
Append to `.extras/nvchecker.toml`:
```toml
[python3-hf_xet]
source = "pypi"
pypi = "hf-xet"
```
### Step 3: verify and lint
```sh
cd python3-hf_xet && sbofixinfo
cd python3-hf_xet && sbodl
cd python3-hf_xet && sbolint
```
`sbodl` must report `md5sum matches OK`. If the checksum is stale, use the
two-pass `sbodl` procedure from AGENTS.md.
### Step 4: test build
Use the `test-build-slackbuild` skill. Run both trees since this package is
SBo-submittable:
```sh
test-build python3-hf_xet # -current
test-build --stable python3-hf_xet # 15.0
```
Watch for:
- rust-opt version on -stable (if 15.0's rust-opt is older than 1.85, edition
2024 will fail to compile).
- Network access in the Docker container (cargo needs to fetch from
crates.io for the online build).
- The build is slow (Rust compilation with LTO, `codegen-units = 1`).
### Step 5: report and wait
Present a summary of all changes and test results. Wait for commit
instruction.
---
## Known problem areas
**-stable rust-opt age.** The `Cargo.toml` uses `edition = "2024"`, which
requires rustc 1.85+. If SBo-stable's `rust-opt` is older than 1.85, the
build will fail on 15.0. SBo-stable currently ships rust-opt 1.97.1 (verified
2026-08-11 in `/var/lib/sbopkg/SBo-stable/development/rust-opt/rust-opt.info`),
which is fine, but this should be re-checked at build time.
**Build time.** The release profile uses `lto = true` and
`codegen-units = 1`, plus the dep tree is large (reqwest, tokio, pyo3, git2).
Expect a multi-minute compile even on fast hardware. The Docker test-build
timeout may need to be generous.
**No runtime deps, but a transitive build-toolchain dep.** `python3-maturin`
REQUIRES `rust-opt` and `python3-setuptools-rust-opt`. Anyone building
`python3-hf_xet` needs the full Rust toolchain installed. This is expected
for any maturin-built package and is not a problem specific to hf_xet.
**sdist does not include vendored crates.** See the decision section above.
The online build is the pragmatic choice for this repo. If SBo submission is
the goal, vendoring must be added.
**`huggingface_hub` integration is automatic.** Once `hf_xet` is installed,
`huggingface_hub` detects it and uses it. No configuration needed. The
warning in `TODO-AND-NOTES.md` disappears.
---
## What NOT to change
**Do not add `python3-hf_xet` to `python3-huggingface_hub`'s REQUIRES.** It
is optional. Forcing it would pull in the entire Rust toolchain as a build
dependency of `huggingface_hub`, which is unreasonable for users who only
want the Python API.
**Do not use the prebuilt wheels.** PyPI ships manylinux wheels, but SBo
policy is to build from source. The sdist exists and is buildable.
---
## Status
Updated 2026-08-11.
Research complete. No files created yet. The package is ready to be built
when the user decides to proceed. The only open decision is online vs
vendored build (recommended: online).
|