Skip to main content

KohakuNodeIR

A text IR for node graphs: what an editor draws, a person reads, and a machine runs, as one program.

Python 3.10+ License: Apache-2.0 PyPI version GitHub stars

Specification  ·  Architecture  ·  Examples  ·  Discord


Is this for you?

You probably want KIR if you build node-based tools (an image pipeline, an agent workflow, a captioning graph) and want the graph to be a real program: diffable text, loops and branches as explicit control flow, typed nodes from signature files, a reference interpreter that defines the result, and an executor that is free to run whatever the wires allow in parallel.

You probably don't if a plain DAG of tasks covers everything you need (a workflow scheduler already does that well), or you want a general-purpose scripting language. KIR has no expressions: every computation is a node, and nodes are written in your host language.

What KIR is

KIR describes one job as a node graph. Nodes are joined by two kinds of wire: control wires ("then", top and bottom ports) and data wires (values, side ports). The text is that graph written line by line:

(inputs)node(outputs)          a node; data wires are the names
label:                         a namespace, entered only by a builtin
(cond)branch(`yes`, `no`)      control flow is explicit: branch, switch, jump, parallel, each
@dataflow:                     a block ordered by data alone
@def (x: int)double(y: int):   a subgraph, called like any node

A complete program (examples/tour/01_each.kir):

image = "photo"
boxes = [1, 2, 3, 4]
nodes = []
(boxes)each(box, i, `body`)
body:
    (box)is_new(fresh)
    (fresh)branch(`new_box`, `known_box`)
    new_box:
        (image, box)crop(c)
        (c)entity(node)
    known_box:
        node = None
    (nodes, node)append(nodes)
(nodes)summarize(summary)

A job means its sequential run. Statements run top to bottom, namespaces are entered only by builtins, and a name holds the value last written to it.

Parallel by default. Nodes talk only through their wires, so an executor may run any two nodes in either order or at once unless a data wire, the control path, or a node flag (mutates, ordered) orders them. Nothing in a program has to say what may run in parallel, the way a CPU issues several instructions of one thread at once while the program order still defines the result. parallel exists, but it states intent only.

One language, many forms. A program can be shown as a graph (for editors) or as text (for people and tools). Optimization passes rewrite it into simpler programs in the same language, down to a form an interpreter runs directly. Nothing in the text marks which form it is in; every form is KIR, and every form runs.

Where it fits

Graph is the program Text form Control flow Typed nodes Parallel by default
Node editor save files (e.g. ComfyUI workflow JSON) yes JSON only no per editor executor-specific
Visual scripting (Blueprints, Scratch) yes no yes yes no
Workflow DAGs (task schedulers) yes code or YAML limited no yes
KIR yes yes, line per node yes, as wires yes, signature files yes

KIR sits between editors and executors. An editor (the example in apps/kir-editor, a ComfyUI import, a Python builder, or a person with a text editor) produces KIR; a machine receives KIR plus engines that implement its nodes and never needs to know how the KIR was made.

Key features

  • Text and graph are the same program. kir graph / kir text convert both ways; canonical text survives the round trip byte for byte, and behaviour is always preserved.
  • Explicit control flow as wires. branch, switch, jump, parallel, each and @try / @except each have a node shape, so loops and branches are visible in the graph, not hidden in node code.
  • Optimization passes over one language. order_dataflow, inline, expand_each, version, group, strip_meta. Any prefix of the list is a valid program with the same behaviour; a tool picks the form it wants (kir lower --passes ..., compile_source(..., passes=[...])).
  • Signatures and @use. Node libraries export .kirsig.json files (ports, types, defaults, flags), so the checker, editors and the language server never import node code. @use "gbc" as g makes a library callable.
  • A static checker. Undefined reads on any path, wrong port counts, type mismatches, ambiguous names, bad labels, dataflow cycles: one code per rule (checks.md).
  • Program hashes. A semantic hash (ignores @meta and @hint) to key caches and reproducibility, and a full hash that also covers hints.
  • Hints that never change results. @hint lane="vlm" tells a scheduler something; deleting every hint leaves every result unchanged.
  • A reference interpreter with a call hook, so a machine can replay its recorded node results and check that it computed what the program means.
  • Editing support. A tree-sitter grammar, a VS Code extension, and a language server (kir-lsp: diagnostics, hover, completion, go-to-definition, formatting).
  • ComfyUI import / export. Both the UI workflow and the API prompt.
  • A Rust core (PyO3 module and WASM build) that reproduces the Python reference byte for byte on the shared golden corpus.

Quick start

Python 3.10 or newer. At run time kohakunode depends only on lark.

1. Install

pip install kohakunode                 # the Python reference, the Rust core (kohakunode._rs), `kir`
pip install "kohakunode[lsp]"          # plus the language server `kir-lsp`

From source (builds the Rust core, so a Rust toolchain is needed):

git clone https://github.com/KohakuBlueleaf/KohakuNodeIR.git
cd KohakuNodeIR
pip install -e ".[dev]"                # pytest, ruff, black, pygls, maturin

2. Write nodes

# my_nodes.py
from kohakunode import NodeLibrary

lib = NodeLibrary("my_nodes")

@lib.node(outputs=["sum"])
def add(a: int, b: int) -> int:
    return a + b

@lib.node(outputs=["graph"], mutates=["graph"])   # changes its input in place
def attach(graph: list, node: str) -> list:
    graph.append(node)
    return graph

@lib.node(ordered=True)                             # touches the outside world
def log(message: str) -> None:
    print(message)

A node may depend only on its inputs and affect the job only through its outputs; the two flags declare the exceptions once, in the registry (writing nodes).

3. Export signatures for tools that should not import your code

kir sig export my_nodes -o sigs/       # writes sigs/my_nodes.kirsig.json

Programs then say @use "my_nodes"; the tools find the file on --sig-path or KIR_SIG_PATH.

4. Use the toolchain

kir check prog.kir --lib my_nodes            # diagnostics with codes (checks.md)
kir fmt prog.kir -w                          # canonical text, in place
kir lower prog.kir --lib my_nodes            # after every pass
kir lower prog.kir --passes order_dataflow,inline --hash
kir graph prog.kir -o prog.kirgraph          # text -> graph view (--data variables: name -> node -> name)
kir text prog.kirgraph                       # graph view -> canonical text (--no-meta to drop ids/positions)
kir run prog.kir --lib my_nodes              # the reference run; prints final values
kir-lsp                                      # language server on stdio

--lib imports a Python module that defines a NodeLibrary; --sig-path adds directories of signature files.

Core mental model

Two kinds of wire

            control in
               |
      +--------v--------+
 a -->|                 |--> sum         data wires: values, by name
 b -->|   (a, b)add     |
      +--------+--------+
               |
            control out                  control wires: "then"

A call node has control ports on top and bottom and data ports on its sides. branch has one control output per label, merge joins control paths (a labelled merge is a loop entry), each has body / done outputs and a next input its body returns to. The full list of node kinds and ports is in graph.md.

Namespaces and continuation

(is_big)branch(`big`, `small`)
big:
    (x)shrink(x)
small:
    (x)grow(x)
(x)log()              # both paths continue here, after the namespace definitions

A namespace is skipped when reached in sequence and entered only by a builtin. When its body ends, execution continues after the namespace's definition; an each body returns to its each; parallel arms run one after another; @dataflow: and @try bodies continue after their statement. jump is the only way back, so a loop is a namespace entered by a jump from before it and re-entered by a jump from inside it.

The pass pipeline

 .kirgraph (editor) <-> canonical .kir text
                             |
                         check (E/W codes)
                             |
  order_dataflow -> inline -> expand_each -> version -> group -> strip_meta
       (every intermediate program is valid KIR and runs)
                             |
          +------------------+------------------+
          |                                     |
 reference interpreter                  machines (parallel,
 (sequential, defines the result)       as if sequential)

After every pass, each @dataflow: block is a straight run whose dependence graph a machine computes once: every write has its own version x__n, and a name written on several paths gets a home version x__0. Control statements between blocks choose what runs next; a job's state is its position plus its values (passes.md).

Toolchain

Piece Where What
Python reference src/kohakunode/ parser, writer, checker, passes, hashes, graph view, interpreter, CLI, ComfyUI, language server; the ground truth
Rust core rust/ the same parse, write, check, passes, hashes and graph conversion; shipped in the wheel as kohakunode._rs, plus a WASM build
tree-sitter grammar editors/tree-sitter-kir/ highlighting and structure for any tree-sitter editor
VS Code extension editors/vscode/ highlighting, snippets, folding, and a client for kir-lsp
Example node editor apps/kir-editor/ Vue 3 + Vue Flow + elkjs + CodeMirror: nodes, flowchart, sequence, blocks and text views of one program

Rust core

maturin develop --release                   # from the repo root: kohakunode with kohakunode._rs, into the active venv
python rust/tests/parity/parity.py          # the Rust core against the Python reference
cd rust && cargo test                       # unit tests + golden corpus, byte for byte

# WASM for browsers
rustup target add wasm32-unknown-unknown
cargo install wasm-bindgen-cli --version 0.2.129   # must match wasm-bindgen in Cargo.lock
cargo build --release --target wasm32-unknown-unknown --features wasm
wasm-bindgen --target web --out-dir pkg target/wasm32-unknown-unknown/release/kohakunode_rs.wasm

kohakunode._rs takes and returns text: format, parse_to_json, check, lower(passes=None), hashes, to_graph, from_graph, std_signatures; signatures come as .kirsig.json texts and, for check / lower / hashes / to_graph, through base= and sig_path= the way @use resolves them. The WASM build exposes the same functions to browsers (signature texts only). \N{...} string escapes use the default unicode-names feature; --no-default-features --features wasm builds a smaller WASM file without it.

VS Code

pip install -e ".[lsp]"
cd editors/vscode && npm install
ln -s "$(pwd)" ~/.vscode/extensions/kir-language

Settings kir.server.path, kir.server.args and kir.sigPath choose the server command and the signature directories (editors/vscode).

Example node editor

pip install fastapi uvicorn
cd apps/kir-editor/backend && python -m uvicorn kir_editor.app:app --port 48888
cd apps/kir-editor/frontend && npm install && npm run dev     # http://localhost:5173

Five views of one program: nodes (ComfyUI / Blender / UE style, with data as variables or wires and control as exec wires or frames), a classic ROBO Pro flowchart, an EV3-style sequence, Scratch blocks, and text; any two side by side. A palette built from signature files, an inspector, undo / redo, and Problems / Run / Lowered panels with per-pass toggles (apps/kir-editor).

Python API

from kohakunode import (
    parse, write,                  # text <-> AST; parse(write(p)) == p
    check,                         # diagnostics
    compile_source, compile_file,  # env + check + passes + hashes in one call
    Interpreter,                   # the sequential reference run, with a call hook
    NodeLibrary,                   # the node registry
)
from kohakunode.graph import to_graph, from_graph          # graph view
from kohakunode.comfyui import from_comfyui, to_api        # ComfyUI
from kohakunode.lower import PASSES, run_passes            # individual passes

compiled = compile_source(text, [lib], passes=["order_dataflow", "expand_each"])
compiled.program         # the checked program as written
compiled.lowered         # after the chosen passes (all of them when passes=None)
compiled.diagnostics     # warnings; errors raise KirCheckError
compiled.semantic_hash, compiled.full_hash

graph = to_graph(compiled.program, compiled.env)   # .kirgraph dict
text = write(from_graph(graph, with_meta=False))   # canonical text

def replay(name, inputs, call):                    # a machine's recorded results
    return recorded[(name, key(inputs))]

Interpreter(compiled.lowered, compiled.env, hook=replay).run()

Codebase map

src/kohakunode/
  syntax/      kir.lark grammar, parser, AST, canonical writer
  sig/         NodeLibrary, .kirsig.json files, @use resolution, types, kir.std
  flow/        control-flow graph, reaching definitions, dataflow ordering
  check/       every rule of docs/spec/checks.md
  lower/       the optimization passes and program hashes
  run/         the sequential reference interpreter
  graph/       text <-> graph view
  comfyui/     ComfyUI workflow / API prompt import and export
  lsp/         the language server (kir-lsp)
  cli/         the kir command
  compiler.py  compile_source / compile_program / compile_file
rust/          the Rust core, PyO3 and WASM bindings
editors/       tree-sitter-kir, vscode
apps/          kir-editor (example node editor)
examples/      basics (v1 programs), tour (one file per feature), gbc, comfyui
tests/         unit tests, the v1 reference corpus, the golden corpus
docs/          spec/, guides/, architecture.md, plan/

Documentation map

Specification

Overview · Language · Semantics · Signatures and @use · Graph view · Optimization passes · Checks

Guides

Writing nodes · Running KIR on a machine · Examples

Internals

Architecture · v2 work plan

Testing

pytest                                   # the Python reference: unit tests, golden corpus, v1 parity, generated programs
cd rust && cargo test                    # the Rust core against the same golden corpus
cd apps/kir-editor/frontend && npm run test:e2e   # one browser smoke run of the example editor

The golden corpus (tests/corpus/golden) holds the canonical text, the fully optimized text, the graph view and the hashes of every case; the Python reference and the Rust core must both reproduce it byte for byte. The v1 corpus (tests/corpus/v1) records what the v1 implementation printed for every v1 program; v2 reproduces it except for listed, deliberate differences.

Releases

kohakunode is one wheel: the Python reference plus the Rust core as the extension module kohakunode._rs. The version is rust/Cargo.toml's (pyproject.toml reads it dynamically). Publishing a GitHub release, or pushing a v* tag, runs release.yml: wheels for CPython 3.10–3.14 on Linux x86_64 / aarch64 (manylinux 2_28), Windows x64 and macOS arm64, Android wheels (arm64, x86_64; Python 3.13) and the sdist, all uploaded to PyPI and to the GitHub release.

Coming from v1

v2 keeps v1's model (sequential meaning, namespaces entered by builtins, jump loops, @dataflow:, @def) and every program v1 parsed still parses. New: @use, each, @try / @except err, typed @def parameters and outputs, @hint, node flags, the graph view with control ports, and optimization passes in place of fixed levels. The v1 implementation is in the git history (commit 1abda17).

License

Apache-2.0

Copyright 2026 Shih-Ying Yeh (KohakuBlueLeaf) and contributors.

Community

FAQ

Does a program have to say what runs in parallel? No. A job means its sequential run, and an executor may overlap anything the wires, the control path and node flags allow. parallel states intent only.

Why is there no expression syntax? Every computation is a node, so the graph and the text stay the same thing. kir.std provides the small pure nodes most programs need (add, less, len, append, to_str, ...).

What does an executor need besides the text? Implementations of the nodes the program calls. Signature files describe them to tools; executors map node names to implementations themselves.

How do I know a machine computed the right thing? Run sample jobs on the machine and on the reference interpreter with a call hook that replays the machine's node results, then compare final values (machines.md).

Which pass output should a machine run? Its choice. The fully optimized program is the simplest to schedule; a machine that schedules each itself can stop before expand_each. Every form means the same thing.

Metadata

Release files for kohakunode 0.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Built distributions (wheels)

Table of built distributions (wheels) for kohakunode 0.2.0
File
kohakunode-0.2.0-cp314-cp314-win_amd64.whl CPython 3.14 CPython 3.14 Windows x86-64 Details
kohakunode-0.2.0-cp314-cp314-manylinux_2_28_x86_64.whl CPython 3.14 CPython 3.14 Linux glibc 2.28+ x86-64 Details
kohakunode-0.2.0-cp314-cp314-manylinux_2_28_aarch64.whl CPython 3.14 CPython 3.14 Linux glibc 2.28+ ARM64 Details
kohakunode-0.2.0-cp314-cp314-macosx_11_0_arm64.whl CPython 3.14 CPython 3.14 macOS 11.0+ ARM64 Details
kohakunode-0.2.0-cp313-cp313-win_amd64.whl CPython 3.13 CPython 3.13 Windows x86-64 Details
kohakunode-0.2.0-cp313-cp313-manylinux_2_28_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.28+ x86-64 Details
kohakunode-0.2.0-cp313-cp313-manylinux_2_28_aarch64.whl CPython 3.13 CPython 3.13 Linux glibc 2.28+ ARM64 Details
kohakunode-0.2.0-cp313-cp313-macosx_11_0_arm64.whl CPython 3.13 CPython 3.13 macOS 11.0+ ARM64 Details
kohakunode-0.2.0-cp313-cp313-android_24_x86_64.whl CPython 3.13 CPython 3.13 Android API level 24+ x86-64 Details
kohakunode-0.2.0-cp313-cp313-android_24_arm64_v8a.whl CPython 3.13 CPython 3.13 Android API level 24+ ARM64 v8a Details
kohakunode-0.2.0-cp312-cp312-win_amd64.whl CPython 3.12 CPython 3.12 Windows x86-64 Details
kohakunode-0.2.0-cp312-cp312-manylinux_2_28_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.28+ x86-64 Details
kohakunode-0.2.0-cp312-cp312-manylinux_2_28_aarch64.whl CPython 3.12 CPython 3.12 Linux glibc 2.28+ ARM64 Details
kohakunode-0.2.0-cp312-cp312-macosx_11_0_arm64.whl CPython 3.12 CPython 3.12 macOS 11.0+ ARM64 Details
kohakunode-0.2.0-cp311-cp311-win_amd64.whl CPython 3.11 CPython 3.11 Windows x86-64 Details
kohakunode-0.2.0-cp311-cp311-manylinux_2_28_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.28+ x86-64 Details
kohakunode-0.2.0-cp311-cp311-manylinux_2_28_aarch64.whl CPython 3.11 CPython 3.11 Linux glibc 2.28+ ARM64 Details
kohakunode-0.2.0-cp311-cp311-macosx_11_0_arm64.whl CPython 3.11 CPython 3.11 macOS 11.0+ ARM64 Details
kohakunode-0.2.0-cp310-cp310-win_amd64.whl CPython 3.10 CPython 3.10 Windows x86-64 Details
kohakunode-0.2.0-cp310-cp310-manylinux_2_28_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.28+ x86-64 Details
kohakunode-0.2.0-cp310-cp310-manylinux_2_28_aarch64.whl CPython 3.10 CPython 3.10 Linux glibc 2.28+ ARM64 Details
kohakunode-0.2.0-cp310-cp310-macosx_11_0_arm64.whl CPython 3.10 CPython 3.10 macOS 11.0+ ARM64 Details

Total release size: 27.1 MB

Release files / kohakunode-0.2.0-cp314-cp314-win_amd64.whl

Download URL kohakunode-0.2.0-cp314-cp314-win_amd64.whl
Size 1.2 MB
Tags CPython 3.14 Windows x86-64
SHA-256 checksum
How to use checksums
d80a311a4eac109ce732dcf57939945b7fe2a87ca09f14e1bd19bb1178461753
BLAKE2b-256 checksum
How to use checksums
9a503f0677fb435de9e5c25217db88cb4b62ff59a6d57fd640215b5bddc3e423
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Oct 19, 2026.

Transparency log

Release files / kohakunode-0.2.0-cp314-cp314-manylinux_2_28_x86_64.whl

Download URL kohakunode-0.2.0-cp314-cp314-manylinux_2_28_x86_64.whl
Size 1.3 MB
Tags CPython 3.14 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
88d3884f401fc6c434e1b1cf9fa8f4bf23f5ef59afd828963d7a7554542bd0da
BLAKE2b-256 checksum
How to use checksums
6371220e96c89aa952fcbf677786dd71ec36f262ceee2431e18c40186879c2c9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Oct 19, 2026.

Transparency log

Release files / kohakunode-0.2.0-cp314-cp314-manylinux_2_28_aarch64.whl

Download URL kohakunode-0.2.0-cp314-cp314-manylinux_2_28_aarch64.whl
Size 1.2 MB
Tags CPython 3.14 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
fc707ff01ac195e8d4f32ab96063c5dbeb32484fe6efa4ce2dd8b2c6ecc7b7b9
BLAKE2b-256 checksum
How to use checksums
df01b782c6c452152201103fb2c475f4651fafb139068b71b363866f05038a15
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Oct 19, 2026.

Transparency log

Release files / kohakunode-0.2.0-cp314-cp314-macosx_11_0_arm64.whl

Download URL kohakunode-0.2.0-cp314-cp314-macosx_11_0_arm64.whl
Size 1.2 MB
Tags CPython 3.14 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
de72f68fcd38e3e2a72bdf30a13a138044296e76dc964c41008c79cfd0183ea7
BLAKE2b-256 checksum
How to use checksums
38508f07ecf3d7bb4c7349517ea2a9052398ffb37869c7f74b68231b1344df3b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Oct 19, 2026.

Transparency log

Release files / kohakunode-0.2.0-cp313-cp313-win_amd64.whl

Download URL kohakunode-0.2.0-cp313-cp313-win_amd64.whl
Size 1.2 MB
Tags CPython 3.13 Windows x86-64
SHA-256 checksum
How to use checksums
39193699e49dba7c6023de2a8293bed48838df468f773a4464af836526be8310
BLAKE2b-256 checksum
How to use checksums
1fc9d0e121f3c8fe5a7afcb31a3dac6e620ba75eefb871c63c035f633726fb53
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Oct 19, 2026.

Transparency log

Release files / kohakunode-0.2.0-cp313-cp313-manylinux_2_28_x86_64.whl

Download URL kohakunode-0.2.0-cp313-cp313-manylinux_2_28_x86_64.whl
Size 1.3 MB
Tags CPython 3.13 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
1636e0731b9dc7e8282a2aa0a56cefbf6e8f02fe1b18f7112fefff9d2989c8ed
BLAKE2b-256 checksum
How to use checksums
eb453b7b9885cf35ff096dd1619fe90de64737056718b92d2dfd8b4eebb91830
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Oct 19, 2026.

Transparency log

Release files / kohakunode-0.2.0-cp313-cp313-manylinux_2_28_aarch64.whl

Download URL kohakunode-0.2.0-cp313-cp313-manylinux_2_28_aarch64.whl
Size 1.2 MB
Tags CPython 3.13 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
7087568fa2ff83319f1b4e0360ccc54f5fdbe436065580357fab735db1cf781d
BLAKE2b-256 checksum
How to use checksums
cca76330082738ea4f71b1ce83ecf5721ae5cd9877b066c7c0a249ed200413bf
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Oct 19, 2026.

Transparency log

Release files / kohakunode-0.2.0-cp313-cp313-macosx_11_0_arm64.whl

Download URL kohakunode-0.2.0-cp313-cp313-macosx_11_0_arm64.whl
Size 1.2 MB
Tags CPython 3.13 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
a46de48bfe0e283fe76941f8b679b1be6312f97493d5e696c002c64edf75044c
BLAKE2b-256 checksum
How to use checksums
fdd7983871593dbe2977623b2c127e111592748cc04d747b9c9bcdc5f50bfb6b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Oct 19, 2026.

Transparency log

Release files / kohakunode-0.2.0-cp313-cp313-android_24_x86_64.whl

Download URL kohakunode-0.2.0-cp313-cp313-android_24_x86_64.whl
Size 1.4 MB
Tags Android API level 24+ x86-64 CPython 3.13
SHA-256 checksum
How to use checksums
75e9065b331c76a0e69c89de4deaf17bace668f469ee7e5fea128254be7e72c1
BLAKE2b-256 checksum
How to use checksums
14734c3e47503f3e57f2001c9403910d928d4bfdcb898b9d8c019246494ce171
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Oct 19, 2026.

Transparency log

Release files / kohakunode-0.2.0-cp313-cp313-android_24_arm64_v8a.whl

Download URL kohakunode-0.2.0-cp313-cp313-android_24_arm64_v8a.whl
Size 1.3 MB
Tags Android API level 24+ ARM64 v8a CPython 3.13
SHA-256 checksum
How to use checksums
b481bd0233b94d4eeec9c45b5252275ee369050143afdef152874dfed1370b26
BLAKE2b-256 checksum
How to use checksums
7c76f24aae9cda2da0ec09fdf8daffa77dfbb5b7781f1f9beb8b43917060c0a2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Oct 19, 2026.

Transparency log

Release files / kohakunode-0.2.0-cp312-cp312-win_amd64.whl

Download URL kohakunode-0.2.0-cp312-cp312-win_amd64.whl
Size 1.2 MB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
cb784693a75261243ea99dddf5a1892b0eeb1bc230e38e2845ef024196d0845e
BLAKE2b-256 checksum
How to use checksums
577cbc856de080c8b7adf02e991892286413c0663f2cc39494bbf9b4c0bef811
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Oct 19, 2026.

Transparency log

Release files / kohakunode-0.2.0-cp312-cp312-manylinux_2_28_x86_64.whl

Download URL kohakunode-0.2.0-cp312-cp312-manylinux_2_28_x86_64.whl
Size 1.3 MB
Tags CPython 3.12 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
142583bb30a301b21bd123728faa55fc5421d28d70519ce136ab45932c09861b
BLAKE2b-256 checksum
How to use checksums
d3091f023c3b08948b55ebbe5e3a3c525fafe30717f627d17289d59bfba6eff0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Oct 19, 2026.

Transparency log

Release files / kohakunode-0.2.0-cp312-cp312-manylinux_2_28_aarch64.whl

Download URL kohakunode-0.2.0-cp312-cp312-manylinux_2_28_aarch64.whl
Size 1.2 MB
Tags CPython 3.12 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
3ccee3c06cd25d5cc82791ca0011cb31113a4a3ca9e7cd3b61bb9ee2c8e1cfd7
BLAKE2b-256 checksum
How to use checksums
d0b818e4152746692c925bd84ae8e333551b54b27a8ff2bf1a6f5c03166365db
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Oct 19, 2026.

Transparency log

Release files / kohakunode-0.2.0-cp312-cp312-macosx_11_0_arm64.whl

Download URL kohakunode-0.2.0-cp312-cp312-macosx_11_0_arm64.whl
Size 1.2 MB
Tags CPython 3.12 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
a6d2db46203efff726d131ffc73e9a241343afaf024c0acafd29f517249cad0b
BLAKE2b-256 checksum
How to use checksums
504f7cca561503aae794bc1e45c6720f1d3b328ac3329b733b0d9e9ee1964309
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Oct 19, 2026.

Transparency log

Release files / kohakunode-0.2.0-cp311-cp311-win_amd64.whl

Download URL kohakunode-0.2.0-cp311-cp311-win_amd64.whl
Size 1.2 MB
Tags CPython 3.11 Windows x86-64
SHA-256 checksum
How to use checksums
caecf007131d91826cfc6f4f2f553363619a84f829a3a82b9b17dd7ecff281d7
BLAKE2b-256 checksum
How to use checksums
5a68d812f439ca2389fe3e7bac7f38dd067ec7f78b748dcc96b93e098307b3f8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Oct 19, 2026.

Transparency log

Release files / kohakunode-0.2.0-cp311-cp311-manylinux_2_28_x86_64.whl

Download URL kohakunode-0.2.0-cp311-cp311-manylinux_2_28_x86_64.whl
Size 1.3 MB
Tags CPython 3.11 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
8bd144f4bf5dba6b652a9ec874cb75fc9a4c7347e4e46aa91227a7a68d63e080
BLAKE2b-256 checksum
How to use checksums
561a463980cfda3b0be7baa561ec3c4578b98ee86b9c7c19e0c38bd2e6643704
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Oct 19, 2026.

Transparency log

Release files / kohakunode-0.2.0-cp311-cp311-manylinux_2_28_aarch64.whl

Download URL kohakunode-0.2.0-cp311-cp311-manylinux_2_28_aarch64.whl
Size 1.2 MB
Tags CPython 3.11 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
bd4f9e0c2ba14a92a5824bcb87de778f6fd036a2faa3f01adefd7dd22e24f037
BLAKE2b-256 checksum
How to use checksums
bd9a4ed339a47609af94154e3ebc55b66d2bb3d70216336b56b52ee8f6cfe5cd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Oct 19, 2026.

Transparency log

Release files / kohakunode-0.2.0-cp311-cp311-macosx_11_0_arm64.whl

Download URL kohakunode-0.2.0-cp311-cp311-macosx_11_0_arm64.whl
Size 1.2 MB
Tags CPython 3.11 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
3bd30d409517e3a23426c7863477bcd1ffd2abc78758c52b75d40313c66cc1e5
BLAKE2b-256 checksum
How to use checksums
7afecaa9e1addbd13b36eb338da6d1b79c8159d0e40c550fc3e8ce1d4cf2f5af
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Oct 19, 2026.

Transparency log

Release files / kohakunode-0.2.0-cp310-cp310-win_amd64.whl

Download URL kohakunode-0.2.0-cp310-cp310-win_amd64.whl
Size 1.2 MB
Tags CPython 3.10 Windows x86-64
SHA-256 checksum
How to use checksums
24bbe1c816ba45a484dc5de554ff38d55d78c26d3b8c4236389b41de8df0a361
BLAKE2b-256 checksum
How to use checksums
b8bd9c7c711ff4434f503c72f7e276b5b734746dfeb42aefd17659316fce77dd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Oct 19, 2026.

Transparency log

Release files / kohakunode-0.2.0-cp310-cp310-manylinux_2_28_x86_64.whl

Download URL kohakunode-0.2.0-cp310-cp310-manylinux_2_28_x86_64.whl
Size 1.3 MB
Tags CPython 3.10 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
abbafcda9ff8fc1e11aa7a8f61850371f7e2cb04291185bd423295c80498a2b4
BLAKE2b-256 checksum
How to use checksums
6e517d6f8c28036492b90caf7db779d9a3d9e73be6d9c3dafadc48bdec204aba
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Oct 19, 2026.

Transparency log

Release files / kohakunode-0.2.0-cp310-cp310-manylinux_2_28_aarch64.whl

Download URL kohakunode-0.2.0-cp310-cp310-manylinux_2_28_aarch64.whl
Size 1.2 MB
Tags CPython 3.10 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
0b742f491bd4e4b21cb61004583aadb8cb4d7fbcdd0e39be4c3fb67972f57a18
BLAKE2b-256 checksum
How to use checksums
8bedafe1e6d0238c9c0daa71dfe35ac05093f4d992f2a97aed90569dda2588b2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Oct 19, 2026.

Transparency log

Release files / kohakunode-0.2.0-cp310-cp310-macosx_11_0_arm64.whl

Download URL kohakunode-0.2.0-cp310-cp310-macosx_11_0_arm64.whl
Size 1.2 MB
Tags CPython 3.10 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
30a7a8c7b11f77d29944c18ce59bede907c2d2115471be85998cd3a8ed32ed8f
BLAKE2b-256 checksum
How to use checksums
f578180d1c31fbf96f715278051546ce8341cb544c09efe395731e31556c0921
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Oct 19, 2026.

Transparency log

Security for kohakunode 0.2.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 22 files in this release have been uploaded with provenance metadata.

Select from 22 files

Attestation for kohakunode-0.2.0-cp314-cp314-win_amd64.whl

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 Oct 19, 2026.

Transparency log

A 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.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page