# swoopertr/framer-web-framework architecture

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

- Interactive diagram: https://gitdiagram.com/swoopertr/framer-web-framework
- Repository: https://github.com/swoopertr/framer-web-framework
- Video tour (about a minute): https://gitdiagram.com/swoopertr/framer-web-framework/video

## Overview

Framer is a lightweight Node.js web framework for HTTP sites and REST APIs. A request enters the clustered HTTP server, passes through request processing and MIME handling, then route registration dispatches it to a controller. Controllers can return rendered views or data and use business, data, and integration helpers. The README documents additional middleware and framework capabilities; where their wiring is not visible in sampled source, links are based on that documentation rather than inferred calls.

Main entry points: [`src/Core.js`](https://github.com/swoopertr/framer-web-framework/blob/master/src/Core.js) (Core Processing), [`src/Controller`](https://github.com/swoopertr/framer-web-framework/tree/master/src/Controller) (Controllers), [`index.js`](https://github.com/swoopertr/framer-web-framework/blob/master/index.js) (Clustered Server), [`src/route.js`](https://github.com/swoopertr/framer-web-framework/blob/master/src/route.js) (Route Dispatcher)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_runtime["HTTP Runtime"]
  node_server["Clustered Server<br/>[index.js]"]
  node_core["Core Processing<br/>[Core.js]"]
  node_settings["Runtime Settings<br/>[setting.js]"]
end

subgraph group_request["Request Processing"]
  node_routes_config["Route Definitions<br/>[Routes.json]"]
  node_router["Route Dispatcher<br/>[route.js]"]
  node_rate["Rate Limiter<br/>[rateLimiter.js]"]
  node_cache["Response Cache<br/>[cacheFrame.js]"]
  node_session["Session Handling<br/>[session.js]"]
  node_cookie["Cookie Handling<br/>[cookie.js]"]
  node_header["Header Handling<br/>[header.js]"]
  node_mime["MIME Filter<br/>[mimefilter.js]"]
end

subgraph group_mvc["MVC and Views"]
  node_controllers["Controllers"]
  node_render["Response Rendering<br/>[render.js]"]
  node_viewpack["Template Engine<br/>[ViewPack.js]"]
  node_views["Views and Partials"]
end

subgraph group_services["Data and Integrations"]
  node_postgres["PostgreSQL Helpers<br/>[base.js]"]
  node_person_data["Person Data<br/>[person.js]"]
  node_rick_data["Rick and Morty API<br/>[RickAndMorty.js]"]
end

subgraph group_capabilities["Framework Capabilities"]
  node_security["Token Security"]
  node_util["Auth Utilities<br/>[Util.js]"]
  node_static_files["Static Assets"]
  node_uploads["Upload Storage"]
end

node_client(("HTTP Client"))
node_google["Google OAuth"]
node_rick_service["Rick and Morty Service"]
node_database[("PostgreSQL")]

node_client -->|"sends request"| node_server
node_server -->|"reads settings"| node_settings
node_server -->|"processes request"| node_core
node_core -->|"rate limits"| node_rate
node_core -->|"checks cache"| node_cache
node_core -->|"handles session"| node_session
node_session -->|"reads and sets"| node_cookie
node_core -->|"sets headers"| node_header
node_server -->|"filters response"| node_mime
node_core -->|"dispatches request"| node_router
node_router -->|"loads routes"| node_routes_config
node_router -->|"invokes handler"| node_controllers
node_router -->|"checks protected route"| node_security
node_controllers -->|"formats response"| node_render
node_controllers -->|"uses view data"| node_viewpack
node_viewpack -->|"renders templates"| node_views
node_controllers -->|"requests data"| node_person_data
node_controllers -->|"requests characters"| node_rick_data
node_rick_data -->|"requests API data"| node_rick_service
node_controllers -.->|"uses auth helpers"| node_util
node_util -.->|"OAuth requests"| node_google
node_security -.->|"checks token"| node_postgres
node_postgres -.->|"queries"| node_database
node_server -.->|"serves assets"| node_static_files
node_core -.->|"stores uploads"| node_uploads

click node_server "https://github.com/swoopertr/framer-web-framework/blob/master/index.js"
click node_core "https://github.com/swoopertr/framer-web-framework/blob/master/src/Core.js"
click node_settings "https://github.com/swoopertr/framer-web-framework/blob/master/src/Config/setting.js"
click node_routes_config "https://github.com/swoopertr/framer-web-framework/blob/master/src/Config/Routes.json"
click node_router "https://github.com/swoopertr/framer-web-framework/blob/master/src/route.js"
click node_rate "https://github.com/swoopertr/framer-web-framework/blob/master/src/Middleware/rateLimiter.js"
click node_cache "https://github.com/swoopertr/framer-web-framework/blob/master/src/Middleware/cacheFrame.js"
click node_session "https://github.com/swoopertr/framer-web-framework/blob/master/src/Middleware/session.js"
click node_cookie "https://github.com/swoopertr/framer-web-framework/blob/master/src/Middleware/cookie.js"
click node_header "https://github.com/swoopertr/framer-web-framework/blob/master/src/Middleware/header.js"
click node_mime "https://github.com/swoopertr/framer-web-framework/blob/master/src/Middleware/mimefilter.js"
click node_controllers "https://github.com/swoopertr/framer-web-framework/tree/master/src/Controller"
click node_render "https://github.com/swoopertr/framer-web-framework/blob/master/src/Middleware/render.js"
click node_viewpack "https://github.com/swoopertr/framer-web-framework/blob/master/src/Middleware/ViewPack.js"
click node_views "https://github.com/swoopertr/framer-web-framework/tree/master/Presentation/Pages"
click node_security "https://github.com/swoopertr/framer-web-framework/blob/master/src/Bussiness/securityBusiness.js"
click node_util "https://github.com/swoopertr/framer-web-framework/blob/master/src/Util.js"
click node_postgres "https://github.com/swoopertr/framer-web-framework/blob/master/src/Data/pg/base/base.js"
click node_person_data "https://github.com/swoopertr/framer-web-framework/blob/master/src/Data/person.js"
click node_rick_data "https://github.com/swoopertr/framer-web-framework/blob/master/src/Data/External/RickAndMorty.js"
click node_static_files "https://github.com/swoopertr/framer-web-framework/tree/master/Presentation/assets"
click node_uploads "https://github.com/swoopertr/framer-web-framework/tree/master/Presentation/Download"

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_server,node_core,node_settings,node_client toneBlue
class node_routes_config,node_router,node_rate,node_cache,node_session,node_cookie,node_header,node_mime,node_database toneAmber
class node_controllers,node_render,node_viewpack,node_views toneMint
class node_postgres,node_person_data,node_rick_data toneRose
class node_security,node_util,node_static_files,node_uploads,node_google,node_rick_service toneIndigo
```

## Components

### HTTP Runtime

- [Clustered Server](https://github.com/swoopertr/framer-web-framework/blob/master/index.js): `index.js`
- [Core Processing](https://github.com/swoopertr/framer-web-framework/blob/master/src/Core.js): `src/Core.js`
- [Runtime Settings](https://github.com/swoopertr/framer-web-framework/blob/master/src/Config/setting.js): `src/Config/setting.js`

### Request Processing

- [Route Definitions](https://github.com/swoopertr/framer-web-framework/blob/master/src/Config/Routes.json): `src/Config/Routes.json`
- [Route Dispatcher](https://github.com/swoopertr/framer-web-framework/blob/master/src/route.js): `src/route.js`
- [Rate Limiter](https://github.com/swoopertr/framer-web-framework/blob/master/src/Middleware/rateLimiter.js): `src/Middleware/rateLimiter.js`
- [Response Cache](https://github.com/swoopertr/framer-web-framework/blob/master/src/Middleware/cacheFrame.js): `src/Middleware/cacheFrame.js`
- [Session Handling](https://github.com/swoopertr/framer-web-framework/blob/master/src/Middleware/session.js): `src/Middleware/session.js`
- [Cookie Handling](https://github.com/swoopertr/framer-web-framework/blob/master/src/Middleware/cookie.js): `src/Middleware/cookie.js`
- [Header Handling](https://github.com/swoopertr/framer-web-framework/blob/master/src/Middleware/header.js): `src/Middleware/header.js`
- [MIME Filter](https://github.com/swoopertr/framer-web-framework/blob/master/src/Middleware/mimefilter.js): `src/Middleware/mimefilter.js`

### MVC and Views

- [Controllers](https://github.com/swoopertr/framer-web-framework/tree/master/src/Controller): `src/Controller`
- [Response Rendering](https://github.com/swoopertr/framer-web-framework/blob/master/src/Middleware/render.js): `src/Middleware/render.js`
- [Template Engine](https://github.com/swoopertr/framer-web-framework/blob/master/src/Middleware/ViewPack.js): `src/Middleware/ViewPack.js`
- [Views and Partials](https://github.com/swoopertr/framer-web-framework/tree/master/Presentation/Pages): `Presentation/Pages`

### Data and Integrations

- [PostgreSQL Helpers](https://github.com/swoopertr/framer-web-framework/blob/master/src/Data/pg/base/base.js): `src/Data/pg/base/base.js`
- [Person Data](https://github.com/swoopertr/framer-web-framework/blob/master/src/Data/person.js): `src/Data/person.js`
- [Rick and Morty API](https://github.com/swoopertr/framer-web-framework/blob/master/src/Data/External/RickAndMorty.js): `src/Data/External/RickAndMorty.js`

### Framework Capabilities

- [Token Security](https://github.com/swoopertr/framer-web-framework/blob/master/src/Bussiness/securityBusiness.js): `src/Bussiness/securityBusiness.js`
- [Auth Utilities](https://github.com/swoopertr/framer-web-framework/blob/master/src/Util.js): `src/Util.js`
- [Static Assets](https://github.com/swoopertr/framer-web-framework/tree/master/Presentation/assets): `Presentation/assets`
- [Upload Storage](https://github.com/swoopertr/framer-web-framework/tree/master/Presentation/Download): `Presentation/Download`

### Other components

- **HTTP Client**
- **Google OAuth**
- **Rick and Morty Service**
- **PostgreSQL**

## Connections

- HTTP Client → Clustered Server: sends request
- Clustered Server → Runtime Settings: reads settings
- Clustered Server → Core Processing: processes request
- Core Processing → Rate Limiter: rate limits
- Core Processing → Response Cache: checks cache
- Core Processing → Session Handling: handles session
- Session Handling → Cookie Handling: reads and sets
- Core Processing → Header Handling: sets headers
- Clustered Server → MIME Filter: filters response
- Core Processing → Route Dispatcher: dispatches request
- Route Dispatcher → Route Definitions: loads routes
- Route Dispatcher → Controllers: invokes handler
- Route Dispatcher → Token Security: checks protected route
- Controllers → Response Rendering: formats response
- Controllers → Template Engine: uses view data
- Template Engine → Views and Partials: renders templates
- Controllers → Person Data: requests data
- Controllers → Rick and Morty API: requests characters
- Rick and Morty API → Rick and Morty Service: requests API data
- Controllers → Auth Utilities: uses auth helpers
- Auth Utilities → Google OAuth: OAuth requests
- Token Security → PostgreSQL Helpers: checks token
- PostgreSQL Helpers → PostgreSQL: queries
- Clustered Server → Static Assets: serves assets
- Core Processing → Upload Storage: stores uploads
