What's New
This content is for v1.0.0. Switch to the latest version for up-to-date documentation.
v1.0.0
Section titled “v1.0.0”Full Architecture Rework
Highlights
Section titled “Highlights”- New package name:
jjmumblebot→mumimo(Python package, CLI entry point, imports). Product renamed from “JJMumbleBot” to “Mumimo”. - New entry point:
python -m mumimoor themumimoconsole script. No morepython .orpython main.py. - Plugin system overhauled:
metadata.ini→plugin.toml,privileges.csv→ RBAC roles inplugin.toml,aliases.csv→ aliases inplugin.toml. - RBAC privilege model: integer levels (0–5) replaced with named roles
(
blacklisted,admin,moderator,user+ custom roles inconfig.toml). - Config format:
config.ini→config.toml(typedConfigdataclass with TOML/env/CLI loading). - Audio engine: VLC dropped — ffmpeg only. New
AudioEnginewithTrackQueue,VolumeController(lerp-based ducking),DniLock(do-not-interrupt), andFeeder(PCM → opus). - AI assistant: OpenRouter-backed chat, TTS (Gemini voices), STT
(
!speak), emotion tracking (10 states), karma system, memory store, 15 client-side tools, personas, voice profiles. !helpreworked:!helplists loaded plugins;!help <plugin>lists that plugin’s commands. No more multi-page pagination.- Testing: ~1365 unit tests + 6 end-to-end smoke tests against a real murmur Docker container.
- Python 3.12+ required (was 3.9+).
audioop-ltsauto-installed on Python 3.13+.
Breaking Changes
Section titled “Breaking Changes”| Area | v5 | v6 |
|---|---|---|
| Package name | JJMumbleBot/ |
mumimo/ |
| Entry point | python . |
python -m mumimo or mumimo |
| Plugin metadata | metadata.ini |
plugin.toml |
| Privileges | privileges.csv (integer levels 0–5) |
RBAC roles in plugin.toml + DB |
| Aliases | aliases.csv / custom_aliases.csv |
plugin.toml + DB (AliasService) |
| Config | config.ini |
config.toml |
| Audio backend | VLC + ffmpeg | ffmpeg only |
| Web interface plugin | Included | Removed |
| Text-to-speech plugin | Separate plugin | Built into ai_assistant |
| Python version | 3.9+ | 3.12+ |
| Env var prefix | JJMB_* |
MUMIMO_* |
Changelog
Section titled “Changelog”Architecture
Section titled “Architecture”mumimo/app.py—Appdataclass +boot()wires all subsystems.mumimo/config.py— typedConfigdataclass (TOML/env/CLI loading).mumimo/core/— framework internals:command_router.py— 9-step command dispatch pipeline.mumble_session.py— pymumble wrapper (connect, channels, users).event_bus.py— synchronous pub/sub event system.privilege_service.py—PrivilegeService+RoleService.alias_service.py— command alias resolution.bot_service.py— bot lifecycle helpers.lifecycle.py— lifecycle state machine.scheduler.py— scheduled task runner (audio ducking lerps, plugin tasks).history.py— per-user command history.
mumimo/audio/— audio engine:engine.py—AudioEngine(playback, queue, loop, DNI).queue.py—TrackQueue(FIFO + move/remove/shuffle).feeder.py— PCM → opus feeder (lazyaudioopimport for 3.13+).volume.py— volume control with scheduler-driven ducking lerp.dni.py— do-not-interrupt lock state.gui_bridge.py—AudioGuiBridge(TrackStarted → thumbnail display).
mumimo/db/— SQLite database:connection.py—Database(WAL mode, integrity check, backup).schema.py— migrations (v1:users,user_roles,aliases).repositories/—users.py,privileges.py,aliases.py.
mumimo/messaging/— GUI and HTML:gui.py—GuiServicewith semantic helpers (gui_error,gui_info,gui_result,gui_list,gui_reply) +quick_gui.html_builder.py— HTML table construction +normalize_html.theme.py/theme_registry.py— theme rendering and registry.
mumimo/plugins/— plugin system:plugin_base.py—PluginBaseABC,PluginContext,@commanddecorator.loader.py—PluginLoader(plugin.toml parsing, contract validation).registry.py—PluginRegistry(command → plugin map).
Plugins
Section titled “Plugins”Core plugins (7 plugins, 85 commands):
audio_commands(19) — playback control (play, pause, resume, stop, skip, seek, volume, loop, shuffle, queue management, ducking config).auto_updater(2) — dependency update checker.bot_commands(23) — role management, bot lifecycle, channel management.core_commands(23) —!help,!version, history, aliases, plugin lifecycle.server_tools(6) — login sounds, wiki link.themes(4) — runtime theme switching.whisper(8) — Mumble whisper target management.
Extension plugins (5 plugins, 47 commands):
ai_assistant(22) — OpenRouter chat, TTS, STT, emotion, karma, memory, tool calling, personas, voice profiles,!feed.images(4) — image display and search.media(5) — YouTube/radio playback via yt-dlp + ffmpeg.randomizer(10) — dice rolls (coinflip, d4–d100, customroll).sound_board(6) — soundboard clip management and playback.
Testing
Section titled “Testing”- Unit tests: ~1365 tests across
mumimo/tests/and each plugin’stests/. - Smoke tests: 6 end-to-end tests against a real murmur Docker container.
Skipped by default — set
SMOKE_TEST=1to run. - Lint:
ruff check .
Dependencies
Section titled “Dependencies”pymumble— fork fromgit+https://github.com/DuckBoss/pymumble@main.yt-dlp,Pillow,requests,beautifulsoup4,markdown,fuzzywuzzy,python-Levenshtein,structlog,setuptools<82.audioop-lts— auto-installed on Python 3.13+.- System deps:
ffmpeg,libopus.
Migration from JJMumbleBot v5 to Mumimo v1
Section titled “Migration from JJMumbleBot v5 to Mumimo v1”-
Install Mumimo
Terminal window git clone https://codeberg.org/DuckBoss/Mumimo.gitcd Mumimouv sync # or: pip install -e .See the Quick Start guide for full installation instructions including system dependencies and Python version requirements. A Docker deployment is also available if you prefer containerized deployment.
-
Convert your config
- Delete
cfg/config.ini. - On first run, Mumimo auto-generates
data/config.tomlfrom the bundled template. - Manually transfer any custom settings (server IP, port, password, etc.)
into the new
config.toml. See the configuration reference for the full schema.
- Delete
-
Convert your aliases
- Delete
cfg/custom_aliases.csvand anyaliases.csvfiles. - Aliases are now declared in each plugin’s
plugin.tomland managed at runtime via!setalias/!removealias/!importaliases. - If you had custom aliases, re-create them with
!setalias <name> <command>.
- Delete
-
Convert your privileges
- Delete
cfg/custom_user_privileges.csvandcfg/custom_permissions.csv. - Privileges are now RBAC roles stored in the SQLite database.
- Use
!role add <user> <role>to assign roles (admin only). - Built-in roles:
blacklisted,admin,moderator,user. - Custom roles can be defined in
config.tomlunder[roles.<name>]. - See the RBAC guide for details.
- Delete
-
Update your plugins
- If you wrote custom plugins, convert
metadata.ini→plugin.toml. - Replace integer privilege levels with
roles = ["admin", ...]inplugin.toml. - Subclass
PluginBasefrommumimo.plugins.plugin_base. - See the plugin development guide for the new plugin structure.
- If you wrote custom plugins, convert
-
Update your environment variables
JJMB_*env vars are nowMUMIMO_*(e.g.MUMIMO_DATA_DIR).MUMBLE_IP,MUMBLE_PORT,MUMBLE_PASSWORDare unchanged.
-
Run Mumimo
Terminal window python -m mumimo --ip <server_ip> --port <port> [--password <pw>]# ormumimo --ip <server_ip> --port <port>
Quick StartGet Mumimo running in under 5 minutes.
ConfigurationFull config.toml reference.
Plugin DevelopmentBuild your own plugins.