juniper-canopy
A real-time dashboard to watch and steer Cascade-Correlation training as it happens.
juniper-canopy is a Dash + FastAPI dashboard that renders Juniper training dynamics live: it pulls
metrics and network topology from juniper-cascor over
REST and WebSocket and visualises loss, accuracy, and unit recruitment as the network grows. It draws
dataset context from juniper-data and exposes a WebSocket
control surface to pause, resume, and step a run from the browser. A demo mode runs the whole UI
against simulated data with no backend.
Part of the Juniper platform. juniper-canopy is the real-time monitoring dashboard of Juniper — a multi-package ML research platform built around constructive (Cascade-Correlation) and recurrent neural networks. It reads from juniper-cascor and juniper-data over HTTP.
Install
pip install juniper-canopy
Run
Demo mode — no backend required, simulated training:
./demo # then open http://localhost:8050
Service mode — against live juniper-cascor + juniper-data instances:
export JUNIPER_CANOPY_CASCOR_SERVICE_URL=http://<cascor-host>:8200
export JUNIPER_DATA_URL=http://<data-host>:8100
python src/main.py # dashboard on http://localhost:8050
API docs are served at /docs (Swagger) and /redoc.
Configuration
Settings load from the JUNIPER_CANOPY_ environment namespace (src/settings.py):
| Variable | Default | Purpose |
|---|---|---|
JUNIPER_CANOPY_CASCOR_SERVICE_URL |
— | URL of the juniper-cascor service (required for service mode). |
JUNIPER_DATA_URL |
http://localhost:8100 |
URL of the juniper-data service. |
JUNIPER_CANOPY_DEMO_MODE |
false |
Set 1 to run the UI against simulated data (no backend). |
JUNIPER_CANOPY_SERVER__HOST / JUNIPER_CANOPY_SERVER__PORT |
127.0.0.1 / 8050 |
Bind address / port. A non-loopback host requires a perimeter attestation (JUNIPER_CANOPY_LOOPBACK_PUBLISH_ATTESTED or JUNIPER_CANOPY_AUTH_PROXY_ATTESTED); otherwise startup fail-closes (SEC-F22). |
JUNIPER_DATA_API_KEY |
— | API key for juniper-data when its auth is enabled. |
JUNIPER_CANOPY_LOG_LEVEL |
INFO |
Logging verbosity. |
Docker
docker build -t juniper-canopy:latest .
docker run --rm -p 8050:8050 juniper-canopy:latest # demo mode (image default)
docker run --rm -p 8050:8050 \
-e JUNIPER_CANOPY_DEMO_MODE=0 \
-e JUNIPER_CANOPY_CASCOR_SERVICE_URL=http://host.docker.internal:8200 \
-e JUNIPER_DATA_URL=http://host.docker.internal:8100 \
juniper-canopy:latest # service mode
For the orchestrated full stack, see juniper-deploy.
Status
Beta on PyPI. The current version is shown by the badge above; see CHANGELOG.md.
Supports Python 3.11–3.14.
Documentation
docs/QUICK_START.md— five-minute startup guidedocs/USER_MANUAL.md— comprehensive usage guidedocs/ENVIRONMENT_SETUP.md— environment configurationdocs/DOCUMENTATION_OVERVIEW.md— documentation index
License
MIT — see LICENSE.
Metadata
Release files for juniper-canopy 0.8.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 | |
|---|---|---|---|
| juniper_canopy-0.8.0.tar.gz | 375.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| juniper_canopy-0.8.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 774.2 kB
Release files / juniper_canopy-0.8.0.tar.gz
| Download URL | juniper_canopy-0.8.0.tar.gz |
|---|---|
| Size | 375.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
d1d52e8c07f8c896284c66981e781c7befcc2fae0b2b0b25577a7db03dd15bea
|
|
BLAKE2b-256 checksum How to use checksums |
402b843e40394cfab96caa40a657828a2dc4d5395d68ff47fa5a1fb8322ad4dd
|
| 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 Sep 13, 2026.
Transparency logRelease files / juniper_canopy-0.8.0-py3-none-any.whl
| Download URL | juniper_canopy-0.8.0-py3-none-any.whl |
|---|---|
| Size | 399.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
805e9576f196e415865a068bceea8b6128cd44e6f26a0ad90d6257c32bd9e63a
|
|
BLAKE2b-256 checksum How to use checksums |
38e9c15b316358c109ed4ce275f906799fe7871786c8ca3b84ef10a3d59d6a8c
|
| 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 Sep 13, 2026.
Transparency log