1.7 KiB
1.7 KiB
Getting Started
Requirements
| Dependency | Version | Notes |
|---|---|---|
| CMake | ≥ 3.21 | |
| C++ compiler | GCC ≥ 11, Clang ≥ 13 | C++20 required |
| nanobind | ≥ 2.1 | auto-fetched; Python ≥ 3.8 |
| Catch2 | v3 | auto-fetched for tests |
| OpenCV | ≥ 4 | optional; only for examples 09/12/13 |
Build
cmake -B build # core + tests + C++ examples
cmake --build build --parallel
ctest --test-dir build # run all tests including example smoke tests
Enable Python bindings:
cmake -B build -DKPN_BUILD_PYTHON=ON
cmake --build build --parallel
Skip examples:
cmake -B build -DKPN_BUILD_EXAMPLES=OFF
Your first pipeline
Three functions — source, transform, sink — wired into a Network:
--8<-- "examples/01_hello_pipeline/main.cpp:basic_node_fns"
Create nodes, connect them, build and run:
--8<-- "examples/01_hello_pipeline/main.cpp:network_build"
That's it. Types are inferred from function signatures. The channel between src and dbl carries int; the channel between dbl and prn also carries int. A type mismatch is a compile error.
Named ports
For nodes with multiple inputs or outputs, name the ports for clarity:
--8<-- "examples/02_named_ports/main.cpp:named_port_creation"
Wire by name instead of index:
--8<-- "examples/02_named_ports/main.cpp:named_port_network"
Multi-output nodes
Return a std::tuple to fan out to multiple downstream nodes:
--8<-- "examples/03_multi_output/main.cpp:multi_output_fn"
Wire each tuple element to its own downstream node:
--8<-- "examples/03_multi_output/main.cpp:fanout_network"