All notable changes to Coontext are documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
While the major version is 0.x, every minor bump is allowed to break
backward compatibility — read the release notes carefully.
- Localization (i18n) — English (default) and Spanish, with system-locale
detection on first launch and a manual override in Settings → Language.
Architecture is a typed
Stringsstruct with compile-time correctness so missing translations are compiler errors, not runtime panics. Adding a new language is twoconsttables and one match arm. - CodeQL SAST workflow for static application security testing on every
push and pull request. Covers the
rustandactionslanguages; the Rust extractor is gated behindcontinue-on-errorsince it's still in beta upstream. - OSV-Scanner vulnerability scanning in CI alongside the existing
cargo-auditandcargo-deny. Results are uploaded as SARIF and surface in the repository's Security → Code scanning tab. - Dependabot configuration for automated dependency updates (cargo +
GitHub Actions), with the
iced,tokio, andserdefamilies grouped so their updates arrive as single reviewable PRs. - Issue templates (bug report, feature request) and pull request template
for clearer contributions. Blank issues are disabled; security reports
route to the private advisory flow via the
contact_linkssection. SECURITY.mdwith the vulnerability disclosure policy.CODE_OF_CONDUCT.mdadopting Contributor Covenant 2.1 by reference, with reports routed toadriandomc@gmail.com.ROADMAP.mdwith the milestone plan fromv0.1.0towardv1.0.0.README.mdstatus section — honest alpha disclaimer, platform coverage matrix, pointers toCHANGELOG,ROADMAP,CONTRIBUTING,SECURITY, andCODE_OF_CONDUCT. Added status badges at the top for CI, CodeQL, latest release, license, and Rust edition.- Five new unit tests for the editor widget's height-fill behavior.
- Dependency bumps — caught up on the first batch of Dependabot
suggestions:
tokio1.40 → 1.51.1 (upstream bugfixes in semaphore and UDP socket error handling)thiserror1.0 → 2.0 (derive macro API unchanged for our usage; note thaticed 0.13.1still pulls inthiserror 1.0.69transitively, so the lockfile now contains both majors)directories5.0 → 6.0 (no API changes forProjectDirs::from)dark-light1.1 → 2.0 (detect()now returnsResult<Mode, _>;Mode::Defaultwas replaced withMode::Unspecified. Adaptedsrc/app/theme.rsto match, preserving the "default to dark" behavior)rfd0.14 → 0.17 (no API changes forAsyncFileDialog; migrated transitively fromobjctoobjc2-*)- GitHub Actions:
actions/checkout@v4 → v6,actions/cache@v4 → v5,actions/upload-artifact@v4 → v7,actions/download-artifact@v4 → v8,github/codeql-action@v3 → v4(mostly Node.js 24 runtime upgrades ahead of the Node 20 deprecation in June 2026)
Three Dependabot bumps were deferred because they touch runtime-critical
code (file watching, tray menu, keyboard shortcuts) that needs to be
validated on real Linux and Windows hardware — which is exactly the
scope of the v0.2.0 cross-platform milestone. See ROADMAP.md.
notify6.1 → 8.2 — two major bumps with known API churn in the file-system watcher. Used bysrc/services/watcher.rs.tray-icon0.17 → 0.22 — five minor bumps on a pre-1.0 crate; tray behavior on macOS/Linux/Windows is a topv0.2.0test target.global-hotkey0.6 → 0.7 — pre-1.0 minor bump; same platform sensitivity as tray-icon.
- Editor right-click and click-below-text — the markdown editor widget no longer shrinks to its content height. It now grows to fill the parent's available height, so left-clicks below the last line correctly place the cursor and right-clicks anywhere in the editor pane open the context menu. Previously the empty area below the text belonged to the parent scrollable and clicks fell through.
- macOS tray icon rendering — the tray icon is now marked as a template
image (
NSImage::setTemplate(true)) and the source PNG was recolored from pure white to pure black with alpha, matching Apple's template image spec. AppKit now auto-tints the icon to match the menu bar appearance (dark silhouette on light bars, light silhouette on dark bars), so the snail no longer renders as a bright white blob against light wallpapers.
- Hardened
normalize_filename— rejects path traversal (.,.., leading.), control characters, Unicode bidi-override characters (U+202A..U+202E,U+2066..U+2069), trailing dots, and Windows reserved names (CON,PRN,AUX,NUL,COM1-9,LPT1-9, case-insensitive). - Safe markdown image-ref rewriter —
rename_fileno longer uses naiveString::replace. It now walks the markdown viapulldown_cmark's offset iterator and only rewrites references outside fenced code blocks and inline code spans, so a code snippet that mentions an old filename is preserved verbatim. - Secure per-process temp directories — screenshot temp files now go
through
tempfile::Builder::new().prefix("coontext-").tempdir(), which usesmkdtemp(3)(mode0700on Unix) instead of the world-readablestd::env::temp_dir(). - Corrupt config recovery — if
config.jsonorrecent.jsonfails to parse, it's renamed to.bakand defaults are used instead of silently overwriting the user's settings. - Telemetry crates banned at the supply-chain level via
cargo-deny(sentry,sentry-core,rollbar,bugsnag).
- Extracted nine widget modules (
modal,toast,context_menu,sidebar,toolbar,status_bar,file_tree,split_pane) from inline definitions inapp/mod.rsandviews/editor.rs.views/editor.rsshrank from 609 to 99 lines andapp/mod.rsfrom 1221 to ~925 lines. - Implemented
views/capture_overlay.rs(was a stub) with full drag-state machine, normalized selection rect, image-bound clamping, and 9 unit tests.
0.1.0 — 2026-03-XX
Initial development release. Core feature set described in
README.md. Tested on macOS 26.4 only.