-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.html
More file actions
605 lines (584 loc) · 32.8 KB
/
Copy pathindex.html
File metadata and controls
605 lines (584 loc) · 32.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>PostNot — private, local-first desktop API client</title>
<meta
name="description"
content="PostNot is a free, open-source desktop API client for HTTP, WebSocket, Socket.IO, automation, and safe local AI agent authoring."
/>
<meta name="theme-color" content="#111917" />
<meta name="color-scheme" content="light dark" />
<link rel="canonical" href="https://post-not.com/" />
<meta property="og:title" content="PostNot — Post APIs. Not your data." />
<meta
property="og:description"
content="Native HTTP, WebSocket, and Socket.IO workflows with safe local AI agent authoring. No account or cloud workspace."
/>
<meta property="og:type" content="website" />
<meta property="og:url" content="https://post-not.com/" />
<meta property="og:image" content="https://post-not.com/social-preview.png" />
<meta property="og:image:width" content="1200" />
<meta property="og:image:height" content="630" />
<meta property="og:image:alt" content="PostNot local-first desktop API client" />
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content="PostNot — Post APIs. Not your data." />
<meta
name="twitter:description"
content="Native HTTP, WebSocket, and Socket.IO workflows with no account or cloud workspace."
/>
<meta name="twitter:image" content="https://post-not.com/social-preview.png" />
<link rel="manifest" href="site.webmanifest" />
<link rel="icon" type="image/svg+xml" href="icon.svg" />
<link rel="apple-touch-icon" sizes="180x180" href="apple-touch-icon.png" />
<link rel="stylesheet" href="site.css" />
<script src="site.js" defer></script>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "SoftwareApplication",
"name": "PostNot",
"applicationCategory": "DeveloperApplication",
"operatingSystem": "Windows, macOS, Linux",
"url": "https://post-not.com/",
"downloadUrl": "https://github.com/tansdf/PostNot/releases/latest",
"softwareVersion": "0.24.0",
"license": "https://www.apache.org/licenses/LICENSE-2.0",
"isAccessibleForFree": true,
"description": "A private, local-first desktop API client with no account or cloud workspace.",
"codeRepository": "https://github.com/tansdf/PostNot"
}
</script>
</head>
<body>
<a class="skip-link" href="#main">Skip to content</a>
<header class="site-header" data-site-header>
<div class="site-header__inner">
<a class="brand" href="index.html" aria-label="PostNot home">
<img src="icon.svg" width="36" height="36" alt="" />
<span>PostNot</span>
</a>
<button
class="menu-toggle"
type="button"
data-menu-toggle
aria-expanded="false"
aria-controls="site-nav"
>
<span class="menu-toggle__label">Menu</span>
<span class="menu-toggle__icon" aria-hidden="true"></span>
</button>
<nav id="site-nav" class="site-nav" data-site-nav aria-label="Primary">
<ul class="nav-links">
<li><a href="#product">Features</a></li>
<li><a href="#realtime">WebSockets</a></li>
<li><a href="scripting.html">Scripting</a></li>
<li><a href="#privacy">Data & privacy</a></li>
<li><a class="nav-links__download" href="#download">Download</a></li>
<li><a href="https://github.com/tansdf/PostNot" rel="noopener noreferrer">GitHub</a></li>
</ul>
</nav>
</div>
</header>
<main id="main">
<section class="hero" aria-labelledby="hero-heading">
<div class="hero__copy">
<p class="eyebrow">Private desktop API workbench</p>
<h1 id="hero-heading">Post APIs.<br />Not your data.</h1>
<p class="hero__tagline">
Send HTTP requests, open WebSocket and Socket.IO connections, organize reusable workflows,
and safely author them with AI agents—without an account or cloud workspace.
</p>
<div class="cta-row">
<a class="btn btn--primary" href="#download">Download PostNot</a>
<a
class="btn btn--secondary"
href="https://github.com/tansdf/PostNot"
rel="noopener noreferrer"
>Browse source</a>
</div>
<p class="license-promise">
Free and open source under <a href="https://github.com/tansdf/PostNot/blob/master/LICENSE">Apache-2.0</a>.
</p>
<ul class="hero__proof" aria-label="Why PostNot">
<li><strong>Your workspace stays local</strong><span>SQLite data on your machine</span></li>
<li><strong>Networking runs natively</strong><span>HTTP · WebSocket · Socket.IO</span></li>
<li><strong>Your data stays portable</strong><span>Postman, OpenAPI, cURL, and JSON</span></li>
</ul>
</div>
<div class="hero__preview">
<div class="preview-shell">
<div class="preview-shell__bar"><span>Request workspace</span></div>
<button
class="screenshot-trigger screenshot-trigger--hero"
type="button"
data-screenshot-src="images/requests-page.webp"
data-screenshot-title="Request workspace"
data-screenshot-alt="PostNot request workspace with tabs, request editor, response panel, and history"
>
<img
src="images/requests-page.webp"
srcset="images/requests-page-960.webp 960w, images/requests-page.webp 1995w"
sizes="(min-width: 960px) 46vw, 100vw"
width="1995"
height="1179"
alt="PostNot request workspace with tabs, request editor, response panel, and history"
fetchpriority="high"
/>
<span class="screenshot-trigger__label">Open full screenshot</span>
</button>
</div>
<p class="preview-caption">A dense desktop workspace, available in Light, Dark, and Forest themes.</p>
</div>
</section>
<aside class="trust-strip" aria-label="Product trust highlights">
<span><strong>Local persistence</strong><small>SQLite</small></span>
<span><strong>Secret storage</strong><small>OS credential store</small></span>
<span><strong>Safer exports</strong><small>Redacted by default</small></span>
<span><strong>Native realtime</strong><small>WebSocket · Socket.IO</small></span>
<span><strong>Trusted updates</strong><small>Signed artifacts</small></span>
<span><strong>Agent authoring</strong><small>Local MCP</small></span>
</aside>
<section id="product" aria-labelledby="product-heading">
<div class="section-heading section-heading--wide">
<p class="eyebrow">The complete workflow</p>
<h2 id="product-heading">Everything important stays close to the request or connection</h2>
<p>
PostNot covers HTTP and live API workflows without turning your local workspace into a hosted service.
</p>
</div>
<div class="workflow-list">
<article class="workflow workflow--image-right">
<div class="workflow__copy">
<p class="workflow__number">Workflow 01</p>
<h3>Send and inspect requests</h3>
<p>
Compose requests in restored tabs, preview the fully resolved outgoing request with
private values masked, cancel native sends, and inspect complete response bodies.
</p>
<ul class="check-list">
<li>GET, QUERY, POST, PUT, PATCH, DELETE, HEAD, and OPTIONS methods</li>
<li>Headers, query, auth, multipart files, and body editing</li>
<li>OAuth2 client-credentials helper</li>
<li>Searchable response and local request history</li>
</ul>
</div>
<figure class="product-shot">
<button
class="screenshot-trigger"
type="button"
data-screenshot-src="images/request-preview.webp"
data-screenshot-title="Resolved request preview"
data-screenshot-alt="PostNot resolved request preview with masked private values"
>
<img
src="images/request-preview-960.webp"
srcset="images/request-preview-960.webp 960w, images/request-preview.webp 1995w"
sizes="(min-width: 860px) 52vw, 100vw"
width="1995"
height="1179"
alt="PostNot resolved request preview with masked private values"
loading="lazy"
/>
<span class="screenshot-trigger__label">Open full screenshot</span>
</button>
<figcaption>Inspect resolved URL, headers, auth, and body before anything leaves your machine.</figcaption>
</figure>
</article>
<article id="realtime" class="workflow">
<div class="workflow__copy">
<p class="workflow__number">Workflow 02</p>
<h3>Open live API connections</h3>
<p>
Select a standalone WebSocket or Socket.IO connection profile, then compose and switch
collection messages while one live tab session and its transcript stay intact.
</p>
<ul class="check-list">
<li>Headers, cookies, auth, query parameters, subprotocols, and namespaces</li>
<li>Text, tokenized JSON, binary payloads, events, acknowledgements, ping, and pong</li>
<li>Reusable connection profiles selected independently from saved collection messages</li>
<li>One continuous session while messages are selected, edited, and sent</li>
</ul>
<p class="workflow__boundary"><strong>Transcript boundary:</strong> session-only and cleared when the app closes.</p>
</div>
<figure class="product-shot">
<button
class="screenshot-trigger"
type="button"
data-screenshot-src="images/websockets-page.webp"
data-screenshot-title="WebSocket workspace"
data-screenshot-alt="PostNot WebSocket workspace with a selected connection profile, separate collection message, and live session transcript"
>
<img
src="images/websockets-page-960.webp"
srcset="images/websockets-page-960.webp 960w, images/websockets-page.webp 1995w"
sizes="(min-width: 860px) 52vw, 100vw"
width="1995"
height="1179"
alt="PostNot WebSocket workspace with a selected connection profile, separate collection message, and live session transcript"
loading="lazy"
/>
<span class="screenshot-trigger__label">Open full screenshot</span>
</button>
<figcaption>Reuse one connection and transcript while composing or selecting multiple compatible messages.</figcaption>
</figure>
</article>
<article class="workflow workflow--image-right">
<div class="workflow__copy">
<p class="workflow__number">Workflow 03</p>
<h3>Organize and automate</h3>
<p>
Build nested collections, find saved requests quickly, and run repeatable Playbooks
with delays, scripts, stop-on-failure behavior, and grouped logs.
</p>
<ul class="check-list">
<li>Folders, search, reorder, and drag-and-drop moves</li>
<li>Inherited collection, folder, and request scripts</li>
<li>Sequential Playbooks that reuse the normal send path</li>
</ul>
<a class="text-link" href="scripting.html">Explore the scripting API <span aria-hidden="true">→</span></a>
</div>
<figure class="product-shot">
<button
class="screenshot-trigger"
type="button"
data-screenshot-src="images/playbooks-page.webp"
data-screenshot-title="Playbooks"
data-screenshot-alt="PostNot Playbooks with ordered saved-request steps and run logs"
>
<img
src="images/playbooks-page-960.webp"
srcset="images/playbooks-page-960.webp 960w, images/playbooks-page.webp 1995w"
sizes="(min-width: 860px) 52vw, 100vw"
width="1995"
height="1179"
alt="PostNot Playbooks with ordered saved-request steps and run logs"
loading="lazy"
/>
<span class="screenshot-trigger__label">Open full screenshot</span>
</button>
<figcaption>Run saved requests in order while preserving scripts, environments, and history.</figcaption>
</figure>
</article>
<article id="agents" class="workflow">
<div class="workflow__copy">
<p class="workflow__number">Workflow 04</p>
<h3>Author API resources with local AI agents</h3>
<p>
Connect a compatible MCP client to inspect your workspace and prepare reusable HTTP
requests, realtime connection profiles, and collection messages while PostNot keeps execution in your hands.
</p>
<ul class="check-list">
<li>Read masked request details and resolved previews</li>
<li>Create hierarchies and atomically create or update HTTP requests</li>
<li>Manage standalone realtime profiles and messages with revision checks</li>
<li>Review every mutation in the persistent MCP Integration feed</li>
</ul>
<p class="workflow__boundary"><strong>Execution boundary:</strong> agents cannot execute requests or scripts, open realtime connections, or send traffic.</p>
</div>
<figure class="product-shot">
<button
class="screenshot-trigger"
type="button"
data-screenshot-src="images/agent-activity-page.webp"
data-screenshot-title="MCP Integration"
data-screenshot-alt="PostNot MCP Integration workspace showing local authoring safeguards and recorded MCP changes"
>
<img
src="images/agent-activity-page-960.webp"
srcset="images/agent-activity-page-960.webp 960w, images/agent-activity-page.webp 1995w"
sizes="(min-width: 860px) 52vw, 100vw"
width="1995"
height="1179"
alt="PostNot MCP Integration workspace showing local authoring safeguards and recorded MCP changes"
loading="lazy"
/>
<span class="screenshot-trigger__label">Open full screenshot</span>
</button>
<figcaption>Connect over local stdio, keep network execution unavailable, and review recorded changes.</figcaption>
</figure>
</article>
<article class="workflow workflow--image-right">
<div class="workflow__copy">
<p class="workflow__number">Workflow 05</p>
<h3>Import, export, and migrate</h3>
<p>
Bring existing work from Postman, OpenAPI 3, or cURL. Export collections and
environments in familiar formats, or share a single redacted request as cURL or PostNot JSON.
</p>
<ul class="check-list">
<li>Postman collection and environment round trips</li>
<li>OpenAPI 3 collection and request-draft import</li>
<li>Broad cURL flag coverage and portable JSON exports</li>
</ul>
</div>
<figure class="product-shot">
<button
class="screenshot-trigger"
type="button"
data-screenshot-src="images/collections-page.webp"
data-screenshot-title="Collections"
data-screenshot-alt="PostNot collections with nested folders and saved requests"
>
<img
src="images/collections-page-960.webp"
srcset="images/collections-page-960.webp 960w, images/collections-page.webp 1995w"
sizes="(min-width: 860px) 52vw, 100vw"
width="1995"
height="1179"
alt="PostNot collections with nested folders and saved requests"
loading="lazy"
/>
<span class="screenshot-trigger__label">Open full screenshot</span>
</button>
<figcaption>Keep imported work organized and ready to move again when you choose.</figcaption>
</figure>
</article>
<article class="workflow">
<div class="workflow__copy">
<p class="workflow__number">Workflow 06</p>
<h3>Protect local data and secrets</h3>
<p>
Use environment variables without storing secret values in plain SQLite. PostNot masks
private previews, keeps unresolved secret references in history, and redacts exports by default.
</p>
<ul class="check-list">
<li>OS-backed secret storage</li>
<li>Built-in dynamic variables and script-driven updates</li>
<li>Explicit control over non-secret variable inclusion</li>
</ul>
</div>
<figure class="product-shot">
<button
class="screenshot-trigger"
type="button"
data-screenshot-src="images/environments-page.webp"
data-screenshot-title="Environments"
data-screenshot-alt="PostNot environment editor with local and secret variables"
>
<img
src="images/environments-page-960.webp"
srcset="images/environments-page-960.webp 960w, images/environments-page.webp 1995w"
sizes="(min-width: 860px) 52vw, 100vw"
width="1995"
height="1179"
alt="PostNot environment editor with local and secret variables"
loading="lazy"
/>
<span class="screenshot-trigger__label">Open full screenshot</span>
</button>
<figcaption>Choose which values are ordinary local data and which belong in the OS credential store.</figcaption>
</figure>
</article>
</div>
</section>
<section class="comparison-section" aria-labelledby="comparison-heading">
<div class="section-heading">
<p class="eyebrow">Why developers choose PostNot</p>
<h2 id="comparison-heading">A smaller boundary around your API work</h2>
</div>
<div class="comparison-grid">
<article class="comparison-card comparison-card--featured">
<p class="comparison-card__label">With PostNot</p>
<h3>Your machine is the workspace</h3>
<ul>
<li>No account required</li>
<li>Native requests are not limited by browser CORS</li>
<li>Project data stays in local SQLite and files</li>
<li>Open formats make leaving straightforward</li>
</ul>
</article>
<article class="comparison-card">
<p class="comparison-card__label">In cloud-first workflows</p>
<h3>The hosted service is part of the boundary</h3>
<ul>
<li>An identity or workspace may be required</li>
<li>Synchronization can be coupled to normal use</li>
<li>Storage and portability depend on service behavior</li>
<li>Browser networking constraints may shape the client</li>
</ul>
</article>
</div>
</section>
<section id="privacy" class="privacy-section" aria-labelledby="privacy-heading">
<div class="section-heading">
<p class="eyebrow">Data & privacy</p>
<h2 id="privacy-heading">Local by default, explicit when data moves</h2>
<p>Where PostNot stores workspace data, how it protects secrets, and what agents can see.</p>
</div>
<ol class="data-flow">
<li>
<span class="data-flow__number">1</span>
<div><h3>Workspace</h3><p>Requests, standalone connection profiles, collection messages, environments, settings, and HTTP history live under the Tauri app data directory in SQLite. Live transcripts remain session-only.</p></div>
</li>
<li>
<span class="data-flow__number">2</span>
<div><h3>Secrets</h3><p>Secret environment values go to the operating system credential store, not the application database.</p></div>
</li>
<li>
<span class="data-flow__number">3</span>
<div><h3>Agents</h3><p>MCP discovery omits secret values, masks credential-looking literals, and records mutation metadata without retaining request or realtime values in its integration log.</p></div>
</li>
<li>
<span class="data-flow__number">4</span>
<div><h3>Network and exports</h3><p>Data leaves when you send a request, open a live connection, or export. Previews mask private values and single-request exports redact credentials by default.</p></div>
</li>
</ol>
</section>
<section class="themes-section" aria-labelledby="themes-heading">
<div class="section-heading">
<p class="eyebrow">A workbench that fits</p>
<h2 id="themes-heading">Compact in every theme</h2>
<p>Try the site palette—the desktop app uses the same Light, Dark, and Forest direction.</p>
</div>
<div class="theme-grid" aria-label="Preview a site theme">
<button class="theme-card" type="button" data-site-theme="light" aria-pressed="false">
<span class="theme-card__swatches" aria-hidden="true"><i></i><i></i><i></i></span>
<strong>Light</strong><span>Warm cream, deep teal, burnt orange</span>
</button>
<button class="theme-card theme-card--active" type="button" data-site-theme="dark" aria-pressed="true">
<span class="theme-card__swatches" aria-hidden="true"><i></i><i></i><i></i></span>
<strong>Dark</strong><span>Low-glare teal surfaces</span>
</button>
<button class="theme-card" type="button" data-site-theme="forest" aria-pressed="false">
<span class="theme-card__swatches" aria-hidden="true"><i></i><i></i><i></i></span>
<strong>Forest</strong><span>Deep green with a cooler accent</span>
</button>
</div>
</section>
<section id="download" class="download-section" aria-labelledby="download-heading">
<div class="section-heading section-heading--wide">
<p class="eyebrow">Download</p>
<h2 id="download-heading">Choose the build for your machine</h2>
<p>
Free and open source under Apache-2.0. No account, trial, paid tier, or cloud workspace.
</p>
</div>
<div class="release-summary" aria-live="polite">
<div>
<span class="release-summary__label">Latest stable</span>
<strong data-release-version>Loading current release…</strong>
</div>
<div>
<span class="release-summary__label">Published</span>
<span data-release-date>Checking GitHub Releases</span>
</div>
<div class="release-summary__links">
<a data-release-notes href="https://github.com/tansdf/PostNot/releases/latest" rel="noopener noreferrer">Release notes</a>
<a href="https://github.com/tansdf/PostNot/blob/master/CHANGELOG.md" rel="noopener noreferrer">Changelog</a>
</div>
</div>
<div class="download-grid" data-download-grid>
<article class="download-card" data-download-platform="windows">
<div class="download-card__heading">
<span class="platform-mark" aria-hidden="true">
<svg class="platform-mark__icon" viewBox="0 0 24 24" focusable="false">
<rect x="3" y="3" width="7.5" height="7.5" rx="0.75"></rect>
<rect x="13.5" y="3" width="7.5" height="7.5" rx="0.75"></rect>
<rect x="3" y="13.5" width="7.5" height="7.5" rx="0.75"></rect>
<rect x="13.5" y="13.5" width="7.5" height="7.5" rx="0.75"></rect>
</svg>
</span>
<div><h3>Windows</h3><p>x86-64 · Windows 7+ · WebView2</p></div>
</div>
<div class="asset-list">
<a class="asset-row" data-asset-match="_x64-setup\.exe$" href="https://github.com/tansdf/PostNot/releases/latest" rel="noopener noreferrer"><span><strong>Setup executable</strong><small data-asset-meta>Latest stable release</small></span><span aria-hidden="true">↓</span></a>
<a class="asset-row" data-asset-match="_x64_en-US\.msi$" href="https://github.com/tansdf/PostNot/releases/latest" rel="noopener noreferrer"><span><strong>MSI installer</strong><small data-asset-meta>Latest stable release</small></span><span aria-hidden="true">↓</span></a>
</div>
<p class="install-note">Windows may show a reputation warning until platform code signing is configured. Verify the GitHub-published SHA-256 digest when required.</p>
</article>
<article class="download-card" data-download-platform="macos">
<div class="download-card__heading">
<span class="platform-mark" aria-hidden="true">
<svg class="platform-mark__icon" viewBox="0 0 24 24" focusable="false">
<path d="M18 9a3 3 0 1 0 0-6 3 3 0 0 0-3 3v12a3 3 0 1 0 3-3H6a3 3 0 1 0 3 3V6a3 3 0 1 0-3 3h12Z"></path>
</svg>
</span>
<div><h3>macOS</h3><p>10.15+ · Apple Silicon and Intel</p></div>
</div>
<div class="asset-list">
<a class="asset-row" data-asset-match="_aarch64\.dmg$" href="https://github.com/tansdf/PostNot/releases/latest" rel="noopener noreferrer"><span><strong>Apple Silicon DMG</strong><small data-asset-meta>ARM64 · latest stable release</small></span><span aria-hidden="true">↓</span></a>
<a class="asset-row" data-asset-match="_x64\.dmg$" href="https://github.com/tansdf/PostNot/releases/latest" rel="noopener noreferrer"><span><strong>Intel DMG</strong><small data-asset-meta>x86-64 · latest stable release</small></span><span aria-hidden="true">↓</span></a>
</div>
<p class="install-note">macOS may require explicit approval in Privacy & Security until Apple notarization is configured.</p>
</article>
<article class="download-card" data-download-platform="linux">
<div class="download-card__heading">
<span class="platform-mark" aria-hidden="true">
<svg class="platform-mark__icon" viewBox="0 0 24 24" focusable="false">
<rect x="2.75" y="4" width="18.5" height="16" rx="3"></rect>
<path d="m7.5 9 3 3-3 3M13.5 15h3"></path>
</svg>
</span>
<div><h3>Linux</h3><p>x86-64 desktop distributions</p></div>
</div>
<div class="asset-list">
<a class="asset-row" data-asset-match="_amd64\.AppImage$" href="https://github.com/tansdf/PostNot/releases/latest" rel="noopener noreferrer"><span><strong>AppImage</strong><small data-asset-meta>Portable · latest stable release</small></span><span aria-hidden="true">↓</span></a>
<a class="asset-row" data-asset-match="_amd64\.deb$" href="https://github.com/tansdf/PostNot/releases/latest" rel="noopener noreferrer"><span><strong>Debian package</strong><small data-asset-meta>Ubuntu / Debian</small></span><span aria-hidden="true">↓</span></a>
<a class="asset-row" data-asset-match="\.x86_64\.rpm$" href="https://github.com/tansdf/PostNot/releases/latest" rel="noopener noreferrer"><span><strong>RPM package</strong><small data-asset-meta>Fedora / RPM-based</small></span><span aria-hidden="true">↓</span></a>
</div>
<p class="install-note">Requires the WebKitGTK runtime provided by the target distribution. Package signatures are available beside signed updater artifacts.</p>
</article>
</div>
<div class="release-fallback" data-release-fallback>
<p data-release-status>
Installer details load from the public GitHub release. Every download link still opens the latest release if that lookup is unavailable.
</p>
<a class="btn btn--secondary" href="https://github.com/tansdf/PostNot/releases/latest" rel="noopener noreferrer">View all release assets</a>
</div>
<p class="requirements-source">
Runtime baselines follow the
<a href="https://v2.tauri.app/start/prerequisites/" rel="noopener noreferrer">Tauri 2 platform prerequisites</a>;
Linux library availability varies by distribution.
</p>
</section>
<section class="project-section" aria-labelledby="project-heading">
<div class="section-heading">
<p class="eyebrow">Open development</p>
<h2 id="project-heading">Follow the project in public</h2>
<p>PostNot does not need invented social proof. Its code, changes, issues, and builds are available to inspect.</p>
</div>
<div class="project-links">
<a href="https://github.com/tansdf/PostNot" rel="noopener noreferrer"><strong>Source</strong><span>Read the complete codebase</span></a>
<a href="https://github.com/tansdf/PostNot/releases" rel="noopener noreferrer"><strong>Releases</strong><span>Download and review version history</span></a>
<a href="https://github.com/tansdf/PostNot/issues" rel="noopener noreferrer"><strong>Issues</strong><span>Report a problem or follow work</span></a>
<a href="https://github.com/tansdf/PostNot/blob/master/CHANGELOG.md" rel="noopener noreferrer"><strong>Changelog</strong><span>See what changed and why</span></a>
</div>
<div class="ai-disclosure">
<p><strong>Built in the open, by AI agents.</strong> PostNot is a fully AI-generated software project; repository code is produced end-to-end by AI agents.</p>
<div class="hero__badges" aria-label="Project authorship">
<span>Built with AI agents</span><span>100% AI-generated code</span>
</div>
</div>
</section>
<section class="closing-cta" aria-labelledby="closing-heading">
<p class="eyebrow">Ready when you are</p>
<h2 id="closing-heading">Keep the client. Keep the data.</h2>
<div class="cta-row">
<a class="btn btn--primary" href="#download">Download PostNot</a>
<a class="btn btn--secondary" href="https://github.com/tansdf/PostNot" rel="noopener noreferrer">Browse source</a>
</div>
</section>
</main>
<footer class="site-footer">
<div class="site-footer__inner">
<div><a class="brand brand--footer" href="index.html"><img src="icon.svg" width="32" height="32" alt="" /><span>PostNot</span></a><p>Post APIs. Not your data.</p></div>
<div class="footer-links">
<a href="#product">Features</a><a href="#download">Download</a><a href="scripting.html">Scripting</a><a href="#privacy">Data & privacy</a><a href="https://github.com/tansdf/PostNot">GitHub</a>
</div>
<p class="site-footer__license">Permanently free and open source under <a href="https://github.com/tansdf/PostNot/blob/master/LICENSE">Apache-2.0</a>.</p>
</div>
</footer>
<div class="screenshot-modal" role="dialog" aria-modal="true" aria-labelledby="screenshot-modal-title" hidden>
<button class="screenshot-modal__backdrop" type="button" data-modal-close aria-label="Close screenshot viewer"></button>
<div class="screenshot-modal__panel" tabindex="-1">
<div class="screenshot-modal__header">
<h2 id="screenshot-modal-title">Screenshot</h2>
<button class="screenshot-modal__close" type="button" data-modal-close aria-label="Close screenshot viewer">Close</button>
</div>
<img class="screenshot-modal__image" src="" alt="" />
</div>
</div>
</body>
</html>