# actix/actix-web — codebase unpack

> Canonical page: https://codevetter.com/unpack/actix-web

This is a deterministic Repo Unpack scan of actix/actix-web — a structural map, not a review, security audit, or maintainer-endorsed description.

- Scanned commit: 30c831fce5328ccf916bea77e59ce6419b457e39 (2026-10-02)
- Last upstream commit: ci: partition feature combination checks (#4298)
- Generated by codevetter 1.15.0 on 2026-10-02
- 442 files scanned · 3.1 MB

Source inspection; upstream code and tests were not executed.

## Languages

- Rust: 319 files
- Markdown: 35 files
- TOML: 16 files
- YAML: 15 files
- JavaScript: 1 files

## Repository structure

- actix-web/ — 126 files
- actix-http/ — 100 files
- actix-web-codegen/ — 39 files
- awc/ — 38 files
- actix-multipart/ — 31 files
- actix-files/ — 27 files
- actix-router/ — 17 files
- .github/ — 13 files

Probable source entrypoint: `Cargo.toml` (inferred from the tree, not upstream docs)

## Source layout — actix-web/

- actix-web/benches/ — 3 files
- actix-web/examples/ — 10 files
- actix-web/src/ — 27 files
- actix-web/tests/ — 13 files
- actix-web/CHANGES.md — 1 file
- actix-web/Cargo.toml — 1 file
- actix-web/LICENSE-APACHE — 1 file
- actix-web/LICENSE-MIT — 1 file
- actix-web/MIGRATION-0.x.md — 1 file
- actix-web/MIGRATION-1.0.md — 1 file
- actix-web/MIGRATION-2.0.md — 1 file
- actix-web/MIGRATION-3.0.md — 1 file
- actix-web/MIGRATION-4.0.md — 1 file
- actix-web/README.md — 1 file

## Package

- Cargo.toml: null — 0 declared dependencies

## Structural health signals

Average score 5.8/10 across 96 files; 65 hotspots. These are deterministic review leads, not proof of a bug.

## Recent history

- 30c831fce532 (2026-10-02) ci: partition feature combination checks (#4298)
- 0d035acf5ed0 (2026-10-02) ci: remove obsolete disk space cleanup (#4299)
- 457ffd1ebc85 (2026-10-02) refactor(ws): replace framing and protocol magic numbers with named constants (#4292)
- ef1e6f3d8760 (2026-10-02) build(deps): bump taiki-e/install-action from 2.87.12 to 2.87.21 (#4284)
- b80d150db04f (2026-10-02) refactor(http): replace magic slicing with named constants for Date header buffer (#4291)

## Overview

Actix Web is a Rust framework and companion library workspace for building asynchronous HTTP services, with typed request extraction, composable middleware, ordered routing, static files, multipart uploads, and an HTTP/WebSocket client. Its implementation separates application services from HTTP protocol machinery and runs server workers on single-threaded Tokio runtimes. This brief investigates commit 30c831fce5328ccf916bea77e59ce6419b457e39 through public source, examples, tests, manifests, and all seven listed workflows; it describes source behavior without claiming executed validation or measured performance.

## System map

The root workspace contains ten cooperating library crates, with local patches connecting their development builds. Application construction and routing live in actix-web, while actix-http supplies protocol services and actix-router supplies matching. Examples provide executable entrypoints; runtime and listener management cross into external Actix and Tokio crates. Storage in the inspected implementation consists of application state and filesystem services, with database integrations left to applications.
- Cargo.toml declares ten workspace members, resolver 2, Rust edition 2021, and MSRV 1.88; its crates.io patches redirect the companion packages to local paths. — [Cargo.toml#L1-L21](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/Cargo.toml#L1-L21) [Cargo.toml#L32-L42](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/Cargo.toml#L32-L42)
- actix-web depends on actix-http, actix-router, optional actix-web-codegen, and external actix-server/service/runtime crates; these dependencies establish separate application, protocol, routing, and runtime boundaries. — [actix-web/Cargo.toml#L129-L140](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-web/Cargo.toml#L129-L140) [actix-web/src/server.rs#L654-L693](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-web/src/server.rs#L654-L693)
- Each HTTP worker uses a single-threaded Tokio runtime; HttpServer::workers documents at least one application-factory instantiation per worker, so application construction is repeated. — [actix-web/src/rt.rs#L1-L5](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-web/src/rt.rs#L1-L5) [actix-web/src/server.rs#L144-L151](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-web/src/server.rs#L144-L151)
- The basic executable initializes logging, builds an App with three middleware layers and several resources, binds 127.0.0.1:8080, selects one worker, and awaits HttpServer::run. — [actix-web/examples/basic.rs#L19-L43](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-web/examples/basic.rs#L19-L43) [actix-web/README.md#L66-L82](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-web/README.md#L66-L82)
- Manifest package names are actix-http 3.18.12, actix-files 0.7.0, and actix-http-test 3.3.0; actix-http's package name is not the dependency name reported by the supplied inventory. — [actix-http/Cargo.toml#L1-L17](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-http/Cargo.toml#L1-L17) [actix-files/Cargo.toml#L1-L11](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-files/Cargo.toml#L1-L11) [actix-http-test/Cargo.toml#L1-L16](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-http-test/Cargo.toml#L1-L16)
- Data<T> wraps Arc-backed application state, while AppInitService owns an Rc<Extensions> container; multipart TempFile writes to NamedTempFile in a configured directory or the system temporary location. — [actix-web/src/data.rs#L95-L122](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-web/src/data.rs#L95-L122) [actix-web/src/app_service.rs#L143-L158](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-web/src/app_service.rs#L143-L158) [actix-multipart/src/form/tempfile.rs#L42-L68](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-multipart/src/form/tempfile.rs#L42-L68) [actix-multipart/src/form/tempfile.rs#L102-L108](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-multipart/src/form/tempfile.rs#L102-L108)
- The repository's build/check interface is justfile: check-min and check-default use cargo-hack, clippy checks workspace targets, test combines Cargo and nextest, and test-docs builds documentation before running doctests. — [justfile#L32-L68](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/justfile#L32-L68)
- The inspected deployment example embeds libraries in a Rust server executable; run delegates to ServerBuilder. Release builds enable LTO, optimization level 3, and one codegen unit, while dependency-graph documentation provides GraphViz rendering instructions. — [actix-web/examples/basic.rs#L25-L43](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-web/examples/basic.rs#L25-L43) [actix-web/src/server.rs#L1346-L1359](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-web/src/server.rs#L1346-L1359) [Cargo.toml#L23-L30](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/Cargo.toml#L23-L30) [docs/graphs/README.md#L1-L11](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/docs/graphs/README.md#L1-L11)

## Feature catalog

The user-facing surface is primarily Rust APIs for service authors. Routing supports manual resources, nested scopes, guards, and procedural attributes. Typed extraction, middleware, file responses, uploads, client requests, and WebSockets cover distinct HTTP application needs. Optional features control protocol, TLS, compression, cookies, and experimental route diagnostics.
- App::route and App::service register resources and scopes; routing macros cover nine standard methods, and generated registrations attach names, method guards, custom guards, wrappers, and handlers. — [actix-web/src/app.rs#L227-L249](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-web/src/app.rs#L227-L249) [actix-web-codegen/src/lib.rs#L189-L205](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-web-codegen/src/lib.rs#L189-L205) [actix-web-codegen/src/route.rs#L435-L464](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-web-codegen/src/route.rs#L435-L464)
- Built-in extractors expose Form, Header, Json, Path, Payload, Query, Either, and Readlines; handlers accept up to twelve FromRequest arguments and return Responder outputs. — [actix-web/src/types/mod.rs#L13-L23](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-web/src/types/mod.rs#L13-L23) [actix-web/src/handler.rs#L14-L22](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-web/src/handler.rs#L14-L22)
- Middleware supports request preprocessing, response postprocessing, state access, external-service access, and short-circuiting; the basic example combines DefaultHeaders, Compress, and Logger at application and resource levels. — [actix-web/src/middleware/authors-guide.md#L5-L27](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-web/src/middleware/authors-guide.md#L5-L27) [actix-web/examples/basic.rs#L25-L36](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-web/examples/basic.rs#L25-L36)
- Cargo features expose HTTP/2 including h2c, WebSockets, OpenSSL, four Rustls versions, Brotli/gzip/deflate/zstd compression, cookies, and separately enabled secure cookies. — [actix-web/Cargo.toml#L60-L107](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-web/Cargo.toml#L60-L107)
- Files accepts GET/HEAD by default and supports ordered roots, optional precompressed assets, directory redirects/listings, and fallback handling; NamedFile adds ETag, Last-Modified, conditional responses, and byte ranges. — [actix-files/src/service.rs#L138-L205](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-files/src/service.rs#L138-L205) [actix-files/src/service.rs#L255-L291](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-files/src/service.rs#L255-L291) [actix-files/src/named.rs#L466-L511](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-files/src/named.rs#L466-L511) [actix-files/src/named.rs#L535-L585](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-files/src/named.rs#L535-L585)
- MultipartForm collects typed form-data fields with total, memory, and field limits; the /videos example combines a TempFile upload and JSON metadata, with global and per-field limits configured separately. — [actix-multipart/src/form/mod.rs#L458-L505](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-multipart/src/form/mod.rs#L458-L505) [actix-multipart/src/form/mod.rs#L562-L565](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-multipart/src/form/mod.rs#L562-L565) [actix-multipart/examples/form.rs#L12-L39](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-multipart/examples/form.rs#L12-L39)
- awc provides body, JSON, form, and streaming request APIs, authentication header helpers, response-decompression control, timeouts, and configurable redirects; actix-http exposes WebSocket handshake verification and a 101 response builder. — [awc/src/request.rs#L235-L282](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/awc/src/request.rs#L235-L282) [awc/src/request.rs#L322-L395](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/awc/src/request.rs#L322-L395) [awc/src/builder.rs#L128-L140](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/awc/src/builder.rs#L128-L140) [actix-http/src/ws/mod.rs#L164-L233](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-http/src/ws/mod.rs#L164-L233)
- experimental-introspection inserts an IntrospectionTree into application data and offers text, route JSON, and external-resource JSON reports; finalization also applies route reachability analysis. — [actix-web/Cargo.toml#L126-L127](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-web/Cargo.toml#L126-L127) [actix-web/src/app_service.rs#L148-L151](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-web/src/app_service.rs#L148-L151) [actix-web/src/introspection.rs#L462-L476](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-web/src/introspection.rs#L462-L476) [actix-web/src/introspection.rs#L479-L523](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-web/src/introspection.rs#L479-L523)

## Data flow

Listener factories assemble a protocol service around application factories before requests enter the application pipeline. Protocol requests carry headers, payloads, connection data, and request extensions into ServiceRequest. Routing mutates match information before extractors produce typed handler arguments, and responders turn results into HTTP output. Filesystem services and outbound client requests introduce separate input/output boundaries with their own transformation and limit rules.
- HttpServer::listen copies timeout, keep-alive, half-close, buffer, and HTTP/2 window settings into HttpService, optionally adds on_connect extensions, then maps the application factory to AppConfig. — [actix-web/src/server.rs#L647-L693](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-web/src/server.rs#L647-L693)
- AppInitService::call splits a protocol Request into head and payload, transfers connection/request extensions, reuses or creates an HttpRequest, resets pooled routing state, and forwards a ServiceRequest. — [actix-web/src/app_service.rs#L221-L249](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-web/src/app_service.rs#L221-L249)
- Router::recognize_fn scans resources in registration order; ResourceDef matches static or dynamic patterns, checks the predicate, stores captured segments, and advances the unprocessed path. — [actix-router/src/router.rs#L49-L60](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-router/src/router.rs#L49-L60) [actix-router/src/resource.rs#L677-L708](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-router/src/resource.rs#L677-L708) [actix-router/src/resource.rs#L735-L750](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-router/src/resource.rs#L735-L750)
- Data extraction resolves the closest layered Data<T> and clones its Arc-backed wrapper; absent or mismatched registration returns an internal-server-error response rather than creating replacement state. — [actix-web/src/data.rs#L23-L41](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-web/src/data.rs#L23-L41) [actix-web/src/data.rs#L120-L122](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-web/src/data.rs#L120-L122) [actix-web/src/data.rs#L162-L182](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-web/src/data.rs#L162-L182)
- Json extraction retrieves JsonConfig, consumes the payload, optionally decompresses it, checks declared and accumulated sizes, and deserializes with serde_json; the default limit is 2,097,152 bytes. — [actix-web/src/types/json.rs#L144-L155](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-web/src/types/json.rs#L144-L155) [actix-web/src/types/json.rs#L270-L286](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-web/src/types/json.rs#L270-L286) [actix-web/src/types/json.rs#L350-L389](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-web/src/types/json.rs#L350-L389) [actix-web/src/types/json.rs#L418-L433](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-web/src/types/json.rs#L418-L433)
- handler_service maps extractor errors directly to HttpResponse, otherwise awaits Handler::call and Responder::respond_to; Json responders serialize a successful value and emit application/json. — [actix-web/src/handler.rs#L102-L118](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-web/src/handler.rs#L102-L118) [actix-web/src/types/json.rs#L115-L128](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-web/src/types/json.rs#L115-L128)
- MultipartForm tracks remaining limits by field name, delegates each Field to T::handle_field, and constructs T from collected state; TempFile streams chunks to disk, consumes total/field budgets, flushes, and retains filename metadata separately. — [actix-multipart/src/form/mod.rs#L480-L505](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-multipart/src/form/mod.rs#L480-L505) [actix-multipart/src/form/mod.rs#L290-L315](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-multipart/src/form/mod.rs#L290-L315) [actix-multipart/src/form/tempfile.rs#L55-L75](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-multipart/src/form/tempfile.rs#L55-L75)
- awc's RequestSender serializes JSON or URL-encoded forms, adds Content-Type only if absent, wraps the body in ConnectRequest::Client, and invokes the connector with per-request timeout overriding client timeout. — [awc/src/sender.rs#L183-L226](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/awc/src/sender.rs#L183-L226) [awc/src/sender.rs#L229-L249](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/awc/src/sender.rs#L229-L249)

## Behavior traces

The investigation followed startup, routed handler execution, JSON extraction, multipart disk writes, static delivery, and outbound redirects through their implementation files. Startup consumes application registrations and resolves service/data factories before handling traffic. Request paths branch on guards, extractor failures, and resource defaults. Uploads end in temporary storage unless application code supplies a separate persistence step.
- Startup begins at basic::main → HttpServer::new → bind → bind_addrs → listen → run. bind_addrs attempts every resolved address and returns successful listeners if any bind succeeds, even when another address fails. — [actix-web/examples/basic.rs#L19-L43](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-web/examples/basic.rs#L19-L43) [actix-web/src/server.rs#L503-L510](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-web/src/server.rs#L503-L510) [actix-web/src/server.rs#L1358-L1384](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-web/src/server.rs#L1358-L1384)
- Worker construction proceeds through listen's closure → factory().into_factory() → App::into_factory → AppInit::new_service, which installs a default 404, consumes registrations, and constructs AppRoutingFactory plus the ResourceMap. — [actix-web/src/server.rs#L686-L693](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-web/src/server.rs#L686-L693) [actix-web/src/app.rs#L457-L468](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-web/src/app.rs#L457-L468) [actix-web/src/app_service.rs#L66-L105](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-web/src/app_service.rs#L66-L105)
- App initialization constructs asynchronous data futures and the endpoint future, awaits data results then endpoint initialization, populates extensions, and returns AppInitService; AppRoutingFactory initializes child services and builds the ordered Router. — [actix-web/src/app_service.rs#L121-L158](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-web/src/app_service.rs#L121-L158) [actix-web/src/app_service.rs#L282-L313](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-web/src/app_service.rs#L282-L313)
- For basic's GET /resource1/{name}/index.html, AppInitService::call → AppRouting::call → ResourceService::call → handler_service → Path::from_request → index produces the greeting. Failed application matching uses 404; unmatched resource routes use the resource's 405 default. — [actix-web/examples/basic.rs#L3-L6](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-web/examples/basic.rs#L3-L6) [actix-web/src/app_service.rs#L331-L348](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-web/src/app_service.rs#L331-L348) [actix-web/src/resource.rs#L75-L87](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-web/src/resource.rs#L75-L87) [actix-web/src/resource.rs#L562-L569](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-web/src/resource.rs#L562-L569) [actix-web/src/handler.rs#L106-L118](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-web/src/handler.rs#L106-L118) [actix-web/src/types/path.rs#L97-L105](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-web/src/types/path.rs#L97-L105)
- A JSON handler argument follows Json::from_request → JsonBody::new(...).limit(...) → JsonBody::poll → serde_json::from_slice → JsonExtractFut. Overflow or decoding errors invoke a configured error handler when present and prevent normal handler invocation. — [actix-web/src/types/json.rs#L144-L155](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-web/src/types/json.rs#L144-L155) [actix-web/src/types/json.rs#L174-L191](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-web/src/types/json.rs#L174-L191) [actix-web/src/types/json.rs#L418-L433](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-web/src/types/json.rs#L418-L433) [actix-web/src/handler.rs#L108-L115](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-web/src/handler.rs#L108-L115)
- POST /videos follows Multipart::from_req → MultipartForm::from_request → multipart.try_next → T::handle_field → TempFile::read_field → write_all/flush → T::from_state → post_video. The example returns upload metadata and describes deletion of the temporary file; it contains no promotion to durable storage. — [actix-multipart/src/multipart.rs#L100-L110](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-multipart/src/multipart.rs#L100-L110) [actix-multipart/src/form/mod.rs#L458-L505](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-multipart/src/form/mod.rs#L458-L505) [actix-multipart/src/form/tempfile.rs#L42-L75](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-multipart/src/form/tempfile.rs#L42-L75) [actix-multipart/examples/form.rs#L20-L28](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-multipart/examples/form.rs#L20-L28)
- A static GET follows FilesService::call → PathBufWrap::parse_path → optional path_filter → ordered root lookup → NamedFile::open → into_response. Directory and precompressed branches can return earlier; normal file responses evaluate validators and ranges before streaming. — [actix-files/src/service.rs#L138-L200](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-files/src/service.rs#L138-L200) [actix-files/src/service.rs#L255-L291](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-files/src/service.rs#L255-L291) [actix-files/src/named.rs#L478-L511](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-files/src/named.rs#L478-L511) [actix-files/src/named.rs#L549-L585](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-files/src/named.rs#L549-L585)
- An outbound JSON request follows RequestSender::send_json → send_body → connector.call → SendClientRequest. Redirect middleware rebuilds Location targets while budget remains; 301/302/303 can change methods to GET, whereas 307/308 retain the method and reuse only reusable body bytes. — [awc/src/sender.rs#L183-L226](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/awc/src/sender.rs#L183-L226) [awc/src/builder.rs#L252-L264](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/awc/src/builder.rs#L252-L264) [awc/src/middleware/redirect.rs#L160-L224](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/awc/src/middleware/redirect.rs#L160-L224)

## Testing signals

Tests and CI were inspected, not executed; no passing result or coverage percentage was established. The examined tests include synchronous Rust unit tests, Actix asynchronous tests, real HTTP integration servers, and trybuild compiler fixtures. They cover protocol framing, shutdown ownership, static traversal, uploads, and macro diagnostics. This is bounded evidence: service-only helpers omit wire encoding/decoding, and configured exclusions or gates limit what a given test run exercises.
- The test surface combines #[test], #[actix_rt::test], and #[actix_web::test]; actix_test::TestServer uses real HTTP networking, while its documentation explicitly says init_service skips HTTP encoding and decoding. — [actix-http/src/h1/decoder.rs#L1190-L1209](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-http/src/h1/decoder.rs#L1190-L1209) [actix-web/tests/test_server.rs#L95-L108](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-web/tests/test_server.rs#L95-L108) [actix-files/tests/guard.rs#L10-L25](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-files/tests/guard.rs#L10-L25) [actix-test/src/lib.rs#L1-L5](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-test/src/lib.rs#L1-L5)
- Decoder regression tests require rejection of duplicate Content-Length, simultaneous Content-Length/chunked Transfer-Encoding in either order, and missing or duplicate HTTP/1.1 Host headers. — [actix-http/src/h1/decoder.rs#L1190-L1209](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-http/src/h1/decoder.rs#L1190-L1209) [actix-http/src/h1/decoder.rs#L1251-L1270](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-http/src/h1/decoder.rs#L1251-L1270) [actix-http/src/h1/decoder.rs#L1348-L1370](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-http/src/h1/decoder.rs#L1348-L1370)
- test_body checks response bytes through a real client; test_slow_request expects 408 for idle and incomplete request heads. A separate shutdown regression drives a slow JSON upload, stops gracefully, and checks that application state loses all strong references. — [actix-web/tests/test_server.rs#L95-L108](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-web/tests/test_server.rs#L95-L108) [actix-web/tests/test_server.rs#L798-L817](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-web/tests/test_server.rs#L798-L817) [actix-web/tests/test_httpserver.rs#L112-L176](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-web/tests/test_httpserver.rs#L112-L176)
- Static-file integration tests assert 404 for plain/encoded traversal and NUL-containing paths, and verify that Host guards select different file roots; these assertions do not establish every symlink or filesystem-race policy. — [actix-files/tests/traversal.rs#L8-L25](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-files/tests/traversal.rs#L8-L25) [actix-files/tests/guard.rs#L10-L33](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-files/tests/guard.rs#L10-L33)
- Multipart tests check that discarded unknown/duplicate fields still consume total limits, and that both memory-backed text and disk-backed uploads reject over-budget bodies. — [actix-multipart/src/form/mod.rs#L834-L856](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-multipart/src/form/mod.rs#L834-L856) [actix-multipart/src/form/mod.rs#L909-L937](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-multipart/src/form/mod.rs#L909-L937)
- Both macro trybuild harnesses are gated by rustversion_msrv::msrv; fixtures exercise accepted forms and compile failures for routing/scope syntax, duplicate methods, multipart attributes, and size-limit syntax. — [actix-web-codegen/tests/trybuild.rs#L1-L29](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-web-codegen/tests/trybuild.rs#L1-L29) [actix-multipart/tests/trybuild.rs#L1-L16](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-multipart/tests/trybuild.rs#L1-L16)
- PR/main CI checks minimal/default features and just test across Linux, macOS, and Windows on MSRV/stable; post-merge adds nightly and eight partitions of feature-combination checks, whose just recipe limits powerset depth to four. — [.github/workflows/ci.yml#L25-L87](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/.github/workflows/ci.yml#L25-L87) [.github/workflows/ci-post-merge.yml#L17-L27](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/.github/workflows/ci-post-merge.yml#L17-L27) [.github/workflows/ci-post-merge.yml#L73-L103](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/.github/workflows/ci-post-merge.yml#L73-L103) [justfile#L112-L120](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/justfile#L112-L120)
- just test excludes test_reading_deflate_encoding_large_random_rustls and separates Cargo macro tests from nextest; coverage uses nightly llvm-cov for tests/doctests. Codecov thresholds are 100% allowances with tests/benches/examples ignored, and the benchmark workflow defines a run without supplying benchmark results here. — [justfile#L52-L82](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/justfile#L52-L82) [.github/workflows/coverage.yml#L28-L48](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/.github/workflows/coverage.yml#L28-L48) [.codecov.yml#L1-L15](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/.codecov.yml#L1-L15) [.github/workflows/bench.yml#L25-L32](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/.github/workflows/bench.yml#L25-L32)

## Risk map

These risks are source observations and explicitly labeled hypotheses, not confirmed vulnerabilities. The most sensitive inspected boundaries are proxy headers, HTTP framing, filesystem paths, upload accounting, error output, and redirected client requests. Compatibility features and older TLS support also affect maintenance and validation scope. Passing CI cannot be inferred from workflow definitions, particularly where checks are disabled or advisory.
- ConnectionInfo prefers Forwarded and X-Forwarded-* values for host, scheme, and client address. realip_remote_addr explicitly warns against security use unless those headers cannot be spoofed. — [actix-web/src/info.rs#L117-L147](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-web/src/info.rs#L117-L147) [actix-web/src/info.rs#L157-L172](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-web/src/info.rs#L157-L172)
- Hypothesis: a deployment expecting served roots to prohibit symlink escapes needs explicit policy review. FilesService checks canonicalization success and opens the joined path, while Files::path_filter documents a custom symlink-denial example; the inspected traversal test does not test that deployment policy. (inferred) — [actix-files/src/service.rs#L178-L200](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-files/src/service.rs#L178-L200) [actix-files/src/service.rs#L262-L273](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-files/src/service.rs#L262-L273) [actix-files/src/files.rs#L314-L335](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-files/src/files.rs#L314-L335) [actix-files/tests/traversal.rs#L8-L25](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-files/tests/traversal.rs#L8-L25)
- HTTP/1 header construction uses unsafe HeaderValue::from_maybe_shared_unchecked based on httparse validation. The same framing code rejects duplicate lengths/hosts and unsupported transfer encodings, making parser-contract changes a sensitive review boundary. — [actix-http/src/h1/decoder.rs#L92-L159](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-http/src/h1/decoder.rs#L92-L159) [actix-http/src/h1/decoder.rs#L1251-L1270](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-http/src/h1/decoder.rs#L1251-L1270)
- Multipart limit enforcement is delegated to field readers: Limits::try_consume_limits must be called for each chunk. TempFile does this before writing, and discard_field also accounts for bytes; custom FieldReader implementations must preserve that contract. — [actix-multipart/src/form/mod.rs#L283-L324](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-multipart/src/form/mod.rs#L283-L324) [actix-multipart/src/form/tempfile.rs#L55-L60](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-multipart/src/form/tempfile.rs#L55-L60)
- ResponseError's default response emits the error's Display text as text/plain with a default 500 status. Custom application errors therefore control material sent to clients unless they override error_response. — [actix-web/src/error/response_error.rs#L25-L47](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-web/src/error/response_error.rs#L25-L47) [actix-web/src/handler.rs#L108-L109](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-web/src/handler.rs#L108-L109)
- Redirects remove Cookie, Authorization, and Proxy-Authorization when host, port, or scheme changes, but a 307/308 request with a non-reusable body is resent with an empty body; streamed mutation requests require attention to this documented implementation branch. — [awc/src/middleware/redirect.rs#L166-L203](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/awc/src/middleware/redirect.rs#L166-L203) [awc/src/middleware/redirect.rs#L288-L296](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/awc/src/middleware/redirect.rs#L288-L296)
- deny.toml explicitly ignores nine advisory IDs, primarily under an old-Rustls-support comment, with one h2 update FIXME; license clarifications also retain older ring/webpki compatibility. This records exceptions, not a verified assessment of exploitability. — [deny.toml#L16-L31](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/deny.toml#L16-L31) [deny.toml#L39-L51](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/deny.toml#L39-L51) [actix-web/Cargo.toml#L98-L107](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-web/Cargo.toml#L98-L107)
- Validation has explicit gaps: external-type lint CI is disabled for a rustdoc mismatch, semver-checks captures the command status but exits zero, and just test excludes a Rustls case. These configurations do not provide blocking verification for those paths. — [.github/workflows/lint.yml#L106-L107](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/.github/workflows/lint.yml#L106-L107) [.github/workflows/semver-checks.yml#L38-L60](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/.github/workflows/semver-checks.yml#L38-L60) [justfile#L52-L57](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/justfile#L52-L57)

## Extension points

Extension is built around Rust traits and service factories rather than runtime plugin loading. Applications register resources, scopes, and custom services through builders or generated HttpServiceFactory implementations. Middleware, extractors, responders, and multipart readers expose separate contracts for customization. Client connectors and filesystem filters provide narrower integration hooks.
- App::service accepts any 'static HttpServiceFactory, while App::configure accepts a ServiceConfig callback and merges its services, external resources, application data, and optional default. — [actix-web/src/app.rs#L191-L207](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-web/src/app.rs#L191-L207) [actix-web/src/app.rs#L235-L249](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-web/src/app.rs#L235-L249)
- Scope::register recursively registers nested factories using cloned configuration and a root-prefix ResourceMap; ScopeService applies its own guarded router and inherited or overridden default service. — [actix-web/src/scope.rs#L381-L400](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-web/src/scope.rs#L381-L400) [actix-web/src/scope.rs#L530-L547](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-web/src/scope.rs#L530-L547)
- App::wrap accepts Transform over the inner Service; middleware can initialize services, alter request/response data, and short-circuit. Registration order is observable because the last wrapper handles incoming requests first. — [actix-web/src/app.rs#L345-L364](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-web/src/app.rs#L345-L364) [actix-web/src/middleware/authors-guide.md#L12-L27](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-web/src/middleware/authors-guide.md#L12-L27)
- Custom request types implement FromRequest with Error, Future, and from_request; extractor configuration is supplied through App/Scope/Resource data, with a single-consumer payload constraint. — [actix-web/src/extract.rs#L25-L49](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-web/src/extract.rs#L25-L49) [actix-web/src/extract.rs#L66-L96](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-web/src/extract.rs#L66-L96)
- Handler output customization uses Responder, while custom failures implement ResponseError::status_code/error_response; handler_service is the integration point converting extraction and handler outcomes into ServiceResponse. — [actix-web/src/response/responder.rs#L39-L43](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-web/src/response/responder.rs#L39-L43) [actix-web/src/error/response_error.rs#L25-L47](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-web/src/error/response_error.rs#L25-L47) [actix-web/src/handler.rs#L96-L118](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-web/src/handler.rs#L96-L118)
- Multipart FieldReader defines per-field asynchronous decoding, and MultipartCollect defines limit, handle_field, and from_state. DuplicateField exposes Ignore, Deny, and Replace policies for collection implementations. — [actix-multipart/src/form/mod.rs#L31-L44](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-multipart/src/form/mod.rs#L31-L44) [actix-multipart/src/form/mod.rs#L236-L264](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-multipart/src/form/mod.rs#L236-L264)
- Files::path_filter accepts a closure over a root-relative Path and RequestHead before filesystem existence checks; rejection invokes the configured default handler or returns 404. — [actix-files/src/files.rs#L314-L344](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-files/src/files.rs#L314-L344) [actix-files/src/service.rs#L164-L170](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-files/src/service.rs#L164-L170)
- awc ClientBuilder::connector and wrap customize connection services and Transform middleware; finish conditionally installs Redirect according to max_redirects before constructing the Client. — [awc/src/builder.rs#L78-L95](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/awc/src/builder.rs#L78-L95) [awc/src/builder.rs#L232-L264](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/awc/src/builder.rs#L232-L264)

## Contributor handoff

Start at the affected crate's manifest and follow the service or protocol boundary implicated by the task. Preserve worker-local ownership, shared-data registration, middleware order, and feature-disabled compilation when making future changes. Tests and CI were inspected, not executed, and this brief is bounded rather than exhaustive. The commands below describe available future validation; none were run during this read-only investigation.
- Read Cargo.toml, the affected package manifest, and justfile first: workspace patches ensure cross-crate edits use local implementations, and root lint/MSRV settings apply to member crates. — [Cargo.toml#L16-L21](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/Cargo.toml#L16-L21) [Cargo.toml#L32-L60](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/Cargo.toml#L32-L60) [actix-files/Cargo.toml#L16-L20](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-files/Cargo.toml#L16-L20) [actix-files/Cargo.toml#L42-L43](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-files/Cargo.toml#L42-L43) [justfile#L32-L68](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/justfile#L32-L68)
- For request dispatch changes, inspect AppInitService::call, AppRouting::call, ResourceService::call, and handler_service together; guard selection, request reuse, extraction failure, and response conversion span these boundaries. — [actix-web/src/app_service.rs#L221-L249](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-web/src/app_service.rs#L221-L249) [actix-web/src/app_service.rs#L331-L348](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-web/src/app_service.rs#L331-L348) [actix-web/src/resource.rs#L562-L569](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-web/src/resource.rs#L562-L569) [actix-web/src/handler.rs#L102-L118](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-web/src/handler.rs#L102-L118)
- Construct shared Data outside HttpServer::new and clone it into apps; preserve nearest-layer lookup. Tokio block_in_place is incompatible with worker runtimes, and rt::spawn requires an Actix runtime or manually configured LocalSet. — [actix-web/src/data.rs#L23-L41](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-web/src/data.rs#L23-L41) [actix-web/src/rt.rs#L34-L39](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-web/src/rt.rs#L34-L39) [actix-web/src/rt.rs#L61-L62](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-web/src/rt.rs#L61-L62)
- Preserve optional-feature boundaries: defaults include macros, compression, cookies, HTTP/2, unicode, compatibility, and WebSockets; secure cookies and TLS are separate, and __tls/__compress are private feature markers. — [actix-web/Cargo.toml#L60-L107](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-web/Cargo.toml#L60-L107) [actix-web/Cargo.toml#L112-L124](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-web/Cargo.toml#L112-L124) [justfile#L112-L120](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/justfile#L112-L120)
- For separately authorized validation, start with the affected crate/test filter, then use just test and just test-docs; consult just check-min/check-default/clippy for feature and lint checks. Existing scripts separate Cargo macro suites from nextest and include a named test exclusion. — [justfile#L32-L68](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/justfile#L32-L68) [.github/workflows/ci.yml#L79-L87](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/.github/workflows/ci.yml#L79-L87)
- Macro edits need runtime registration tests plus compiler fixtures: trybuild suites are MSRV-gated, and routing fixtures cover malformed paths, methods, scope attributes, and runtime macros. — [actix-web-codegen/tests/trybuild.rs#L1-L29](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-web-codegen/tests/trybuild.rs#L1-L29) [actix-web-codegen/src/route.rs#L456-L464](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-web-codegen/src/route.rs#L456-L464) [actix-web-codegen/src/lib.rs#L249-L272](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-web-codegen/src/lib.rs#L249-L272)
- Check compatibility before changing public signatures or macro visibility: compat-routing-macros-force-pub forces generated handler structs public, semver CI currently reports rather than fails, and actix-web-actors is deprecated and omitted from the root member list. — [actix-web-codegen/src/route.rs#L420-L422](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-web-codegen/src/route.rs#L420-L422) [.github/workflows/semver-checks.yml#L38-L60](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/.github/workflows/semver-checks.yml#L38-L60) [actix-web-actors/src/lib.rs#L1-L3](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-web-actors/src/lib.rs#L1-L3) [Cargo.toml#L3-L14](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/Cargo.toml#L3-L14)
- Choose tests matching the actual boundary: init_service omits wire codecs, traversal tests exercise lexical paths, multipart tests exercise discarded-byte accounting, and shutdown tests exercise application-data lifetime during incomplete bodies. — [actix-test/src/lib.rs#L1-L5](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-test/src/lib.rs#L1-L5) [actix-files/tests/traversal.rs#L8-L25](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-files/tests/traversal.rs#L8-L25) [actix-multipart/src/form/mod.rs#L834-L856](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-multipart/src/form/mod.rs#L834-L856) [actix-web/tests/test_httpserver.rs#L140-L176](https://github.com/actix/actix-web/blob/30c831fce5328ccf916bea77e59ce6419b457e39/actix-web/tests/test_httpserver.rs#L140-L176)

Source repository: https://github.com/actix/actix-web
Full evidence corpus: https://github.com/Codevetter/codevetter/tree/main/benchmarks/repo-unpacks/actix-web.json

## Public product links

- [CodeVetter](https://codevetter.com/)
- [Download](https://codevetter.com/download)
- [Documentation](https://codevetter.com/docs/)
- [Source](https://github.com/Codevetter/codevetter)
