# abdocooder/webserv architecture

> Architecture diagram of the GitHub repository abdocooder/webserv, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/abdocooder/webserv
- Repository: https://github.com/abdocooder/webserv

## Overview

Webserv is a C++ HTTP/1.1 server. Its main workflow is configuration parsing and server startup, multiplexed client I/O, request parsing and routing, then producing an HTTP response. Routing also enables distinct static-file, directory-listing, redirect, DELETE, upload, session, and CGI behavior. The README documents the overall server capabilities; several source excerpts are partial or absent, so uncertain handler and event-loop wiring is not expanded.

Main entry points: [`srcs/core/HandlerFactory.cpp`](https://github.com/abdocooder/webserv/blob/main/srcs/core/HandlerFactory.cpp) (Handler factory), [`srcs/core/CGIHandler.cpp`](https://github.com/abdocooder/webserv/blob/main/srcs/core/CGIHandler.cpp) (CGI handler), [`srcs/core/EventLoop.cpp`](https://github.com/abdocooder/webserv/blob/main/srcs/core/EventLoop.cpp) (Event loop), [`srcs/core/Router.cpp`](https://github.com/abdocooder/webserv/blob/main/srcs/core/Router.cpp) (Router)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_startup["Startup and configuration"]
  node_main["Server entry<br/>[main.cpp]"]
  node_config_parser["Config parser<br/>[ConfigParser.cpp]"]
  node_server_config["Server config<br/>[ServerConfig.cpp]"]
  node_location_config["Location config<br/>[LocationConfig.cpp]"]
end

subgraph group_http["HTTP runtime"]
  node_event_loop["Event loop<br/>[EventLoop.cpp]"]
  node_connection["Connection state<br/>[Connection.cpp]"]
  node_request_parser["Request parser"]
  node_http_request["HTTP request<br/>[HttpRequest.cpp]"]
  node_router["Router<br/>[Router.cpp]"]
  node_http_response["HTTP response<br/>[HttpResponse.cpp]"]
  node_response_builder["Response builder"]
end

subgraph group_handlers["Request handling"]
  node_handler_factory["Handler factory<br/>[HandlerFactory.cpp]"]
  node_static_handler["Static files"]
  node_listing_handler["Directory listing"]
  node_redirect_handler["Redirects"]
  node_delete_handler["DELETE handler<br/>[DeleteHandler.cpp]"]
  node_upload_handler["Uploads<br/>[UploadHandler.cpp]"]
  node_session_handler["Sessions<br/>[SessionHandler.cpp]"]
  node_cgi_handler["CGI handler<br/>[CGIHandler.cpp]"]
end

subgraph group_integrations["State and integrations"]
  node_session_manager["Session manager<br/>[SessionManager.cpp]"]
  node_cgi_context["CGI context<br/>[CgiContext.cpp]"]
end

node_browser(("HTTP client"))
node_cgi_process(("CGI program"))
node_web_files[("Web content")]

node_browser -->|"opens connection"| node_event_loop
node_main -->|"parses config"| node_config_parser
node_main -->|"starts loop"| node_event_loop
node_config_parser -->|"builds config"| node_server_config
node_server_config -->|"holds locations"| node_location_config
node_event_loop -->|"manages clients"| node_connection
node_connection -->|"feeds socket data"| node_request_parser
node_request_parser -->|"parses request"| node_http_request
node_router -->|"selects handler"| node_handler_factory
node_handler_factory -->|"creates handler"| node_static_handler
node_handler_factory -->|"creates handler"| node_listing_handler
node_handler_factory -->|"creates handler"| node_redirect_handler
node_handler_factory -->|"creates handler"| node_delete_handler
node_handler_factory -->|"creates handler"| node_upload_handler
node_handler_factory -->|"creates handler"| node_session_handler
node_handler_factory -->|"creates handler"| node_cgi_handler
node_static_handler -->|"reads files"| node_web_files
node_listing_handler -->|"lists directory"| node_web_files
node_delete_handler -->|"deletes files"| node_web_files
node_upload_handler -->|"writes uploads"| node_web_files
node_session_handler -->|"reads and updates"| node_session_manager
node_session_handler -->|"builds responses"| node_response_builder
node_cgi_handler -->|"runs script"| node_cgi_process
node_router -->|"stores CGI state"| node_cgi_context
node_cgi_handler -->|"provides process data"| node_cgi_context
node_cgi_handler -->|"sets response"| node_http_response
node_router -->|"routes into response"| node_http_response
node_response_builder -->|"builds response"| node_http_response
node_event_loop -->|"sends response"| node_browser

click node_main "https://github.com/abdocooder/webserv/blob/main/srcs/main.cpp"
click node_config_parser "https://github.com/abdocooder/webserv/blob/main/srcs/config/ConfigParser.cpp"
click node_server_config "https://github.com/abdocooder/webserv/blob/main/srcs/config/ServerConfig.cpp"
click node_location_config "https://github.com/abdocooder/webserv/blob/main/srcs/config/LocationConfig.cpp"
click node_event_loop "https://github.com/abdocooder/webserv/blob/main/srcs/core/EventLoop.cpp"
click node_connection "https://github.com/abdocooder/webserv/blob/main/srcs/core/Connection.cpp"
click node_request_parser "https://github.com/abdocooder/webserv/blob/main/srcs/http/HttpRequestParser.cpp"
click node_http_request "https://github.com/abdocooder/webserv/blob/main/srcs/http/HttpRequest.cpp"
click node_router "https://github.com/abdocooder/webserv/blob/main/srcs/core/Router.cpp"
click node_handler_factory "https://github.com/abdocooder/webserv/blob/main/srcs/core/HandlerFactory.cpp"
click node_static_handler "https://github.com/abdocooder/webserv/blob/main/srcs/core/StaticFileHandler.cpp"
click node_listing_handler "https://github.com/abdocooder/webserv/blob/main/srcs/core/DirectoryListingHandler.cpp"
click node_redirect_handler "https://github.com/abdocooder/webserv/blob/main/srcs/core/RedirectHandler.cpp"
click node_delete_handler "https://github.com/abdocooder/webserv/blob/main/srcs/core/DeleteHandler.cpp"
click node_upload_handler "https://github.com/abdocooder/webserv/blob/main/srcs/core/UploadHandler.cpp"
click node_session_handler "https://github.com/abdocooder/webserv/blob/main/srcs/core/SessionHandler.cpp"
click node_session_manager "https://github.com/abdocooder/webserv/blob/main/srcs/core/SessionManager.cpp"
click node_cgi_handler "https://github.com/abdocooder/webserv/blob/main/srcs/core/CGIHandler.cpp"
click node_cgi_context "https://github.com/abdocooder/webserv/blob/main/srcs/cgi/CgiContext.cpp"
click node_http_response "https://github.com/abdocooder/webserv/blob/main/srcs/http/HttpResponse.cpp"
click node_response_builder "https://github.com/abdocooder/webserv/blob/main/srcs/http/HttpResponseBuilder.cpp"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_main,node_config_parser,node_server_config,node_location_config,node_browser toneBlue
class node_event_loop,node_connection,node_request_parser,node_http_request,node_router,node_http_response,node_response_builder,node_web_files toneAmber
class node_handler_factory,node_static_handler,node_listing_handler,node_redirect_handler,node_delete_handler,node_upload_handler,node_session_handler,node_cgi_handler toneMint
class node_session_manager,node_cgi_context toneRose
class node_cgi_process toneIndigo
```

## Components

### Startup and configuration

- [Server entry](https://github.com/abdocooder/webserv/blob/main/srcs/main.cpp): `srcs/main.cpp`
- [Config parser](https://github.com/abdocooder/webserv/blob/main/srcs/config/ConfigParser.cpp): `srcs/config/ConfigParser.cpp`
- [Server config](https://github.com/abdocooder/webserv/blob/main/srcs/config/ServerConfig.cpp): `srcs/config/ServerConfig.cpp`
- [Location config](https://github.com/abdocooder/webserv/blob/main/srcs/config/LocationConfig.cpp): `srcs/config/LocationConfig.cpp`

### HTTP runtime

- [Event loop](https://github.com/abdocooder/webserv/blob/main/srcs/core/EventLoop.cpp): `srcs/core/EventLoop.cpp`
- [Connection state](https://github.com/abdocooder/webserv/blob/main/srcs/core/Connection.cpp): `srcs/core/Connection.cpp`
- [Request parser](https://github.com/abdocooder/webserv/blob/main/srcs/http/HttpRequestParser.cpp): `srcs/http/HttpRequestParser.cpp`
- [HTTP request](https://github.com/abdocooder/webserv/blob/main/srcs/http/HttpRequest.cpp): `srcs/http/HttpRequest.cpp`
- [Router](https://github.com/abdocooder/webserv/blob/main/srcs/core/Router.cpp): `srcs/core/Router.cpp`
- [HTTP response](https://github.com/abdocooder/webserv/blob/main/srcs/http/HttpResponse.cpp): `srcs/http/HttpResponse.cpp`
- [Response builder](https://github.com/abdocooder/webserv/blob/main/srcs/http/HttpResponseBuilder.cpp): `srcs/http/HttpResponseBuilder.cpp`

### Request handling

- [Handler factory](https://github.com/abdocooder/webserv/blob/main/srcs/core/HandlerFactory.cpp): `srcs/core/HandlerFactory.cpp`
- [Static files](https://github.com/abdocooder/webserv/blob/main/srcs/core/StaticFileHandler.cpp): `srcs/core/StaticFileHandler.cpp`
- [Directory listing](https://github.com/abdocooder/webserv/blob/main/srcs/core/DirectoryListingHandler.cpp): `srcs/core/DirectoryListingHandler.cpp`
- [Redirects](https://github.com/abdocooder/webserv/blob/main/srcs/core/RedirectHandler.cpp): `srcs/core/RedirectHandler.cpp`
- [DELETE handler](https://github.com/abdocooder/webserv/blob/main/srcs/core/DeleteHandler.cpp): `srcs/core/DeleteHandler.cpp`
- [Uploads](https://github.com/abdocooder/webserv/blob/main/srcs/core/UploadHandler.cpp): `srcs/core/UploadHandler.cpp`
- [Sessions](https://github.com/abdocooder/webserv/blob/main/srcs/core/SessionHandler.cpp): `srcs/core/SessionHandler.cpp`
- [CGI handler](https://github.com/abdocooder/webserv/blob/main/srcs/core/CGIHandler.cpp): `srcs/core/CGIHandler.cpp`

### State and integrations

- [Session manager](https://github.com/abdocooder/webserv/blob/main/srcs/core/SessionManager.cpp): `srcs/core/SessionManager.cpp`
- [CGI context](https://github.com/abdocooder/webserv/blob/main/srcs/cgi/CgiContext.cpp): `srcs/cgi/CgiContext.cpp`

### Other components

- **HTTP client**
- **CGI program**
- **Web content**

## Connections

- HTTP client → Event loop: opens connection
- Server entry → Config parser: parses config
- Server entry → Event loop: starts loop
- Config parser → Server config: builds config
- Server config → Location config: holds locations
- Event loop → Connection state: manages clients
- Connection state → Request parser: feeds socket data
- Request parser → HTTP request: parses request
- Router → Handler factory: selects handler
- Handler factory → Static files: creates handler
- Handler factory → Directory listing: creates handler
- Handler factory → Redirects: creates handler
- Handler factory → DELETE handler: creates handler
- Handler factory → Uploads: creates handler
- Handler factory → Sessions: creates handler
- Handler factory → CGI handler: creates handler
- Static files → Web content: reads files
- Directory listing → Web content: lists directory
- DELETE handler → Web content: deletes files
- Uploads → Web content: writes uploads
- Sessions → Session manager: reads and updates
- Sessions → Response builder: builds responses
- CGI handler → CGI program: runs script
- Router → CGI context: stores CGI state
- CGI handler → CGI context: provides process data
- CGI handler → HTTP response: sets response
- Router → HTTP response: routes into response
- Response builder → HTTP response: builds response
- Event loop → HTTP client: sends response
