All notable changes to iotta are documented here. The format follows
Keep a Changelog and the project uses
Semantic Versioning; until 1.0, the minor version
tracks development phases (see docs/roadmap.md).
Maintaining this file: add an entry under
## [Unreleased]in the same commit as any user- or operator-visible change (feature, behavior change, fix, or config/CLI/API/ protocol change), grouped under Added / Changed / Deprecated / Removed / Fixed / Security. Skip only for internal-refactor-only or docs-only changes. On release, move[Unreleased]under a new## [x.y.z] - YYYY-MM-DDheading and bump theversionin bothserver/pyproject.tomlandclient/pyproject.toml. Full rules:CONTRIBUTING.md.
localStorage (iotta-theme) and applies it immediately; follows the OS
preference when no explicit choice has been made.web/i18n.js provides a t(key,
vars?) function with a comprehensive English locale; all static UI strings in
every view file now go through t(). Adding a new locale requires only a
setLocale("fr", { β¦ }) call with the translated dict β no code changes.hint: property on form field defs, rendered as <small class="field-hint">).title attribute shown by the browser on hover.web/locales/zh-CN.js provides
complete translations for all UI strings. A locale toggle button in the header
cycles between EN and δΈζ, persisting the choice to localStorage
(iotta-locale); the page reloads on switch so module-level view titles resolve
to the correct language. Adding further locales requires only a new locale file
and one import line in app.js.config.apply_settings overlays the active document onto the typed Config;
the lifespan applies it at startup (so health_history and rollout.enabled
take effect); _get_effective_config() is the per-request resolver for session
tracing flags; and the rollout loop re-derives its policy thresholds on every
pass so store changes take effect without a restart.draft β staged β active, schema-validated), over the declarative config file. New
iotta-config CLI, /admin/config API (read/set/promote/export/import), an Operator UI
Settings view, and a settings: config block. Settings documents are
exportable/importable between instances with forward-only schema_version migration.docker-compose.observability.yml).docs/product.md (what-it-is, executive
summary, feature outline, xiaozhi comparison) and
docs/commercialization.md (open-core model, device-cap
enforcement design, pricing sketch).docs/readiness-roadmap.md β commercialization gap analysis
and prioritized roadmap.CONTRIBUTING.md plus a changelog-maintenance policy documented in
CLAUDE.md and AGENTS.md.LICENSE (FSL-1.1-ALv2) for the core source
and LICENSE-COMMERCIAL.md for the paid edition (device-cap unlock + commercial features,
key-activated).β/π emoji (which render inconsistently across platforms β the moon looked like a
banana on Windows).README.md: accurate project status, value summary, Docker + from-source
quickstart, CLI/env reference, and a documentation index.app.js imports every locale at load, that syntax error blanked the whole UI in any
language. Fixed the strings and added a Python-side guard (test_web_assets.py) that
fails the suite on unbalanced quotes in any locale entry.iotta-restore: apply a PEP 706 data filter when extracting the backup archive (safe
sandboxed restore).First version-tracked release. Establishes the baseline: the platform is feature-complete through the durable-deployment work, and now carries customer-facing positioning and versioning discipline. Summary of the capabilities present at this baseline:
draft β staged β
active lifecycle; CLI + read-only HTTP query surfaces./admin API plus a dependency-free,
build-step-free web UI covering every administrative operation; live device state and
in-place liveness polling.iotta-doctor preflight, iotta-backup/
iotta-restore, a System status view, and browser-compatible session auth.