@harry-kp/vortix 0.2.2 → 0.3.1
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 +38 -301
- package/README.md +73 -5
- package/npm-shrinkwrap.json +2 -2
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -2,322 +2,59 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
5
|
+
## [0.3.1] - 2026-05-25
|
|
7
6
|
|
|
8
|
-
|
|
9
|
-
|
|
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
|
|
7
|
+
### Changed
|
|
26
8
|
|
|
27
|
-
-
|
|
28
|
-
-
|
|
29
|
-
- Add quick error reference table for common connection issues
|
|
9
|
+
- **Flattened to single crate.** Merged all 8 internal crates into the main `vortix` crate as modules. Enables `cargo install vortix` from crates.io. No functional changes.
|
|
10
|
+
- Internal modules marked `#[doc(hidden)]` to keep public API surface clean.
|
|
30
11
|
|
|
12
|
+
## [0.3.0] - 2026-05-24
|
|
31
13
|
|
|
14
|
+
### Architecture
|
|
32
15
|
|
|
33
|
-
|
|
16
|
+
- **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`.
|
|
17
|
+
- **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.
|
|
18
|
+
- **Engine FSM.** Internal connection state is now a typed 5-variant state machine (`Disconnected`, `Connecting`, `Connected`, `Disconnecting`, `AwaitingUserInput`) with compile-time transition enforcement.
|
|
19
|
+
- **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
20
|
|
|
35
21
|
### Added
|
|
36
22
|
|
|
37
|
-
-
|
|
38
|
-
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
-
|
|
43
|
-
-
|
|
23
|
+
- **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`.
|
|
24
|
+
- **`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.
|
|
25
|
+
- **`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.
|
|
26
|
+
- **`vortix daemon`** -- IPC server skeleton with Unix socket (mode 0600) and length-prefixed JSON framing. Engine routing through daemon completes in v0.3.x.
|
|
27
|
+
- **`vortix show --raw --inline-secrets`** -- Streams profile config to stdout with stored credentials appended as `# vortix-secret:<base64>` trailing comment.
|
|
28
|
+
- **CI integration tests.** Privileged Docker container with network namespaces running real `wg-quick` + killswitch engage/release end-to-end.
|
|
29
|
+
- **`settings.toml`** -- Figment-layered config (defaults -> system -> user -> env). Not required; runtime defaults match v0.2.x behavior.
|
|
30
|
+
- **JSON `schema_version`.** Every `--json` envelope now includes `"schema_version": 1`.
|
|
31
|
+
- **Windows stub crate.** `vortix-platform-windows` compiles on Windows; every port returns `PlatformUnsupported`.
|
|
32
|
+
- **Startup orphan scan.** Warn-only detection of leftover `wg-quick`/`openvpn` processes from previous runs.
|
|
33
|
+
- **Cold-start performance test.** CI ceiling on `vortix --version` startup time.
|
|
44
34
|
|
|
45
35
|
### Fixed
|
|
46
36
|
|
|
47
|
-
-
|
|
48
|
-
-
|
|
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
|
|
176
|
-
|
|
177
|
-
### Testing
|
|
37
|
+
- **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.
|
|
38
|
+
- **CLI hardening** ([#177](https://github.com/Harry-kp/vortix/issues/177)). Typed errors via `thiserror` at every port boundary, config value masking in output.
|
|
178
39
|
|
|
179
|
-
|
|
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
|
|
40
|
+
### Changed
|
|
251
41
|
|
|
252
|
-
-
|
|
42
|
+
- 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.
|
|
43
|
+
- Killswitch state and active VPN sessions survive the binary upgrade unchanged.
|
|
253
44
|
|
|
254
45
|
### Documentation
|
|
255
46
|
|
|
256
|
-
-
|
|
257
|
-
-
|
|
258
|
-
-
|
|
259
|
-
-
|
|
260
|
-
-
|
|
261
|
-
-
|
|
262
|
-
-
|
|
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)
|
|
47
|
+
- `docs/MIGRATION.md` -- upgrade guide from v0.2.x
|
|
48
|
+
- `docs/v0.3.0-RELEASE-NOTES.md` -- full release notes
|
|
49
|
+
- `docs/v0.3.0-FAQ.md` -- common upgrade questions
|
|
50
|
+
- `docs/architecture-migration-v1.md` -- technical surface map
|
|
51
|
+
- `docs/RELEASE-PLAYBOOK-v0.3.0.md` -- maintainer runbook
|
|
52
|
+
- `SECURITY.md` updated with daemon authentication model
|
|
53
|
+
- 15 plan documents in `docs/plans/` (001-015)
|
|
310
54
|
|
|
311
|
-
###
|
|
312
|
-
- Config files stored with 600 permissions
|
|
313
|
-
- Root privilege requirement for network interface management
|
|
55
|
+
### Not in v0.3.0 (deferred)
|
|
314
56
|
|
|
315
|
-
[
|
|
316
|
-
[
|
|
317
|
-
[
|
|
318
|
-
[
|
|
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
|
|
57
|
+
- No Windows binary (stub only, [#17](https://github.com/Harry-kp/vortix/issues/17))
|
|
58
|
+
- Daemon engine routing (skeleton only, [#16](https://github.com/Harry-kp/vortix/issues/16))
|
|
59
|
+
- Privilege separation / no-sudo ([#153](https://github.com/Harry-kp/vortix/issues/153))
|
|
60
|
+
- 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
|

|
|
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
|
-
│
|
|
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
|
-
|
|
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
|
|
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
|
|
package/npm-shrinkwrap.json
CHANGED
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
"hasInstallScript": true,
|
|
24
24
|
"license": "MIT",
|
|
25
25
|
"name": "@harry-kp/vortix",
|
|
26
|
-
"version": "0.
|
|
26
|
+
"version": "0.3.1"
|
|
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.
|
|
518
|
+
"version": "0.3.1"
|
|
519
519
|
}
|
package/package.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"artifactDownloadUrl": "https://github.com/Harry-kp/vortix/releases/download/v0.
|
|
2
|
+
"artifactDownloadUrl": "https://github.com/Harry-kp/vortix/releases/download/v0.3.1",
|
|
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.
|
|
103
|
+
"version": "0.3.1",
|
|
104
104
|
"volta": {
|
|
105
105
|
"node": "18.14.1",
|
|
106
106
|
"npm": "9.5.0"
|