Kaithem

Latest version: v0.88.0

Safety actively analyzes 707607 Python packages for vulnerabilities to keep your Python projects secure.

Scan your dependencies

Page 1 of 31

0.88.0

This release moves some of the last few settings to module resources, so that all settings can be managed consistently in the same way. It also improves autocomplete for them.

It's full of breaking changes that likely don't matter, in years old
features that have probably never been used.

Performance should be even better, since some of the removed code was blocking.



:boom: BREAKING

Other than the configuration being moved to a resource type, I don't think any of these
will actually break anything.

- :coffin: The Apprise notification setting is gone. Use a config entries resource(created in a module) on core/apprise_target instead
- :coffin: CSS theme setting is gone, use core/css_theme
- :coffin: Homepage redirect setting is now core/homepage_redirect
- :coffin: No device ever used this, but the on-page text file editor is removed.
- :coffin: The global kaithem API object is fully gone
- :coffin: Chandler boards from older versions may not work right, but they should have already been auto-migrated long ago.
- :coffin: MPV integration with the JACK mixer removed. I don't think anyone ever used this
- :coffin: Removed the system event logging feature. Bring your own logs, like systemd offers Tag point logger resources are here to stay.
- :coffin: remove numpy and other undocumented utils from tag context
- :coffin: Remove never used tag point claim expiration mechanism
- :coffin: Remove most likely never used tag set_handler() function
- :coffin: kaithem.api.serve_file removed. Instead, serve_file is always available in page resoure code.

- :coffin: kaithem.api.lifespan.shutdown renamed to is_shutting_down
-
- :boom: kaithem.api.modules.modules_lock is exposed and most APIs in the file require holding it.
- :boom: Tag points are normalized to lower case.

Others
- :technologist: Lots of dead code gone, guided by test conerage metrics.
- :sparkles: Map tile server will clear files older than 3 months if cache gets bigger than 32GB(defaults)
- :sparkles: Maps app has USGS arial imagery(US only in high res, low res globally).
- :sparkles: New iot_devices version that supports nested config.
- :bug: Fix editing subdevices
- :bug: Fix cues not going away when removing a cue provider.
- :coffin: Remove long time interval formatting option
- :sparkles: Relicense to GPL v3 or later instead of just GPLv3
- :sparkles: Resource type creation is a public API, anyone can define new types.
- :sparkles: Ability to disable a resource without deleting it(Except permissions)
- :bug: Fix chandler board save not being instant, so zip downloads would not always have latest data
- :bug: Fix bug where sometimes chandler board data wouldn't save if the only change was in the fixture setup.
- :bug: Fix tag point normalization sometimes not working.
- :sparkles: Synchronous cue.enter and exit events.
- :bug: Fix setting lighting vals to =expressions not working right

0.87.0

This release is all about adding coverage-guided tests, along with a checklist of manual
QA tests.

A large number of bugs were found by adding tests to functions with low coverage. I am quite embarassed that these bugs were just sitting around so long, but the system is up to 70% backend coverage, and they're fixed now!

Some dead code is also gone, some small UI annoyances are fixed, an we have the new Apps
page for faster access to certain resources.


Breaking changes

- :coffin: filename_for_resource is deprecated due to confusing name, use filename_for_file
_resource instead.
- :bug: Map MIDI names to message bus topics without the 128:0 part that can change between sessions.
- :bug: MIDI channels in Chandler events, message bus topics, and tag names are one-based, to match almost every other app, instead of zero based to match the raw binary.

Other Changes

- :sparkles: Persist login sessions across reboots
- :bug: Fix deleting file resources from modules page
- :sparkles: widget.mjs notficiations on disconnect and reconnect
- :sparkles: "Apps" page for quick access to things like chandler boards.
- :bug: Fix media link remote "Ding" buttons.
- :sparkles: Mixer channel beat detection
- :bug: Fix deadlock that could happen if all background thread slots were filled by serialized_async_with_core_lock
- :bug: Fix pagination of tag points pages
- :sparkles: \_\_next\_\_ special cue
- :sparkles: Creating or cloning cues inserts after selected
- :bug: Fix importing fixture presets
- :sparkles: Rework old chandler import/export feature
- :technologist: Support for Snap packages is no longer a long term priority
- :bug: Fix total failure to load chandler data if cue param is corrupted
- :bug: Fix issues if inherit_rules is a nonexistant cue.
- :bug: Fix default cue not starting up properly
- :bug: Fix chandler board leaving behind fixture assignments when deleted
- :bug: Fix list of ports not updating until refresh
- :bug: Fix a very uncommon deadlock in the widgets module discovered through automated testing.
- :bug: Fix saved presets not showing up in list in mixer
- :bug: Fix cue shortcut codes not correctly cleaned up
- :technologist: Log a warning if a tag point is not explicitly unsubscribed
- :bug: Spurious "Still Running" indicator in events
- :bug: Fix slideshow transform sometimes not being editable
- :bug: Fix blend mode detail editing
- :bug: Fix sound not playing in web player
- :bug: Fix edge case where silent cues that had fade in set did not fade out
- :bug: Media wind down sounds much better
- :sparkles: UI notification if you try jumping to cue in inactive group
- :bug: Fix file data not showing up till manual rescan after uploading zip module
- :bug: Fix tag point aliases not being correctly cleaned up
- :bug: Fix not being able to move internal module to external
- :bug: Fix bug where failed add_data_pusher_to_all_boards function would retry forever

0.86.3

- :bug: Fix preset edting dialog
- :bug: Fix device interactive discovery
- :sparkles: ~30 default color presets matched to common DMX fixtures
- :sparkles: Library modules loaded as links
- :bug: Don't change timestamps when loading external module
- :sparkles: Presets and range effects work better together
- :bug: Fix gen shortcut button
- :bug: Fix race condition that caused chandler to not reliably load on mobile
- :sparkles: Keystone correction, rotation, scaling for Chandler slideshow
- :coffin: /user_static removed, use file server resources instead
- :bug: Fix world maps page

┏━━━━━━━━━━━━━━━┳━━━━━━━┳━━━━━━━┳━━━━━━━┳━━━━━━┳━━━━━━━━━┳━━━━━━┓
┃ Language ┃ Files ┃ % ┃ Code ┃ % ┃ Comment ┃ % ┃
┡━━━━━━━━━━━━━━━╇━━━━━━━╇━━━━━━━╇━━━━━━━╇━━━━━━╇━━━━━━━━━╇━━━━━━┩
│ Python │ 127 │ 28.7 │ 24539 │ 62.2 │ 3990 │ 10.1 │
│ HTML │ 58 │ 13.1 │ 7372 │ 76.3 │ 105 │ 1.1 │
│ Markdown │ 33 │ 7.5 │ 4269 │ 68.0 │ 17 │ 0.3 │
│ RHTML │ 55 │ 12.4 │ 3171 │ 70.9 │ 17 │ 0.4 │
│ CSS │ 17 │ 3.8 │ 2878 │ 57.9 │ 225 │ 4.5 │
│ JavaScript │ 17 │ 3.8 │ 1602 │ 53.1 │ 145 │ 4.8 │
│ YAML │ 12 │ 2.7 │ 1151 │ 80.2 │ 81 │ 5.6 │
│ Text only │ 3 │ 0.7 │ 159 │ 86.4 │ 0 │ 0.0 │
│ Bash │ 2 │ 0.5 │ 84 │ 61.3 │ 26 │ 19.0 │
│ JSON │ 1 │ 0.2 │ 4 │ 57.1 │ 0 │ 0.0 │
│ __unknown__ │ 21 │ 4.8 │ 0 │ 0.0 │ 0 │ 0.0 │
│ __empty__ │ 1 │ 0.2 │ 0 │ 0.0 │ 0 │ 0.0 │
│ __duplicate__ │ 8 │ 1.8 │ 0 │ 0.0 │ 0 │ 0.0 │
│ __binary__ │ 87 │ 19.7 │ 0 │ 0.0 │ 0 │ 0.0 │
├───────────────┼───────┼───────┼───────┼──────┼─────────┼──────┤
│ Sum │ 442 │ 100.0 │ 45229 │ 65.0 │ 4606 │ 6.6 │
└───────────────┴───────┴───────┴───────┴──────┴─────────┴──────┘

0.86.2

This release is all about ES modules. I've decided to pretty much completely
move on from non-module JS, and as kaithem is not yet 1.0, this will be a hard breaking change that affects most custom JS, requiring minor(a few lines) changes.

It does not affect anything not using custom HTML/JS

- :technologist: Dependabot and the general ecosystem have spoken. No more dev branch, we're not using Gitflow.
- :technologist: 80 line limit.
- :bug: Fix bug where the loop sound feature interacted badly with relative length
- :sparkles: Widget API will no longer send old failed messages on reconnected after 5 seconds
- :bug: Fix nuisance github flavor not found error
- :sparkles: Chandler logic lets you use `=+ tv("TagName")` to trigger when a tag changes to a nonzero value.
- :sparkles: Improve chandler autocomplete suggestions
- :lipstick: Alerts more visible on devices pages
- :bug: Delete button on devices page works correctly
- :sparkles: Switch to https://reallyfreegeoip.org for the one time location lookup
- :sparkles: kaithem.api.web.render_html_file function for fully client side apps
- :sparkles: When setting a time length, give a popup so you can tell if it was parsed correctly
- :sparkles: At boot, logs changes in the environment like installed system packages.
- :lipstick: Make cue notes more visible
- :lipstick: Less log clouter for notifications
- :sparkles: ArduinoCogs support improved.
- :bug: i/o error checker stalling bug

:boom: BREAKING

widget.mjs along with several other internals are now esm modules.
Normal non-esm JS is deprecated or legacy pretty much everywhere.

If you're doing custom JS/Python work with an APIWidget, you'll need to
give the APIWidget a widget ID, or fetch the generated one from widget.id,
and import it's special API script:

html
<script type="module">
import { kaithemapi, APIWidget} from "/static/js/widget.mjs?cache_version=c6d0887e-af6b-11ef-af85-5fc2044b2ae0"
let api = new APIWidget("widget_id")
api.upd = (val) => alert(val)
api.send("MyValue")
</script>


Use:
js
import { kaithemapi } from "/static/js/widget.mjs?cache_version=c6d0887e-af6b-11ef-af85-5fc2044b2ae0"

if you need to access the widget API directly.

0.86.1

- :bug: Minor UI stuff with displaying unsupported devices
- :sparkles: Add experimental support for the ArduinoCogs web API, which is still pre-alpha.

0.86.0

This release took a while, because so many tests had to be rewritten for the Popover API based UI.
Chandler should be much nicer to use now, especially on Mobile!

Added
- :sparkles: Cue provider system lets you quickly create playists from folders of media
- :sparkles: Mount/Unmount disks from devices page
- :sparkles: Add the module_lock key to the module's \_\_metadata\_\_.yaml to protect from changes via GUI.
- :sparkles: Popover-based UI overhaul for Chandler.

Page 1 of 31

© 2025 Safety CLI Cybersecurity Inc. All Rights Reserved.