@harry-kp/vortix 0.2.1 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -2,314 +2,52 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file.
4
4
 
5
- The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
- and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
5
+ ## [0.3.0] - 2026-05-24
7
6
 
8
- ## [Unreleased]
7
+ ### Architecture
9
8
 
10
- ## [0.2.1] - 2026-04-04
11
-
12
- ### Fixed
13
-
14
- - Detect missing `resolvconf` before WireGuard connect on Linux ([#186](https://github.com/Harry-kp/vortix/issues/186), [#187](https://github.com/Harry-kp/vortix/pull/187)) — Vortix now shows clear install instructions instead of cryptic wg-quick errors when DNS is configured but resolvconf isn't available on Arch/Fedora
15
- - Add CLI dependency check to catch missing tools before connection attempts
16
-
17
- ### Documentation
18
-
19
- - Add comprehensive Arch Linux troubleshooting FAQ and distribution-specific guidance in README
20
- - Add WireGuard configuration guide explaining AllowedIPs, cloud provider limitations, and routing best practices
21
- - Add quick error reference table for common connection issues
22
-
23
-
24
-
25
- ## [0.2.0] - 2026-03-31
9
+ - **Cargo workspace split.** Codebase restructured into 12 internal crates under `crates/` (vortix-core, vortix-process, vortix-config, vortix-platform-{linux,macos,windows}, vortix-protocol-{wireguard,openvpn}, xtask). Single published binary remains `vortix`.
10
+ - **Capability ports.** 7 trait-based ports (Tunnel, Killswitch, DNS, Interface, NetworkStats, RouteTable, CommandRunner) in `vortix-core` with per-OS implementations behind them. Adding new protocols or platforms is now mechanical.
11
+ - **Engine FSM.** Internal connection state is now a typed 5-variant state machine (`Disconnected`, `Connecting`, `Connected`, `Disconnecting`, `AwaitingUserInput`) with compile-time transition enforcement.
12
+ - **CI boundary lints.** Three `cargo xtask` lints enforce that `Command::new` only appears in `vortix-process`, `cfg(target_os)` only in platform crates, and protocol strings only in protocol crates.
26
13
 
27
14
  ### Added
28
15
 
29
- - Add a CLI-first headless mode with structured JSON output for scripting, automation, and AI-agent workflows, including `vortix status` for scriptable connection and kill-switch visibility ([#156](https://github.com/Harry-kp/vortix/issues/156), [#176](https://github.com/Harry-kp/vortix/pull/176)).
30
- - Add the new flip-panel dashboard interaction with animated card transitions ([#165](https://github.com/Harry-kp/vortix/pull/165)).
31
-
32
- ### Changed
33
-
34
- - VPN sessions can now keep running after the TUI or CLI exits, so leaving the interface no longer tears down an active connection unexpectedly ([#155](https://github.com/Harry-kp/vortix/issues/155), [#176](https://github.com/Harry-kp/vortix/pull/176)).
35
- - Make `vortix down` wait for the OpenVPN daemon to fully exit before reporting success ([#176](https://github.com/Harry-kp/vortix/pull/176)).
16
+ - **Session journal.** Every session writes a JSONL event log to `${XDG_DATA_HOME}/vortix/sessions/*.jsonl` with 30-day / 30-file retention. Path surfaced via `vortix info`.
17
+ - **`vortix secrets {set,get,delete}`** -- Layered secret store backed by OS keyring (Keychain / Secret Service) with AES-256-GCM + argon2id on-disk fallback. Opt-in; existing `.auth` files keep working.
18
+ - **`vortix audit`** -- Per-process socket snapshot for VPN leak detection. `--pid <N>` filters to one process, `--vpn-only` to tunnel sockets, `--json` for structured output. Linux (`/proc/net`) + macOS (`lsof`) implementations.
19
+ - **`vortix daemon`** -- IPC server skeleton with Unix socket (mode 0600) and length-prefixed JSON framing. Engine routing through daemon completes in v0.3.x.
20
+ - **`vortix show --raw --inline-secrets`** -- Streams profile config to stdout with stored credentials appended as `# vortix-secret:<base64>` trailing comment.
21
+ - **CI integration tests.** Privileged Docker container with network namespaces running real `wg-quick` + killswitch engage/release end-to-end.
22
+ - **`settings.toml`** -- Figment-layered config (defaults -> system -> user -> env). Not required; runtime defaults match v0.2.x behavior.
23
+ - **JSON `schema_version`.** Every `--json` envelope now includes `"schema_version": 1`.
24
+ - **Windows stub crate.** `vortix-platform-windows` compiles on Windows; every port returns `PlatformUnsupported`.
25
+ - **Startup orphan scan.** Warn-only detection of leftover `wg-quick`/`openvpn` processes from previous runs.
26
+ - **Cold-start performance test.** CI ceiling on `vortix --version` startup time.
36
27
 
37
28
  ### Fixed
38
29
 
39
- - Remove the stale quit confirmation now that active connections can continue independently of the UI process ([#179](https://github.com/Harry-kp/vortix/issues/179), [#182](https://github.com/Harry-kp/vortix/pull/182)).
40
- - Fix help overlay scrolling edge cases, including opening before the first resize and clamping scroll correctly after keyboard and mouse input ([#180](https://github.com/Harry-kp/vortix/issues/180), [#182](https://github.com/Harry-kp/vortix/pull/182)).
41
- - Harden CLI lifecycle handling around disconnect flow, error paths, and config isolation ([#176](https://github.com/Harry-kp/vortix/pull/176)).
42
-
43
- ### Documentation
44
-
45
- - Clarify current Linux support expectations and improve Linux bug-reporting guidance for distro-specific issues ([#185](https://github.com/Harry-kp/vortix/pull/185)).
46
-
47
- ### CI
48
-
49
- - Add Fedora 41 CI coverage for `cargo check`, `cargo clippy`, `cargo test`, and `cargo doc`, including unprivileged test execution for Linux-specific validation ([#160](https://github.com/Harry-kp/vortix/issues/160), [#183](https://github.com/Harry-kp/vortix/pull/183)).
50
-
51
-
52
-
53
- ## [0.1.8] - 2026-03-19
54
-
55
- ### Features
56
-
57
- - Add centralized theming system — all colors now flow through `theme.rs`, replacing hardcoded `Color::Rgb` across 13 UI files ([#109](https://github.com/Harry-kp/vortix/issues/109), [#147](https://github.com/Harry-kp/vortix/issues/147))
58
- - Add mouse click-to-select for profiles in the sidebar ([#139](https://github.com/Harry-kp/vortix/issues/139))
59
- - Add Wayland clipboard support via `wl-copy`, with `xclip`/`xsel` fallback on X11 ([#107](https://github.com/Harry-kp/vortix/issues/107))
60
- - Add word-wrapped log messages with accurate scroll using `Paragraph::line_count()` — long OpenVPN errors no longer truncate
61
-
62
- ### Bug Fixes
63
-
64
- - Fix OpenVPN error messages not shown in UI — vortix now reads the daemon log file when stderr is empty due to `--daemon --log` ([#154](https://github.com/Harry-kp/vortix/issues/154))
65
- - Fix footer truncating Help and Quit hints first on narrow terminals — critical hints now have priority, with unicode-aware width calculation ([#134](https://github.com/Harry-kp/vortix/issues/134))
66
- - Fix cursor style inconsistent across overlays — all text fields now use the same blinking block cursor ([#135](https://github.com/Harry-kp/vortix/issues/135))
67
- - Fix URL import leaving temp files behind in system temp directory ([#136](https://github.com/Harry-kp/vortix/issues/136))
68
- - Fix race condition where temp file could be deleted before import completes on TUI URL import
69
- - Fix clipboard copy reporting success without checking the tool's exit status
70
- - Fix toast messages logged at wrong severity level (e.g., connection failures logged as INFO instead of ERROR)
71
-
72
- ### Refactor
73
-
74
- - Generalize `centered_rect` helper to support both percentage-based and fixed-size centering, removing duplicate code ([#123](https://github.com/Harry-kp/vortix/issues/123))
75
- - Eliminate per-frame `String` allocations in footer hint rendering
76
-
77
- ### Testing
78
-
79
- - Add unit tests for rename-profile path traversal validation with rejection assertions ([#137](https://github.com/Harry-kp/vortix/issues/137))
80
- - Add unit tests for `cleanup_temp_download`, footer hint width calculations, `centered_rect` variants, and theme alias consistency
81
-
82
- ### Miscellaneous
83
-
84
- - **deps:** Bump the rust-minor group with 2 updates ([#152](https://github.com/Harry-kp/vortix/pull/152))
85
-
86
-
87
-
88
- ## [0.1.7] - 2026-03-11
89
-
90
- ### Bug Fixes
91
-
92
- - Fix Escape/CloseOverlay resetting zoomed panel back to normal layout ([#105](https://github.com/Harry-kp/vortix/issues/105))
93
- - Fix sidebar "Reconnect" action disconnecting instead of reconnecting the selected profile ([#106](https://github.com/Harry-kp/vortix/issues/106), [#145](https://github.com/Harry-kp/vortix/issues/145))
94
- - Fix exponential backoff overflow causing infinite retry delays at high attempt counts ([#110](https://github.com/Harry-kp/vortix/issues/110))
95
- - Fix renaming a profile breaking reconnect by not updating `last_connected_profile` ([#111](https://github.com/Harry-kp/vortix/issues/111))
96
- - Fix deleting a profile during Connecting or Disconnecting state causing state corruption ([#112](https://github.com/Harry-kp/vortix/issues/112))
97
- - Fix "IP unchanged" warning flooding logs every telemetry poll cycle while connected ([#113](https://github.com/Harry-kp/vortix/issues/113))
98
- - Fix 0ms latency falsely showing EXCELLENT quality instead of UNKNOWN ([#146](https://github.com/Harry-kp/vortix/issues/146))
99
-
100
- ### Features
101
-
102
- - Add `ConnectSelected` action: sidebar `r` key now connects the highlighted profile rather than the last-used one
103
- - Add `Unknown` quality state when no metrics have arrived yet, displayed as "─────" in header and "UNKNOWN" in details
104
- - Include latency in connection quality scoring (Poor ≥ 300ms, Fair ≥ 100ms)
105
- - Cap retry backoff at configurable `connect_retry_max_delay_secs` (default 300s)
106
-
107
- ### Documentation
108
-
109
- - Rewrite ROADMAP as a product journey with themed releases and user stories
110
-
111
- ### Miscellaneous
112
-
113
- - **deps:** Bump the rust-minor group with 3 updates ([#149](https://github.com/Harry-kp/vortix/pull/149))
114
-
115
-
116
-
117
- ## [0.1.6] - 2026-03-08
118
-
119
- ### Bug Fixes
120
-
121
- - Fix `pkill openvpn` killing all system OpenVPN processes instead of only Vortix-managed ones ([#95](https://github.com/Harry-kp/vortix/issues/95))
122
- - Fix kill switch state file written to world-readable `/tmp/` ([#96](https://github.com/Harry-kp/vortix/issues/96))
123
- - Fix kill switch displaying "Blocking" without root, giving a false sense of security ([#97](https://github.com/Harry-kp/vortix/issues/97))
124
- - Fix Unicode text input causing panic in text field handlers ([#98](https://github.com/Harry-kp/vortix/issues/98))
125
- - Add `Drop` impl on `App` to clean up kill switch rules and VPN processes on panic ([#99](https://github.com/Harry-kp/vortix/issues/99))
126
- - Fix disconnect failure leaving app in "Disconnected" state while VPN process may still be running ([#100](https://github.com/Harry-kp/vortix/issues/100))
127
- - Fix spurious "VPN dropped" auto-reconnect triggered by force-kill
128
- - Fix config viewer overlay not loading file contents on open
129
- - Fix minimum terminal size check causing blank screen on small terminals
130
- - Fix search and rename cursor position on multi-byte UTF-8 input
131
- - Fix mouse events passing through overlays to background panels
132
- - Fix help overlay not being scrollable
133
- - Fix ISP and location text truncated too aggressively on narrow terminals ([#104](https://github.com/Harry-kp/vortix/issues/104))
134
- - Fix connection details panel mostly empty when disconnected ([#102](https://github.com/Harry-kp/vortix/issues/102))
135
- - Fix import overlay closing immediately on URL import or empty directory
136
- - Fix `g`/`G`/Home/End keys not routing correctly when logs panel is focused
137
- - Fix mouse scroll not working on hovered panel (only worked on focused panel)
138
- - Fix profile names overflowing sidebar column when names are long
139
- - Fix password mask using byte count instead of character count for multi-byte input
140
- - Enable config viewer overlay to be scrollable with mouse
141
- - Fix action menus not listing all available panel actions (Sort, Rename, Filter, Kill Switch)
142
-
143
- ### Features
144
-
145
- - Add human-readable connection duration format (e.g., "2h 15m" instead of seconds)
146
- - Add throughput chart with upload/download speed labels and color legend ([#103](https://github.com/Harry-kp/vortix/issues/103))
147
- - Add active connection badge (checkmark) next to connected profile in sidebar
148
- - Clear stale telemetry data on disconnect to avoid showing previous session info
149
- - Add keyboard accessibility for all panels with Tab/Shift+Tab cycling
150
- - Add panel-specific keyboard shortcuts displayed in context footer
151
- - Add log level filtering (Error/Warn/Info) with `f` key
152
- - Show protocol tag (WG/OVPN) in cockpit header bar when connected
153
- - Show DNS server provider name (Cloudflare, Google, Quad9) in security panel
154
- - Add confirmation dialog when switching profiles while connected
155
- - Add confirmation dialog when quitting with an active VPN connection
156
- - Add profile sorting (name, protocol, last used) with `s` key
157
- - Add connection quality thresholds (Poor/Fair/Excellent) based on latency, jitter, and packet loss
158
- - Move toast notifications from bottom-right to top-right for better visibility
159
-
160
- ### Refactor
161
-
162
- - Split 2081-line `dashboard.rs` into 13 focused per-panel modules ([#114](https://github.com/Harry-kp/vortix/issues/114))
163
- - Extract shared confirmation dialog component to reduce code duplication
164
- - Adopt `tempfile` crate for panic-safe test cleanup across all 31 test sites ([#116](https://github.com/Harry-kp/vortix/issues/116))
165
- - Sanitize profile names with strict ASCII-only validation for process management
166
- - Consolidate confirmation dialog input handling into shared `handle_confirm_keys`
167
- - Route inline key handlers (rename, search, help, log filter) through Message dispatch for TEA consistency
168
-
169
- ### Testing
170
-
171
- - Enable 6 previously-ignored auth tests to run without root privileges
172
- - Add 19 new tests covering confirm dialog keys, Home/End panel awareness, profile name sanitization, truncation edge cases, and import overlay behavior
173
- - Migrate all test temp file creation to `tempfile` crate for automatic cleanup on panic
174
-
175
- ### CI
30
+ - **WireGuard shows Connected with no handshake on invalid server address** ([#31](https://github.com/Harry-kp/vortix/issues/31)). FSM now requires a real `TunnelUp` event before entering `Connected` state.
31
+ - **CLI hardening** ([#177](https://github.com/Harry-kp/vortix/issues/177)). Typed errors via `thiserror` at every port boundary, config value masking in output.
176
32
 
177
- - Pin Rust 1.91.0 in CI and fix remaining lint issues
178
-
179
-
180
-
181
- ## [0.1.5] - 2026-02-16
182
-
183
- ### Bug Fixes
184
-
185
- - Address PR review feedback for bug report feature
186
-
187
- ### Documentation
188
-
189
- - Add roadmap and feature voting links to README
190
- - Add vortix report and Nix installation to README
191
- - Rearrange badges, add Nix flake and npm downloads badges
192
-
193
- ### Features
194
-
195
- - Add `vortix report` bug report command
196
-
197
- ### Miscellaneous
198
-
199
- - **deps:** Bump the rust-minor group with 2 updates ([#40](https://github.com/Harry-kp/vortix/pull/40))
200
-
201
-
202
-
203
- ## [0.1.4] - 2026-02-12
204
-
205
- ### Documentation
206
-
207
- - Add sudo PATH troubleshooting for cargo install on Linux
208
- - Restructure README for clarity and fix misleading info
209
- - Move sudo PATH fix to prominent section after installation
210
-
211
- ### Features
212
-
213
- - Add Homebrew and npm package manager support
214
-
215
-
216
-
217
- ## [0.1.3] - 2026-02-11
218
-
219
- ### Bug Fixes
220
-
221
- - Prevent TUI freeze when no network connection is available
222
- - **ci:** Gate macOS-only symbols behind cfg to resolve Linux dead_code errors
223
- - Prevent UTF-8 panic when truncating log messages in TUI
224
-
225
- ### Documentation
226
-
227
- - **readme:** Add installation for arch linux ([#27](https://github.com/Harry-kp/vortix/pull/27))
228
- - Add directory structure and configuration guide to README
229
- - Clarify file ownership and permissions in README
230
- - Update configuration reference with all configurable settings
231
-
232
- ### Features
233
-
234
- - Configurable config directory with settings, migration, and sudo ownership
235
- - Harden VPN lifecycle, structured logging, and configurable settings
236
- - Startup dependency check with toast warning for missing tools
237
-
238
-
239
-
240
- ## [0.1.2] - 2026-02-07
241
-
242
- ### Bug Fixes
33
+ ### Changed
243
34
 
244
- - Resolve clippy errors on Linux CI (Rust 1.93)
35
+ - Profile sidecar backfill runs automatically at first launch. A `<name>.meta.toml` appears next to each `.conf`/`.ovpn`. Idempotent; v0.2.x ignores these files.
36
+ - Killswitch state and active VPN sessions survive the binary upgrade unchanged.
245
37
 
246
38
  ### Documentation
247
39
 
248
- - Add star history graph to README
249
- - Add ROADMAP and GitHub Sponsors funding
250
- - Add downloads and stars badges to README
251
- - Add Terminal Trove feature mention
252
- - Fix roadmap links to point to feature requests
253
- - Add comparison table, CONTRIBUTING.md, and issue/PR templates
254
- - Add macOS, Rust, Sponsors, and PRs Welcome badges
255
-
256
- ### Features
257
-
258
- - Add Linux platform support with cross-platform abstraction layer
259
- - Robust VPN state machine and strict config import validation
260
- - OpenVPN credential management and UX improvements
261
-
262
- ### Miscellaneous
263
-
264
- - **deps:** Bump clap from 4.5.54 to 4.5.56 in the rust-minor group ([#23](https://github.com/Harry-kp/vortix/pull/23))
265
-
266
-
267
-
268
- ## [0.1.1] - 2026-01-14
269
-
270
- ### Bug Fixes
271
-
272
- - Address Clippy and Copilot review comments
273
-
274
- ### Miscellaneous
275
-
276
- - **deps:** Bump nix from 0.29.0 to 0.30.1 ([#7](https://github.com/Harry-kp/vortix/pull/7))
277
- - **deps:** Bump libc from 0.2.179 to 0.2.180 in the rust-minor group ([#9](https://github.com/Harry-kp/vortix/pull/9))
278
-
279
- ### Refactor
280
-
281
- - Centralized logging, optimized deps, improved UI
282
-
283
-
284
-
285
- ## [0.1.0] - 2026-01-02
286
-
287
- ### Added
288
- - Initial release of Vortix VPN Manager
289
- - TUI dashboard with real-time network telemetry
290
- - WireGuard profile support (.conf files)
291
- - OpenVPN profile support (.ovpn files)
292
- - Quick slots (1-5) for favorite connections
293
- - Profile import via TUI (`i` key) and CLI (`vortix import`)
294
- - Self-update command (`vortix update`)
295
- - IPv6 leak detection
296
- - DNS leak detection
297
- - Insecure protocol detection (HTTP, FTP, Telnet)
298
- - Live throughput monitoring (upload/download speeds)
299
- - Connection uptime tracking
300
- - Nordic Frost color theme
301
- - Keyboard-driven interface with help overlay (`?` key)
40
+ - `docs/MIGRATION.md` -- upgrade guide from v0.2.x
41
+ - `docs/v0.3.0-RELEASE-NOTES.md` -- full release notes
42
+ - `docs/v0.3.0-FAQ.md` -- common upgrade questions
43
+ - `docs/architecture-migration-v1.md` -- technical surface map
44
+ - `docs/RELEASE-PLAYBOOK-v0.3.0.md` -- maintainer runbook
45
+ - `SECURITY.md` updated with daemon authentication model
46
+ - 15 plan documents in `docs/plans/` (001-015)
302
47
 
303
- ### Security
304
- - Config files stored with 600 permissions
305
- - Root privilege requirement for network interface management
48
+ ### Not in v0.3.0 (deferred)
306
49
 
307
- [Unreleased]: https://github.com/Harry-kp/vortix/compare/v0.1.7...HEAD
308
- [0.1.7]: https://github.com/Harry-kp/vortix/compare/v0.1.6...v0.1.7
309
- [0.1.6]: https://github.com/Harry-kp/vortix/compare/v0.1.5...v0.1.6
310
- [0.1.5]: https://github.com/Harry-kp/vortix/compare/v0.1.4...v0.1.5
311
- [0.1.4]: https://github.com/Harry-kp/vortix/compare/v0.1.3...v0.1.4
312
- [0.1.3]: https://github.com/Harry-kp/vortix/compare/v0.1.2...v0.1.3
313
- [0.1.2]: https://github.com/Harry-kp/vortix/compare/v0.1.1...v0.1.2
314
- [0.1.1]: https://github.com/Harry-kp/vortix/compare/v0.1.0...v0.1.1
315
- [0.1.0]: https://github.com/Harry-kp/vortix/releases/tag/v0.1.0
50
+ - No Windows binary (stub only, [#17](https://github.com/Harry-kp/vortix/issues/17))
51
+ - Daemon engine routing (skeleton only, [#16](https://github.com/Harry-kp/vortix/issues/16))
52
+ - Privilege separation / no-sudo ([#153](https://github.com/Harry-kp/vortix/issues/153))
53
+ - Lifecycle hooks (backed out after UX iteration, [#36](https://github.com/Harry-kp/vortix/issues/36))
package/README.md CHANGED
@@ -17,6 +17,12 @@
17
17
 
18
18
  Terminal UI for WireGuard and OpenVPN with real-time telemetry and leak guarding.
19
19
 
20
+ > **New in v0.3.0 — architectural migration v1.** Engine FSM (internal), session journal, encrypted secret store. One new top-level subcommand (`vortix secrets`); existing CLI unchanged. Upgrade is automatic.
21
+ >
22
+ > - [Release notes](docs/v0.3.0-RELEASE-NOTES.md) — what changed (60s read)
23
+ > - [Upgrade guide](docs/MIGRATION.md) — for v0.2.x users
24
+ > - [FAQ](docs/v0.3.0-FAQ.md) — common upgrade questions
25
+
20
26
  ![Vortix Demo](assets/demo.gif)
21
27
 
22
28
  ## Why Vortix?
@@ -45,6 +51,10 @@ Existing options (`wg show`, NetworkManager, Tunnelblick) either lack real-time
45
51
  - **Geo-Location** — Instant detection of your exit IP's city and country
46
52
  - **Leak detection** — Monitors for IPv6 leaks and DNS leaks in real-time
47
53
  - **Kill Switch** — Built-in firewall management for maximum security
54
+ - **Encrypted credential store** *(new in v0.3.0)* — OS keyring (Keychain / Secret Service) with AES-256-GCM + argon2id encrypted-file fallback for headless installs
55
+ - **Session event journal** *(new in v0.3.0)* — JSONL event log per session under `${XDG_DATA_HOME}/vortix/sessions/`, 30-day retention; useful for diagnostics and scripting
56
+ - **Per-process socket audit** *(new in v0.3.0)* — `vortix audit` answers "is this traffic actually routing through the tunnel?" with per-PID socket inventory; Linux + macOS supported
57
+ - **Versioned structured output** *(new in v0.3.0)* — every `--json` envelope carries `schema_version: 1` so consumers can detect breaking changes instead of finding them at runtime
48
58
  - **Interactive Import** — Easily add new profiles directly within the TUI
49
59
  - **Config Viewer** — Inspect profile configurations directly within the TUI
50
60
  - **Keyboard-driven** — No mouse required
@@ -226,6 +236,43 @@ vortix completions bash >> ~/.bashrc # Shell completions
226
236
  vortix completions zsh > ~/.zfunc/_vortix
227
237
  ```
228
238
 
239
+ **New in v0.3.0 — secrets store, socket audit, daemon skeleton, profile-export flag (additive):**
240
+
241
+ ```bash
242
+ # Encrypted secret store — OS keyring (Keychain / Secret Service) with
243
+ # AES-256-GCM + argon2id fallback. Opt-in; existing .auth files keep
244
+ # working unchanged.
245
+ echo -n 'user:pass' | vortix secrets set creds/work-vpn
246
+ vortix secrets get creds/work-vpn
247
+ vortix secrets delete creds/work-vpn
248
+
249
+ # Per-process socket audit — "is this traffic actually routing
250
+ # through the tunnel?" Pull-based snapshots; Linux + macOS supported.
251
+ vortix audit # tabular
252
+ vortix audit --json # structured envelope
253
+ vortix audit --pid 12345 # filter to one process
254
+ vortix audit --vpn-only # only sockets on the tunnel
255
+
256
+ # Daemon IPC skeleton — host the engine as a long-running process.
257
+ # v0.3.0 ships the wire contract + socket binding; engine routing
258
+ # through the daemon completes in v0.3.x.
259
+ vortix daemon # default socket path
260
+ vortix daemon --socket /tmp/vortix.sock # custom path
261
+
262
+ # Share a profile with credentials inlined (for the recipient to
263
+ # re-import). The output gets a trailing `# vortix-secret:<base64>`
264
+ # comment that v0.3.x picks up on import.
265
+ vortix show work-vpn --raw --inline-secrets > /tmp/work-with-creds.ovpn
266
+ ```
267
+
268
+ The Engine FSM, JSONL session journal, layered settings, and sidecar
269
+ migration all live behind existing commands — the journal path
270
+ surfaces in `vortix info` output, the migration runs at startup, and
271
+ `settings.toml` works whether or not you ever create one.
272
+
273
+ See [`docs/MIGRATION.md`](docs/MIGRATION.md) for the upgrade guide and
274
+ opt-in details on the secret store, journal, and daemon.
275
+
229
276
  **JSON output for AI agents / scripts:**
230
277
  ```bash
231
278
  # Structured JSON envelope on every command
@@ -294,7 +341,9 @@ When running with `sudo`, vortix automatically resolves the invoking user's home
294
341
  ~/.config/vortix/
295
342
  ├── profiles/ VPN configuration files
296
343
  │ ├── work.conf WireGuard profile
297
- └── office.ovpn OpenVPN profile
344
+ ├── work.meta.toml Sidecar metadata (new in v0.3.0; auto-generated)
345
+ │ ├── office.ovpn OpenVPN profile
346
+ │ └── office.meta.toml Sidecar metadata (new in v0.3.0; auto-generated)
298
347
  ├── auth/ Saved OpenVPN credentials
299
348
  │ └── office Username + password for "office" profile
300
349
  ├── run/ OpenVPN runtime files (temporary)
@@ -303,19 +352,38 @@ When running with `sudo`, vortix automatically resolves the invoking user's home
303
352
  ├── logs/ Application logs (daily rotation)
304
353
  │ └── 2026-02-09.log Same content as the TUI Logs panel
305
354
  ├── config.toml User settings (optional, see below)
355
+ ├── settings.toml Figment-layered settings (optional, new in v0.3.0)
356
+ ├── secrets.enc Encrypted secret store, fallback when no OS keyring (new in v0.3.0)
306
357
  ├── metadata.json Profile metadata (last used, sort order)
307
358
  └── killswitch.state Kill switch state for crash recovery
308
359
  ```
309
360
 
310
- All files and directories are owned by your user account, even when vortix runs under `sudo`. You can read, modify, or delete anything here without elevated privileges.
361
+ Session event journals live in a separate XDG directory because they're observability data, not user config:
362
+
363
+ ```
364
+ ${XDG_DATA_HOME}/vortix/sessions/ (new in v0.3.0)
365
+ ├── 2026-...-pid.jsonl JSONL event log per session
366
+ └── ... 30-day / 30-file retention
367
+ ```
368
+
369
+ Resolved paths by platform:
370
+
371
+ - **Linux:** `~/.local/share/vortix/sessions/`
372
+ - **macOS:** `~/Library/Application Support/vortix/sessions/`
373
+
374
+ Find the current session's path with `vortix info`.
375
+
376
+ All files and directories under the config dir are owned by your user account, even when vortix runs under `sudo`. You can read, modify, or delete anything here without elevated privileges.
311
377
 
312
378
  | Path | Mode | Description |
313
379
  |------|:----:|-------------|
314
- | `profiles/` | `600` | Your `.conf` and `.ovpn` files. Added via `vortix import` or the TUI. |
315
- | `auth/` | `600` | Saved OpenVPN username/password pairs. One file per profile. |
380
+ | `profiles/` | `600` | Your `.conf` and `.ovpn` files plus the auto-generated `.meta.toml` sidecars (new in v0.3.0). Sidecars are idempotent — delete and they regenerate. |
381
+ | `auth/` | `600` | Saved OpenVPN username/password pairs. One file per profile. Still honored in v0.3.0 — credentials can optionally move to the encrypted store via `vortix secrets set creds/<profile>`. |
316
382
  | `run/` | `644` | **OpenVPN only.** PID and log files created during a VPN session. The `.pid` file identifies which daemon to kill; the `.log` is polled for success/failure. Cleaned up on disconnect. WireGuard doesn't use this. |
317
383
  | `logs/` | `644` | Application session logs (daily rotation, configurable size/retention). Not the raw OpenVPN output in `run/`. |
318
- | `config.toml` | `644` | Optional user settings. Only exists if you create it manually (see below). |
384
+ | `config.toml` | `644` | Optional user settings (legacy). Only exists if you create it manually (see below). |
385
+ | `settings.toml` | `644` | Optional figment-layered settings (new in v0.3.0): defaults → system file → this user file → `VORTIX_*` env vars. Not auto-created. |
386
+ | `secrets.enc` | `600` | Encrypted-file fallback for the SecretStore (new in v0.3.0). Only created if you use `vortix secrets set` without a working OS keyring. |
319
387
  | `metadata.json` | `644` | Internal bookkeeping (last used, sort order). Auto-managed. |
320
388
  | `killswitch.state` | `644` | Persists kill switch mode across crashes. Auto-managed. |
321
389
 
@@ -23,7 +23,7 @@
23
23
  "hasInstallScript": true,
24
24
  "license": "MIT",
25
25
  "name": "@harry-kp/vortix",
26
- "version": "0.2.1"
26
+ "version": "0.3.0"
27
27
  },
28
28
  "node_modules/@isaacs/balanced-match": {
29
29
  "engines": {
@@ -515,5 +515,5 @@
515
515
  }
516
516
  },
517
517
  "requires": true,
518
- "version": "0.2.1"
518
+ "version": "0.3.0"
519
519
  }
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "artifactDownloadUrl": "https://github.com/Harry-kp/vortix/releases/download/v0.2.1",
2
+ "artifactDownloadUrl": "https://github.com/Harry-kp/vortix/releases/download/v0.3.0",
3
3
  "author": "Harry KP <harrykp@users.noreply.github.com>",
4
4
  "bin": {
5
5
  "vortix": "run-vortix.js"
@@ -100,7 +100,7 @@
100
100
  "zipExt": ".tar.xz"
101
101
  }
102
102
  },
103
- "version": "0.2.1",
103
+ "version": "0.3.0",
104
104
  "volta": {
105
105
  "node": "18.14.1",
106
106
  "npm": "9.5.0"