# typpo/textbelt architecture

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

- Interactive diagram: https://gitdiagram.com/typpo/textbelt
- Repository: https://github.com/typpo/textbelt

## Overview

TextBelt Open Source is a REST API and Node.js module for sending SMS through carrier email gateways. The main server workflow accepts a regional or U.S. request, validates and normalizes its inputs, then asks the sender to deliver through either a selected carrier or the region’s provider list; it returns success or failure based on the mail-send result. The module entry point also exposes the sender directly. The README documents regional endpoints and configurable Nodemailer transport. Redis is mentioned in the README, but its role is not established by the sampled source.

Main entry points: [`lib/text.js`](https://github.com/typpo/textbelt/blob/master/lib/text.js) (Text Sender), [`server/app.js`](https://github.com/typpo/textbelt/blob/master/server/app.js) (Express Server), [`index.js`](https://github.com/typpo/textbelt/blob/master/index.js) (Module Entry), [`lib/carriers.js`](https://github.com/typpo/textbelt/blob/master/lib/carriers.js) (Carrier Directory)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["REST API"]
  node_server["Express Server<br/>[app.js]"]
  node_module_entry["Module Entry<br/>[index.js]"]
end

subgraph group_delivery["SMS Delivery"]
  node_carrier_directory["Carrier Directory<br/>[carriers.js]"]
  node_regional_providers["Regional Providers<br/>[providers.js]"]
  node_text_sender["Text Sender<br/>[text.js]"]
  node_nodemailer["Nodemailer"]
end

subgraph group_configuration["Configuration"]
  node_mail_config["Mail Config<br/>[config.js]"]
end

node_api_client(("API Client"))
node_module_user(("Module User"))
node_carrier_gateways["Carrier Gateways"]

node_api_client -->|"posts request"| node_server
node_server -->|"checks carrier"| node_carrier_directory
node_server -->|"reads providers"| node_regional_providers
node_server -->|"calls send"| node_text_sender
node_server -->|"returns result"| node_api_client
node_module_user -->|"imports module"| node_module_entry
node_module_entry -->|"exports sender"| node_text_sender
node_text_sender -->|"selects carrier"| node_carrier_directory
node_text_sender -->|"selects region"| node_regional_providers
node_text_sender -->|"reads settings"| node_mail_config
node_text_sender -->|"sends mail"| node_nodemailer
node_nodemailer -.->|"delivers message"| node_carrier_gateways

click node_server "https://github.com/typpo/textbelt/blob/master/server/app.js"
click node_module_entry "https://github.com/typpo/textbelt/blob/master/index.js"
click node_carrier_directory "https://github.com/typpo/textbelt/blob/master/lib/carriers.js"
click node_regional_providers "https://github.com/typpo/textbelt/blob/master/lib/providers.js"
click node_text_sender "https://github.com/typpo/textbelt/blob/master/lib/text.js"
click node_mail_config "https://github.com/typpo/textbelt/blob/master/lib/config.js"

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_module_entry,node_api_client,node_module_user toneBlue
class node_carrier_directory,node_regional_providers,node_text_sender,node_nodemailer toneAmber
class node_mail_config toneMint
class node_carrier_gateways toneIndigo
```

## Components

### REST API

- [Express Server](https://github.com/typpo/textbelt/blob/master/server/app.js): `server/app.js`
- [Module Entry](https://github.com/typpo/textbelt/blob/master/index.js): `index.js`

### SMS Delivery

- [Carrier Directory](https://github.com/typpo/textbelt/blob/master/lib/carriers.js): `lib/carriers.js`
- [Regional Providers](https://github.com/typpo/textbelt/blob/master/lib/providers.js): `lib/providers.js`
- [Text Sender](https://github.com/typpo/textbelt/blob/master/lib/text.js): `lib/text.js`
- **Nodemailer**

### Configuration

- [Mail Config](https://github.com/typpo/textbelt/blob/master/lib/config.js): `lib/config.js`

### Other components

- **API Client**
- **Module User**
- **Carrier Gateways**

## Connections

- API Client → Express Server: posts request (evidence: `README.md`)
- Express Server → Carrier Directory: checks carrier (evidence: `server/app.js`)
- Express Server → Regional Providers: reads providers (evidence: `server/app.js`)
- Express Server → Text Sender: calls send (evidence: `server/app.js`)
- Express Server → API Client: returns result (evidence: `server/app.js`)
- Module User → Module Entry: imports module (evidence: `README.md`)
- Module Entry → Text Sender: exports sender (evidence: `index.js`)
- Text Sender → Carrier Directory: selects carrier (evidence: `lib/text.js`)
- Text Sender → Regional Providers: selects region (evidence: `lib/text.js`)
- Text Sender → Mail Config: reads settings (evidence: `lib/text.js`)
- Text Sender → Nodemailer: sends mail (evidence: `lib/text.js`)
- Nodemailer → Carrier Gateways: delivers message
