-
-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathindex.html
More file actions
127 lines (121 loc) · 40.4 KB
/
Copy pathindex.html
File metadata and controls
127 lines (121 loc) · 40.4 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
<!doctype html><html lang=en><head><meta name=generator content="Hugo 0.163.0"><title>Home | http4k</title><meta charset=UTF-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=description content="The Functional toolkit for Kotlin HTTP applications"><link rel=preload as=font type=font/woff2 href=/fonts/space-grotesk-latin.woff2 crossorigin><link rel=preload as=font type=font/woff2 href=/fonts/jetbrains-mono-latin.woff2 crossorigin><link rel=stylesheet media=all href=/main.ec70d3365456bcdf731a5846db9505c90d9008c73ee5fd83215a6ecba4c22252.css integrity="sha256-7HDTNlRWvN9zGlhG25UFyQ2QCMc+5f2DIVpuy6TCIlI="><script defer src=/js/shared/shared.794e279e18e8d0c7343e9a15e1bb4c3b1bb3a8444d0f12a831c9f3d352fe38e8.js integrity="sha256-eU4nnhjo0Mc0PpoV4btMOxuzqERNDxKoMcnz01L+OOg="></script><script defer src=/js/timeline.js></script><link rel=apple-touch-icon-precomposed href=https://http4k.org/favicon-180.png><meta name=msapplication-TileColor content="#FFFFFF"><meta name=msapplication-TileImage content="https://http4k.org/favicon-144.png"><meta name=application-name content="http4k"><meta name=msapplication-tooltip content="The Functional toolkit for Kotlin HTTP applications"><meta name=msapplication-config content="https://http4k.org/ieconfig.xml"><link rel=apple-touch-icon-precomposed sizes=180x180 href=https://http4k.org/favicon-180.png><link rel=apple-touch-icon-precomposed sizes=152x152 href=https://http4k.org/favicon-152.png><link rel=apple-touch-icon-precomposed sizes=144x144 href=https://http4k.org/favicon-144.png><link rel=apple-touch-icon-precomposed sizes=120x120 href=https://http4k.org/favicon-120.png><link rel=apple-touch-icon-precomposed sizes=114x114 href=https://http4k.org/favicon-114.png><link rel=apple-touch-icon-precomposed sizes=76x76 href=https://http4k.org/favicon-76.png><link rel=apple-touch-icon-precomposed sizes=72x72 href=https://http4k.org/favicon-72.png><link rel=icon href=https://http4k.org/favicon-32.png sizes=32x32><link rel="shortcut icon" sizes=196x196 href=https://http4k.org/favicon-196.png><link rel=apple-touch-icon sizes=180x180 href=/favicon-180.png><link rel=icon type=image/png sizes=32x32 href=/favicon-32.png><link rel=icon type=image/png sizes=16x16 href=/favicon-16.png><link rel=manifest href=/site.webmanifest><meta name=apple-mobile-web-app-title content="http4k"><meta name=application-name content="http4k"><meta name=msapplication-TileColor content="#FFFFFF"><meta name=theme-color content="#FFFFFF"><script async src="https://www.googletagmanager.com/gtag/js?id=G-YSM9QLBYXY"></script><script>window.dataLayer=window.dataLayer||[];function gtag(){dataLayer.push(arguments)}gtag("js",new Date),gtag("config","G-YSM9QLBYXY",{url_passthrough:!1})</script><script src=https://cdn.usefathom.com/script.js data-site=BGFZWRDS defer></script><meta name=twitter:card content="summary_large_image"><meta name=twitter:image content="https://http4k.org/images/social-logo.png"><meta name=twitter:title content="Home"><meta name=twitter:description content="The Functional toolkit for Kotlin HTTP applications"><meta property="og:url" content="https://http4k.org/"><meta property="og:site_name" content="http4k"><meta property="og:title" content="Home"><meta property="og:description" content="The Functional toolkit for Kotlin HTTP applications"><meta property="og:locale" content="en_us"><meta property="og:type" content="website"><meta property="og:image" content="https://http4k.org/images/social-logo.png"><meta itemprop=name content="Home"><meta itemprop=description content="The Functional toolkit for Kotlin HTTP applications"><meta itemprop=datePublished content="2026-07-27T00:00:00+00:00"><meta itemprop=dateModified content="2026-07-27T00:00:00+00:00"><meta itemprop=image content="https://http4k.org/images/social-logo.png"></head><body><style>.dist-banner{background:var(--ink);color:#fff;font-family:var(--font-sans);font-size:.875rem;line-height:1.4;padding:10px 20px;display:flex;align-items:center;justify-content:center;gap:16px;position:relative;z-index:1031}.dist-banner[hidden]{display:none}.dist-banner a{color:var(--orange);text-decoration:none;white-space:nowrap}.dist-banner a:hover{text-decoration:underline}.dist-banner__close{background:0 0;border:0;color:#fff;opacity:.7;font-size:1.25rem;line-height:1;padding:0 4px;cursor:pointer;flex-shrink:0}.dist-banner__close:hover{opacity:1}.dist-banner__short{display:none}@media(max-width:575.98px){.dist-banner{padding:8px 14px;gap:10px}.dist-banner__full{display:none}.dist-banner__short{display:inline}}.dist-banner:not([hidden])~.site-header:has(+.ink-hero){top:var(--dist-banner-h,0px)}</style><div class=dist-banner id=dist-banner hidden><span><span class=dist-banner__full>From 1 October 2026, http4k releases reach Maven Central
quarterly. <a href=https://maven.http4k.org>maven.http4k.org</a> releases
continue every 1-2 weeks.
<a href=https://http4k.org/distribution/>What this means →</a>
</span><span class=dist-banner__short>From 1 October 2026, http4k distribution is changing.
<a href=https://http4k.org/distribution/>Details →</a>
</span></span><button type=button class=dist-banner__close aria-label="Dismiss notice">×</button></div><script>(function(){var t,n,s="http4k-distribution-notice-dismissed",i=7*24*60*60*1e3,e=document.getElementById("dist-banner"),o=document.documentElement;try{if(t=parseInt(localStorage.getItem(s),10),t>0&&Date.now()-t<i)return}catch{}n=function(){o.style.setProperty("--dist-banner-h",e.offsetHeight+"px")},e.hidden=!1,n(),window.ResizeObserver&&new ResizeObserver(n).observe(e),e.querySelector(".dist-banner__close").addEventListener("click",function(){e.hidden=!0,o.style.setProperty("--dist-banner-h","0px");try{localStorage.setItem(s,String(Date.now()))}catch{}})})()</script><header class="landing landing--ink"><div class=landing-bg></div><div class=ink-hero__glow></div><nav class="navbar navbar-expand-xl navbar-dark"><div class=container><a class="navbar-brand d-flex align-items-center" href=https://http4k.org/><img class="nav-logo nav-logo--white" style=min-height:40px src=/images/logo_hu_d370df57676f24c3.webp width=128 height=40 alt=http4k>
<img class="nav-logo nav-logo--colour" style=min-height:40px src=/images/logo-http4k_hu_c8395767f4abab1b.webp width=128 height=40 alt=http4k>
</a><button class=navbar-toggler type=button data-bs-toggle=collapse data-bs-target=#navbarContent aria-controls=navbarContent aria-expanded=false aria-label="Toggle navigation">
<span class=navbar-toggler-icon></span></button><div class="collapse navbar-collapse" id=navbarContent><ul class="navbar-nav ms-auto mb-2 mb-xl-0"><li class="nav-item dropdown"><a class="nav-link dropdown-toggle text-white px-3" id=navbarDropdown role=button data-bs-toggle=dropdown aria-expanded=false>About</a><ul class=dropdown-menu aria-labelledby=navbarDropdown><li><a class=dropdown-item href=/overview/>Why http4k</a></li><li><a class=dropdown-item href=/company/>Company</a></li><li><a class=dropdown-item href=/news/>News</a></li><li><a class=dropdown-item href=/showcase/>Showcase</a></li><li><a class=dropdown-item href=/community/>Community</a></li><li><a class=dropdown-item href=https://kotlinlang.slack.com/archives/C5AL3AKUY>Community Slack</a></li></ul></li><li class="nav-item dropdown"><a class="nav-link dropdown-toggle text-white px-3" id=navbarDropdown role=button data-bs-toggle=dropdown aria-expanded=false>Learn</a><ul class=dropdown-menu aria-labelledby=navbarDropdown><li><a class=dropdown-item href=/learn/>About the docs</a></li><li><a class=dropdown-item href=/quickstart/>Quickstart</a></li><li><a class=dropdown-item href=/tutorial/>Tutorials</a></li><li><a class=dropdown-item href=/howto/>How-to guides</a></li><li><a class=dropdown-item href=/performance/>Performance</a></li><li><a class=dropdown-item href=/faq/>FAQ</a></li><li><a class=dropdown-item href=https://toolbox.http4k.org/>Toolbox</a></li><li><a class=dropdown-item href=https://plugins.jetbrains.com/plugin/25243-http4k-toolbox>IntelliJ Plugin</a></li><li><a class=dropdown-item href=https://github.com/http4k/agent-skills>Agent Skills</a></li></ul></li><li class="nav-item dropdown"><a class="nav-link dropdown-toggle text-white px-3" id=navbarDropdown role=button data-bs-toggle=dropdown aria-expanded=false>Ecosystem</a><ul class=dropdown-menu aria-labelledby=navbarDropdown><li><a class=dropdown-item href=/ecosystem/>Overview</a></li><li><a class=dropdown-item href=/ecosystem/http4k/>http4k Core</a></li><li><a class=dropdown-item href=/ecosystem/ai/>http4k AI</a></li><li><a class=dropdown-item href=/ecosystem/connect/>http4k Connect</a></li><li><a class=dropdown-item href=/ecosystem/pro/>http4k Pro</a></li><li><a class=dropdown-item href=/ecosystem/enterprise/>http4k Enterprise</a></li><li><a class=dropdown-item href=/ecosystem/changelog/>Changelog</a></li></ul></li><li class=nav-item><a class="nav-link text-primary px-3" href=/pro/>Pro</a></li><li class="nav-item dropdown"><a class="nav-link dropdown-toggle text-white px-3" id=navbarDropdown role=button data-bs-toggle=dropdown aria-expanded=false>Enterprise</a><ul class=dropdown-menu aria-labelledby=navbarDropdown><li><a class=dropdown-item href=/enterprise/>Enterprise Edition</a></li><li><a class=dropdown-item href=/consulting/>Consulting</a></li><li><a class=dropdown-item href=/training/>Developer Training</a></li><li><a class=dropdown-item href=http://http4k.slack.com/>http4k EE Slack</a></li></ul></li><li class="nav-item dropdown"><a class="nav-link dropdown-toggle text-white px-3" id=navbarDropdown role=button data-bs-toggle=dropdown aria-expanded=false>Security</a><ul class=dropdown-menu aria-labelledby=navbarDropdown><li><a class=dropdown-item href=/supply-chain-security/>Supply Chain Security</a></li><li><a class=dropdown-item href=https://verify.http4k.org>http4k Verify</a></li><li><a class=dropdown-item href=/security/>Security Advisories</a></li><li><a class=dropdown-item href=/cvd-policy/>CVD Policy</a></li></ul></li><li id=searchBox class="nav-item searchBox align-content-center"></li><li class=nav-item><a class="nav-link text-primary px-3" href=https://github.com/http4k/http4k><img src=/images/octocat-inverted-64.png style=height:1.5rem alt=github></a></li><li class="nav-item align-content-center"><a class="cta-btn cta-btn--primary nav-cta" href=mailto:solutions@http4k.org>Talk to us</a></li></ul></div></div></nav><div class="container h-80 text-white"><div class="row align-items-center h-100 g-5"><div class=col-lg-6><div class=hero-kicker>// THE FUNCTIONAL TOOLKIT FOR KOTLIN · SINCE 2017</div><h1 class=hero-title>Server as a Function.<br>We meant it <span class=hero-em>literally</span>.</h1><p class=hero-sub>No annotations. No reflection. No container. No magic. Just immutable
Kotlin functions you can read, test in-memory in milliseconds, and actually trust in
production - from your first endpoint to your hundredth service.</p><div class="d-flex flex-wrap gap-2 mb-4"><a class="btn btn-secondary btn-lg" href=/quickstart/><b>Start building</b></a>
<a class="btn btn-outline-light btn-lg" href=/pro>See what's new in Pro →</a></div><ul class=hero-stats><li>6M+ downloads / month</li><li>200+ modules</li><li>0 reflection</li><li>Apache 2.0 core</li></ul></div><div class=col-lg-6><div class=code-card><div class=code-card__bar><span class="code-card__dot code-card__dot--r"></span>
<span class="code-card__dot code-card__dot--y"></span>
<span class="code-card__dot code-card__dot--g"></span>
<span class=code-card__file>HelloHttp4k.kt</span></div><div class=code-card__body><pre><span class=tok-com>// a server is just a function. that's the whole trick.</span>
<span class=tok-key>val</span> app: HttpHandler = { request ->
Response(OK).body(<span class=tok-str>"Hello, "</span> + request.query(<span class=tok-str>"name"</span>))
}
<span class=tok-com>// filters compose behaviours. no magic required.</span>
<span class=tok-key>val</span> stack = DebuggingFilters.PrintRequest()
.then(ServerFilters.GZip())
.then(app)
stack.asServer(<span class=tok-type>SunHttp</span>(<span class=tok-num>9000</span>)).start()
<span class=tok-com>// → up in milliseconds. swap with 1 LOC.</span> <span class=code-cursor></span></pre></div></div></div></div></div></header><section class=main><h1 class=visually-hidden>http4k - the functional toolkit for Kotlin HTTP applications</h1><section class=section><div class=container><div class="section-head mb-4"><div class=eyebrow>// MORE THAN A CORE</div><h2>There's a lot going on around here.</h2></div><div class=spotlight__tabs id=spotlightTabs><button type=button class="chip active" data-index=0>News</button>
<button type=button class=chip data-index=1>Showcase</button>
<button type=button class=chip data-index=2>Supply Chain Security</button>
<button type=button class=chip data-index=3>Pro</button>
<button type=button class=chip data-index=4>Enterprise</button>
<button type=button class=chip data-index=5>Ecosystem</button></div><div class=spotlight__panels><div class="spotlight__panel is-active" data-index=0><div class="row g-5 align-items-center"><div class=col-lg-5><div class=spotlight__kick>LATEST FROM THE TEAM</div><h3 class=spotlight__title>Publishing our homework: what running http4k responsibly actually takes</h3><p class=spotlight__body>http4k hit the OpenSSF Best Practices silver badge at 100%. Here is the unglamorous work behind it - reporting, change control, signed releases, dependency hygiene - and the one gold criterion we deliberately skip.</p><a class=spotlight__link href=/news/publishing-our-homework/>Read the news →</a></div><div class=col-lg-7><div class=code-card><div class=code-card__bar><span class="code-card__dot code-card__dot--r"></span>
<span class="code-card__dot code-card__dot--y"></span>
<span class="code-card__dot code-card__dot--g"></span>
<span class=code-card__file>news · 2026</span></div><div class=code-card__body><pre><span class=tok-ok>✓ OpenSSF silver badge · 100%</span>
<span class=tok-com>signed releases, threat model, CVD</span>
<span class=tok-ok>✓ trunk-based by choice</span>
</pre></div></div></div></div></div><div class=spotlight__panel data-index=1><div class="row g-5 align-items-center"><div class=col-lg-5><div class=spotlight__kick>IN ACTION · TALK</div><h3 class=spotlight__title>How Kotlin Powers Functional Design: MCP Edition</h3><p class=spotlight__body>See http4k's functional approach applied to the Model Context Protocol - building agent tooling in Kotlin, live. Talk, slides and runnable code.</p><a class=spotlight__link href="https://www.youtube.com/watch?v=Xmkl7Y3lwUk">Watch the talk →</a></div><div class=col-lg-7><div class=code-card><div class=code-card__bar><span class="code-card__dot code-card__dot--r"></span>
<span class="code-card__dot code-card__dot--y"></span>
<span class="code-card__dot code-card__dot--g"></span>
<span class=code-card__file>talk · 2025</span></div><div class=code-card__body><pre><span class=tok-ok>✓ MCP Edition · functional design</span>
<span class=tok-com>slides · speakerdeck</span>
<span class=tok-com>code · kotlinconf.http4k.org</span>
</pre></div></div></div></div></div><div class=spotlight__panel data-index=2><div class="row g-5 align-items-center"><div class=col-lg-5><div class=spotlight__kick>SUPPLY CHAIN · EU CRA 2026</div><h3 class=spotlight__title>Prove your dependencies before they compile</h3><p class=spotlight__body>Every artifact ships with SLSA L2 provenance, signed SBOMs and cosign signatures. http4k Verify checks them at build time - getting you ahead of the Cyber Resilience Act deadline.</p><a class=spotlight__link href=https://verify.http4k.org>Explore Verify →</a></div><div class=col-lg-7><div class=code-card><div class=code-card__bar><span class="code-card__dot code-card__dot--r"></span>
<span class="code-card__dot code-card__dot--y"></span>
<span class="code-card__dot code-card__dot--g"></span>
<span class=code-card__file>build · http4k Verify</span></div><div class=code-card__body><pre><span class=tok-str>$ ./gradlew build</span>
<span class=tok-com>> Task :verifyHttp4kArtifacts</span>
<span class=tok-ok>✓ http4k-core sig · sbom · slsa-L2</span>
<span class=tok-ok>✓ http4k-connect-amazon sig · sbom · slsa-L2</span>
<span class=tok-ok>✓ all artifacts verified · 0 issues</span>
<span class=tok-ok>✓ BUILD SUCCESSFUL in 6s</span>
</pre></div></div></div></div></div><div class=spotlight__panel data-index=3><div class="row g-5 align-items-center"><div class=col-lg-5><div class=spotlight__kick>PRO MODULES</div><h3 class=spotlight__title>Premium power tools, same DNA</h3><p class=spotlight__body>Wiretap, WebAuthn, MCP, X402 and Server Hot Reload - commercially-licensed modules for teams running http4k for real. Free for individuals and small teams.</p><a class=spotlight__link href=/pro/>Browse Pro →</a></div><div class=col-lg-7><div class=code-card><div class=code-card__bar><span class="code-card__dot code-card__dot--r"></span>
<span class="code-card__dot code-card__dot--y"></span>
<span class="code-card__dot code-card__dot--g"></span>
<span class=code-card__file>org.http4k.pro</span></div><div class=code-card__body><pre>Wiretap - trace & debug
WebAuthn - passkeys
MCP - agent tools
Hot Reload - fast feedback
X402 - machine payments
</pre></div></div></div></div></div><div class=spotlight__panel data-index=4><div class="row g-5 align-items-center"><div class=col-lg-5><div class=spotlight__kick>ENTERPRISE EDITION</div><h3 class=spotlight__title>Production peace of mind</h3><p class=spotlight__body>Up to 24 months LTS, priority support from the people who wrote it, source access, signed licence reports and every Pro module - in one subscription.</p><a class=spotlight__link href=/enterprise/>Explore Enterprise →</a></div><div class=col-lg-7><div class=code-card><div class=code-card__bar><span class="code-card__dot code-card__dot--r"></span>
<span class="code-card__dot code-card__dot--y"></span>
<span class="code-card__dot code-card__dot--g"></span>
<span class=code-card__file>LTS · support · provenance</span></div><div class=code-card__body><pre><span class=tok-ok>✓ 24-month LTS channel</span>
<span class=tok-ok>✓ Priority Slack & email</span>
<span class=tok-ok>✓ Signed licence reports</span>
<span class=tok-ok>✓ All Pro modules included</span>
</pre></div></div></div></div></div><div class=spotlight__panel data-index=5><div class="row g-5 align-items-center"><div class=col-lg-5><div class=spotlight__kick>FOUR ECOSYSTEMS</div><h3 class=spotlight__title>More than just another HTTP library</h3><p class=spotlight__body>Servers, clients, serverless, formats, templates, security, testing, AI agents and cloud connectors - 200+ modules across Core, AI, Connect and Pro, all built on one functional idea.</p><a class=spotlight__link href=/ecosystem/>Explore the ecosystem →</a></div><div class=col-lg-7><div class=code-card><div class=code-card__bar><span class="code-card__dot code-card__dot--r"></span>
<span class="code-card__dot code-card__dot--y"></span>
<span class="code-card__dot code-card__dot--g"></span>
<span class=code-card__file>200+ modules · one BOM</span></div><div class=code-card__body><pre>http4k-core
http4k-connect-amazon-s3
http4k-ai-mcp-sdk
http4k-security-oauth
http4k-format-jackson
http4k-testing-approval
</pre></div></div></div></div></div></div></div></section><script>(function(){var e,t,n,s,o,r,l,a=document.getElementById("spotlightTabs");if(!a)return;t=a.querySelectorAll(".chip"),r=document.querySelectorAll(".spotlight__panel"),s=t.length,o=0;function c(e){o=e,t.forEach(function(t,n){t.classList.toggle("active",n===e)}),r.forEach(function(t){t.classList.toggle("is-active",t.getAttribute("data-index")===String(e))})}t.forEach(function(e,t){e.addEventListener("click",function(){c(t),i()})}),l=window.matchMedia("(prefers-reduced-motion: reduce)").matches,e=null;function d(){e&&(clearInterval(e),e=null)}function i(){if(d(),l||s<2)return;e=setInterval(function(){c((o+1)%s)},6e3)}n=document.querySelector(".spotlight__panels"),n&&(n.addEventListener("mouseenter",d),n.addEventListener("mouseleave",i)),i()})()</script><section class="section section--off"><div class=container><div class="section-head mb-5"><h2>Read it. Test it. Trust it.</h2><p class=section-lede>Two function types power the entire toolkit. Everything - routing, auth,
clients, serverless - composes from them. What you read is exactly what runs.</p></div><div class="row g-4"><div class=col-lg-6><div class="code-card h-100"><div class="code-card__bar code-card__bar--label"><span class=code-card__file>CoreTypes.kt</span>
<span class="code-card__tag code-card__tag--blue">the two types</span></div><div class=code-card__body><pre><span class=tok-com>// 1. a handler is a function</span>
<span class=tok-key>typealias</span> HttpHandler = (Request) -> Response
<span class=tok-com>// 2. a filter wraps a handler</span>
<span class=tok-key>typealias</span> Filter = (HttpHandler) -> HttpHandler</pre></div></div></div><div class=col-lg-6><div class="code-card h-100"><div class="code-card__bar code-card__bar--label"><span class=code-card__file>AppTest.kt</span>
<span class="code-card__tag code-card__tag--green">no server, no ports</span></div><div class=code-card__body><pre><span class=tok-com>// it's a function - just call it.</span>
<span class=tok-key>val</span> res = app(Request(GET, <span class=tok-str>"/?name=ada"</span>))
assertThat(res.status, equalTo(OK))
assertThat(res.bodyString(),
equalTo(<span class=tok-str>"Hello, ada"</span>))
<span class=tok-ok>// ✓ passes in milliseconds - no server, no @SpringBootTest.</span></pre></div></div></div></div><div class=callout-orange><span class=callout-orange__lead>No server required.</span>
<span>Your whole stack runs in-memory in a unit test. That's not a testing strategy we bolted
on - it's just what happens when your app is a function.</span></div></div></section><section class=section><div class=container><div class="section-head section-head--center mb-5"><div class=eyebrow>// THE TALE OF THE TAPE</div><h2>How it stacks up against the framework you're escaping.</h2><p class=section-lede>Yes, we're biased. No, we're not wrong. Bring your own benchmarks -
ours are in the repo.</p></div><div class=tape><div class=tape__head><div class="tape__cell tape__feature">In the ring</div><div class="tape__cell tape__h4k">http4k</div><div class="tape__cell tape__them">The Usual Framework™</div></div><div class=tape__row><div class="tape__cell tape__feature">Annotations & reflection</div><div class="tape__cell tape__h4k">Zero</div><div class="tape__cell tape__them">Everywhere you look</div></div><div class=tape__row><div class="tape__cell tape__feature">Framework container</div><div class="tape__cell tape__h4k">What container?</div><div class="tape__cell tape__them">Can't start without it</div></div><div class=tape__row><div class="tape__cell tape__feature">Test the whole app without a server</div><div class="tape__cell tape__h4k">In-memory ✓</div><div class="tape__cell tape__them">Spin one up & wait</div></div><div class=tape__row><div class="tape__cell tape__feature">Move server / platform</div><div class="tape__cell tape__h4k">Change one line</div><div class="tape__cell tape__them">Re-architect</div></div><div class=tape__row><div class="tape__cell tape__feature">Lines to a running "hello"</div><div class="tape__cell tape__h4k">3</div><div class="tape__cell tape__them">…a starter, a wizard, 4 files</div></div><div class=tape__row><div class="tape__cell tape__feature">After 9 years running it</div><div class="tape__cell tape__h4k">No regrets</div><div class="tape__cell tape__them">…it's complicated</div></div></div></div></section><section class="section section--off"><div class=container><div class="section-head mb-5"><h2>Open source at the core. We built some serious kit on top of it.</h2><p class=section-lede>Premium modules, long-term support and verifiable supply-chain security -
for the teams running http4k where it really counts. Buying them funds the open source you already
depend on.</p></div><div class="row g-4 row-cols-1 row-cols-md-3"><div class=col><a class=product-card href=/pro><div class=product-card__kick>PRO MODULES <span class=product-card__badge>NEW</span></div><h3>Premium building blocks</h3><p>Battle-tested, commercially-licensed modules from real enterprise delivery. Free for
individuals, non-profits and teams under $1M - because good ideas come from scrappy
teams.</p><span class=product-card__link>Browse Pro modules →</span></a></div><div class=col><a class="product-card product-card--ink" href=/enterprise><div class="product-card__kick product-card__kick--cyan">ENTERPRISE EDITION</div><h3>Everything, supported</h3><p>Up to 24 months LTS, priority support over Slack & email, source access, signed licence
reports, supply-chain provenance - and every Pro module included.</p><span class="product-card__link product-card__link--cyan">Explore Enterprise →</span></a></div><div class=col><a class=product-card href=https://verify.http4k.org><div class="product-card__kick product-card__kick--blue">VERIFY</div><h3>Supply chain, proven</h3><p>One line of Gradle config validates signatures, SBOMs and SLSA provenance for every http4k
dependency - at build time, before your code compiles.</p><span class="product-card__link product-card__link--blue">See how Verify works →</span></a></div></div></div></section><section class=section><div class=container><div class="row g-5 align-items-center"><div class=col-lg-5><div class=section-head><div class=eyebrow>// SUPPLY CHAIN SECURITY</div><h2>From Sept 2026, "trust us" stops being a valid answer.</h2><p class=section-lede>The EU Cyber Resilience Act will demand verifiable provenance and
machine-readable SBOMs for everything shipped into Europe. http4k delivers it today -
every artifact ships with SLSA L2 provenance, CycloneDX SBOMs, signed licence reports and
cosign signatures.</p></div><ul class="check-list my-4"><li>Cryptographically linked to source commit & CI run</li><li>Machine-readable SBOMs for every module</li><li>Signed, audit-ready licence reports</li></ul><a class="btn btn-secondary btn-lg" href=https://verify.http4k.org><b>Explore http4k Verify →</b></a></div><div class=col-lg-7><div class=code-card><div class=code-card__bar><span class="code-card__dot code-card__dot--r"></span>
<span class="code-card__dot code-card__dot--y"></span>
<span class="code-card__dot code-card__dot--g"></span>
<span class=code-card__file>build · http4k Verify</span></div><div class=code-card__body><pre><span class=tok-str>$</span> ./gradlew build
<span class=tok-key>> Task :verifyHttp4kArtifacts</span>
<span class=tok-ok>✓</span> http4k-core <span class=tok-com>sig · sbom · slsa-L2</span>
<span class=tok-ok>✓</span> http4k-pro-failsafe <span class=tok-com>sig · sbom · slsa-L2</span>
<span class=tok-ok>✓</span> http4k-connect-amazon <span class=tok-com>sig · sbom · slsa-L2</span>
<span class=tok-ok>✓</span> all artifacts verified · 0 issues
<span class=tok-com> attestation → build/http4k-verify.json</span>
<span class=tok-ok>BUILD SUCCESSFUL</span> <span class=tok-com>in 6s</span> <span class=code-cursor></span></pre></div></div></div></div></div></section><section class="section section--off"><div class=container><div class="d-flex justify-content-between align-items-end flex-wrap gap-3 mb-4"><div class="section-head mb-0"><h2 class=mb-2>Plays nicely with your entire stack.</h2><p class="section-lede mb-0">200+ modules across servers, clients, formats, cloud, AI and testing - http4k ships a supported integration for each.</p></div><a class="btn btn-outline-primary" href=/ecosystem/>Browse the ecosystem →</a></div></div><div class=marquee><div class="marquee__track marquee__track--l"><div class=marquee__set><span class=pill>a2a</span><span class=pill>alibaba</span><span class=pill>apache</span><span class=pill>apprunner</span><span class=pill>argo</span><span class=pill>aws</span><span class=pill>azure</span><span class=pill>chaos monkey</span><span class=pill>claude</span><span class=pill>cloud events</span><span class=pill>cloudfront</span><span class=pill>cloudwatch</span><span class=pill>cloudwatch logs</span><span class=pill>cognito</span><span class=pill>container credentials</span><span class=pill>dataframe</span><span class=pill>datastar</span><span class=pill>digest</span><span class=pill>docker</span><span class=pill>dynamodb</span><span class=pill>eventbridge</span><span class=pill>evidently</span><span class=pill>failsafe</span><span class=pill>firehose</span><span class=pill>freemarker</span><span class=pill>fuel</span><span class=pill>google analytics</span><span class=pill>gcf</span><span class=pill>gcp</span><span class=pill>gemini</span><span class=pill>github</span><span class=pill>gitlab</span><span class=pill>graphql</span><span class=pill>gson</span><span class=pill>hamkrest</span><span class=pill>handlebars</span><span class=pill>helidon</span><span class=pill>hot reload</span><span class=pill>htmlflow</span><span class=pill>htmx</span><span class=pill>iam</span><span class=pill>iot</span><span class=pill>iot dataplane</span><span class=pill>iot jobs dataplane</span><span class=pill>jackson</span><span class=pill>jakarta</span><span class=pill>jdbc</span><span class=pill>jetty</span><span class=pill>jsonrpc</span><span class=pill>json schema</span><span class=pill>jte</span><span class=pill>k8s</span><span class=pill>kafka</span><span class=pill>klaxon</span><span class=pill>kms</span></div><div class="marquee__set marquee__dup" aria-hidden=true><span class=pill>a2a</span><span class=pill>alibaba</span><span class=pill>apache</span><span class=pill>apprunner</span><span class=pill>argo</span><span class=pill>aws</span><span class=pill>azure</span><span class=pill>chaos monkey</span><span class=pill>claude</span><span class=pill>cloud events</span><span class=pill>cloudfront</span><span class=pill>cloudwatch</span><span class=pill>cloudwatch logs</span><span class=pill>cognito</span><span class=pill>container credentials</span><span class=pill>dataframe</span><span class=pill>datastar</span><span class=pill>digest</span><span class=pill>docker</span><span class=pill>dynamodb</span><span class=pill>eventbridge</span><span class=pill>evidently</span><span class=pill>failsafe</span><span class=pill>firehose</span><span class=pill>freemarker</span><span class=pill>fuel</span><span class=pill>google analytics</span><span class=pill>gcf</span><span class=pill>gcp</span><span class=pill>gemini</span><span class=pill>github</span><span class=pill>gitlab</span><span class=pill>graphql</span><span class=pill>gson</span><span class=pill>hamkrest</span><span class=pill>handlebars</span><span class=pill>helidon</span><span class=pill>hot reload</span><span class=pill>htmlflow</span><span class=pill>htmx</span><span class=pill>iam</span><span class=pill>iot</span><span class=pill>iot dataplane</span><span class=pill>iot jobs dataplane</span><span class=pill>jackson</span><span class=pill>jakarta</span><span class=pill>jdbc</span><span class=pill>jetty</span><span class=pill>jsonrpc</span><span class=pill>json schema</span><span class=pill>jte</span><span class=pill>k8s</span><span class=pill>kafka</span><span class=pill>klaxon</span><span class=pill>kms</span></div></div></div><div class=marquee><div class="marquee__track marquee__track--r"><div class=marquee__set><span class=pill>kondor</span><span class=pill>kotest</span><span class=pill>kotlinx serialization</span><span class=pill>ktor</span><span class=pill>lambda</span><span class=pill>langchain4j</span><span class=pill>lm studio</span><span class=pill>mattermost</span><span class=pill>mcp</span><span class=pill>micrometer</span><span class=pill>micronaut</span><span class=pill>moshi</span><span class=pill>netty</span><span class=pill>oauth</span><span class=pill>okhttp</span><span class=pill>ollama</span><span class=pill>openai</span><span class=pill>openapi</span><span class=pill>openfeature</span><span class=pill>opentelemetry</span><span class=pill>openwhisk</span><span class=pill>pebble</span><span class=pill>playwright</span><span class=pill>powerassert</span><span class=pill>pug4j</span><span class=pill>ratpack</span><span class=pill>redis</span><span class=pill>redoc</span><span class=pill>resilience4j</span><span class=pill>rocker</span><span class=pill>route53</span><span class=pill>s3</span><span class=pill>secrets manager</span><span class=pill>servirtium</span><span class=pill>servlet</span><span class=pill>ses</span><span class=pill>slack</span><span class=pill>sns</span><span class=pill>spring</span><span class=pill>sqs</span><span class=pill>strikt</span><span class=pill>sts</span><span class=pill>swagger</span><span class=pill>systems manager</span><span class=pill>tencent</span><span class=pill>thymeleaf</span><span class=pill>toon</span><span class=pill>tracerbullet</span><span class=pill>undertow</span><span class=pill>vertx</span><span class=pill>webauthn</span><span class=pill>webdriver</span><span class=pill>wiretap</span><span class=pill>x402</span><span class=pill>xml</span></div><div class="marquee__set marquee__dup" aria-hidden=true><span class=pill>kondor</span><span class=pill>kotest</span><span class=pill>kotlinx serialization</span><span class=pill>ktor</span><span class=pill>lambda</span><span class=pill>langchain4j</span><span class=pill>lm studio</span><span class=pill>mattermost</span><span class=pill>mcp</span><span class=pill>micrometer</span><span class=pill>micronaut</span><span class=pill>moshi</span><span class=pill>netty</span><span class=pill>oauth</span><span class=pill>okhttp</span><span class=pill>ollama</span><span class=pill>openai</span><span class=pill>openapi</span><span class=pill>openfeature</span><span class=pill>opentelemetry</span><span class=pill>openwhisk</span><span class=pill>pebble</span><span class=pill>playwright</span><span class=pill>powerassert</span><span class=pill>pug4j</span><span class=pill>ratpack</span><span class=pill>redis</span><span class=pill>redoc</span><span class=pill>resilience4j</span><span class=pill>rocker</span><span class=pill>route53</span><span class=pill>s3</span><span class=pill>secrets manager</span><span class=pill>servirtium</span><span class=pill>servlet</span><span class=pill>ses</span><span class=pill>slack</span><span class=pill>sns</span><span class=pill>spring</span><span class=pill>sqs</span><span class=pill>strikt</span><span class=pill>sts</span><span class=pill>swagger</span><span class=pill>systems manager</span><span class=pill>tencent</span><span class=pill>thymeleaf</span><span class=pill>toon</span><span class=pill>tracerbullet</span><span class=pill>undertow</span><span class=pill>vertx</span><span class=pill>webauthn</span><span class=pill>webdriver</span><span class=pill>wiretap</span><span class=pill>x402</span><span class=pill>xml</span></div></div></div></section><section class=section><div class=container><div class="section-head mb-5"><h2>Battle-tested where it actually matters.</h2><p class=section-lede>Not a side project. http4k runs high-volume systems in banking, publishing and
government - and has done for the better part of a decade.</p></div><div class="mosaic receipts-grid mb-4"><div class=receipt-tile><div class=receipt-tile__num>5M+</div><div class=receipt-tile__label>downloads / month</div></div><div class=receipt-tile><div class=receipt-tile__num>200+</div><div class=receipt-tile__label>modules & integrations</div></div><div class=receipt-tile><div class=receipt-tile__num>9 yrs</div><div class=receipt-tile__label>in production, since 2017</div></div><div class=receipt-tile><div class=receipt-tile__num>0</div><div class=receipt-tile__label>magic, ever.</div></div></div><div class="row g-4"><div class=col-lg-7><div class=cve-card><div class=cve-card__kick>RADICAL TRANSPARENCY</div><p class=cve-card__lead>Our first-ever CVE was a juicy 9.8. We disclosed it publicly the same
day - because that's what you actually do.</p><p class=cve-card__body>We publish our security homework in the open: CVD policy, signed
advisories, public signing keys. The big vendors quietly hope you don't ask. We'd rather just
show you.</p></div></div><div class=col-lg-5><div class=partners-card><div class=partners-card__kick>BACKED & TRUSTED BY</div><div class=partners-card__logos><a href=https://springernature.com><img src=/images/SN_Technology_simple_black_resized.png alt="Springer Nature Technology"></a>
<a href=https://kotlinfoundation.org><img src=/images/kotlin-foundation.png alt="Kotlin Foundation"></a></div><p class=partners-card__note>Corporate partners funding continued innovation on the project.
Using http4k and want to take part?
<a href="mailto:info@http4k.org?subject=Corporate Sponsorship">Get in touch</a>.</p></div></div></div></div></section><section class="section section--off"><div class=container><div class=final-cta><div class=final-cta__glow></div><div class=final-cta__inner><h2 class=final-cta__title>Stop fighting your framework.</h2><p class=final-cta__sub>Start with the free, open-source core. Scale to Pro and Enterprise on the
exact same foundation - no rewrite, no lock-in, no surprises.</p><div class="d-flex gap-2 flex-wrap justify-content-center"><a class="btn btn-secondary btn-lg" href=/quickstart/><b>Start building</b></a>
<a class="btn btn-outline-light btn-lg" href=mailto:enterprise@http4k.org>Talk to us about Enterprise</a></div></div></div></div></section></section><footer><div class=container><div class="row pb-3 text-start text-xl-start"><div class="col-md-6 col-lg-3" style=width:200px><a class=p-0 href=https://http4k.org/><img src=/images/logo_hu_d370df57676f24c3.webp alt=logo width=50% loading=lazy></a><p></p><ul class=list-unstyled><li class="small text-white text-decoration-none">http4k Limited</li><li class="small text-white text-decoration-none">Registered in England & Wales</li><li class="small text-white text-decoration-none">Reg no: 14687467</li></ul></div><div class="col-xs-6 col-md"><h5>Product</h5><ul class=list-unstyled><li><a class="small text-white text-decoration-none" href=https://http4k.org/pro/>Pro</a></li><li><a class="small text-white text-decoration-none" href=https://http4k.org/enterprise/>Enterprise</a></li><li><a class="small text-white text-decoration-none" href=https://http4k.org/supply-chain-security/>Supply Chain Security</a></li><li><a class="small text-white text-decoration-none" href=https://verify.http4k.org>http4k Verify</a></li></ul></div><div class="col-xs-6 col-md"><h5>Learn</h5><ul class=list-unstyled><li><a class="small text-white text-decoration-none" href=https://http4k.org/quickstart/>Quickstart</a></li><li><a class="small text-white text-decoration-none" href=https://http4k.org/tutorial/>Tutorials</a></li><li><a class="small text-white text-decoration-none" href=https://http4k.org/howto/>How-to guides</a></li><li><a class="small text-white text-decoration-none" href=https://http4k.org/ecosystem/>Docs</a></li></ul></div><div class="col-xs-6 col-md"><h5>Resources</h5><ul class=list-unstyled><li><a class="small text-white text-decoration-none" href=https://http4k.org/news/>News</a></li><li><a class="small text-white text-decoration-none" href=https://http4k.org/showcase/>Showcase</a></li><li><a class="small text-white text-decoration-none" href=https://http4k.org/community/>Community</a></li><li><a class="small text-white text-decoration-none" href=https://http4k.org/security/>Security Advisories</a></li></ul></div><div class="col-xs-6 col-md"><h5>Company</h5><ul class=list-unstyled><li><a class="small text-white text-decoration-none" href=https://http4k.org/company/>About</a></li><li><a class="small text-white text-decoration-none" href=mailto:info@http4k.org>Contact</a></li><li><a class="small text-white text-decoration-none" href=https://status.http4k.org/>System Status</a></li><li><a class="small text-white text-decoration-none" href=https://www.linkedin.com/company/http4k>LinkedIn</a></li></ul></div></div></div><div class="row text-center g-0"><div class=col><p class="small text-white text-decoration-none">© 2016–2026 http4k Ltd | All Rights Reserved
| <a class="text-white text-decoration-none" href=https://http4k.org/privacy-policy/>Privacy policy</a>
| <a class="text-white text-decoration-none" href=https://http4k.org/terms-and-conditions/>Terms & conditions</a>
| <a class="text-white text-decoration-none" href=https://http4k.org/disclaimer/>Disclaimer</a>
| <a class="text-white text-decoration-none" href=https://http4k.org/trademark/>Trademark Policy</a> </p></div></div></footer><script defer src=https://cdn.jsdelivr.net/npm/fuse.js@6.6.2></script><script defer src=https://http4k.org/js/fuse-search.js></script><script defer src=https://http4k.org/js/footer.js></script><img src="https://static.scarf.sh/a.png?x-pxid=e1c296ba-34c0-4342-8d2c-3a023d5dcec3" alt=scarf></body></html>