# itsliaaa/baileys architecture

> Architecture diagram of the GitHub repository itsliaaa/baileys, 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/itsliaaa/baileys
- Repository: https://github.com/itsliaaa/baileys

## Overview

Baileys is a JavaScript WhatsApp Web client library. Applications create a socket, authenticate and connect, then exchange messages and manage chats, groups, newsletters, and related account data. Incoming frames are decoded and processed into events; outgoing messages are encoded and sent through the socket. Supporting layers handle WhatsApp’s binary protocol, Signal encryption, synchronization, and optional state storage. The README documents broad message and management capabilities; several feature modules are represented by their exact paths but were not sampled, so their internal call paths are not inferred.

Main entry points: [`lib/Socket/messages-send.js`](https://github.com/itsliaaa/baileys/blob/main/lib/Socket/messages-send.js) (Message sending), [`lib/Socket/messages-recv.js`](https://github.com/itsliaaa/baileys/blob/main/lib/Socket/messages-recv.js) (Message receiving), [`lib/Socket/socket.js`](https://github.com/itsliaaa/baileys/blob/main/lib/Socket/socket.js) (Socket setup), [`lib/Signal/libsignal.js`](https://github.com/itsliaaa/baileys/blob/main/lib/Signal/libsignal.js) (Signal repository)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Client and messaging"]
  node_api["Public API<br/>[index.js]"]
  node_socket["Socket setup<br/>[socket.js]"]
  node_websocket["WebSocket transport<br/>[websocket.js]"]
  node_send["Message sending<br/>[messages-send.js]"]
  node_receive["Message receiving<br/>[messages-recv.js]"]
  node_chat["Chat operations<br/>[chats.js]"]
  node_groups["Group operations<br/>[groups.js]"]
  node_communities["Communities<br/>[communities.js]"]
  node_newsletter["Newsletter operations<br/>[newsletter.js]"]
  node_business["Business operations<br/>[business.js]"]
  node_messageutils["Message utilities<br/>[messages.js]"]
  node_media["Media handling<br/>[messages-media.js]"]
  node_processing["Message processing<br/>[process-message.js]"]
  node_preview["Link previews<br/>[link-preview.js]"]
end

subgraph group_protocol["Wire protocol"]
  node_binary["Binary encoding<br/>[encode.js]"]
  node_decode["Binary decoding<br/>[decode.js]"]
  node_jid["WhatsApp IDs<br/>[jid-utils.js]"]
  node_noise["Noise handshake<br/>[noise-handler.js]"]
end

subgraph group_security["Identity and encryption"]
  node_signal["Signal repository<br/>[libsignal.js]"]
  node_session["Signal sessions<br/>[session-cipher.js]"]
  node_transportcrypto["Transport crypto<br/>[crypto.js]"]
  node_groupcrypto["Group encryption<br/>[group-cipher.js]"]
end

subgraph group_state["State and sync"]
  node_auth["Auth state"]
  node_store[("In-memory store")]
  node_sync["User synchronization<br/>[USyncQuery.js]"]
  node_retry["Retry management"]
end

node_app(("Application"))

node_app -->|"uses"| node_api
node_api -->|"creates socket"| node_socket
node_socket -.->|"configures"| node_websocket
node_socket -.->|"routes sends"| node_send
node_socket -.->|"routes receives"| node_receive
node_send -->|"uses"| node_messageutils
node_send -->|"uses"| node_media
node_send -->|"uses"| node_preview
node_send -->|"queries"| node_sync
node_send -->|"calls"| node_newsletter
node_receive -.->|"processes messages"| node_processing
node_receive -->|"requests retry"| node_send
node_send -->|"encodes nodes"| node_binary
node_receive -->|"decodes nodes"| node_decode
node_noise -->|"decodes frames"| node_decode
node_noise -->|"encrypts frames"| node_transportcrypto
node_signal -->|"uses sessions"| node_session
node_session -->|"uses crypto"| node_transportcrypto
node_signal -->|"uses group cipher"| node_groupcrypto
node_signal -->|"resolves addresses"| node_jid
node_receive -.->|"checks retries"| node_retry
node_retry -.->|"uses cache"| node_auth
node_app -->|"provides credentials"| node_auth
node_app -->|"may attach store"| node_store
node_app -->|"manages chats"| node_chat
node_app -->|"manages groups"| node_groups
node_app -->|"manages communities"| node_communities
node_app -->|"manages business"| node_business

click node_api "https://github.com/itsliaaa/baileys/blob/main/lib/index.js"
click node_socket "https://github.com/itsliaaa/baileys/blob/main/lib/Socket/socket.js"
click node_websocket "https://github.com/itsliaaa/baileys/blob/main/lib/Socket/Client/websocket.js"
click node_send "https://github.com/itsliaaa/baileys/blob/main/lib/Socket/messages-send.js"
click node_receive "https://github.com/itsliaaa/baileys/blob/main/lib/Socket/messages-recv.js"
click node_chat "https://github.com/itsliaaa/baileys/blob/main/lib/Socket/chats.js"
click node_groups "https://github.com/itsliaaa/baileys/blob/main/lib/Socket/groups.js"
click node_communities "https://github.com/itsliaaa/baileys/blob/main/lib/Socket/communities.js"
click node_newsletter "https://github.com/itsliaaa/baileys/blob/main/lib/Socket/newsletter.js"
click node_business "https://github.com/itsliaaa/baileys/blob/main/lib/Socket/business.js"
click node_messageutils "https://github.com/itsliaaa/baileys/blob/main/lib/Utils/messages.js"
click node_media "https://github.com/itsliaaa/baileys/blob/main/lib/Utils/messages-media.js"
click node_processing "https://github.com/itsliaaa/baileys/blob/main/lib/Utils/process-message.js"
click node_binary "https://github.com/itsliaaa/baileys/blob/main/lib/WABinary/encode.js"
click node_decode "https://github.com/itsliaaa/baileys/blob/main/lib/WABinary/decode.js"
click node_jid "https://github.com/itsliaaa/baileys/blob/main/lib/WABinary/jid-utils.js"
click node_noise "https://github.com/itsliaaa/baileys/blob/main/lib/Utils/noise-handler.js"
click node_signal "https://github.com/itsliaaa/baileys/blob/main/lib/Signal/libsignal.js"
click node_session "https://github.com/itsliaaa/baileys/blob/main/lib/Transport/session-cipher.js"
click node_transportcrypto "https://github.com/itsliaaa/baileys/blob/main/lib/Transport/crypto.js"
click node_groupcrypto "https://github.com/itsliaaa/baileys/blob/main/lib/Signal/Group/group-cipher.js"
click node_auth "https://github.com/itsliaaa/baileys/blob/main/lib/Utils/use-multi-file-auth-state.js"
click node_store "https://github.com/itsliaaa/baileys/blob/main/lib/Store/make-in-memory-store.js"
click node_sync "https://github.com/itsliaaa/baileys/blob/main/lib/WAUSync/USyncQuery.js"
click node_retry "https://github.com/itsliaaa/baileys/blob/main/lib/Utils/message-retry-manager.js"
click node_preview "https://github.com/itsliaaa/baileys/blob/main/lib/Addon/link-preview.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_api,node_socket,node_websocket,node_send,node_receive,node_chat,node_groups,node_communities,node_newsletter,node_business,node_messageutils,node_media,node_processing,node_preview toneBlue
class node_binary,node_decode,node_jid,node_noise toneAmber
class node_signal,node_session,node_transportcrypto,node_groupcrypto toneMint
class node_auth,node_store,node_sync,node_retry toneRose
class node_app toneIndigo
```

## Components

### Client and messaging

- [Public API](https://github.com/itsliaaa/baileys/blob/main/lib/index.js): `lib/index.js`
- [Socket setup](https://github.com/itsliaaa/baileys/blob/main/lib/Socket/socket.js): `lib/Socket/socket.js`
- [WebSocket transport](https://github.com/itsliaaa/baileys/blob/main/lib/Socket/Client/websocket.js): `lib/Socket/Client/websocket.js`
- [Message sending](https://github.com/itsliaaa/baileys/blob/main/lib/Socket/messages-send.js): `lib/Socket/messages-send.js`
- [Message receiving](https://github.com/itsliaaa/baileys/blob/main/lib/Socket/messages-recv.js): `lib/Socket/messages-recv.js`
- [Chat operations](https://github.com/itsliaaa/baileys/blob/main/lib/Socket/chats.js): `lib/Socket/chats.js`
- [Group operations](https://github.com/itsliaaa/baileys/blob/main/lib/Socket/groups.js): `lib/Socket/groups.js`
- [Communities](https://github.com/itsliaaa/baileys/blob/main/lib/Socket/communities.js): `lib/Socket/communities.js`
- [Newsletter operations](https://github.com/itsliaaa/baileys/blob/main/lib/Socket/newsletter.js): `lib/Socket/newsletter.js`
- [Business operations](https://github.com/itsliaaa/baileys/blob/main/lib/Socket/business.js): `lib/Socket/business.js`
- [Message utilities](https://github.com/itsliaaa/baileys/blob/main/lib/Utils/messages.js): `lib/Utils/messages.js`
- [Media handling](https://github.com/itsliaaa/baileys/blob/main/lib/Utils/messages-media.js): `lib/Utils/messages-media.js`
- [Message processing](https://github.com/itsliaaa/baileys/blob/main/lib/Utils/process-message.js): `lib/Utils/process-message.js`
- [Link previews](https://github.com/itsliaaa/baileys/blob/main/lib/Addon/link-preview.js): `lib/Addon/link-preview.js`

### Wire protocol

- [Binary encoding](https://github.com/itsliaaa/baileys/blob/main/lib/WABinary/encode.js): `lib/WABinary/encode.js`
- [Binary decoding](https://github.com/itsliaaa/baileys/blob/main/lib/WABinary/decode.js): `lib/WABinary/decode.js`
- [WhatsApp IDs](https://github.com/itsliaaa/baileys/blob/main/lib/WABinary/jid-utils.js): `lib/WABinary/jid-utils.js`
- [Noise handshake](https://github.com/itsliaaa/baileys/blob/main/lib/Utils/noise-handler.js): `lib/Utils/noise-handler.js`

### Identity and encryption

- [Signal repository](https://github.com/itsliaaa/baileys/blob/main/lib/Signal/libsignal.js): `lib/Signal/libsignal.js`
- [Signal sessions](https://github.com/itsliaaa/baileys/blob/main/lib/Transport/session-cipher.js): `lib/Transport/session-cipher.js`
- [Transport crypto](https://github.com/itsliaaa/baileys/blob/main/lib/Transport/crypto.js): `lib/Transport/crypto.js`
- [Group encryption](https://github.com/itsliaaa/baileys/blob/main/lib/Signal/Group/group-cipher.js): `lib/Signal/Group/group-cipher.js`

### State and sync

- [Auth state](https://github.com/itsliaaa/baileys/blob/main/lib/Utils/use-multi-file-auth-state.js): `lib/Utils/use-multi-file-auth-state.js`
- [In-memory store](https://github.com/itsliaaa/baileys/blob/main/lib/Store/make-in-memory-store.js): `lib/Store/make-in-memory-store.js`
- [User synchronization](https://github.com/itsliaaa/baileys/blob/main/lib/WAUSync/USyncQuery.js): `lib/WAUSync/USyncQuery.js`
- [Retry management](https://github.com/itsliaaa/baileys/blob/main/lib/Utils/message-retry-manager.js): `lib/Utils/message-retry-manager.js`

### Other components

- **Application**

## Connections

- Application → Public API: uses (evidence: `README.md`)
- Public API → Socket setup: creates socket (evidence: `lib/index.js`)
- Socket setup → WebSocket transport: configures
- Socket setup → Message sending: routes sends
- Socket setup → Message receiving: routes receives
- Message sending → Message utilities: uses (evidence: `lib/Socket/messages-send.js`)
- Message sending → Media handling: uses (evidence: `lib/Socket/messages-send.js`)
- Message sending → Link previews: uses (evidence: `lib/Socket/messages-send.js`)
- Message sending → User synchronization: queries (evidence: `lib/Socket/messages-send.js`)
- Message sending → Newsletter operations: calls (evidence: `lib/Socket/messages-send.js`)
- Message receiving → Message processing: processes messages
- Message receiving → Message sending: requests retry (evidence: `lib/Socket/messages-recv.js`)
- Message sending → Binary encoding: encodes nodes (evidence: `lib/Socket/messages-send.js`)
- Message receiving → Binary decoding: decodes nodes (evidence: `lib/Socket/messages-recv.js`)
- Noise handshake → Binary decoding: decodes frames (evidence: `lib/Utils/noise-handler.js`)
- Noise handshake → Transport crypto: encrypts frames (evidence: `lib/Utils/noise-handler.js`)
- Signal repository → Signal sessions: uses sessions (evidence: `lib/Signal/libsignal.js`)
- Signal sessions → Transport crypto: uses crypto (evidence: `lib/Transport/session-cipher.js`)
- Signal repository → Group encryption: uses group cipher (evidence: `lib/Signal/libsignal.js`)
- Signal repository → WhatsApp IDs: resolves addresses (evidence: `lib/Signal/libsignal.js`)
- Message receiving → Retry management: checks retries
- Retry management → Auth state: uses cache
- Application → Auth state: provides credentials (evidence: `README.md`)
- Application → In-memory store: may attach store (evidence: `README.md`)
- Application → Chat operations: manages chats (evidence: `README.md`)
- Application → Group operations: manages groups (evidence: `README.md`)
- Application → Communities: manages communities (evidence: `README.md`)
- Application → Business operations: manages business (evidence: `README.md`)
