Skip to content

@krisgesling krisgesling released this May 26, 2021




Other changes


  • Support for Python 3.5 has been deprecated as it has reached EOL.
Assets 2

@krisgesling krisgesling released this Feb 18, 2021




Audio Services

  • Fix Audioservice startup on system time change (#2689) by @forslund
  • Fix UnboundLocalError in AudioProducer (#2780) by @dalgwen
  • Add the --no-video flag to VLC audio backend (#2791) by @JarbasAl
  • Improve safety of audioservice calls, particularly in VK tests (#2804) by @forslund

Other Mycroft Services

  • Settings - Add optional message argument (#2704) by @krisgesling
  • Update to pyee 8.1.0 - improved handling of multithreaded environments (#2724) by @forslund
  • Config - Stop location being referenced before assignment (#2809) by @PureTryOut
  • Ensure messagebus is connected before reporting that the Enclosure service is ready (#2758) by @krisgesling
  • Unshadow Message class in _handle_pairing_complete (#2790) by @forslund
  • Fix typo preventing STT plugins to load (#2748) by @forslund

TTS Engines

Wake Word Engines

  • PocketSphinx - Fallback to English model if configured model does not exist (#2692) by @katridi
  • Porcupine Wake Word - Update for newer engines (#2722) by @forslund


  • Fix missing skill_id parameter for page interaction and focus events (#2732) by @AIIX
  • Fix missing remove page implementation, show idle if all pages removed (#2781) by @AIIX
  • Don't clear namespace on every system page call (#2814) by @AIIX
  • Use the correct delegate, fix layouts, autofit text for System TextFrame (#2815) by @AIIX



Other changes

Assets 2

@krisgesling krisgesling released this Sep 3, 2020


  • Allow override of platform animations like talking and thinking to prevent interrupting existing content #2657
  • Add more detailed Track Status to Common Play Skill. Provides distinct status codes for different layers of media handling #2674


  • Fix ValueError on check of file modification date - do not check if list of files is empty #2662
  • Fix fresh MSM initialization with no internet connection - adds a missing argument #2677
  • A recent change allowed default Skills to update even if the autoupdate flag was set to false. This ensures that flag is respected. #2680

Removal of deprecated items:

  • pyee.EventEmitter and our own ThreadedEventEmitter converted to new Emitters available in pyee #2667
  • Hardcoded recording timeouts should now be configured in mycroft.conf #2668
  • skills.converse.error will no longer be emitted, please use skills.converse.response instead #2669
  • Internal startListening signal will no longer be checked #2670
  • DialogLoader class removed in favor of new load_dialogs function #2671
  • get_http and remove_last_slash string utils have been removed #2672
  • Audio utils that had previously been moved from mycroft.util have had their references removed. This includes mycroft.util.is_speaking, mycroft.util.wait_while_speaking, and mycroft.util.stop_speaking. The methods should be called from their new module #2678
  • The imp package has been completely replaced with importlib. This was located in the Audio service loading and loading of the old integration test environment #2679. Audioservice submodules names are now prepended with "audioservice_" to prevent module naming collisions #2684
Assets 2

@krisgesling krisgesling released this Aug 17, 2020


Add callback hooks to run Mycroft as a service #2601
This adds a simple system of callback hooks to run mycroft as a service or through a single executable. It allows the definition of a wrapper script with handlers for ready states, error states and a watchdog to ensure the system is still running.

The current watchdog implementations are currently only for the speech client (voice data is received from the mic) and the Skills process (skills are updated) due to their natural cyclic structure.

Big thanks to @forslund for this and all his contributions to this release. There are too many to count!

Add GUI support for animated images #2616
New method show_animated_image() added to Qt GUI framework providing a GUI page for displaying animated gif files. Thanks to @JarbasAl for this and all his new GUI Skills.

Add method for updating playback information from Skills #2619, #2655
This adds a common method for Skills to send playback information and status to the Common Play Skill. There are ongoing discussions about the complete management of playback between Skills, Common Play, and audio services. Special thanks to @AIIX and @JarbasAl for their ongoing work on this.

Gentoo Linux support added to setup scripts #2583
Gentoo users can now run the standard script and their OS will be detected allowing the correct dependencies to be installed. Big thanks to @doczkal for this one!

Snapcraft CI #2597
Continuous Integration implemented for Mycroft Snap releases.

Add 'Skill should not reply' test #2618
A new Voight Kampff Step was added allowing integration tests to check that a particular Skill does not respond to some utterance. This helps to ensure your Skill only responds to questions it can handle reducing unexpected errors.

Add wait_for_message() method #2628
This method will wait for a message of a specific type to be detected on the messagebus, returning the message if detected before the timeout has expired.

Add Festival TTS support #2643
Thanks to @jmontane for this addition, enabling on-device TTS for Catalan (and other language) speakers!

Bug fixes

Workaround for issue on older versions of ncurses #2591
get_wch() can at times throw errors as reported in Issue #2523, this creates a function wait_for_any_key() handling the error and retrying.

Prevent audio playing between recording and handling of utterance #2621, #2625
This maintains silence for a short period while Mycroft is actively processing a request providing a better experience for the user. It means media playback completely stops the moment a user asks it to, and prevents short snippets of audio playback if Mycroft is formulating a response.

Fix Skill submodule loading and replace imp with importlib #2327
Replaces the current imp based Skill loader with an importlib based solution. Adds a small change allowing better use of submodules allowing them to reload together with the main module.

Fix Common IoT Skills unable to register entities and scenes #2636
Thanks to @jamesmf for this fix!

Ensure custom timeout is passed to wait_for_response method #2634

Fix Mimic builds on Fedora #2521
Thanks to @countcretinos for this one!

Fix writing multiple settings to file #2652
Thanks to @emphasize for reporting this one.

Improve language configuration handling in IntentService #2650
If the STT service does not send a language code with the message, then the Intent Service will now fallback to the globally defined language, or en-us if none is defined.

Ensure default Skills are installed before initial load #2644
This adds a quick check on load to ensure default Skills are installed, unless they are blacklisted. If not installed it will do so before finalising Mycroft's boot sequence. This will only extend the boot time if important default Skills are not available.

Update Lingua Franca to v0.2.2 #2654
Primarily bug fixes - see release notes for more details. Thanks to @ChanceNCounter, @emphasize, @forslund and @PureTryOut

Disable wake word uploads in preparation for API deprecation #2661
The API endpoint used to upload wake words will be deprecated in the near future and instead shifted to Selene ( To ensure older devices are not making unnecessary post requests to a dead endpoint, the upload has been disabled for devices running v20.2.

Other improvements

  • Refactor wake-word waiting and record phrase #2589
  • Cleanup settings system #2560
  • Improved list of available commands in mycroft-help #2613
  • Update pyee to v7.0.1 - replaces home-spun threadpool based emitter with ThreadExecutor from pyee #2507
  • CI improvements #2537, #2541
  • Remove duplicate check for supported languages of Lingua Franca methods #2649. Another thanks to @emphasize for reporting this one.

Community Contributors

Another big thanks to all the Mycroft Community members that contributed to this release:

Assets 2

@krisgesling krisgesling released this May 29, 2020

Padatious Intent Parser v0.4.8 #2595

This release of Padatious adds support for saving and loading intent models courtesy of @repodiac, and better handles apostrophes thanks to @stratus-ss.

Voight Kampff updated #2576, #2592

Added support for setting user configurations through Given Steps in the form: "Given the user's {config} is {value}".

Added a clean command to remove any test, step and configuration files that have been copied to the Voight Kampff directory by the test runner. To clean up use ./ vktest clear, mycroft-start vktest clear or mycroft-skill-testrunner vktest clear.

Updated dependency handling #2562, #2571, #2575

Added "loose" requirements option, allowing pip install to use ">=" instead of "==" for all packages. This is done by setting the MYCROFT_LOOSE_REQUIREMENTS environment variable. The intention is to make mycroft packaging for linux distributions easier while allowing the git installation to still use a locked set of module versions.

The ever growing requirements.txt has also been split into core requirements, and a range of optional requirements files. This reduces the number of packages being installed unless the system will actually make use of them. It also paves the way for automatic installation of plugin dependencies. Big thanks to @PureTryOut for this one.

Removed xmlrunner as it is no longer used.

Added initial support for XDG Base Directory Specification #2559

Skills will now read and store settings in the XDG_CONFIG_DIR if it is set and the device isn't already using the existing settings location in each Skill directory.

Added support for Alpine Linux installation #2584

The standard setup script will now detect Alpine Linux and install the appropriate dependencies. Another big thanks to @PureTryOut for this and the range of work that has gone into making Mycroft compatible!

Fixed add_context decorator #2577

The @adds_context decorator has optional content that should be passed to the set_context() method. This was not being passed along. This has been resolved with tests added.

Fixed remove_fallback using original handler #2588

Allows the removal of a fallback handler using the original handler, and not the wrapped handler used internally. Along with a range of tests to verify setup and shutdown of Fallback Skills.

Modernize ESpeak TTS #2581

ESpeak output was produced directly from the executable, this is now through the standard TTS output queue like the other TTS modules. This resolves an issue with wait_while_speaking.

Added Polly TTS support - for real this time #2585

This got missed in the last release but is definitely included this time. To get setup check out the documentation. Thanks again to JarbasAl from the Chatterbox team for this one!

Bugfix audio service crashes if started without internet connection #2598

The audio service would crash whilst importing the google_tts module on startup if no internet connection was available as it failed to fetch a list of supported languages. This update prevents the crash and adds a cached to use if the remote list is unavailable.

Assets 2

@krisgesling krisgesling released this May 8, 2020

Mycroft Skills Kit v0.3.15

This release of Mycroft Skills Kit v0.3.15 switches Github authentication to use Personal Access Tokens as the existing username and password method is being deprecated. A huge thanks to Andlo for all his work on this. It also includes a small bugfix to respect the --repo-cache argument courtesy of Jarbas.

IBM Cloud Text to Speech (TTS) #2548

The IBM Cloud Text to Speech connector has been rewritten to handle IBM's new authentication mechanism. Massive thanks to @CodyReinold for this one.

Contributor guidelines cleanup #2551

This update improves clarity, fixes broken links and makes it easier for new developers to contribute to the project . Another big thanks to @CodyReinold

Czech and Polish support #2554, #2556

Initial language support added for Czech by @Tony763 and Polish by @RafalJanicki. Support for these languages is also underway in our Lingua Franca library.

Mimic1 add default core param #2558

When installing Mimic1 with no core paramater, it will now default to a safe value running on a single core. Thanks to @el-tocino for this.

MOAR Tests! #2496, #2569, #2573

A wide range of tests have been added to various utilities and functions. This includes tests for audio, caching, downloads, files, strings and time.

The test runner has also had some tweaks. It will explicitly execute with Python 3, addressing an issue where the system would hang if a generic Python alias did not exist. It will also ignore directories not intended to be tested with Pytest. Big thanks to @PureTryOut for both of these fixes!

Dependency updates #2551

Pillow has been updated to v7.1.2

Assets 2

@forslund forslund released this Apr 23, 2020

This release is focused on testing and includes the Voight Kampff test suite along with improved unit tests. Of course, the wheels of the community is always spinning so there are some juicy additions and fixes as well.

Voight Kamff #2506, #2530, #2540, #2522,

The new behavioral skill / core test suite is run on each PR to mycroft-core and mycroft-skills allowing easier identification of bugs and bad behavior. For more information on how to write this type of test check out the official documentation. The system is still in early development and will be built out more and more to completely replace the current test system.

Enable multiple snowboy hotwords #2499

Thanks to awesome work by @dalgwen Mycroft now supports using multiple snowboy hotwords.

Add config options for listening timeouts #2536

To allow longer voice input or timeout after silence these new config options can be used.

Polly TTS

@JarbasAI polished up his old Polly TTS Pull request and it finally got merged, giving mycroft the ability to use Polly for rendering speech of a variety of languages.

Google TTS automatic language #2534

The Google TTS backend no longer require a specific configuration, instead it tries to determine the correct language code to use from the global lang config option. Many thanks to @luca-vercelli for this contribution

Fix IBM Watson TTS #2514

IBM Watson's TTS Api has been updated and now Mycroft's interface has been updated as well to match.

Shutdown sequence #2529, #2538, #2543

These updates fixes a couple of issues with the shutdown process of skills and enclosure allowing them to be shutdown without being killed.

Support for reading the Mark-1's Eye colour #2471

@JarbasAI's second PR this release, this adds an interface to retrieve the current color of the Mycroft Mark-1 eyes.

Simplify Mycroft gui bus connection #2533

The GUI interface was simplified to use a single websocket connection while still isolating the clients, this fixed a regression due to upgrade of Tornado.

Upgrade lingua-franca to 0.2.1 #2512, #2515

This fixes some issues with rendering numbers and dates. Many thanks to @ChanceNCounter and the LF-crew for this.

Add tests and fix bugs surrounding the converse system #2503

Adding tests is always a good way to find and squash bugs. This handles a couple of modification during iteration issues.


  • Spelling fixes courtesy of the very nice person @tycrek #2487
  • Simplify the converse system using the wait_for_response() method #2479
  • Upgrade psutil to version 5.6.6 #2501
  • Improve Danish translations by the very friendly @andlo #2520
  • Non Mark-1 devices now also updates the version on the webpage #2528
  • Update documentation of running core without backend by the friendly @kelnos #2531
  • Fix possible voice client crash if mic is initialized muted #2542

A big thanks to all who has contributed to this release, you are all my favorite persons in the world.

Assets 2

@forslund forslund released this Mar 9, 2020

This contains mainly minor bugfixes.

Upgrade msm to 0.8.7 #2484

Fixes issues loading skills if a skill is installed using a git/git+ssh url

Fix reset converse #2491

Fixes an issue where converse state wasn't informed on user silence

Update enclosure version #2489

Fixes updating the enclosure firmware on each boot.

Assets 2

@forslund forslund released this Feb 27, 2020

We're not out of beta but we're releasin' on time! In the best possible way!

A major release like this is an opportunity for us to clean up some of the older things and make future development easier and cleaner. The improvements over 19.08.0 are now many thanks to the work of the core team and the awesome community of developers and users.

v20.02 brings some changes, some old deprecated code has been removed making core a little bit leaner and some huge contributions has made it in (targeted messages) along with the usual bag of minor fixes, and improvements.

Breaking changes in 20.02

  • Skill settings are now a simple dict (Deprecated 19.08)
    Skill settings are now a simple dict and procedure for registring settings changed callback and forcing a disk write of the settings has been updated

Registering settings changed callback (docs):

    def initialize(self):
        self.settings_change_callback = self.my_callback

    def my_callback(self):

Write settings to disk:

from mycroft.skills.settings import save_settings


    def skill_method(self, _):
        save_settings(self.root_dir, self.settings)
  • The ConfigurationManager has been removed (Deprecated 18.02) #2470

  • The backwards compatibility language for extract_datetime() has been removed. #2469
    The function now follows the documentation and returns None if the utterance doesn't include a date or time.

  • audio accuracy test is now wake word test
    The test is moved from the mycroft module into the test folder.

Improvements, fixes and other greatness

Targeted messages #2461, #2476, #2478, #2481

This is something that has been discussed for a long time and now the implementation by @JarbasAl is here. The system allows for multiple clients to be connected to Mycroft and only returning the response to the caller client that called. For an example implementation check out the Hive Mind Voice Sat.

Added the commandline tool mycroft-listen #2460

@FruityWelsh created a simple commandline tool to trigger mycroft listening. Many thanks!

Make listener audio storage location configurable #2477

Thanks to @ludwhe the storage of utterances and detected wake words can be configured.

IntentQueryApi #2468

An API allowing a skill or application to query the state of the intent service, listing things such as registered intents, skill ids and other things. This is also the work of @JarbasAl

Deprecate use of # in config file #2472

Using only // as comment makes the config compatible with tools such as jsmin. Big thanks to @belvederef for the initiative and implementation.

Improve Mimic2 error handling #2473

Server errors generating Mimic2 audio will now be caught and Mimic1 will be used as fallback.

Common Play tests and cleanup #2459

A series of unittests has been added to test the common play skill base class and the audioservice. As these were added a couple of minor bugs were resolved and the code was cleaned up slightly.

Tests for common query #2462

Adds test and fixes detection of visual platforms.

Simplify dialog loading #2422

The DialogLoader class is now deprecated instead a simple get_dialog() function is used.

Assets 2

@forslund forslund released this Jan 30, 2020

Few PR's lots of code changes!

The big change in this release is the removal of the language parsing/formatting code and instead relies on the lingua-franca module run by the Mycroft community (and @JarbasAI in particular who set up the project originally). Much discussion is going on in the mycroft chat language channel, if you're interested join us there!

Replace language parsing and formatting with lingua-franca #2438, #2464

This basically cuts 20 000 lines of code from mycroft-core (roughly 50% of the python code). Stubs still remains to retain backwards compatibility.

Allow to stop Mycroft if launched through other python module #2449

This relates to the work @andlo is making to make the skills easier to run in various IDEs. Big thanks to him for improving this side of things!

Upgrade pip to latest version #2458

The script will now install pip 20.0.2, besides bringing us uptodate this allows installs on bleeding edge systems running Python 3.9.

Assets 2