Migration
Settings and credentials now live in a backend-managed store.
Provider settings and credentials previously persisted in the webview's localStorage. In 0.8.4, Jan reads and writes them from a backend-managed store instead (secrets go to the OS keyring). Your existing settings and API keys are copied over automatically on first launch - no manual action is needed, and from this version on all new changes are saved to the backend store.
Your old localStorage data is not deleted - it's kept as a snapshot so you can downgrade to a pre-0.8.4 build and still have your previous settings. Any changes you make in 0.8.4+ live only in the backend store, so a downgrade sees the older snapshot, not your latest settings.
What's Changed
- chore(flatpak): add 0.8.3 release notes to appdata by @qnixsynapse in #8343
- docs: update changelogs for v0.8.3 and update documentation by @qnixsynapse in #8336
- Merge release/v0.8.3 to main by @qnixsynapse in #8344
- i18n(ja): update Japanese translations (#8264) by @mahirhir in #8348
- i18n(ja): complete common.json translations and fix terminology (#8264) by @mahirhir in #8349
- i18n(ja): complete settings.json translations (#8264) by @mahirhir in #8352
- fix(markdown): force code blocks LTR in RTL language context by @qnixsynapse in #8350
- feat(chat): add toggle for folding interim text into reasoning trace by @qnixsynapse in #8363
- fix(rag): repair embeddings, stop chat-model reloads, and parse more PDFs by @qnixsynapse in #8360
- ci: close issues inactive for over 180 days by @qnixsynapse in #8366
- ci: grant actions:write to stale workflow for state persistence by @qnixsynapse in #8377
- fix(chat): stop persisting detached assistant replies in branched threads by @qnixsynapse in #8376
- feat(settings): move settings/credentials off localStorage to backend store by @qnixsynapse in #8388
- fix(params): coerce numeric assistant params from string to number by @qnixsynapse in #8386
- fix: use snake case for ADL enum in get_gpu_usage by @nkulshre-amd in #8390
- fix(chat): stop MCP tool-approval popup from hanging; move transient approval state off disk by @qnixsynapse in #8391
- API key rotation for Gemini by @jjchen01 in #8408
- fix(security): bump handlebars to 4.7.9 to clear RCE advisory by @qnixsynapse in #8395
- fix(chat): ignore custom SSE event types in OpenAI-compatible streams by @qnixsynapse in #8392
- feat: OpenAI-compatible translating gateway + Responses API + unified reasoning by @qnixsynapse in #8423
- fix: Stabilize chat prefix caching, restore cloud providers, unify logging (v0.8.4) by @qnixsynapse in #8425
- fix(mcp): guard against duplicate serve() on streamable-http MCP servers by @thinhlpg in #8435
- fix(providers): send anthropic-version on model-list fetch by @qnixsynapse in #8433
- fix(desktop): macOS hide-on-close; hide-to-tray when Local API Server runs by @qnixsynapse in #8436
- feat(extensions): bundle built-in extensions into the app binary and update tests by @qnixsynapse in #8437
- feat(llamacpp): per-model chat template kwargs by @qnixsynapse in #8441
- feat: token counter for remote/MLX providers + chat & inference fixes by @qnixsynapse in #8456
- fix(chat): preserve AbortError identity when stopping mid model-load by @thinhlpg in #8443
- fix(chat): stop hiding the llama.cpp token counter during chat by @qnixsynapse in #8461
- feat(web-search): native web_search/web_fetch via tauri-plugin-websearch by @qnixsynapse in #8464
- fix: persist chain-of-thought duration in thread metadata by @qnixsynapse in #8474
- refactor: centralize llamacpp extension lookup with scoped-name fallback by @qnixsynapse in #8487
New Contributors
- @mahirhir made their first contribution in #8348
- @nkulshre-amd made their first contribution in #8390
Full Changelog: v0.8.3...v0.8.4