Changelog#
v26.11.1 (11.03.2026)#
Deprecated#
Deprecate
SubscriberAsync.queue,SubscriberAsync.listen()andSubscriberAsync.stop(). UseSubscriberAsync.get()instead.
Features#
Add Parameter Monitoring and Throttling to the System Overview. See the docs for configuration instructions.
Add the
SubscriberAsync.get()method to retrieve new events without the need for a background task.Add an option to orchestration settings to attach extra config options for singleuser servers.
Fixes#
Set filebrowser theme to light and inject custom CSS for readability of SVGs with transparent backgrounds.
Documentation#
Add tutorial for parameter monitoring and throttling.
Full release notes#
feat(task-manager): parameter monitoring and throttling
feat: add extra config option to singleuser servers
feat: add a function to simulate sample heatup on the mock cryostat
feat(pubsub)!: add get method to async subsciber and deprecate queue
feat(orchestration): set filebrowser theme to light by default
refactor(dashboard): load dashboard pages from configuration instead of entry points
feat(orchestration): enable epel-release add pandoc to default environment
v26.11.0 (09.03.2026)#
Features#
Adds buttons to the Jupyterhub Launcher and Juice Dashboard to access the influxdb2 interface.
Fixes#
Refresh the dashboard page only when the dashboard process restarts to avoid user confusion.
Documentation#
Add tutorial for adding a custom dashboard page.
Updates the “Creating an extension” and “Extension development” guides.
Full release notes#
docs(extension): add tutorial for adding a dashboard page
docs(extension): update creating an extension and development environment
fix(dashboard): restart dashboard button will only reload when dashboard ready
feat(dashboard): add influxdb2 proxy and add entry to dashboard
v26.10.0 (04.03.2026)#
Features#
Add function and client method to interrupt a service (
interrupt_service).Add a button to the task manager dashboard to interrupt a service.
Add option to load configurations from cache for repeated loading (
Configurable.load(cache=True)).Add the
pyproject_toml_extraoption to environment configuration for adding extra content to the generatedpyproject.tomlof environments.Add the
extra_dockerfile_contentoption to environment configuration for adding extra content to the generatedContainerfileof environments.
Fixes#
Auto-scale temperature axis for mK temperatures in the system monitor dashboard.
Set container timezone to the system timezone. This ensures that timestamps in the dashboard and other places reflect the correct local time.
Documentation#
Add tutorial for installing a package in editable mode.
Full release notes#
feat(settings): add option to load config from cache
docs(basics): add tutorial for installing a package in editable mode
feat(environment): add pyproject_toml_extra option
feat: API and button to interrupt services
feat(system-monitor): auto-scale temperature axis for mK temperatures
fix: set container timezone to system timezone
feat(orchestration): allow arbitrary extra dockerfile content for environments
v26.9.0 (23.02.2026)#
Features#
Improves System Monitor Widget Performances and UX
Improve datatable widgets
Adds a tutorial on setting up Gitlab OAuth integration with Juice
Full release notes#
docs(admin): add tutorial for setting up gitlab oauth
feat(dashboard): use param and tabulator to improve datatable widgets
docs: update changelog posting instructions to use community.orangeqs.com instead of Mattermost
feat(dashboard): Use ECharts and Param to rewrite the Fridge Monitor
v26.8.0 (18.02.2026)#
Features#
Adds fridge automation entry on the homepage
Fixes#
Serve built-in pages using panel templates.
Full release notes#
feat(dashboard): add fridge automation entry for home page
refactor(dashboard): serve built-in pages using panel templates
v26.7.1 (11.02.2026)#
Features#
Add a new landing page for the dashboard showing all available pages and tools.
Fixes#
Rename “System monitor” to “Fridge monitor”
Restructure the navigation bar to reflect the new landing page structure.
Full release notes#
feat(dashboard): add landing page with apps
refactor(dashboard): rename system monitor tab to fridge monitor
v26.7.0 (10.02.2026)#
Features#
Add the
--no-parallel-buildoption for thejuice installcommand for better performance on hard-drives.Add a direct link to the file browser from the dashboard.
Fixes#
Fix unresponsive restart and rebuild buttons on the dashboard.
Optimize calls to
chownto speed upjuice install.
Full release notes#
feat(system-monitor): set ghs as first page and fix button text alignment
feat(dashboard): add file browser menu item
fix(dashboard): fix initialization signature of dashboard handlers
perf(installation): reduce number of chown calls
feat(installation): add option to build images sequentially
v26.6.0 (05.02.2026)#
Features#
Integrate VS Code in the Jupyterlab environment, available from the launcher.
Fixes#
Display all services in the filter by service dropdown in the task manager dashboard.
Use timezone-aware timestamps in the dashboard (for now still in UTC).
Update link to the documentation from the dashboard.
Add a warning to the docs about how
orchestration.tomlis loaded.
Full release notes#
feat: vs code integration into jupyterlab environment
fix(docs): update remaining links to new docs
docs(configuration): warning for orchestration loading paths
docs(orchestration): examples of jupyterhub secrets file
feat(dashboard): add panel core infrastructure
fix(task-manager): display all services in the filter by service dropdown
feat(dashboard): make dashboard aware of container timezone
test: no parallel workers in ci and add small client reconnect delay
v26.5.1 (28.01.2026)#
Features#
Add a table with the current tasks to the task manager dashboard.
Fixes#
Fix access to the filebrowser for deployments using OAuth.
Fix querying empty string values from the database due to a change in pandas 3.0.
Full release notes#
chore: update changelog for v26.5.1 release
docs(readme): add landscape logo and polish project urls
docs(index): reduce emphasis on under development warning
fix(task-manager): removed uninformative columns from task list
feat(dashboard): task display widget
fix(orchestration): filebrowser not visible when using oauth
fix(database): convert missing string values for pandas 3.0 compatibility
docs(migration): instruct to log in as root
v26.5.0 (26.01.2026)#
OrangeQS Juice is now an open-source project! This release marks the first open-source release of OrangeQS Juice. The closed-source repository has been archived and will no longer receive updates. All future development will take place in the open-source repository. To migrate from the closed-source to the open-source repository, please follow the migration guide.
Full release notes:#
chore: update link to migration guide
chore: update changelog and release instructions for v26.5.0 release
feat: installation instructions and migration guide for open-source version
docs(release): switch to calendar versioning
docs: update repository url to gitlab.com
ci: refactor for open-source repo
docs(contribute): add release instructions
v0.2.8 (19.01.2026)#
Minor release that adds a filebrowser to the JupyterLab environment. The filebrowser is accessible from the launcher tab in JupyterLab.
Full release notes#
feat(orchestration): added filebrowser to singleuser container
docs: include changelog
fix(packaging): pin virtualenv < 20.36.0 due to virtualenv-tools3 compatibility
v0.2.7 (19.12.2025)#
This release marks the restructuring and release of documentation for orangeqs-juice-core to the open-access site at https://docs.orangeqs.com/juice/core/.
Full release notes:#
chore: update changelog for release
ci: publish docs to docs.orangeqs.com
docs: restructure full documentation into tutorials, concepts and reference
v0.2.6 (16.12.2025)#
Minor release for documentation and bugfixes.
Full release notes:#
chore: update changelog for release
docs: task manager config schema
docs: introduction page
docs(database): guide for using the database
docs: differences with legacy juice
docs: first steps after installation
feat(system-monitor): add random noise to mock thermometers
fix(identifiers): order latest id by suffix instead of full identifier
fix(database): concatenate result if it contains multiple tables
v0.2.5 (08.12.2025)#
Minor release, adds some qol changes on exception handling and bugfixes on the container network. Also adds service restart and rebuild buttons to the task manager GUI.
Full release notes:#
fix(task-manager): use hostname instead of ip to allow reconnect after restart
feat(tasks): set websocket max message size from config option
feat(task-manager): service restart and rebuild GUI
fix(orchestration): remove port forwarding option from build settings
feat(ipython): log uncaught exceptions
v0.2.4 (01.12.2025)#
This release introduces the Task Manager GUI for monitoring services and includes bugfixes of the system monitoring stack. It also includes many improvements on environment handling, configuration and interfaces.
Full release notes:#
feat(task-manager): GUI and backend for monitoring service status
feat(environment): clean up images after environment build
fix(orchestration): do not rebuild environments on reboot
fix: hardcode telegraf url
feat(service-logs): allow visible message overflow on hover
fix(system-monitor): handle units correctly on heater dashboard widgets
feat(task-manager): configuration for full connection info of tasks and pubsub
feat(influxdb2): configuration for client connection url
fix(system-monitor): remove redundant filter and allow multiple warnings in one tick
refactor(dashboard): use JUPYTERHUB_SERVICE_PREFIX to determine dashboard url
fix(proxies): do not resolve hostname to ip
fix(jupyterhub): do not install proxy kernel for task-manager
docs(orchestration): add note on uppercase unit for memory limit
fix(orchestration): handle empty memory setting for singleuser container
feat(orchestration): configuration options for memory limit and group add of containers
feat(sytem-monitor): GHS Widget update format and add recovery/condensation buttons
feat(client): synchronous blocking execute task interface
v0.2.3 (20.11.2025)#
This release includes various bugfixes an UI/UX improvements. Some manual migration maybe required
Deprecations and migrations required:#
mock-system-monitor.tomlneed no longer be included in lab configs. If you have them on your development setups, please remove them, as it overrides the default config which is guaranteed to work with the default dashboard configuration.There is a slight change in how system monitor mock handles heater component_ids, specifically regarding the prefix “heater_”. You may need to manually add the prefix to your system monitor config to ensure your dashboard still works, depending on the backend you use.
Full release notes:#
chore: update changelog for release
feat(system-monitor): organize ghs button layout cleanly
fix(dashboard): navbar stretch on height
feat(environment): configuration option for system packages
feat(system-monitor)!: added selector to choose start date of graphs
perf(system-monitor): trigger publish messages on all state changes
refactor(system-monitor): configure defaults for MockSystemMonitorConfig and validate against dashboard config
fix(dashboard): notify user that we are restarting
fix(system-monitor): enable subscriber after temperature widget is initialized
v0.2.2 (19.11.2025)#
This release includes support for Gas Handling Systems via the GUI. It also includes assorted QOL improvements.
Full release notes:#
chore: update changelog for release
feat(orchestration): added logs for system rebuilding
feat(system-monitor): GHS dashboard
fix(dashboard): incorrect api url
feat(dashboard): restart dashboard button
feat(task_manager): Store tasks in database
v0.2.1 (14.11.2025)#
This release fixes a criticaL BREAKING issue with packaging. It requires a manual upgrade step for the system package from prior releases! Follow the steps here to migrate:
Remove the old version using
sudo dnf remove orangeqs-juice-coreRemove the
/opt/orangeqs/juicedirectory usingsudo rm -rf /opt/orangeqs/juiceInstall the new version as normal, e.g.
sudo dnf install $(juice-download-latest)
Full release notes:#
fix: mock compressor messaging errors
feat: read-only mode for system monitor dashboard
refactor: remove legacy task manager
feat(tasks): use class name in display name of ipython task
feat(dashboard): apply orangeqs styling to internal widgets
fix(packaging)!: mark parent directories part of rpm package and handle bytecode cache
v0.2.0 (14.11.2025)#
This release includes the following key features:
Dashboards and data structures for system monitoring frontend: This is a breaking change, make sure to update your
mock-system-monitor.tomlwithin your lab repos and configs to match the default provided by juice.The first release of the
orangeqs.juice.identifiersmodule which provides utilities for tracking experiment and cycle runs within the Juice frameworkAssorted bugfixes and documentation imrpovements
Full release notes:#
chore: update changelog for release
feat(system-monitor)!: compressor widget panel
docs: add backup and restore guide
feat(system-monitor)!: thermometry dashboard
feat(system-monitor): heater dashboard
fix(dashboard): allow all websocket origins and use bundled static resources
docs: remove redundant restart in install instructions
fix(messaging): handle special float values like nan
refactor(identifiers)!: consistent use of latest prefix for context-agnostic functions
feat(identifiers): standard interface for parsing identifiers
feat(system-monitor)!: data structures, tasks and mock pulse tubes compressors
perf(environment): compile bytecode on build to improve import time
feat(identifiers): api for managing multiple identifiers
feat(messaging): add synchronous blocking publisher and subscriber
docs: recommend SSDs for OS partition
docs: document logging config schema configurable
feat(docs): sphinx directives for configurables and config schema reference
chore: update changelog for release
v0.1.0 (29.10.2025)#
This is the initial development pre-release of the orangeqs-juice-core package. While the maintainers aim to keep the existing API stable, please note that breaking changes may occur at any time prior to the v1.0.0 release.
Full release notes:#
fix(dashboard): scrolling for content covered by navbar
fix(ci): disable versioned docs for stable release pipeline
fix(changelog): formatting
chore: add CHANGELOG.md
feat(environment): add host orchestrator and rebuild service client api
feat(jupyterhub): support gitlab authenticator and extra configuration options
refactor: spawn system monitoring service by default only for devcontainers
refactor: set default authenticator as pam and configure shared password for devcontainers
feat(orchestration): support different user ids and add default juice-data user
feat(environment): run uv sync on environment build
fix(jupyterhub): use singleuser env name instead of full env
feat: client API for restarting services
fix: add missing runtime dependency specifier
feat(environment)!: bind one environment to each service
feat(docs): directive for listing configuration schema
feat: singleuser dashboard restart API
refactor(dashboard): move widgets and pages into separate modules
fix(orchestration): service to create runtime data on system boot
docs: update note on user creation with man page link and explicit server restart
chore: apply apache license
feat(dashboard): refactor page collection from entry points
feat(ipython): support init module argument and async modules
chore(ci): update and pin ruff to v0.14.0
feat(service): add config option for specifying init args and kwargs
fix(ci): pin node v24 for pyright job
fix(dashboard): ensure no duplicate services and sort by name
fix(orchestration): escape environment variables for systemd units
fix: hardcode mesa libgl into containers
feat(task): add display names to tasks
feat(task): public client api for request and execute
feat(dashboard): service log pane
fix(dashboard): event listener for singleuser delayed spawn and improved error handling
feat(orchestration): add devices option to container
docs: improve clarity on installation
feat(dashboard): add service status widget to the overview page
fix: path to static resources for dashboard
fix: pin ipykernel <7
feat(task): route tasks through task manager
docs: minor updates to documentation for clarity on installation
feat: use container settings for singleuser container
fix: add py.typed marker to support typing
feat: add nano to default environment
chore(docs): added not to getting started to redirect for dev env
fix: navbar height and css cleanup
fix: broken docs link on README.md
feat: support loggers argument for display_dashboard_logs()
feat!: configurable mount points for overview page
fix(rpm): set rpm architecture and target distro
fix: remove all argument from telegraf command
feat(rpm): always run latest version of rpm download script
feat(packaging): download script for rpm packages
fix(packaging): use valid filename with dynamic version for bundled wheel
feat(task): handle task client disconnect and reconnect
fix(packaging): pin fpm to 1.16.0
ci: release rpm artifacts into generic package registry
feat(orchestration): support jupyterhubs pluggable authentication module
fix(dashboard): use consistent path for bokeh applications
feat: configure rpc interface for user containers supervisor
feat(task): add ipython task and handler
feat(task): run task server on each service
fix(dashboard): Adding dashboard components to juice entrypoints
refactor!: change install name to orangeqs-juice-core
docs: fix subscriber tutorial
feat(system-monitor): thermometry unit abstraction layer
refactor!: add mock system monitor configuration to default lab configuration
docs(task): design for request reply interfaces
fix(orchestration): configure containers to always restart
fix(util): configure spawn_thread to use daemon true
feat: publish heater messages to database
feat: support for python 3.13
feat(dashboard): Add a way to easily view dashboard log messages
test(cli): catch raw config warning
fix(orchestration): provide correct permissions for telegraf command to output resource usage
feat(cli): command for listing config contents
feat: unified API for pubsub/database message
test: remove duplicate influxdb2 tests
feat(dashboard): Adding ControlPC monitoring to Overview page
fix(util): support parameters for rerun_on_exception
feat(orchestration): override container settings per environment
feat: minimal system monitor service
fix!: use synchronous service logging
feat: public interface to retrieve influxdb2 token
fix: use fixed password only for jupyterhub shared password in devcontainer
feat(orchestration): support released version as install source
feat(devcontainer): use a default password for jupyterhub
feat(ci): release job
feat(logging)!: Client.display_service_logs() for pretty printing logs
feat(pubsub): port pub/sub communication
fix(orchestrator): add dist mounts to runtime environment
refactor: retrieve influxdb tokens based on identity
feat: api for determining current identity
feat(logging): configure services to log to influxdb and stdout
fix(influxdb2): mount correct path to persist data
feat: port task manager service
fix(database): use mapping for filter type
feat(database): support async query and write
feat(database): simple orm for influxdb based on pydantic
fix(ipython): do not parse ipython command line arguments
docs(user): tutorial on proxy kernels
feat: proxy kernels in jupyperhub
feat(client): migrate influxDB client from prototype Juice
feat(orchestration): create influxdb tokens and buckets for users and services
fix(devcontainer): install optional dev dependencies
fix(test): use tomllib import on python 3.12
ci: enforce commit message standards
feat: initial dashboard application with placeholders for applications
feat: cached ipyclient methods for client
fix: detect methods vs functions for client injection
feat: ipyclient for services
Add dashboard and dashboard components
feat: store service info in shared runtime data
feat: define and create default lab repository and package
feat(devcontainer): use volume for container storage and switch to uv
feat: store shared runtime data
feat: load configs from drop-in directories and without priority
feat: add supervisord for single user containers
feat: github copilot instructions
fix: polish client api extensions
feat: use wants instead of requires for depending on build services
chore: restructure modules into files and use all
feat: standardized configuration management
fix: install uv environment on container start
fix: correctly mount system and user shared library dependencies
chore: move orchestration settings to orchestration module
feat: start jupyterhub singleuser containers with docker spawner
feat: service entrypoint and ipython implementation
docs: creating an extension package and extension dev environment
chore: support and test python 3.10 3.11 3.12
feat: support client extensions via Python entry point system
feat: configuration and installation for jupyterhub server
feat: manage service environments using uv
feat: Configure and start influxdb2 and telegraf on Installation
docs: packaging instructions
docs: restructure and dev environment instructions
feat: create and start dummy service containers
fix: set correct redirects for pages
chore: remove unneeded variables and packages
feat: Add Pipeline Job to Release Documentation
chore: specify package dependencies in pyproject.toml
feat(packaging): support python version argument for system package build
chore(lint): pyright strict mode and build exclusion
feat: configure devcontainer
Initial commit