Skip to main content

hgraph

A functional reactive programming engine with a Python front-end.

This provides a DSL and runtime to support the computation of results over time, featuring a graph based directed acyclic dependency graph and the concept of time-series properties. The language is function-based, and promotes composition to extend behaviour.

Here is a simple example:

from hgraph import graph, evaluate_graph, GraphConfiguration, const, debug_print

@graph
def main():
    a = const(1)
    c = a + 2
    debug_print("a + 2", c)

evaluate_graph(main, GraphConfiguration())

Results in:

[1970-01-01 00:00:00.000385][1970-01-01 00:00:00.000001] a + 2: 3

See this for more information.

Development

The project is currently configured to make use of uv for dependency management. Take a look at the website to see how best to install the tool.

Here are some useful commands:

First, create a virtual environment in the project directory:

uv venv

Then use the following command to install the project and its dependencies:

# Install the project with all dependencies
uv pip install -e .

# Install with optional dependencies
uv pip install -e ".[docs,web,notebook]"

# Install with all optional dependencies
uv pip install -e ".[docs,web,notebook,test]"

PyCharm can make use of the virtual environment created by uv to setup the project.

Run Tests

# No Coverage
python -m pytest
# Generate Coverage Report
python -m pytest --cov=hgraph --cov-report=xml

Indexing with Context7 MCP

This repository includes a baseline configuration for Context7 MCP to improve code search and retrieval quality.

  • See docs/context7_indexing.md for guidance.
  • The root-level context7.yaml config sets sensible include/exclude rules, priorities, and summarization hints.

Packaging, CI, and Releases

This project uses scikit-build-core and cibuildwheel to build and publish cross-platform wheels, with uv as the package/venv manager.

  • Local build (PEP 517):

    # Build a wheel into dist/
    uv build -v
    # Optionally build sdist too
    uv build -v --sdist
    
  • Optional Conan (developer builds only):

    # Conan is not required for packaging but may be used in local builds
    uv tool install conan
    # Example of enabling Conan provider for a local build
    CMAKE_ARGS="-DCMAKE_PROJECT_TOP_LEVEL_INCLUDES=conan_provider.cmake" uv build -v
    
  • macOS notes:

    • Wheels target Apple Silicon (arm64) and require a macOS deployment target high enough for libc++ floating-point to_chars used by std::format.
    • The build system enforces MACOSX_DEPLOYMENT_TARGET=15.0 (arm64) during Release Wheels and sets a default in CMake if unset.
    • You can override locally via:
      CMAKE_ARGS="-DCMAKE_OSX_DEPLOYMENT_TARGET=15.0 -DCMAKE_OSX_ARCHITECTURES=arm64" uv build -v
      
  • Windows notes:

    • Build uses MSVC (Visual Studio 2022, x64). No MinGW.
    • If stack traces via backward-cpp are enabled, Windows links Dbghelp and Imagehlp automatically.
  • Linux notes:

    • Release wheels are built inside manylinux containers; optional backward-cpp integrations are disabled there for portability.

CI summary

  • .github/workflows/ci.yml builds wheels on Linux/macOS/Windows for smoke validation, runs tests on Linux only (fast path), and repairs Linux wheels with auditwheel.
  • .github/workflows/release-wheels.yml builds publish-grade wheels with cibuildwheel (Linux manylinux, macOS arm64, Windows AMD64), builds an sdist, validates with twine, and publishes to PyPI via Trusted Publishing.

Releasing (tag-driven)

Releases are automated via GitHub Actions with PyPI Trusted Publishing.

Prerequisites:

  • Enable Trusted Publishing for this GitHub repository in the PyPI project settings (Project → Settings → Trusted Publishers). No API token is needed once OIDC is configured.
  • Ensure pyproject.toml [project].version matches the tag you plan to push (e.g., 0.4.112).

Steps:

# Update version in pyproject.toml to match your release
# Then tag and push the tag to trigger the release workflow

git tag -a v_0.4.112 -m "release 0.4.112"
git push origin v_0.4.112

The workflow will:

  • Build wheels for Linux (manylinux), macOS (arm64, macOS 15.0 target), and Windows (AMD64, MSVC)
  • Build an sdist
  • Validate with twine check
  • Publish all distributions to PyPI (skips existing files)

Artifacts are uploaded for inspection as part of the workflow run.

CLion configuration tips

  • Use the project venv Python for nanobind discovery:
    • CMake option: -DPython_EXECUTABLE=${PROJECT_ROOT}/.venv/bin/python
  • If you need Conan, use the preamble to ensure Python/nanobind are discovered first, then the Conan provider:
    • CMake option: -DCMAKE_PROJECT_TOP_LEVEL_INCLUDES=${PROJECT_ROOT}/conan_preamble.cmake;${PROJECT_ROOT}/conan_provider.cmake
  • Select the _hgraph target to build the extension.

Troubleshooting

  • Nanobind not found / Python ordering in CMake:
    • Pass -DPython_EXECUTABLE=... (or -DPython3_EXECUTABLE=...) and, if using Conan, use the conan_preamble.cmake before conan_provider.cmake.
  • I also find it helpful to perform an uv sync with at least --all-groups before setting up the cmake.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

hgraph-0.5.31.tar.gz (5.5 MB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

hgraph-0.5.31-cp312-abi3-win_amd64.whl (1.6 MB view details)

Uploaded CPython 3.12+Windows x86-64

hgraph-0.5.31-cp312-abi3-musllinux_1_2_x86_64.whl (2.2 MB view details)

Uploaded CPython 3.12+musllinux: musl 1.2+ x86-64

hgraph-0.5.31-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (1.8 MB view details)

Uploaded CPython 3.12+manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

hgraph-0.5.31-cp312-abi3-macosx_15_0_arm64.whl (1.5 MB view details)

Uploaded CPython 3.12+macOS 15.0+ ARM64

File details

Details for the file hgraph-0.5.31.tar.gz.

File metadata

  • Download URL: hgraph-0.5.31.tar.gz
  • Upload date:
  • Size: 5.5 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for hgraph-0.5.31.tar.gz
Algorithm Hash digest
SHA256 ca53df45fb721a66469260d5d31089e42d55f912416f64219d844964ab4b4c6b
MD5 9a5ab64fd206184e40054af872168d59
BLAKE2b-256 30ab2b349af3c23ac28a155cc501954ac984ca0fe340a35d3dd5e0edd178e852

See more details on using hashes here.

Provenance

The following attestation bundles were made for hgraph-0.5.31.tar.gz:

Publisher: release-wheels.yml on hhenson/hgraph

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file hgraph-0.5.31-cp312-abi3-win_amd64.whl.

File metadata

  • Download URL: hgraph-0.5.31-cp312-abi3-win_amd64.whl
  • Upload date:
  • Size: 1.6 MB
  • Tags: CPython 3.12+, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for hgraph-0.5.31-cp312-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 198deb9dbf1e651896784f8b739f5f48a0820028a669a67afba93d2c63378673
MD5 6e7be4b02398b731c0fa554ca30af887
BLAKE2b-256 e6401473198ce93a697c68746c46a7d7e80dd8348f9c588a626a4f4090f4c2bc

See more details on using hashes here.

Provenance

The following attestation bundles were made for hgraph-0.5.31-cp312-abi3-win_amd64.whl:

Publisher: release-wheels.yml on hhenson/hgraph

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file hgraph-0.5.31-cp312-abi3-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for hgraph-0.5.31-cp312-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 918eaddd3ec4d227dd43c2602dccc44c75287b12821cc76d1b226910ac6f0b74
MD5 cdfb1ac26d6dd8f3fcaf6b7561321458
BLAKE2b-256 1e4e679eb2af9f86af3dda48d63c77267102071a40e67e0dbd0ea4659eb73ea1

See more details on using hashes here.

Provenance

The following attestation bundles were made for hgraph-0.5.31-cp312-abi3-musllinux_1_2_x86_64.whl:

Publisher: release-wheels.yml on hhenson/hgraph

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file hgraph-0.5.31-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for hgraph-0.5.31-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 ab7c1808ca2fcaf36764b497c42776472fa3d3d79e89a34ae164e47af0f81ff6
MD5 5d3df98a0d9b961f37c8bbc057861fe3
BLAKE2b-256 74c73908693e76ef4eb2b13fe03318d5b5d5f16bd9bf96db707ab8a66211f3f4

See more details on using hashes here.

Provenance

The following attestation bundles were made for hgraph-0.5.31-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: release-wheels.yml on hhenson/hgraph

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file hgraph-0.5.31-cp312-abi3-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for hgraph-0.5.31-cp312-abi3-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 97d19eeb7e96cb54a439c1f1f245d3400588be1cbf97c5b91dd9a5d7cb294a6e
MD5 a18ba3b167bd7e781add96d8243a917e
BLAKE2b-256 8f06a67886ec1d8cd343b7278efc58de7cd6fde591d19246f710a01139563894

See more details on using hashes here.

Provenance

The following attestation bundles were made for hgraph-0.5.31-cp312-abi3-macosx_15_0_arm64.whl:

Publisher: release-wheels.yml on hhenson/hgraph

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

0.8.22

4 files

0.8.21

4 files

0.8.20

4 files

0.8.19

4 files

0.8.18

4 files

0.8.17

4 files

0.8.16

4 files

0.8.15

4 files

0.8.14

4 files

0.8.13

4 files

0.8.12

4 files

0.8.11

4 files

0.8.10

4 files

0.8.9

4 files

0.8.8

4 files

0.8.7

4 files

0.8.6

4 files

0.8.5

4 files

0.8.4

4 files

0.8.3

4 files

0.8.2

4 files

0.8.1

4 files

0.8.0

4 files

0.5.42

5 files

0.5.41

5 files

0.5.40

5 files

0.5.39

5 files

0.5.38

5 files

0.5.36

5 files

0.5.35

5 files

0.5.34

5 files

0.5.33

5 files

0.5.32

5 files

This release

0.5.31 This release

5 files

0.5.30

5 files

0.5.29

5 files

0.5.28

5 files

0.5.27

5 files

0.5.26

5 files

0.5.25

5 files

0.5.24

5 files

0.5.23

5 files

0.5.22

5 files

0.5.21

5 files

0.5.20

5 files

0.5.19

5 files

0.5.18

5 files

0.5.17

5 files

0.5.16

5 files

0.5.15

5 files

0.5.14

5 files

0.5.13

5 files

0.5.12

5 files

0.5.11

5 files

0.5.10

5 files

0.5.9

5 files

0.5.8

5 files

0.5.7

5 files

0.5.6

5 files

0.5.5

5 files

0.5.4

5 files

0.5.3

5 files

0.5.2

5 files

0.5.1

5 files

0.5.0

5 files

0.4.102

6 files

0.4.101

2 files

0.4.100

2 files

0.4.99

2 files

0.4.98

2 files

0.4.97

2 files

0.4.96

2 files

0.4.95

2 files

0.4.94

2 files

0.4.93

2 files

0.4.92

2 files

0.4.91

2 files

0.4.90

2 files

0.4.89

2 files

0.4.88

2 files

0.4.87

2 files

0.4.86

2 files

0.4.85

2 files

0.4.84

2 files

0.4.83

2 files

0.4.82

2 files

0.4.81

2 files

0.4.80

2 files

0.4.79

2 files

0.4.78

2 files

0.4.77

2 files

0.4.76

2 files

0.4.75

2 files

0.4.74

2 files

0.4.73

2 files

0.4.72

2 files

0.4.71

2 files

0.4.70

2 files

0.4.69

2 files

0.4.68

2 files

0.4.67

2 files

0.4.66

2 files

0.4.65

2 files

0.4.64

2 files

0.4.63

2 files

0.4.62

2 files

0.4.61

2 files

0.4.60

2 files

0.4.59

2 files

0.4.58

2 files

0.4.57

2 files

0.4.56

2 files

0.4.55

2 files

0.4.54

2 files

0.4.53

2 files

0.4.52

2 files

0.4.51

2 files

0.4.50

2 files

0.4.49

2 files

0.4.48

2 files

0.4.47

2 files

0.4.46

2 files

0.4.45

2 files

0.4.44

2 files

0.4.43

2 files

0.4.42

2 files

0.4.41

2 files

0.4.40

2 files

0.4.39

2 files

0.4.38

2 files

0.4.37

2 files

0.4.36

2 files

0.4.35

2 files

0.4.34

2 files

0.4.32

2 files

0.4.31

2 files

0.4.30

2 files

0.4.29

2 files

0.4.28

2 files

0.4.27

2 files

0.4.26

2 files

0.4.25

2 files

0.4.24

2 files

0.4.23

2 files

0.4.22

2 files

0.4.21

2 files

0.4.20

2 files

0.4.19

2 files

0.4.18

2 files

0.4.17

2 files

0.4.16

2 files

0.4.15

2 files

0.4.14

2 files

0.4.13

2 files

0.4.12

2 files

0.4.11

2 files

0.4.10

2 files

0.4.9

2 files

0.4.8

2 files

0.4.7

2 files

0.4.6

2 files

0.4.5

2 files

0.4.4

2 files

0.4.3

2 files

0.4.2

2 files

0.4.1

2 files

0.4.0

2 files

0.3.60

2 files

0.3.59

2 files

0.3.58

2 files

0.3.57

2 files

0.3.56

2 files

0.3.55

2 files

0.3.54

2 files

0.3.53

2 files

0.3.52

2 files

0.3.51

2 files

0.3.50

2 files

0.3.49

2 files

0.3.48

2 files

0.3.47

2 files

0.3.46

2 files

0.3.45

2 files

0.3.44

2 files

0.3.43

2 files

0.3.42

2 files

0.3.41

2 files

0.3.40

2 files

0.3.38

2 files

0.3.37

2 files

0.3.35

2 files

0.3.34

2 files

0.3.33

2 files

0.3.32

2 files

0.3.31

2 files

0.3.30

2 files

0.3.28

2 files

0.3.27

2 files

0.3.26

2 files

0.3.25

2 files

0.3.24

2 files

0.3.23

2 files

0.3.21

2 files

0.3.20

2 files

0.3.19

2 files

0.3.18

2 files

0.3.17

2 files

0.3.16

2 files

0.3.15

2 files

0.3.14

2 files

0.3.13

2 files

0.3.12

2 files

0.3.11

2 files

0.3.10

2 files

0.3.9

2 files

0.3.8

2 files

0.3.7

2 files

0.3.6

2 files

0.3.5

2 files

0.3.4

2 files

0.3.3

2 files

0.3.2

2 files

0.3.1

2 files

0.3.0

2 files

0.2.54

2 files

0.2.53

2 files

0.2.52

2 files

0.2.51

2 files

0.2.50

2 files

0.2.49

2 files

0.2.48

2 files

0.2.47

2 files

0.2.46

2 files

0.2.45

2 files

0.2.44

2 files

0.2.43

2 files

0.2.42

2 files

0.2.41

2 files

0.2.40

2 files

0.2.39

2 files

0.2.38

2 files

0.2.37

2 files

0.2.36

2 files

0.2.34

2 files

0.2.33

2 files

0.2.32

2 files

0.2.31

2 files

0.2.30

2 files

0.2.29

2 files

0.2.28

2 files

0.2.27

2 files

0.2.26

2 files

0.2.25

2 files

0.2.24

2 files

0.2.23

2 files

0.2.22

2 files

0.2.21

2 files

0.2.20

2 files

0.2.19

2 files

0.2.18

2 files

0.2.17

2 files

0.2.16

2 files

0.2.15

2 files

0.2.14

2 files

0.2.13

2 files

0.2.12

2 files

0.2.11

2 files

0.2.10

2 files

0.2.9

2 files

0.2.8

2 files

0.2.7

2 files

0.2.6

2 files

0.2.5

1 file

0.2.4

2 files

0.2.3

2 files

0.2.2

2 files

0.2.1

2 files

0.2.0

2 files

0.1.19

2 files

0.1.18

2 files

0.1.17

2 files

0.1.16

2 files

0.1.15

2 files

0.1.14

2 files

0.1.13

2 files

0.1.12

2 files

0.1.11

2 files

0.1.10

2 files

0.1.9

2 files

0.1.8

2 files

0.1.7

2 files

0.1.6

2 files

0.1.5

2 files

0.1.4

2 files

0.1.3

2 files

0.1.2

2 files

0.1.1

2 files

0.1.0

2 files

0.0.11

2 files

0.0.10

2 files

0.0.9

2 files

0.0.8

2 files

0.0.7

2 files

0.0.6

2 files

0.0.5

2 files

0.0.4

2 files

0.0.3

2 files

0.0.2

2 files

0.0.1

2 files

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