dfukit
Firmware updates over any link. dfukit is a small update protocol with a server for the device and a client for the host, both in C.
- One protocol for every link: UART, UDP, TCP, BLE, USB, or a link of your own. dfukit sends frames; the link only has to carry them, and may lose some.
- A pipeline, not a request per frame: the host sends what the device's window allows, the device acknowledges in bulk, and a lost frame is sent again from where it went missing (go-back-N).
- A 32-bit board ID per image target: it selects the backend that writes the image, and a device refuses IDs it does not know before it touches anything.
- Backends for what is behind a board ID: your own for an OTA slot or a bootloader's slot, one for RAM that comes with dfukit, or a device further down a chain (pass-through).
- Resume after a lost link, with the device's state kept for a while.
- No threads, no heap and no platform code in the core: the application feeds it frames and time, and gets frames back through a callback.
The protocol and the internals are described in DESIGN.md, and what changed in CHANGELOG.md.
Building and testing
pip install pytest "nanobind>=2.5"
cmake -S . -B build && cmake --build build && ctest --test-dir build --no-tests=error
For the C libraries alone, without the Python module and the tests, add -DDFUKIT_PYTHON=OFF.
The tests run the server and the client against each other through a simulated link that drops,
duplicates and delays frames.
They are in Python, on the C code through its bindings; tests/README.md has how to measure their
coverage.
A device: the server
The server is a struct the application owns. Frames go in with dfukit_server_feed(), answers
come out through the send callback, and dfukit_server_poll() runs its timers. One task calls
into a server at a time.
#include "dfukit_server.h"
static int send_frame(void *ctx, const dfukit_peer_t *to, const uint8_t *frame, size_t len)
{
// To the peer `to` on your link (its address, as you gave it to dfukit_server_feed())
return my_link_send(to, frame, len);
}
static dfukit_server_t server;
static dfukit_backend_t backend;
void update_init(void)
{
const dfukit_server_config_t config = {
.send = send_frame,
.name = "my-device",
.max_frame = 512, // the largest frame the link carries
};
dfukit_server_init(&server, &config);
my_backend_init(&backend, 0x0000a001); // see "Backends"
dfukit_server_register(&server, &backend);
}
// For each frame from the link, and every few milliseconds
void on_frame(const uint8_t *addr, size_t addr_len, const uint8_t *frame, size_t len)
{
dfukit_peer_t from = {.len = (uint8_t)addr_len};
if (addr_len > DFUKIT_PEER_MAX) {
return; // longer than a peer: map it to 16 bytes of your own (an index, a hash)
}
memcpy(from.bytes, addr, addr_len);
dfukit_server_feed(&server, &from, frame, len, now_ms());
}
void every_10_ms(void)
{
dfukit_server_poll(&server, now_ms());
}
A peer is an opaque address of up to 16 bytes (DFUKIT_PEER_MAX): a socket address, a BLE
connection handle, a bus address; the server drops frames from a longer one. An IPv6 address
with its port is 18 bytes: give the server something shorter that names it (a slot in a table of
your own). Two peers are the same when their bytes are. The peer that starts a session owns it;
another one gets BUSY until it ends. INFO and STATUS are answered to anyone.
on_status in the config reports the session's state and progress, on every change and every
acknowledgement: for a light or a display. A pass-through session has no progress to report.
INFO lists as many boards as fit in one frame, after a name cut to fit. A host can use it to warn
early, but START is the real check.
Backends
A backend puts an image in place for one board ID (dfukit_backend_t, dfukit_server.h). The server
calls it in order:
| Callback | When | What it does |
|---|---|---|
begin |
START |
gets ready for an image of start->image_size bytes (may erase) |
write |
data comes in | writes the image at offset, in order |
window |
every acknowledgement | how many more stream bytes it can take now (0: wait) |
finish |
FINISH |
its own checks of the whole image; DFUKIT_PENDING while still writing |
activate |
ACTIVATE |
makes the image the one that runs (restarts, or at the next boot) |
abort |
the session is broken off | undoes what it can |
The server has checked the image's CRC-32 before it calls finish. The CRC catches accidents,
not attackers: signatures are the backend's, which hands the image to whatever checks them on its
platform.
The CRC is a small module of its own (lib/crc32). Its dfukit_crc32() is weak, so an application
replaces it by defining one (a hardware engine, say), in an object file that gets linked. MSVC
has no weak symbols: there the static library gives way to the application's definition.
The ones that come with dfukit:
| Backend | Platform | Writes |
|---|---|---|
ram |
any | a buffer; for tests and for devices that handle the image themselves |
A pass-through backend (kind = DFUKIT_KIND_PASSTHROUGH) does not write anything: forward
gets the session's frames as they are, for a device further down a chain, and that device's
answers go back with dfukit_server_downstream(). The server does not read the session: it ends
with the owner's ABORT, after the idle time, or when the backend calls
dfukit_server_passthrough_end(). abort is called however it ends.
Notes for integrators
- The window is the backend's promise to the host, not a limit the server enforces: a host that
sends past it still gets its frames to
write. A backend that buffers takes more, or fails. beginruns inside theSTARTit answers: it must be done within the client's tries times its RTO (4 s by default), or open with a window of 0 and do the rest in the background.activateonly schedules the switch (a restart afterdelay_ms, from a timer or a task): the server answersACTIVATEwith what it returns, so it must return before restarting.finishmay returnDFUKIT_PENDINGwhile it still writes what it buffered; the host asks again.
A host: the client
The C client is driven like the server: dfukit_client_feed() with the device's frames,
dfukit_client_poll() every few milliseconds, frames out through send, and the image read
through read at any offset (a resend reads again), so it need not be in RAM.
#include "dfukit_client.h"
dfukit_client_t client;
const dfukit_client_config_t config = {
.send = link_send,
.read = image_read,
.max_frame = 512,
};
dfukit_start_t start = {
.board_id = 0x0000a001,
.encoding = DFUKIT_ENCODING_RAW,
.image_size = image_len,
.stream_size = image_len,
};
start.crc32 = dfukit_crc32(0, image, image_len);
dfukit_client_init(&client, &config);
dfukit_client_begin(&client, &start, true, 0, 0, now_ms()); // true: ACTIVATE after FINISH
while (dfukit_client_state(&client) < DFUKIT_CLIENT_DONE) {
// feed what came in, then:
dfukit_client_poll(&client, now_ms());
}
// DFUKIT_CLIENT_DONE, or DFUKIT_CLIENT_FAILED and dfukit_client_status() says why
After a lost link (or a DFUKIT_TIMEOUT), dfukit_client_resume() on the new one goes on where
the device stopped, or starts over when the device has no state left.
From Python
pip install dfukit
The same client and server, driven the same way. The link and the clock are the caller's, and the clock is passed in as milliseconds that fit 32 bits.
import time
import dfukit
def now_ms() -> int:
return int(time.monotonic() * 1000) & 0xFFFFFFFF
client = dfukit.Client(link_send, lambda offset, length: image[offset : offset + length], max_frame=512)
client.begin(0x0000A001, image, now_ms())
while client.state not in (dfukit.ClientState.DONE, dfukit.ClientState.FAILED):
for frame in frames_from_the_link():
client.feed(frame, now_ms())
client.poll(now_ms())
if client.state == dfukit.ClientState.FAILED:
raise RuntimeError(dfukit.status_name(client.status))
dfukit.Server is the device's end, with add() for a backend (RamBackend, PassthroughBackend),
feed(peer, frame, now) and poll(now); its send callback gets (peer, frame).
License
Apache-2.0 (LICENSE).
Metadata
Release files for dfukit 2.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| dfukit-2.0.0.tar.gz | 113.2 kB | With provenance | Details for dfukit-2.0.0.tar.gz |
Built distributions (wheels)
Total release size: 5.4 MB
Release files / dfukit-2.0.0.tar.gz
| Download URL | dfukit-2.0.0.tar.gz |
|---|---|
| Size | 113.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
f62b6044c290d5e02c08c2d2102a76cdf0e41bc10f212ff812da4931f8959971
|
|
BLAKE2b-256 checksum How to use checksums |
015dd360f041ec135c0df68e923e2d9a5bd3bb8ada8edb0eba14235727bf680b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 4, 2026.
Transparency logRelease files / dfukit-2.0.0-cp312-abi3-win_amd64.whl
| Download URL | dfukit-2.0.0-cp312-abi3-win_amd64.whl |
|---|---|
| Size | 98.8 kB |
| Tags | CPython 3.12 Windows x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
f5d28bc078dbee6a16abd78418023f7d99de348ed47bbd1ee1b4799296762573
|
|
BLAKE2b-256 checksum How to use checksums |
fdbb121343e9571c2246962c6b92c5de0a616e2008257fc359fd6816677ca8c4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 4, 2026.
Transparency logRelease files / dfukit-2.0.0-cp312-abi3-win32.whl
| Download URL | dfukit-2.0.0-cp312-abi3-win32.whl |
|---|---|
| Size | 90.1 kB |
| Tags | CPython 3.12 Windows x86-32 abi3 |
|
SHA-256 checksum How to use checksums |
fefb8200ebed47ff2e0382f8e4add4f4391aac1e2ff9f85dab1d69f27811c895
|
|
BLAKE2b-256 checksum How to use checksums |
38c03d244907a2dd3959aa65ef4cb1aa444a44ba7e6384fc0825e564dc550770
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 4, 2026.
Transparency logRelease files / dfukit-2.0.0-cp312-abi3-musllinux_1_2_x86_64.whl
| Download URL | dfukit-2.0.0-cp312-abi3-musllinux_1_2_x86_64.whl |
|---|---|
| Size | 558.9 kB |
| Tags | CPython 3.12 Linux musl 1.2+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
2089aaa33172a24bf158098b27220dce2a901da57fa0cfcfce8d9351ca8fa0b9
|
|
BLAKE2b-256 checksum How to use checksums |
fd84d7a07a33f985493649657d107ce2a753ca9902d07d1541cc508a87a43784
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 4, 2026.
Transparency logRelease files / dfukit-2.0.0-cp312-abi3-musllinux_1_2_i686.whl
| Download URL | dfukit-2.0.0-cp312-abi3-musllinux_1_2_i686.whl |
|---|---|
| Size | 606.8 kB |
| Tags | CPython 3.12 Linux musl 1.2+ x86-32 abi3 |
|
SHA-256 checksum How to use checksums |
d5ebaf5c9b7dd233b22a0d10acf8c44a02d085694beaaf468373b3bdcefe424f
|
|
BLAKE2b-256 checksum How to use checksums |
e722846693ab3135108ac4e89656323833fbe023137d0cef0bb75f16e8697739
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 4, 2026.
Transparency logRelease files / dfukit-2.0.0-cp312-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | dfukit-2.0.0-cp312-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 110.8 kB |
| Tags | CPython 3.12 Linux glibc 2.17+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
d51904d59f6317480a8979c96412d241b1bb7921b9bf55ee5cfeacd239211739
|
|
BLAKE2b-256 checksum How to use checksums |
6d74f93325ea69d8580500042f358c1979fbd2497fcdc1d4e2ba9a181e41c337
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 4, 2026.
Transparency logRelease files / dfukit-2.0.0-cp312-abi3-manylinux_2_17_i686.manylinux2014_i686.whl
| Download URL | dfukit-2.0.0-cp312-abi3-manylinux_2_17_i686.manylinux2014_i686.whl |
|---|---|
| Size | 116.6 kB |
| Tags | CPython 3.12 Linux glibc 2.17+ x86-32 abi3 |
|
SHA-256 checksum How to use checksums |
f595e9ac41460360fa551e8b0e1bcbf7cb8219ba82f7ddcb74b04f8786de5970
|
|
BLAKE2b-256 checksum How to use checksums |
df60abee7cc8f3582e7848adec159cf78f58c24ea55f9c042ff9e0038793f648
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 4, 2026.
Transparency logRelease files / dfukit-2.0.0-cp312-abi3-macosx_11_0_arm64.whl
| Download URL | dfukit-2.0.0-cp312-abi3-macosx_11_0_arm64.whl |
|---|---|
| Size | 77.9 kB |
| Tags | CPython 3.12 abi3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
458dfece078b1cc1f2c33fe95a485c53678683f453d3cccd20e504e12263b092
|
|
BLAKE2b-256 checksum How to use checksums |
b013ae26a97c8b44b56309b6e962057d063ba6aef280a18feb4016a723f96c7c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 4, 2026.
Transparency logRelease files / dfukit-2.0.0-cp312-abi3-macosx_10_14_x86_64.whl
| Download URL | dfukit-2.0.0-cp312-abi3-macosx_10_14_x86_64.whl |
|---|---|
| Size | 81.8 kB |
| Tags | CPython 3.12 abi3 macOS 10.14+ x86-64 |
|
SHA-256 checksum How to use checksums |
fb40d1bddc5a3a3582ecc5fcac9fef398a09d2173db097860739f64cf893c2ff
|
|
BLAKE2b-256 checksum How to use checksums |
4c0dfc4c1ac2281dc316599cca3387d1eabb1f2323ffacf344ce740d5ea353dc
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 4, 2026.
Transparency logRelease files / dfukit-2.0.0-cp311-cp311-win_amd64.whl
| Download URL | dfukit-2.0.0-cp311-cp311-win_amd64.whl |
|---|---|
| Size | 99.3 kB |
| Tags | CPython 3.11 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
46613982f8e5ac92f48dc485b748e1d357ff12f40fd7aea87c63515b9697b944
|
|
BLAKE2b-256 checksum How to use checksums |
cd2752ec5636ab819180aa2ce300d48f1289d0495a90a70fa658a3664a3772a4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 4, 2026.
Transparency logRelease files / dfukit-2.0.0-cp311-cp311-win32.whl
| Download URL | dfukit-2.0.0-cp311-cp311-win32.whl |
|---|---|
| Size | 91.1 kB |
| Tags | CPython 3.11 Windows x86-32 |
|
SHA-256 checksum How to use checksums |
1a2457fd2f72cd81d360d34d3dff5bb10cbfb269b9e0d9f814643ef0270ac3e3
|
|
BLAKE2b-256 checksum How to use checksums |
ddec5f53dad7402c10f6bd62823cc382f13060e3bcc6e423a0ebb08350282de5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 4, 2026.
Transparency logRelease files / dfukit-2.0.0-cp311-cp311-musllinux_1_2_x86_64.whl
| Download URL | dfukit-2.0.0-cp311-cp311-musllinux_1_2_x86_64.whl |
|---|---|
| Size | 563.5 kB |
| Tags | CPython 3.11 Linux musl 1.2+ x86-64 |
|
SHA-256 checksum How to use checksums |
95e498a175003278375c2c5cd82becd760d0170e13123586c50cf5f920583f65
|
|
BLAKE2b-256 checksum How to use checksums |
b17c99b0fe6ae29ea7d75ba85fe6d005562ae7d7a0e239ab8c67a995577ead65
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 4, 2026.
Transparency logRelease files / dfukit-2.0.0-cp311-cp311-musllinux_1_2_i686.whl
| Download URL | dfukit-2.0.0-cp311-cp311-musllinux_1_2_i686.whl |
|---|---|
| Size | 612.7 kB |
| Tags | CPython 3.11 Linux musl 1.2+ x86-32 |
|
SHA-256 checksum How to use checksums |
69656a1390cf8b490d77d9871d9b2582a0d8de2b56e0526d8bf010a9d8fdda2c
|
|
BLAKE2b-256 checksum How to use checksums |
19434a0254a361364f3ac38ab9cc66291182d5391002d5a31180091c7ac3460f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 4, 2026.
Transparency logRelease files / dfukit-2.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | dfukit-2.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 115.5 kB |
| Tags | CPython 3.11 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
7c23fe8aceffb05f53cff62d00b48d529fdd6ee70d68e9f7182101017e39bf79
|
|
BLAKE2b-256 checksum How to use checksums |
feabb5b47f1e7245f87aac4acc6750855fc26bafe0beea5ebbd0cfbac124fed3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 4, 2026.
Transparency logRelease files / dfukit-2.0.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl
| Download URL | dfukit-2.0.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl |
|---|---|
| Size | 122.3 kB |
| Tags | CPython 3.11 Linux glibc 2.17+ x86-32 |
|
SHA-256 checksum How to use checksums |
7f12982686983aa4489383c851f4a322e8849a42347b8c769432eae28ed1ce88
|
|
BLAKE2b-256 checksum How to use checksums |
fcfa253486564b4d2e1d9be6ed799d11b988ad2a54da7c6165832a32d19b1109
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 4, 2026.
Transparency logRelease files / dfukit-2.0.0-cp311-cp311-macosx_11_0_arm64.whl
| Download URL | dfukit-2.0.0-cp311-cp311-macosx_11_0_arm64.whl |
|---|---|
| Size | 79.6 kB |
| Tags | CPython 3.11 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
4bd4e9d939060541e973c19ce4c6740f27181565f2d5c1cd046b1cdfb5dfcf56
|
|
BLAKE2b-256 checksum How to use checksums |
fac20056c667bef63a555490db50691578b980a12b9697a9f4bf04a4a086f2ca
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 4, 2026.
Transparency logRelease files / dfukit-2.0.0-cp311-cp311-macosx_10_14_x86_64.whl
| Download URL | dfukit-2.0.0-cp311-cp311-macosx_10_14_x86_64.whl |
|---|---|
| Size | 83.8 kB |
| Tags | CPython 3.11 macOS 10.14+ x86-64 |
|
SHA-256 checksum How to use checksums |
57068d14ebcb6b50b5d4a98ddaf4086ef166df0f64aee3fb18eaafc0b708a100
|
|
BLAKE2b-256 checksum How to use checksums |
98c9b4e8708ebba7fd73edda81f5416eaf92857105742315db52d272d891fa0a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 4, 2026.
Transparency logRelease files / dfukit-2.0.0-cp310-cp310-win_amd64.whl
| Download URL | dfukit-2.0.0-cp310-cp310-win_amd64.whl |
|---|---|
| Size | 99.0 kB |
| Tags | CPython 3.10 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
b4962fb094a67a98716baf23eae867e8f1e1a6f71926e005f01f1d4bce45d7cf
|
|
BLAKE2b-256 checksum How to use checksums |
80e2257e3c102367f6723ab50ddc6a74a69e9799c25f2dbee5305e4d19664081
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 4, 2026.
Transparency logRelease files / dfukit-2.0.0-cp310-cp310-win32.whl
| Download URL | dfukit-2.0.0-cp310-cp310-win32.whl |
|---|---|
| Size | 90.9 kB |
| Tags | CPython 3.10 Windows x86-32 |
|
SHA-256 checksum How to use checksums |
f6772ee19df55f748bfe869ec1d3013b0175860320a3e6b9d44c6b65a97d43fb
|
|
BLAKE2b-256 checksum How to use checksums |
a6e4e3a16bdd6a45d2b29c7fd40060c8ef8bd83f2a4f12d16067f531fb61fd55
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 4, 2026.
Transparency logRelease files / dfukit-2.0.0-cp310-cp310-musllinux_1_2_x86_64.whl
| Download URL | dfukit-2.0.0-cp310-cp310-musllinux_1_2_x86_64.whl |
|---|---|
| Size | 563.1 kB |
| Tags | CPython 3.10 Linux musl 1.2+ x86-64 |
|
SHA-256 checksum How to use checksums |
8f2f8e6524fbcc0b8467876affb21e1a716ae72fedb7e5ea3cf12b501fa35e62
|
|
BLAKE2b-256 checksum How to use checksums |
bd20f69d17bf48ea9623a5fc806c9a604529c98bda435a66b3d34141ab5a4971
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 4, 2026.
Transparency logRelease files / dfukit-2.0.0-cp310-cp310-musllinux_1_2_i686.whl
| Download URL | dfukit-2.0.0-cp310-cp310-musllinux_1_2_i686.whl |
|---|---|
| Size | 612.4 kB |
| Tags | CPython 3.10 Linux musl 1.2+ x86-32 |
|
SHA-256 checksum How to use checksums |
2adc3055137d2980db6f7ea56f10a6d68aa2fb303bd05847ee6386e246796ef8
|
|
BLAKE2b-256 checksum How to use checksums |
08cdd2819b39c7de82aad8d7cc5b76df13b1167af9479a1a5d50245b5bec5907
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 4, 2026.
Transparency logRelease files / dfukit-2.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | dfukit-2.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 114.9 kB |
| Tags | CPython 3.10 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
61af57df2e50f0c9fdac7d20527a040e4d337722369fe0ddc0b9f52f2fabd3ad
|
|
BLAKE2b-256 checksum How to use checksums |
f8170f8804039b88a5a7841fa01b2fef893a1130647c850dbfabc6327b202852
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 4, 2026.
Transparency logRelease files / dfukit-2.0.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl
| Download URL | dfukit-2.0.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl |
|---|---|
| Size | 122.2 kB |
| Tags | CPython 3.10 Linux glibc 2.17+ x86-32 |
|
SHA-256 checksum How to use checksums |
f272ad679cf211216ac7b028d3df134f8d2647314bd7a28be4f9516a86544247
|
|
BLAKE2b-256 checksum How to use checksums |
ff323c12717262a11063dc6636a1fd858fb0f53911c5a0d399738c0946c09009
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 4, 2026.
Transparency logRelease files / dfukit-2.0.0-cp310-cp310-macosx_11_0_arm64.whl
| Download URL | dfukit-2.0.0-cp310-cp310-macosx_11_0_arm64.whl |
|---|---|
| Size | 79.2 kB |
| Tags | CPython 3.10 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
7ee9f44233a801d61514125cfead8e6c6a70c17c8e9ca7e6b17537e0862b4f3a
|
|
BLAKE2b-256 checksum How to use checksums |
746cf34372e89860193915959d5c9fa0670f90fc6eba859aacba88ac6536cb3e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 4, 2026.
Transparency logRelease files / dfukit-2.0.0-cp310-cp310-macosx_10_14_x86_64.whl
| Download URL | dfukit-2.0.0-cp310-cp310-macosx_10_14_x86_64.whl |
|---|---|
| Size | 83.2 kB |
| Tags | CPython 3.10 macOS 10.14+ x86-64 |
|
SHA-256 checksum How to use checksums |
cf7aeb65bd2f78064968e471457217b796e9eb120d6b8abe8cca9fbe95128819
|
|
BLAKE2b-256 checksum How to use checksums |
87555dd0f5d3715613fb41b4a2f6a2ab2dbe34b7ae6cc5c62df4662619c01532
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 4, 2026.
Transparency logSecurity for dfukit 2.0.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 25 files in this release have been uploaded with provenance metadata.
Attestation for dfukit-2.0.0.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 4, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.