nikaia serve Is Cut, And The MVP Is The Application Server AloneStatus: Superseded by ADR-289 — its D1-D3 are D12, D13 and D16 there
Date: September 23, 2026
Target Version: Nikaia 0.0.166
Narrows: ADR-194 D2 (the first of its two products) and D3’s
operator half; ADR-038 §4.5’s order loses one step
Related: ADR-194 D5 (the MVP’s protocol, which this leaves
whole), ADR-069 D1 (http is a package), ADR-018
(what a handler is given and gives back), ADR-198 (the socket),
ADR-199 (the readiness layer under it)
ADR-194 answered who decides what is exposed by finding the
question false: there are two products, and each is right about itself. The
standard server — nikaia serve [dir] — has no author present at run time, so
everything about it is the operator’s; an application that serves has an author
who decided already.
That reasoning is not withdrawn. What has changed is the project’s own position: the MVP is behind schedule, and one of the two products is worth much less than the other.
nikaia serve is cut.There is no serve subcommand, and the standard file server is not a thing this
project is going to build. The record that decided it stands; what is cut is the
product, by the owner, for two reasons stated together:
serve is the half of D2 that nothing else
waits on. Every record listed under #90 —
ADR-018 entire, ADR-058’s body rows, the roadmap’s
route hashing — waits on the application server. Not one of them waits on a
file server.python -m http.server is the thing it would have imitated, and the
people who reach for that already have it. A Nikaia one would be a second way
to serve a directory, and what it would demonstrate about this language is
the part it has least of: no handler, no routing, no ledger, no provenance —
a command that reads files and writes them out.A cut is written down, which is the whole of why this record exists. The alternative was to leave step 4 on a list where it would be read as not yet for as long as the list exists, and a step nobody intends to take is worse than an absent one: it makes the list wrong about what is coming rather than merely incomplete.
ADR-194 D5 ends the limits are the operator’s in the first product
and the program’s in the second. With the first product gone, the second clause
is the whole sentence: body_cap, head_cap, head_wait and connections are
options on http::listen, with defaults that are a server rather than a denial
of service, and a program that wants others names only what it changes.
The same subtraction reaches D3. It binds to localhost, and anything wider is
asked for was written for both products, and localhost was the fail-closed
default because a standard server’s author is not there to choose. An
application’s author is: http::listen(at) takes the address, the program says
which, and there is no default to make safe. What D3 leaves behind is the
--trust listing of a wide bind, which it named as belonging to
ADR-108’s shape rather than to itself, and that is unaffected — a
program that binds every interface is a thing a reviewer may want listed whether
or not a serve command exists.
examples/hello-http/, and it is a real server.The demonstration a reader needs is one address and one function, and that is
what the example is: http::listen(at) fn(request) { … }, with the handler
deciding. It used to render one response and print it, because there was nothing
to hand a response to.
It is driven by a test over a real socket
(crates/nikaia/tests/project.rs): port 0, the bound address read back off the
line the server prints, and then the two methods, a body by Content-Length and
each of the refusals asked of it in turn. That test is what serve would also
have needed, and it is spent once here instead of twice.
rustls, then HTTP/2. serve was
never in that order; it was ADR-194 D2’s other half, and it
leaves with this record.README.md is where a reader of D2 is sent.std. The socket,
the readiness layer and http1 were all built for the application server and
are untouched.python -m http.server ergonomics of the original ask
are not answered by this project. That was one of two things the ask wanted and
it is the one being given up, said plainly rather than deferred.touches.
ADR-194 §4 carries it, the owner asked to be asked again with a
fuller write-up when the work reached it, and the work has now reached it. It
is a question and not a cut.