OpenC3 COSMOS Core 7.0.0 Release Candidate 3 - Welcome to the future of COSMOS!
Welcome to OpenC3 COSMOS Core 7.0.0 Release Candidate 3!
We're super excited to announce the third release candidate of COSMOS 7.
Important
If updating from RC1 you should first do a "openc3.sh cleanup" as all the TSDB table names changed to now include the SCOPE. Note: Cleanup drops all logged data.
Key Changes since RC3:
- Fix the streaming api pulling data from the TSDB. This fixes Data Extractor, Data Viewer, and Telemetry Grapher.
- Fixes to the new python uv installation process
- Various security and login enhancements
This release is months in the making and builds upon all the changes we made to COSMOS 6. Note that this is a Release Candidate and thus should not be used for Production deployments at the moment. We want to allow time for testing and exploration before we announce a final release.
The headline feature of COSMOS 7 is our new time series database (TSDB) powered by QuestDB! This database allows us to speed up our data retrieval times by an order of magnitude and enables optimizations like the removal of the reducer microservices and associated data. This is going to enable a host of new integrations and use-cases. I invite you to enable the QuestDB console and experiment with SQL access to your data!
We've also changed our License from the AGPL to the new COSMOS Builder's License. This gives you the same rights but is more compatible with our new App Store. It explicitly does not allow providing COSMOS as a hosted or managed service.
Breaking Changes
- Migration from MINIO to versitygw as a S3 backend. See upgrading.md for more information.
- Removed plaintext password support for API. See upgrading.md for more information.
New Behavior
- Remove
WITH_UNITSas type. Note that existingwith_unitsAPIs (tlm_with_units,check_with_units, etc) are deprecated and will simply return theformattedvalue. get_target_filenow returns None/nil when file is not found- Return
nil/Nonefor items outside buffer bounds in undersized packets. Previously this would return 0. This allows for sparsely populated packets.
Known Issues
The migration script is currently hard coded to use the logs and config bucket names. If you have renamed these using the .env file OPENC3_LOGS_BUCKET or OPENC3_CONFIG_BUCKET this will not take effect. This will be fixed in the final release.
Enhancements
- Detailed logs around Scope/Settings changes
- Ability to hide Legend on Telemetry Grapher
- Allow manually entered values for states on Command Sender
- New OPENC3_ALLOW_HTTP env var to make it easier to allow http
- Filter Limits Monitor items by state
- UI theming support - check the Admin Settings to change COSMOS colors
- New TEMPLATE_BASE64 keyword for binary templates in the config files
- Queue interface packets by default with update at 0.1s
- Add hover tooltip, context menu, and stale overlay to LIMITSCOLOR widget
- App store API updates
- Optimize command and telemetry decom performance in Ruby and Python
- Add hint to admin console about setting k8s secrets
- New API for scripts and screens to open a browser tab
- Make Command Parameter list scrollable for Command Editor
- Validate SCREEN params and make options dialogs consistent throughout
- Bucket Explorer delete directory
- Telemetry Grapher select graph button
- Migrate Python package from Poetry to UV
- Workflow to restart microservices for a plugin
- Warn when packets are defined without ID_ITEMs
- Add UUID to Script Runner temp files to prevent name collision
- Update to Vite 7
- Update to Rails 8
- Switch from Redis to Valkey
- Switch from Vuex to Pinia
- Switch password hashing algorithm to argon2
Bug Fixes
- Fix Script Runner autocomplete when using LATEST
- Fix Command Sender Mode -> Disable Parameter Conversion checkbox
- Fix limits bar when displaying the value 0
- Fix FORMATVALUE widget for 64-bit integer values
- Fix Python Suite Runner to preserve add_script insertion order
- Fix plugin downloads
- Fix tools bucket routing in standalone EC2 deployment to S3 buckets
- Fix Python TcpipSocketStream write look lockup
- Fix interface disconnect loop when deleting packets from a plugin
- Fix xtce_converter CLI crash
- Fixes for STRUCTURE use
- Fix TSDB with Python conversions
- Fix Python custom microservices
- Fix Python script syntax check and CheckError display
- Fix screen overlay in Command Sender and clear transient screen errors in Telemetry Viewer
- Fix secret unpacking in Python
- Fix time picker to remove milliseconds
- Fix Python JSON telemetry performance (10x increase in speed)
- Fix Packet Viewer initial refresh
- Fix Python http client to close the socket on disconnect
- Fix recurring activities on Calendar (Enterprise)
- Fix variable_bit_size command corruption. If a command has more than one VARIABLE_BIT_SIZE declaration it would not be created correctly.
- Fix Script Runner mnemonic checker crashes and false positives
- Fix Telemetry Viewer Textfield input bug in float mode
- Fix Script Runner bug with no scrollbar in message dialogs
- Fix Telemetry Grapher performance with large historical data
- Fix zoom in Data Flow Diagrams
- Fix wait_check blocking on user input when sleep_time is 0
What's Changed RC3
- Wrap videos row in docs by @ryan-pratt in #2864
- Fixed Python TcpipSocketStream write loop locking up on unhandled socket errors by @mcosgriff in #2865
- Update dependencies by @jmthomas in #2862
- Fix stale tlmcnt Redis keys causing interface disconnect loops by @mcosgriff in #2857
- [Accessibility] Add Astro compatibility to LimitsColor Widget by @clayandgen in #2866
- [Enhancement] Fixes Nav Bar clickability by @clayandgen in #2879
- [Enhancement] Limits Monitor Filtering by @clayandgen in #2881
- Resolved some SonarQube findings from uv conversion by @mcosgriff in #2807
- Allow traefik to route to the as-named tools bucket by @jmthomas in #2871
- Fix plugin downloads by @jmthomas in #2882
- Move CSP from HTML meta tag to Traefik header set by OPENC3_ALLOW_HTTP by @jmthomas in #2872
- Update Protocol Buffer documentation by @jmthomas in #2888
- Fix Python Suite Runner to preserve add_script insertion order by @jmthomas in #2885
- Fix FORMATVALUE widget for 64-bit integer values by @jmthomas in #2892
- [Bughancement] Limit Bar on Zero and Colors on DetailsDialog by @clayandgen in #2891
- Add note about command params with states to upgrade guide by @ryan-pratt in #2897
- App store plugin versions by @ryan-pratt in #2858
- [Enhancement] Highlight AppNav item on Refresh by @clayandgen in #2894
- Add validate and timeout info to queued commands by @jmthomas in #2893
- [Bug] Command Sender Disable Param Conversion checkbox stuck by @clayandgen in #2904
- Migrate plugin Python package management from pip3 to uv by @mcosgriff in #2902
- Add ability to pull to openc3_util by @jmthomas in #2898
- API rate limiting by @ryan-pratt in #2884
- Use parameterized queries to the TSDB by @jmthomas in #2908
- [Enhancement] Manually Entered on Command Sender by @clayandgen in #2906
- Disallow using session token to change password by @ryan-pratt in #2905
- Fix migration and better handle migration errors by @jmthomas in #2901
- Logout when changing password to clear sessions by @jmthomas in #2909
- Correcting some theming related color changes by @clayandgen in #2903
- Clear env vars from running scripts by @jmthomas in #2912
- Prevent path traversal in tool config names by @jmthomas in #2910
- [Enhancement] Ability to hide Legend on TlmGrapher by @clayandgen in #2895
- Follows Astral's recommended pattern for installing uv in Docker by copying the statically-compiled binary directly from the official image rather than installing via pip. by @mcosgriff in #2880
- Cancel previous CI jobs for current PR/branch when new commit(s) are pushed by @EmilyRagan in #2919
- Fix streaming from TSDB by @jmthomas in #2900
- The command
uv pip install --no-warn-script-locationno supported byuvby @mcosgriff in #2926 - One-time use tokens for AnyCable by @ryan-pratt in #2911
- [Enhancement] Detailed logs around Scope/Settings Changes by @clayandgen in #2916
- Bump docker/login-action from 3 to 4 by @dependabot[bot] in #2922
- Use redis to track bad password attempts by @ryan-pratt in #2921
- Add sslHeaders and remove OPENC3_ALLOW_HTTP to ssl and letsencrypt by @jmthomas in #2929
- Add migration to remove store_id from plugin by @ryan-pratt in #2928
- Bump dependencies by @jmthomas in #2920
- Fix issue for getting otp using keycloak auth by @ryan-pratt in #2937
- Increase max message size by @ryanmelt in #2938
- Fix latest autocomplete by @ryanmelt in #2941
- JSON.parse command sender array values by @jmthomas in #2935
- Add ALL wildcard support to streaming API packet subscriptions by @jmthomas in #2940
- Audit logging within Calendar activities by @clayandgen in #2943
What's Changed RC2
- Fix xtce_converter CLI crash with gem_name nil and PythonProxy .class by @jmthomas in #2841
- TEMPLATE_BASE64 and Fixes for STRUCTURE use by @ryanmelt in #2846
- Prepend scope name to QuestDB table names by @jmthomas in #2848
- Upgrade updates by @jmthomas in #2838
- Add Linux video to documentation by @clayandgen in #2843
- Add new architecture page by @jmthomas in #2845
- Fix QuestDB ingress errors for Python conversions without converted_type by @jmthomas in #2849
- When looking for python binary to replace, need to handle single string and one word per parameter modes by @mcosgriff in #2851
- UI Theming support by @clayandgen in #2852
- Fix TlmViewer Playback missing scope argument by @ryanmelt in #2853
What's Changed RC1
- Queue interface packets by default with update at 0.1s by @jmthomas in #2371
- Remove WITH_UNITS as type by @jmthomas in #2380
- Update to vite 7 by @ryan-pratt in #2518
- 2472 | get_target_file now returns None/nil when file is not found by @EmilyRagan in #2519
- Remove plaintext password support for api by @ryan-pratt in #2588
- Quest setup by @jmthomas in #2578
- Switch password hashing algorithm to argon2 by @ryan-pratt in #2608
- Rails 8 by @jmthomas in #2678
- Reinstall all plugins to support QuestDB by @jmthomas in #2636
- Disable dependabot PRs by @jmthomas in #2725
- Convert streaming api to the TSDB by @jmthomas in #2647
- Switch from Redis to Valkey by @ryanmelt in #2687
- Questdb migration by @jmthomas in #2683
- Switch from Minio to Versitygw by @jmthomas in #2656
- Fix Python script syntax check and CheckError display by @jmthomas in #2737
- Add hover tooltip, context menu, and stale overlay to LIMITSCOLOR widget by @jmthomas in #2734
- Clear transient screen errors and fix screen overlay in Command Sender by @jmthomas in #2733
- [Documentation] Embed feature highlight videos to docs by @clayandgen in #2735
- App store API updates by @ryan-pratt in #2497
- Optimize command and telemetry decom performance in Ruby and Python by @jmthomas in #2726
- Return nil for items outside buffer bounds in undersized packets by @jmthomas in #2685
- Fix secret unpacking by @ryan-pratt in #2736
- Clarify offline installation and project version by @jmthomas in #2745
- Sonarqube cleanup by @jmthomas in #2738
- Bump aquasecurity/setup-trivy from 0.2.4 to 0.2.5 by @dependabot[bot] in #2747
- Add hint to admin console about setting k8s secrets by @ryan-pratt in #2750
- Open tab api for scripts and screens by @jmthomas in #2744
- Update vulnerabilities and codeql config by @jmthomas in #2748
- Add JsonAccessor buffer type tests and improve code quality by @mcosgriff in #2754
- Validate SCREEN params and fix options dialogs by @jmthomas in #2752
- Move curl from devlopment to guides by @jmthomas in #2758
- Add TlmViewer playback test and fix time picker by @jmthomas in #2759
- Document keycloak tokens and update curl examples by @jmthomas in #2762
- Remove "verified" from plugins by @ryan-pratt in #2746
- TSDB decoding consistency by @jmthomas in #2757
- Add throughput testing infrastructure and fix Python telemetry performance by @jmthomas in #2742
- [Enhancement] Packet viewer refresh by @clayandgen in #2761
- Update documentation to include Windows 11 installation video by @clayandgen in #2765
- [Bug] Python Http Client Close by @clayandgen in #2767
- Update dependencies by @jmthomas in #2770
Full Changelog: v6.10.4...v7.0.0-rc3