# jonathansilva/nano architecture

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

- Interactive diagram: https://gitdiagram.com/jonathansilva/nano
- Repository: https://github.com/jonathansilva/nano

## Overview

Nano is a PHP framework for building APIs and web applications. Its central workflow accepts an HTTP request, routes it by method and path, resolves request/response objects and dependencies, runs middleware, and dispatches an application handler. The framework also provides request validation and sanitization, database access, templates, JWTs, outbound HTTP, environment configuration, and a CLI. Several documented capabilities are represented at their enclosing source paths because their implementations were not sampled; links between those and the request lifecycle are omitted where wiring is uncertain.

Main entry points: [`src/Core/Router/Router.php`](https://github.com/jonathansilva/nano/blob/main/src/Core/Router/Router.php) (Route dispatch), [`src/Core/Router/Request.php`](https://github.com/jonathansilva/nano/blob/main/src/Core/Router/Request.php) (Request data), [`src/Core/Env.php`](https://github.com/jonathansilva/nano/blob/main/src/Core/Env.php) (Environment config), [`src/Core/Router/Instance.php`](https://github.com/jonathansilva/nano/blob/main/src/Core/Router/Instance.php) (Router instance)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_http["HTTP lifecycle"]
  node_instance["Router instance<br/>[Instance.php]"]
  node_router["Route dispatch<br/>[Router.php]"]
  node_request["Request data<br/>[Request.php]"]
  node_response["Response<br/>[Response.php]"]
  node_interfaces["HTTP contracts"]
  node_responsecontract["Response contract"]
  node_cors["CORS support"]
end

subgraph group_security["Security tools"]
  node_validator["Input validation<br/>[Validator.php]"]
  node_sanitize["Input sanitization<br/>[Sanitize.php]"]
  node_jwt["JWT tokens<br/>[JWT.php]"]
  node_csrf["CSRF protection"]
end

subgraph group_services["Application services"]
  node_database["Database connection<br/>[Database.php]"]
  node_template["Template engine<br/>[Template.php]"]
  node_curl["Outbound HTTP<br/>[Curl.php]"]
end

subgraph group_runtime["Runtime utilities"]
  node_container["Dependency container<br/>[Container.php]"]
  node_error["Error handling<br/>[Error.php]"]
  node_env["Environment config<br/>[Env.php]"]
  node_cli["Nano CLI"]
end

node_client(("HTTP client"))
node_handler["App handlers"]
node_middleware["Middleware"]

node_client -->|"starts app"| node_instance
node_instance -->|"creates"| node_router
node_router -->|"resolves"| node_request
node_router -->|"resolves"| node_response
node_router -->|"resolves dependencies"| node_container
node_router -->|"dispatches"| node_middleware
node_router -->|"dispatches"| node_handler
node_request -->|"validates with"| node_validator
node_request -->|"sanitizes with"| node_sanitize
node_request -->|"creates"| node_curl
node_container -->|"resolves PDO via"| node_database
node_database -->|"reads settings"| node_env
node_jwt -->|"reads settings"| node_env
node_template -->|"reads settings"| node_env
node_request -->|"reads cookie settings"| node_env
node_client -->|"sends HTTP"| node_request
node_response -->|"sends response"| node_client

click node_instance "https://github.com/jonathansilva/nano/blob/main/src/Core/Router/Instance.php"
click node_router "https://github.com/jonathansilva/nano/blob/main/src/Core/Router/Router.php"
click node_request "https://github.com/jonathansilva/nano/blob/main/src/Core/Router/Request.php"
click node_response "https://github.com/jonathansilva/nano/blob/main/src/Core/Router/Response.php"
click node_interfaces "https://github.com/jonathansilva/nano/blob/main/src/Core/Router/RequestInterface.php"
click node_responsecontract "https://github.com/jonathansilva/nano/blob/main/src/Core/Router/ResponseInterface.php"
click node_container "https://github.com/jonathansilva/nano/blob/main/src/Core/Container.php"
click node_error "https://github.com/jonathansilva/nano/blob/main/src/Core/Error.php"
click node_env "https://github.com/jonathansilva/nano/blob/main/src/Core/Env.php"
click node_database "https://github.com/jonathansilva/nano/blob/main/src/Core/Database.php"
click node_template "https://github.com/jonathansilva/nano/blob/main/src/Core/View/Template.php"
click node_curl "https://github.com/jonathansilva/nano/blob/main/src/Core/Curl.php"
click node_validator "https://github.com/jonathansilva/nano/blob/main/src/Core/Security/Validator.php"
click node_sanitize "https://github.com/jonathansilva/nano/blob/main/src/Core/Security/Sanitize.php"
click node_jwt "https://github.com/jonathansilva/nano/blob/main/src/Core/Security/JWT.php"
click node_csrf "https://github.com/jonathansilva/nano/tree/main/src/Core/Security"
click node_cors "https://github.com/jonathansilva/nano/tree/main/src/Core/Router"
click node_cli "https://github.com/jonathansilva/nano/blob/main/nano"

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_instance,node_router,node_request,node_response,node_interfaces,node_responsecontract,node_cors,node_client toneBlue
class node_validator,node_sanitize,node_jwt,node_csrf toneAmber
class node_database,node_template,node_curl,node_handler toneMint
class node_container,node_error,node_env,node_cli toneRose
class node_middleware toneIndigo
```

## Components

### HTTP lifecycle

- [Router instance](https://github.com/jonathansilva/nano/blob/main/src/Core/Router/Instance.php): `src/Core/Router/Instance.php`
- [Route dispatch](https://github.com/jonathansilva/nano/blob/main/src/Core/Router/Router.php): `src/Core/Router/Router.php`
- [Request data](https://github.com/jonathansilva/nano/blob/main/src/Core/Router/Request.php): `src/Core/Router/Request.php`
- [Response](https://github.com/jonathansilva/nano/blob/main/src/Core/Router/Response.php): `src/Core/Router/Response.php`
- [HTTP contracts](https://github.com/jonathansilva/nano/blob/main/src/Core/Router/RequestInterface.php): `src/Core/Router/RequestInterface.php`
- [Response contract](https://github.com/jonathansilva/nano/blob/main/src/Core/Router/ResponseInterface.php): `src/Core/Router/ResponseInterface.php`
- [CORS support](https://github.com/jonathansilva/nano/tree/main/src/Core/Router): `src/Core/Router`

### Security tools

- [Input validation](https://github.com/jonathansilva/nano/blob/main/src/Core/Security/Validator.php): `src/Core/Security/Validator.php`
- [Input sanitization](https://github.com/jonathansilva/nano/blob/main/src/Core/Security/Sanitize.php): `src/Core/Security/Sanitize.php`
- [JWT tokens](https://github.com/jonathansilva/nano/blob/main/src/Core/Security/JWT.php): `src/Core/Security/JWT.php`
- [CSRF protection](https://github.com/jonathansilva/nano/tree/main/src/Core/Security): `src/Core/Security`

### Application services

- [Database connection](https://github.com/jonathansilva/nano/blob/main/src/Core/Database.php): `src/Core/Database.php`
- [Template engine](https://github.com/jonathansilva/nano/blob/main/src/Core/View/Template.php): `src/Core/View/Template.php`
- [Outbound HTTP](https://github.com/jonathansilva/nano/blob/main/src/Core/Curl.php): `src/Core/Curl.php`

### Runtime utilities

- [Dependency container](https://github.com/jonathansilva/nano/blob/main/src/Core/Container.php): `src/Core/Container.php`
- [Error handling](https://github.com/jonathansilva/nano/blob/main/src/Core/Error.php): `src/Core/Error.php`
- [Environment config](https://github.com/jonathansilva/nano/blob/main/src/Core/Env.php): `src/Core/Env.php`
- [Nano CLI](https://github.com/jonathansilva/nano/blob/main/nano): `nano`

### Other components

- **HTTP client**
- **App handlers**
- **Middleware**

## Connections

- HTTP client → Router instance: starts app
- Router instance → Route dispatch: creates
- Route dispatch → Request data: resolves
- Route dispatch → Response: resolves
- Route dispatch → Dependency container: resolves dependencies
- Route dispatch → Middleware: dispatches
- Route dispatch → App handlers: dispatches
- Request data → Input validation: validates with
- Request data → Input sanitization: sanitizes with
- Request data → Outbound HTTP: creates
- Dependency container → Database connection: resolves PDO via
- Database connection → Environment config: reads settings
- JWT tokens → Environment config: reads settings
- Template engine → Environment config: reads settings
- Request data → Environment config: reads cookie settings
- HTTP client → Request data: sends HTTP
- Response → HTTP client: sends response
