![]() |
What boost.taar does not do, by choice or not yet. The same lists, plus the limits inherent to each surface and the recently closed items, live in ROADMAP.md in the repository and are updated as items close.
Inherent to the surfaces, and documented rather than planned: streaming results are REST-only; return types without a JSON representation cannot be RPC or MCP results; REST and MCP sessions are separate stores.
Deliberate, not planned.
htdocs
picks file.br / file.gz
by Accept-Encoding) or compress in a proxy.
.htaccess,
rewrite engines, server-side includes, WebDAV: use matchers, several
routes, interceptors and guards instead.
chunked_response,
async_generator) co_spawn
the awaited operation on every co_await
inside the body: one frame and spawn per awaited operation. Approach:
evaluate Asio experimental::coro
or a direct awaiter bridge when it stabilises.
register_request_handler,
add_interceptor, tool, method,
...) is not synchronised against serving: configure before run()
(documented; no runtime check).
context_store has no
eviction hook: an MCP session that expires idle is dropped without calling
the endpoint's end()
(harmless today because a locked entry is never swept, but a hook would
make cleanup explicit).
sendfile. HEAD, 304 and
the caches limit it, but a slow disk stalls the serving thread. Approach:
Asio stream_file / random_access_file (io_uring on Linux)
behind a feature check.
revalidate_after
a file rewritten with the same size is still described by its previous
validators (and, when it sits in the memory cache, served with its previous
bytes). Approach: file system change notification (inotify, ReadDirectoryChangesW)
to invalidate entries.
: in a segment
is refused but reserved device names (CON,
NUL, ...), trailing dots
and short (8.3) names are not filtered. Approach: reject them in the
segment check on Windows.
path_arg, a route
with several placeholders falls back to the whole request path (only
the {*} entry or a single
argument is picked). Approach: record the greedy placeholder's name in
the context when the target matcher captures it.
request_scope::report_progress
does nothing over plain HTTP (no stream to carry it); only MCP and stdio
deliver progress.
posix::stream_descriptor);
Windows needs a stream_handle
based variant.
matcher::context (or its attributes) to the
response filter.
guard runs its check
on a copy of the request context (one copy of path_args
per guarded request); changes to path_args
by the check are discarded.
boost::described types are hoisted into components.schemas; parameters and responses are
not shared as components.
security
explicitly.
with_session
runs its body without the entry's lock; state shared with other requests
needs its own synchronisation (documented).
server::tcp still calls the throwing acceptor.local_endpoint();
practically never fails, but it would surface as an Asio exception rather
than taar::exception.
type_traits/callable.hpp,
has_call_operator)
and the concepts built on it (string_like,
container_like,
numeric_type,
specialization_of),
which today also rule out generic lambdas as handlers;
rest(&add),
rpc.method("add",
&add) and mcp.tool("add", ...,
&add) need no providers that repeat
the names;
BOOST_DESCRIBE_STRUCT
/ BOOST_DESCRIBE_ENUM;
description,
with_default and
constrained in
the common cases.
408 Request
Timeout, then close) and send
(close), with setters on basic_http
and defaults of 60, 30, 60 and 60 seconds. Handler time and the gaps
of a streaming generator do not count; the body timeout also bounds shielded
body reads during shutdown. See Timeouts.
Date
(RFC 9110 6.6.1) to every response that does not carry one, cached per
second; set_date_header(false) disables it.
Earlier changes are listed in the release notes.