@harry-kp/vortix 0.2.2 → 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,322 +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.2] - 2026-04-23
11
-
12
- ### Miscellaneous
13
-
14
- - Update Cargo.lock dependencies
15
-
16
-
17
-
18
- ## [0.2.1] - 2026-04-04
19
-
20
- ### Fixed
21
-
22
- - 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
23
- - Add CLI dependency check to catch missing tools before connection attempts
24
-
25
- ### Documentation
26
-
27
- - Add comprehensive Arch Linux troubleshooting FAQ and distribution-specific guidance in README
28
- - Add WireGuard configuration guide explaining AllowedIPs, cloud provider limitations, and routing best practices
29
- - Add quick error reference table for common connection issues
30
-
31
-
32
-
33
- ## [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.
34
13
 
35
14
  ### Added
36
15
 
37
- - 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)).
38
- - Add the new flip-panel dashboard interaction with animated card transitions ([#165](https://github.com/Harry-kp/vortix/pull/165)).
39
-
40
- ### Changed
41
-
42
- - 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)).
43
- - 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.
44
27
 
45
28
  ### Fixed
46
29
 
47
- - 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)).
48
- - 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)).
49
- - Harden CLI lifecycle handling around disconnect flow, error paths, and config isolation ([#176](https://github.com/Harry-kp/vortix/pull/176)).
50
-
51
- ### Documentation
52
-
53
- - Clarify current Linux support expectations and improve Linux bug-reporting guidance for distro-specific issues ([#185](https://github.com/Harry-kp/vortix/pull/185)).
54
-
55
- ### CI
56
-
57
- - 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)).
58
-
59
-
60
-
61
- ## [0.1.8] - 2026-03-19
62
-
63
- ### Features
64
-
65
- - 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))
66
- - Add mouse click-to-select for profiles in the sidebar ([#139](https://github.com/Harry-kp/vortix/issues/139))
67
- - Add Wayland clipboard support via `wl-copy`, with `xclip`/`xsel` fallback on X11 ([#107](https://github.com/Harry-kp/vortix/issues/107))
68
- - Add word-wrapped log messages with accurate scroll using `Paragraph::line_count()` — long OpenVPN errors no longer truncate
69
-
70
- ### Bug Fixes
71
-
72
- - 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))
73
- - 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))
74
- - 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))
75
- - Fix URL import leaving temp files behind in system temp directory ([#136](https://github.com/Harry-kp/vortix/issues/136))
76
- - Fix race condition where temp file could be deleted before import completes on TUI URL import
77
- - Fix clipboard copy reporting success without checking the tool's exit status
78
- - Fix toast messages logged at wrong severity level (e.g., connection failures logged as INFO instead of ERROR)
79
-
80
- ### Refactor
81
-
82
- - 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))
83
- - Eliminate per-frame `String` allocations in footer hint rendering
84
-
85
- ### Testing
86
-
87
- - Add unit tests for rename-profile path traversal validation with rejection assertions ([#137](https://github.com/Harry-kp/vortix/issues/137))
88
- - Add unit tests for `cleanup_temp_download`, footer hint width calculations, `centered_rect` variants, and theme alias consistency
89
-
90
- ### Miscellaneous
91
-
92
- - **deps:** Bump the rust-minor group with 2 updates ([#152](https://github.com/Harry-kp/vortix/pull/152))
93
-
94
-
95
-
96
- ## [0.1.7] - 2026-03-11
97
-
98
- ### Bug Fixes
99
-
100
- - Fix Escape/CloseOverlay resetting zoomed panel back to normal layout ([#105](https://github.com/Harry-kp/vortix/issues/105))
101
- - 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))
102
- - Fix exponential backoff overflow causing infinite retry delays at high attempt counts ([#110](https://github.com/Harry-kp/vortix/issues/110))
103
- - Fix renaming a profile breaking reconnect by not updating `last_connected_profile` ([#111](https://github.com/Harry-kp/vortix/issues/111))
104
- - Fix deleting a profile during Connecting or Disconnecting state causing state corruption ([#112](https://github.com/Harry-kp/vortix/issues/112))
105
- - Fix "IP unchanged" warning flooding logs every telemetry poll cycle while connected ([#113](https://github.com/Harry-kp/vortix/issues/113))
106
- - Fix 0ms latency falsely showing EXCELLENT quality instead of UNKNOWN ([#146](https://github.com/Harry-kp/vortix/issues/146))
107
-
108
- ### Features
109
-
110
- - Add `ConnectSelected` action: sidebar `r` key now connects the highlighted profile rather than the last-used one
111
- - Add `Unknown` quality state when no metrics have arrived yet, displayed as "─────" in header and "UNKNOWN" in details
112
- - Include latency in connection quality scoring (Poor ≥ 300ms, Fair ≥ 100ms)
113
- - Cap retry backoff at configurable `connect_retry_max_delay_secs` (default 300s)
114
-
115
- ### Documentation
116
-
117
- - Rewrite ROADMAP as a product journey with themed releases and user stories
118
-
119
- ### Miscellaneous
120
-
121
- - **deps:** Bump the rust-minor group with 3 updates ([#149](https://github.com/Harry-kp/vortix/pull/149))
122
-
123
-
124
-
125
- ## [0.1.6] - 2026-03-08
126
-
127
- ### Bug Fixes
128
-
129
- - Fix `pkill openvpn` killing all system OpenVPN processes instead of only Vortix-managed ones ([#95](https://github.com/Harry-kp/vortix/issues/95))
130
- - Fix kill switch state file written to world-readable `/tmp/` ([#96](https://github.com/Harry-kp/vortix/issues/96))
131
- - Fix kill switch displaying "Blocking" without root, giving a false sense of security ([#97](https://github.com/Harry-kp/vortix/issues/97))
132
- - Fix Unicode text input causing panic in text field handlers ([#98](https://github.com/Harry-kp/vortix/issues/98))
133
- - 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))
134
- - Fix disconnect failure leaving app in "Disconnected" state while VPN process may still be running ([#100](https://github.com/Harry-kp/vortix/issues/100))
135
- - Fix spurious "VPN dropped" auto-reconnect triggered by force-kill
136
- - Fix config viewer overlay not loading file contents on open
137
- - Fix minimum terminal size check causing blank screen on small terminals
138
- - Fix search and rename cursor position on multi-byte UTF-8 input
139
- - Fix mouse events passing through overlays to background panels
140
- - Fix help overlay not being scrollable
141
- - Fix ISP and location text truncated too aggressively on narrow terminals ([#104](https://github.com/Harry-kp/vortix/issues/104))
142
- - Fix connection details panel mostly empty when disconnected ([#102](https://github.com/Harry-kp/vortix/issues/102))
143
- - Fix import overlay closing immediately on URL import or empty directory
144
- - Fix `g`/`G`/Home/End keys not routing correctly when logs panel is focused
145
- - Fix mouse scroll not working on hovered panel (only worked on focused panel)
146
- - Fix profile names overflowing sidebar column when names are long
147
- - Fix password mask using byte count instead of character count for multi-byte input
148
- - Enable config viewer overlay to be scrollable with mouse
149
- - Fix action menus not listing all available panel actions (Sort, Rename, Filter, Kill Switch)
150
-
151
- ### Features
152
-
153
- - Add human-readable connection duration format (e.g., "2h 15m" instead of seconds)
154
- - Add throughput chart with upload/download speed labels and color legend ([#103](https://github.com/Harry-kp/vortix/issues/103))
155
- - Add active connection badge (checkmark) next to connected profile in sidebar
156
- - Clear stale telemetry data on disconnect to avoid showing previous session info
157
- - Add keyboard accessibility for all panels with Tab/Shift+Tab cycling
158
- - Add panel-specific keyboard shortcuts displayed in context footer
159
- - Add log level filtering (Error/Warn/Info) with `f` key
160
- - Show protocol tag (WG/OVPN) in cockpit header bar when connected
161
- - Show DNS server provider name (Cloudflare, Google, Quad9) in security panel
162
- - Add confirmation dialog when switching profiles while connected
163
- - Add confirmation dialog when quitting with an active VPN connection
164
- - Add profile sorting (name, protocol, last used) with `s` key
165
- - Add connection quality thresholds (Poor/Fair/Excellent) based on latency, jitter, and packet loss
166
- - Move toast notifications from bottom-right to top-right for better visibility
167
-
168
- ### Refactor
169
-
170
- - Split 2081-line `dashboard.rs` into 13 focused per-panel modules ([#114](https://github.com/Harry-kp/vortix/issues/114))
171
- - Extract shared confirmation dialog component to reduce code duplication
172
- - Adopt `tempfile` crate for panic-safe test cleanup across all 31 test sites ([#116](https://github.com/Harry-kp/vortix/issues/116))
173
- - Sanitize profile names with strict ASCII-only validation for process management
174
- - Consolidate confirmation dialog input handling into shared `handle_confirm_keys`
175
- - Route inline key handlers (rename, search, help, log filter) through Message dispatch for TEA consistency
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
- ### Testing
178
-
179
- - Enable 6 previously-ignored auth tests to run without root privileges
180
- - Add 19 new tests covering confirm dialog keys, Home/End panel awareness, profile name sanitization, truncation edge cases, and import overlay behavior
181
- - Migrate all test temp file creation to `tempfile` crate for automatic cleanup on panic
182
-
183
- ### CI
184
-
185
- - Pin Rust 1.91.0 in CI and fix remaining lint issues
186
-
187
-
188
-
189
- ## [0.1.5] - 2026-02-16
190
-
191
- ### Bug Fixes
192
-
193
- - Address PR review feedback for bug report feature
194
-
195
- ### Documentation
196
-
197
- - Add roadmap and feature voting links to README
198
- - Add vortix report and Nix installation to README
199
- - Rearrange badges, add Nix flake and npm downloads badges
200
-
201
- ### Features
202
-
203
- - Add `vortix report` bug report command
204
-
205
- ### Miscellaneous
206
-
207
- - **deps:** Bump the rust-minor group with 2 updates ([#40](https://github.com/Harry-kp/vortix/pull/40))
208
-
209
-
210
-
211
- ## [0.1.4] - 2026-02-12
212
-
213
- ### Documentation
214
-
215
- - Add sudo PATH troubleshooting for cargo install on Linux
216
- - Restructure README for clarity and fix misleading info
217
- - Move sudo PATH fix to prominent section after installation
218
-
219
- ### Features
220
-
221
- - Add Homebrew and npm package manager support
222
-
223
-
224
-
225
- ## [0.1.3] - 2026-02-11
226
-
227
- ### Bug Fixes
228
-
229
- - Prevent TUI freeze when no network connection is available
230
- - **ci:** Gate macOS-only symbols behind cfg to resolve Linux dead_code errors
231
- - Prevent UTF-8 panic when truncating log messages in TUI
232
-
233
- ### Documentation
234
-
235
- - **readme:** Add installation for arch linux ([#27](https://github.com/Harry-kp/vortix/pull/27))
236
- - Add directory structure and configuration guide to README
237
- - Clarify file ownership and permissions in README
238
- - Update configuration reference with all configurable settings
239
-
240
- ### Features
241
-
242
- - Configurable config directory with settings, migration, and sudo ownership
243
- - Harden VPN lifecycle, structured logging, and configurable settings
244
- - Startup dependency check with toast warning for missing tools
245
-
246
-
247
-
248
- ## [0.1.2] - 2026-02-07
249
-
250
- ### Bug Fixes
33
+ ### Changed
251
34
 
252
- - 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.
253
37
 
254
38
  ### Documentation
255
39
 
256
- - Add star history graph to README
257
- - Add ROADMAP and GitHub Sponsors funding
258
- - Add downloads and stars badges to README
259
- - Add Terminal Trove feature mention
260
- - Fix roadmap links to point to feature requests
261
- - Add comparison table, CONTRIBUTING.md, and issue/PR templates
262
- - Add macOS, Rust, Sponsors, and PRs Welcome badges
263
-
264
- ### Features
265
-
266
- - Add Linux platform support with cross-platform abstraction layer
267
- - Robust VPN state machine and strict config import validation
268
- - OpenVPN credential management and UX improvements
269
-
270
- ### Miscellaneous
271
-
272
- - **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))
273
-
274
-
275
-
276
- ## [0.1.1] - 2026-01-14
277
-
278
- ### Bug Fixes
279
-
280
- - Address Clippy and Copilot review comments
281
-
282
- ### Miscellaneous
283
-
284
- - **deps:** Bump nix from 0.29.0 to 0.30.1 ([#7](https://github.com/Harry-kp/vortix/pull/7))
285
- - **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))
286
-
287
- ### Refactor
288
-
289
- - Centralized logging, optimized deps, improved UI
290
-
291
-
292
-
293
- ## [0.1.0] - 2026-01-02
294
-
295
- ### Added
296
- - Initial release of Vortix VPN Manager
297
- - TUI dashboard with real-time network telemetry
298
- - WireGuard profile support (.conf files)
299
- - OpenVPN profile support (.ovpn files)
300
- - Quick slots (1-5) for favorite connections
301
- - Profile import via TUI (`i` key) and CLI (`vortix import`)
302
- - Self-update command (`vortix update`)
303
- - IPv6 leak detection
304
- - DNS leak detection
305
- - Insecure protocol detection (HTTP, FTP, Telnet)
306
- - Live throughput monitoring (upload/download speeds)
307
- - Connection uptime tracking
308
- - Nordic Frost color theme
309
- - 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)
310
47
 
311
- ### Security
312
- - Config files stored with 600 permissions
313
- - Root privilege requirement for network interface management
48
+ ### Not in v0.3.0 (deferred)
314
49
 
315
- [Unreleased]: https://github.com/Harry-kp/vortix/compare/v0.1.7...HEAD
316
- [0.1.7]: https://github.com/Harry-kp/vortix/compare/v0.1.6...v0.1.7
317
- [0.1.6]: https://github.com/Harry-kp/vortix/compare/v0.1.5...v0.1.6
318
- [0.1.5]: https://github.com/Harry-kp/vortix/compare/v0.1.4...v0.1.5
319
- [0.1.4]: https://github.com/Harry-kp/vortix/compare/v0.1.3...v0.1.4
320
- [0.1.3]: https://github.com/Harry-kp/vortix/compare/v0.1.2...v0.1.3
321
- [0.1.2]: https://github.com/Harry-kp/vortix/compare/v0.1.1...v0.1.2
322
- [0.1.1]: https://github.com/Harry-kp/vortix/compare/v0.1.0...v0.1.1
323
- [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.2"
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.2"
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.2",
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.2",
103
+ "version": "0.3.0",
104
104
  "volta": {
105
105
  "node": "18.14.1",
106
106
  "npm": "9.5.0"