Skip to content

Commit 2ee18c7

Browse files
committed
update the site to reflect the latest state of the app
1 parent 8021264 commit 2ee18c7

5 files changed

Lines changed: 56 additions & 27 deletions

File tree

index.html

Lines changed: 46 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
<head>
44
<meta charset="utf-8">
55
<meta name="viewport" content="width=device-width, initial-scale=1">
6-
<title>httpsuite — run JetBrains .http tests in CI, without the JVM</title>
7-
<meta name="description" content="httpsuite runs the .http files you author in GoLand — pre-request scripts, response handlers, client.test assertions — as CI tests. A single static binary, no JDK, no CGO. Verified conformant against JetBrains' own ijhttp.">
6+
<title>httpsuite — run .http API tests in CI, without the JVM</title>
7+
<meta name="description" content="httpsuite runs the .http files you author in GoLand — pre-request scripts, response handlers, client.test assertions — as CI tests, with no JDK to install and no JVM to babysit. Verified conformant against JetBrains' own ijhttp.">
88
<meta name="theme-color" content="#FBFBFD">
99
<meta name="color-scheme" content="light">
1010

@@ -14,13 +14,13 @@
1414

1515
<link rel="canonical" href="https://httpsuite.dev/">
1616
<meta property="og:title" content="httpsuite">
17-
<meta property="og:description" content="Run JetBrains .http tests in CI, without the JVM. A single static binary, verified conformant against ijhttp.">
17+
<meta property="og:description" content="Run .http API tests in CI, without the JVM. JetBrains HTTP Client compatible, verified conformant against ijhttp.">
1818
<meta property="og:type" content="website">
1919
<meta property="og:url" content="https://httpsuite.dev/">
2020
<meta property="og:image" content="https://httpsuite.dev/og-image.png">
2121
<meta name="twitter:card" content="summary_large_image">
2222
<meta name="twitter:title" content="httpsuite">
23-
<meta name="twitter:description" content="Run JetBrains .http tests in CI, without the JVM.">
23+
<meta name="twitter:description" content="Run .http API tests in CI, without the JVM. JetBrains HTTP Client compatible.">
2424
<meta name="twitter:image" content="https://httpsuite.dev/og-image.png">
2525

2626
<link rel="preconnect" href="https://fonts.googleapis.com">
@@ -377,7 +377,6 @@
377377
<a href="#" class="brand">
378378
<img src="favicon.svg" alt="" class="brand-logo">
379379
httpsuite
380-
<span class="version-pill">pre-1.0</span>
381380
</a>
382381
<div class="nav-links">
383382
<a href="#how">How it works</a>
@@ -391,15 +390,15 @@
391390
<header class="hero">
392391
<div class="container hero-inner">
393392
<img src="favicon.svg" alt="httpsuite" class="hero-logo">
394-
<h1>JetBrains .http tests,<br>without the JVM.</h1>
393+
<h1>Your .http tests,<br>without the JVM.</h1>
395394
<p class="lead">
396395
httpsuite runs the <code>.http</code> files you already author in GoLand or VS Code —
397-
pre-request scripts, response handlers, <code>client.test</code> assertions and all —
398-
as tests in CI. One static binary. No JDK, no CGO, no container bloat.
396+
pre-request scripts, response handlers, <code>client.test</code> assertions and all — as
397+
tests in CI. Plain text in your repo, run with no JDK to install and no JVM to babysit.
399398
</p>
400399
<div class="verified">
401400
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"/></svg>
402-
<span><strong>Verified conformant</strong> against JetBrains' own <code>ijhttp</code></span>
401+
<span><strong>JetBrains HTTP Client compatible</strong> — verified conformant against its own <code>ijhttp</code></span>
403402
</div>
404403
<div class="hero-ctas">
405404
<a class="btn btn-primary" href="#install">Install</a>
@@ -434,14 +433,15 @@ <h1>JetBrains .http tests,<br>without the JVM.</h1>
434433

435434
<section class="problem">
436435
<div class="container">
437-
<span class="eyebrow">The problem</span>
438-
<h2>API tests shouldn't drag a JVM into CI.</h2>
436+
<span class="eyebrow">The case for .http</span>
437+
<h2>API tests belong in your repo.</h2>
439438
<p class="prose">
440-
The JetBrains HTTP Client is a great way to author and debug API requests — but running
441-
those same <code>.http</code> files in CI means shipping <code>ijhttp</code> and a
442-
<strong>JDK 25</strong> into every pipeline and container image. httpsuite runs the
443-
identical files as a single ~14&nbsp;MB static binary: the same scripts, the same
444-
assertions, none of the runtime.
439+
The requests you use to build and debug an API are worth keeping — but too often they
440+
live in a GUI or a cloud workspace, drifting out of sync with the code they test.
441+
<code>.http</code> files put them back where they belong: <strong>plain text, versioned
442+
in git, reviewed in pull requests.</strong> httpsuite runs those same files in CI — the
443+
identical scripts and assertions you ran in your IDE — with nothing to install: no JDK,
444+
no Node, no runtime to provision, patch, and wait on.
445445
</p>
446446

447447
<div class="problem-grid">
@@ -451,7 +451,7 @@ <h2>API tests shouldn't drag a JVM into CI.</h2>
451451
</div>
452452
<div class="problem-card">
453453
<div class="label">What it doesn't need</div>
454-
<p>No JVM, no CGO, no daemon. A single static binary that runs on macOS, Windows, and any LinuxAlpine/musl, distroless, and <code>FROM scratch</code> containers included.</p>
454+
<p>No JVM to provision, no runtime to keep patched, no daemon. It runs wherever your CI already does — macOS, Windows, and any Linux, down to Alpine/musl, distroless, and <code>FROM scratch</code> images.</p>
455455
</div>
456456
</div>
457457
</div>
@@ -468,8 +468,8 @@ <h2>Everything the runner needs. Nothing it doesn't.</h2>
468468
<div class="feature-icon">
469469
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 2l9 4-9 4-9-4 9-4z"/><path d="M3 10l9 4 9-4"/><path d="M3 14l9 4 9-4"/></svg>
470470
</div>
471-
<h3>One static binary</h3>
472-
<p>Pure Go, no CGO, no JVM. ~14&nbsp;MB, statically linked, cross-compiles to macOS, Windows, and every Linux arch. Drops into a distroless or scratch image unchanged.</p>
471+
<h3>No JVM to babysit</h3>
472+
<p>Nothing to install, provision, or keep patched. Where <code>ijhttp</code> needs a JDK&nbsp;25 in every image, httpsuite is one small binary that drops into distroless or <code>scratch</code> unchanged.</p>
473473
</div>
474474

475475
<div class="feature">
@@ -501,7 +501,7 @@ <h3>Declarative assertions</h3>
501501
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="7" height="7" rx="1"/><rect x="14" y="3" width="7" height="7" rx="1"/><rect x="3" y="14" width="7" height="7" rx="1"/><rect x="14" y="14" width="7" height="7" rx="1"/></svg>
502502
</div>
503503
<h3>Suite orchestration</h3>
504-
<p>An <code>httpsuite.yaml</code> groups files, runs them in parallel or serial with per-group timeouts, and layers <code>{{variables}}</code>. Or just point it at a directory.</p>
504+
<p>An <code>httpsuite.yaml</code> groups files (parallel or serial, per-group timeouts), runs data-driven rows from inline tables, JSON or CSV, retries a request until it passes, and shares one logged-in session across a group's <code>setup:</code> and files. Or just point it at a directory.</p>
505505
</div>
506506

507507
<div class="feature">
@@ -512,6 +512,30 @@ <h3>CI-native output</h3>
512512
<p>Coloured and aligned on a terminal, plain and diffable with no TTY, and JUnit XML via <code>--report</code> for your CI dashboard. Exit&nbsp;0 pass, 1 fail, 2 setup error.</p>
513513
</div>
514514

515+
<div class="feature">
516+
<div class="feature-icon">
517+
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="4" y1="21" x2="4" y2="14"/><line x1="4" y1="10" x2="4" y2="3"/><line x1="12" y1="21" x2="12" y2="12"/><line x1="12" y1="8" x2="12" y2="3"/><line x1="20" y1="21" x2="20" y2="16"/><line x1="20" y1="12" x2="20" y2="3"/><line x1="1" y1="14" x2="7" y2="14"/><line x1="9" y1="8" x2="15" y2="8"/><line x1="17" y1="16" x2="23" y2="16"/></svg>
518+
</div>
519+
<h3>Your JetBrains environments</h3>
520+
<p>Reads the same <code>http-client.env.json</code> and <code>.private.env.json</code> files GoLand uses — <code>$shared</code> and private overrides included — with <code>--env&nbsp;prod</code>. No re-keying config for CI.</p>
521+
</div>
522+
523+
<div class="feature">
524+
<div class="feature-icon">
525+
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><line x1="12" y1="8" x2="12" y2="16"/><line x1="8" y1="12" x2="16" y2="12"/></svg>
526+
</div>
527+
<h3>A superset of the format</h3>
528+
<p>Everything the JetBrains client parses, plus things stock <code>ijhttp</code> won't: block comments, folded and spread headers, in-place response references, and lazy <code>@var&nbsp;:=</code> declarations. Files stay portable.</p>
529+
</div>
530+
531+
<div class="feature">
532+
<div class="feature-icon">
533+
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/></svg>
534+
</div>
535+
<h3>Variables &amp; chaining</h3>
536+
<p>Dynamic <code>{{$uuid}}</code>/<code>{{$timestamp}}</code>, eager and lazy vars, a shared cookie jar, and in-place chaining like <code>{{login.response.body.$.token}}</code> — carry auth and IDs across requests without a line of script.</p>
537+
</div>
538+
515539
</div>
516540
</div>
517541
</section>
@@ -618,14 +642,14 @@ <h2>Same file in the IDE and the pipeline.</h2>
618642
<section id="install" class="install">
619643
<div class="container">
620644
<span class="eyebrow">Install</span>
621-
<h2>One binary. No runtime.</h2>
645+
<h2>No JDK required.</h2>
622646
<p class="prose" style="margin-left:auto;margin-right:auto;">
623647
Static binaries for macOS, Linux, and Windows. From source needs Go 1.26+; released
624648
binaries need nothing. MIT licensed.
625649
</p>
626650
<p class="dev-note" style="margin-left:auto;margin-right:auto;">
627651
<span class="dot"></span>
628-
<span><strong>Pre-1.0.</strong> In active development &mdash; flags and conventions may change before v1.</span>
652+
<span><strong>Actively developed.</strong> Flags and conventions may still change.</span>
629653
</p>
630654

631655
<pre class="install-code">brew install uradical/tap/httpsuite

llms.txt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,15 @@
11
# httpsuite
22

3-
> Runs JetBrains HTTP Client `.http` files as API tests in CI. Executes their pre-request and response-handler JavaScript, `client.test` assertions, and declarative `# @expect` checks — as a single static binary with no JVM and no CGO.
3+
> Runs the `.http` files you author in the JetBrains HTTP Client (or VS Code REST Client) as API tests in CI. Executes their pre-request and response-handler JavaScript, `client.test` assertions, and declarative `# @expect` checks — as a single static binary with no JVM and no CGO.
44

55
httpsuite is a test runner for the `.http` files developers author in the JetBrains HTTP Client (GoLand, IntelliJ) or the VS Code REST Client. It runs the requests, executes the associated JavaScript — pre-request scripts (`< {% %}`) and response handlers (`> {% %}`) including `client.test`/`client.assert`, `client.global` cross-request state, the response DOM for XML, `crypto`, `jwt`, and `jsonPath` — and evaluates declarative `# @expect` assertions on status, headers, JSON body, types, dates, and duration. Output is coloured on a terminal, plain and diffable in CI, and available as JUnit XML via `--report`.
66

7+
Positioning: httpsuite is part of the shift toward git-native, plain-text API testing — a developer-focused alternative to GUI- and cloud-based API clients such as Postman for the author-and-test loop. Because `.http` files are plain text, they live in the repository beside the code they test, diff in pull requests, and need no account or cloud sync. The same file a developer authors and debugs in their IDE runs unchanged in CI, so local and pipeline results agree by construction. httpsuite deliberately does not try to replace the collaboration, mocking, monitoring, or documentation features of a full API platform; it focuses on running the `.http` files you already have, in CI, with no runtime to install (no JVM, no Node). Its closest peers are other `.http` runners (JetBrains' `ijhttp`, which needs a JDK; httpyac, which needs Node) and other git-native API-testing tools that use their own formats (Bruno's `.bru`, Hurl); httpsuite's niche is being a zero-runtime CI runner for the portable `.http` format itself.
8+
9+
It parses the full portable `.http` syntax: request names (`###`/`# @name`), multi-line URLs, folded and spread headers, bodies from files (`< ./body.json`), form bodies, block comments, a per-session cookie jar, dynamic variables (`{{$uuid}}`, `{{$timestamp}}`, …), eager/lazy variables, in-place response chaining (`{{login.response.body.$.token}}`), and JetBrains environment files (`http-client.env.json`, including `$shared` and private overrides). httpsuite is a superset of the stock `ijhttp` CLI, additionally handling block comments, folded and spread headers, in-place response references, and lazy variables.
10+
11+
Beyond single files, an `httpsuite.yaml` suite groups `.http` files to run in parallel or serial with per-group timeouts and layered `{{variables}}`; it adds data-driven runs (each inline, JSON, or CSV row runs the group's files with the row's values as variables), a retry/until primitive (re-run a named request until its own assertions pass), and a shared session where `setup:` files (e.g. login) share one cookie jar, `client.global`, and response store with the group's files. This orchestration lives in the YAML, so the `.http` files stay portable and still run unchanged in the IDE.
12+
713
The JavaScript is executed by the pure-Go goja engine (ECMAScript 2015+), so httpsuite is a single statically linked binary — no JDK, no CGO — that runs on macOS, Windows, and any Linux distribution including Alpine/musl, distroless, and `FROM scratch` containers. This is the key difference from JetBrains' own `ijhttp` CLI, which requires a JDK 25.
814

915
Compatibility with the JetBrains HTTP Client is verified empirically: a conformance harness runs the same `.http` files through both httpsuite and `ijhttp` and diffs their JUnit reports test-by-test. On the shared scripting API — `client`, `response`, `request`, the DOM, and `jsonPath` — the two tools agree. `crypto` and `jwt` are httpsuite extensions not present in stock `ijhttp`.

og-image.html

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -76,9 +76,8 @@
7676
<path d="M28 33 L35 41 L50 22" fill="none" stroke="url(#g)" stroke-width="6.5" stroke-linecap="round" stroke-linejoin="round"/>
7777
</svg>
7878
<span class="name">httpsuite</span>
79-
<span class="pill">pre-1.0</span>
8079
</div>
81-
<h1>JetBrains .http tests,<br>without the JVM.</h1>
82-
<p class="lead">Run the <b>.http</b> files you author in GoLand as CI tests — one static binary, no JDK. <b>Verified conformant</b> against JetBrains' own ijhttp.</p>
80+
<h1>Your .http tests,<br>without the JVM.</h1>
81+
<p class="lead">Run the <b>.http</b> files you author in GoLand as CI tests — no JDK, no JVM. <b>JetBrains HTTP Client compatible</b>, verified against its own ijhttp.</p>
8382
</body>
8483
</html>

og-image.png

-7.46 KB
Loading

sitemap.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
33
<url>
44
<loc>https://httpsuite.dev/</loc>
5-
<lastmod>2026-07-22</lastmod>
5+
<lastmod>2026-07-23</lastmod>
66
<changefreq>monthly</changefreq>
77
<priority>1.0</priority>
88
</url>

0 commit comments

Comments
 (0)