Skip to content

Commit 288e547

Browse files
committed
Release version 0.23.0; add native raw WebSocket and Socket.IO workspaces with saved connection definitions, multi-tab session management, reconnect controls, message composers, and bounded transcripts. Integrate realtime workflows with collections, import/export, MCP authoring, settings, and shared design-system components. Refresh documentation, website workflows, screenshots, tests, and release metadata.
2 parents f33aba1 + bf88b25 commit 288e547

132 files changed

Lines changed: 18853 additions & 984 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ node_modules/
44
.pnpm-store/
55
.svelte-kit/
66
.vite/
7+
playwright-report/
8+
test-results/
79

810
# Build output
911
build/*

AGENTS.md

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ PostNot is a local-first desktop API client built with:
1212
- TypeScript
1313
- SQLite
1414

15-
The app already supports request execution, resolved request preview before send, full response body reads, history, collections with nested folders and drag-and-drop request/folder moves, sidebar collection search, playbooks for sequential saved-request execution, environments, secret environment storage, import/export flows including OpenAPI 3 import, broader cURL flag coverage, redacted-by-default single-request cURL/JSON export with optional non-secret environment variable inclusion, OAuth2 bearer auth helpers with client-credentials token fetch, notifications, settings, signed in-app update checks with download progress, inherited collection/folder/saved-request pre-request and test scripts (worker-backed frontend JavaScript execution around the native send), async script helper requests through `pn.http.send(...)`, script-driven active-environment variable writes, and a local authoring-only MCP server with Agent Activity.
15+
The app already supports request execution, resolved request preview before send, full response body reads, history, collections with nested folders and drag-and-drop request/folder moves, sidebar collection search, raw WebSocket and Socket.IO connection workspaces with session-only transcripts, playbooks for sequential saved-request execution, environments, secret environment storage, mixed PostNot collection portability, import/export flows including OpenAPI 3 import, broader cURL flag coverage, redacted-by-default single-request cURL/JSON export with optional non-secret environment variable inclusion, OAuth2 bearer auth helpers with client-credentials token fetch, notifications, settings, signed in-app update checks with download progress, inherited collection/folder/saved-request pre-request and test scripts (worker-backed frontend JavaScript execution around the native send), async script helper requests through `pn.http.send(...)`, script-driven active-environment variable writes, and a local authoring-only MCP server with Agent Activity.
1616

1717
## Canonical Working Directory
1818

@@ -33,9 +33,12 @@ When onboarding into a fresh task, read these first:
3333
- [docs/tech-design.md](docs/tech-design.md): architecture, runtime behavior, persistence, command boundaries, and design trade-offs
3434
- [docs/design-system.md](docs/design-system.md): application design language, reusable UI patterns, accessibility contract, and feature design checklist
3535
- [src/routes/+page.svelte](src/routes/+page.svelte): main request runner UI
36+
- [src/routes/websockets/+page.svelte](src/routes/websockets/+page.svelte): WebSocket and Socket.IO connection workspace
3637
- [src/routes/settings/+page.svelte](src/routes/settings/+page.svelte): persisted settings UI and updater surface
3738
- [src-tauri/src/lib.rs](src-tauri/src/lib.rs): Tauri startup and command registration
3839
- [src-tauri/src/services/http_client.rs](src-tauri/src/services/http_client.rs): native request execution
40+
- [src-tauri/src/services/realtime_service.rs](src-tauri/src/services/realtime_service.rs): app-wide raw WebSocket session manager
41+
- [src-tauri/src/services/realtime_socketio_service.rs](src-tauri/src/services/realtime_socketio_service.rs): Socket.IO transport adapter
3942
- [src-tauri/src/services/settings_service.rs](src-tauri/src/services/settings_service.rs): persisted settings
4043
- [src-tauri/src/services/history_service.rs](src-tauri/src/services/history_service.rs): request history
4144
- [src-tauri/src/services/environments_service.rs](src-tauri/src/services/environments_service.rs): environments, secret redaction, variable resolution
@@ -50,6 +53,10 @@ Implemented now:
5053

5154
- Tauri desktop shell
5255
- native HTTP execution in Rust
56+
- native raw WebSocket and Socket.IO 3.x/4.x execution with application-wide session ownership
57+
- persistent disconnected WebSockets tab workspace, bounded session-only transcripts, file-backed large payloads, and opt-in reconnect
58+
- saved HTTP, WebSocket, and Socket.IO definitions in shared collection trees with protocol-aware routing
59+
- lossless mixed PostNot collection import/export and explicit realtime omissions from Postman export
5360
- persisted settings
5461
- persisted history with detail inspection
5562
- restoring stored requests from history into new request tabs
@@ -86,6 +93,12 @@ Frontend:
8693
npm run check
8794
```
8895

96+
Browser-mode application UX:
97+
98+
```bash
99+
npm run test:app-e2e
100+
```
101+
89102
Marketing site:
90103

91104
```bash
@@ -99,8 +112,11 @@ Rust:
99112
```bash
100113
source "$HOME/.cargo/env"
101114
cargo check --manifest-path src-tauri/Cargo.toml
115+
cargo test --manifest-path src-tauri/Cargo.toml
102116
```
103117

118+
The Socket.IO integration test starts the pinned Node fixture in `src-tauri/tests/fixtures/socketio-server.mjs`, so install the repository's npm dependencies before running the full Rust suite.
119+
104120
Backend quality gate (required before publishing a release):
105121

106122
```bash
@@ -142,6 +158,9 @@ This approach is mainly for native Windows verification such as drag-and-drop, w
142158
- Secret environment values are stored in the OS credential store, not SQLite.
143159
- History persists requests that use secret environment variables, but stores unresolved `{{variable}}` text instead of resolved secret values.
144160
- Single-request exports redact credential-looking values by default, including bearer tokens, OAuth2 access tokens, client secrets, API keys, cookies, and basic-auth passwords; the export dialog can include active non-secret environment variables while keeping secrets redacted.
161+
- Realtime connection definitions and open tabs are managed on `/websockets`; navigation preserves live native sessions, while app restart restores drafts disconnected and clears transcripts.
162+
- Realtime transcripts are bounded, process-scoped, and never written to SQLite history. Payloads over 256 KiB use temporary opaque handles that are cleared on release or startup.
163+
- Realtime v1 does not run collection/folder/request scripts or Playbook steps and does not support durable history, legacy Socket.IO 2.x, custom CA/mTLS/proxy settings, `permessage-deflate`, server-requested ACK replies, or mixed binary placeholder arrays.
145164
- Collections are managed on `/collections`.
146165
- Playbooks are managed on `/playbooks`.
147166
- Environments are managed on `/environments`.

CHANGELOG.md

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,31 @@ The project currently uses pre-1.0 semantic versioning. Minor versions mark mean
66

77
## [Unreleased]
88

9+
## [0.23.0] - 2026-07-30
10+
11+
### Added
12+
13+
- Added native raw WebSocket and Socket.IO 3.x/4.x connections with reusable workspaces, multiple connection tabs, opt-in reconnection, text/JSON/binary payloads, acknowledgements, and bounded session transcripts.
14+
- Added saved WebSocket and Socket.IO definitions to collection trees, including protocol-aware routing, mixed PostNot collection import/export, and safe MCP authoring support.
15+
- Added realtime runtime settings for connection timeouts, concurrent sessions, payload limits, and transcript retention.
16+
17+
### Changed
18+
19+
- Kept live realtime sessions active across app navigation while restoring persisted drafts disconnected after an app restart.
20+
- Reused the Requests workspace's authentication, JSON, query/header, collection-save, and tab-strip patterns throughout the WebSockets workspace.
21+
- Expanded the design system and browser coverage for consistent panel spacing, responsive layouts, keyboard navigation, styled controls, and accessible realtime interactions.
22+
23+
### Fixed
24+
25+
- Corrected Socket.IO transport defaults, native transcript-limit handling, connection-state messaging, and realtime settings copy.
26+
- Aligned realtime connection controls, headers, query parameters, authentication, reconnect controls, and message editors with the existing application layout and component standards.
27+
- Silenced vendored Socket.IO build warnings without weakening project-wide Rust diagnostics.
28+
29+
### Security
30+
31+
- Realtime transcripts remain process-scoped and are never persisted to request history; large payloads use temporary opaque handles that are released on cleanup or startup.
32+
- Environment variables resolve only when connecting or sending, preserving stored templates and the existing secret-storage boundary.
33+
934
## [0.22.0] - 2026-07-22
1035

1136
### Added

SECURITY.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ PostNot is pre-1.0. Security fixes are applied on a best-effort basis to the cur
77
| Version | Supported |
88
| --- | --- |
99
| `master` | Yes |
10-
| `0.21.x` | Yes |
11-
| `< 0.21` | No |
10+
| Latest release | Yes |
11+
| Older releases | No |
1212

1313
## Reporting a Vulnerability
1414

@@ -48,7 +48,7 @@ Reports in these areas are especially important for PostNot:
4848

4949
PostNot request scripts are local automation code. They are intended for scripts you wrote or scripts from API workspaces you trust.
5050

51-
As of `0.19.0`, pre-request and test scripts run in a short-lived worker-backed JavaScript sandbox with explicit bridges for `pn.http.send(...)` helper requests, OAuth2 token-refresh patterns, and active-environment variable writes. Please report any way for scripts to escape that boundary, access app/page globals unexpectedly, bypass helper-request history behavior, or read/write secrets outside the documented `pn.variables` APIs.
51+
Pre-request and test scripts run in a short-lived worker-backed JavaScript sandbox with explicit bridges for `pn.http.send(...)` helper requests, OAuth2 token-refresh patterns, and active-environment variable writes. Please report any way for scripts to escape that boundary, access app/page globals unexpectedly, bypass helper-request history behavior, or read/write secrets outside the documented `pn.variables` APIs.
5252

5353
Imported Postman collection scripts are preserved for portability, but complex or untrusted imported scripts should be reviewed before running.
5454

0 commit comments

Comments
 (0)