# Modules {#modules}


icey is organised into 16 modules. Each module builds as a separate library and declares its dependencies via CMake. Enable only what you need; dependencies resolve automatically.

This page is the map. If you want the quickest path to a task, use the table below and then jump into the module guide that actually owns the work.


## Common Starting Points {#common-starting-points}


| Goal | Start here |
| ---- | ---------- |
| Runtime contracts, loop affinity, ownership rules | [concepts/runtime-contracts.md](https://auscaster.com/icey/docs/concepts/runtime-contracts.md) |
| Packet pipelines, queue boundaries, media graphs | [concepts/packetstream.md](https://auscaster.com/icey/docs/concepts/packetstream.md) |
| HTTP server or WebSocket service | [recipes/http-server.md](https://auscaster.com/icey/docs/guides/recipes/http-server.md) |
| Browser media send path | [recipes/webrtc-webcam-to-browser.md](https://auscaster.com/icey/docs/guides/recipes/webrtc-webcam-to-browser.md) |
| Browser media receive and recording | [recipes/webrtc-browser-to-recorder.md](https://auscaster.com/icey/docs/guides/recipes/webrtc-browser-to-recorder.md) |
| Decoded media intelligence branches | [modules/vision.md](https://auscaster.com/icey/docs/concepts/modules/vision.md) and [modules/speech.md](https://auscaster.com/icey/docs/concepts/modules/speech.md) |
| Full self-hosted media stack | [run/index.md](https://auscaster.com/icey/docs/guides/run/index.md) |
| Signalling, presence, and rooms | [modules/symple.md](https://auscaster.com/icey/docs/concepts/modules/symple.md) |
| TURN relay and NAT traversal | [recipes/turn-server.md](https://auscaster.com/icey/docs/guides/recipes/turn-server.md) |
| Low-level STUN message work | [modules/stun.md](https://auscaster.com/icey/docs/concepts/modules/stun.md) |
| Capture, encode, decode, muxing | [modules/av.md](https://auscaster.com/icey/docs/concepts/modules/av.md) |


## Dependency Diagram {#dependency-diagram}


```text
                        symple
                       /  |   \
                      /   |    \
                     /   json    \
                    /     |       \
                   /     http     sched
                  /     / |  \
                 /     /  |   \
                /    net   |    \
                \   / \    |    /
                 \ /   \   |   /
                crypto  \  |  /
                  \      \ | /
                   \      base
                    \      |
                     \    libuv (vendored)
                      \
                openssl (system)

            archo     graft     av
              |         |       |
             base      base    base (+FFmpeg)

          stun ---- turn
           |       / |
           net    /  |
           |     /   |
          crypto    net
           |
          base

          webrtc
         / | \ \ \
       base net crypto av json
        |                |
       libuv            base
      (+libdatachannel, OpenSSL 3.x, FFmpeg)

          pacm
         / | \ \
       net json http archo
        |   |    |     |
       ...  |   ...   base
           base

        speech   vision
           \      /
            \    /
             av json
              \ /
              base
```


## Module Overview {#module-overview}


| Module | Description | Dependencies |
| ------ | ----------- | ------------ |
| **[base](https://auscaster.com/icey/docs/concepts/modules/base.md)** | Event loop (libuv), signals, PacketStream pipeline, logging, filesystem, timers | libuv (vendored) |
| **[crypto](https://auscaster.com/icey/docs/concepts/modules/crypto.md)** | Hashing, HMAC, symmetric ciphers, X.509 certificates, RSA | base, OpenSSL |
| **[net](https://auscaster.com/icey/docs/concepts/modules/net.md)** | TCP/SSL/UDP sockets, chainable adapters, async DNS | base, crypto |
| **[http](https://auscaster.com/icey/docs/concepts/modules/http.md)** | HTTP client/server, WebSocket, forms, cookies, streaming | base, net, crypto |
| **[json](https://auscaster.com/icey/docs/concepts/modules/json.md)** | JSON serialization (nlohmann/json), configuration | base |
| **[av](https://auscaster.com/icey/docs/concepts/modules/av.md)** | FFmpeg capture, encode, decode, device management | base, FFmpeg (optional) |
| **[speech](https://auscaster.com/icey/docs/concepts/modules/speech.md)** | Audio intelligence primitives for decoded media streams | base, av, json |
| **[vision](https://auscaster.com/icey/docs/concepts/modules/vision.md)** | Video intelligence primitives for sampled decoded frames | base, av, json |
| **[webrtc](https://auscaster.com/icey/docs/concepts/modules/webrtc.md)** | WebRTC media transport via libdatachannel | base, net, crypto, av, json, libdatachannel, OpenSSL 3.x, FFmpeg 5+ |
| **[symple](https://auscaster.com/icey/docs/concepts/modules/symple.md)** | Real-time messaging, presence, rooms, WebRTC signalling | base, crypto, net, http, json |
| **[stun](https://auscaster.com/icey/docs/concepts/modules/stun.md)** | RFC 5389 STUN for NAT traversal | base, net, crypto |
| **[turn](https://auscaster.com/icey/docs/concepts/modules/turn.md)** | RFC 5766 TURN relay server and client | base, net, stun, crypto |
| **[archo](https://auscaster.com/icey/docs/concepts/modules/archo.md)** | ZIP archive extraction | base |
| **[graft](https://auscaster.com/icey/docs/concepts/modules/graft.md)** | Native plugin ABI contract and runtime loading helpers | base |
| **[pacm](https://auscaster.com/icey/docs/concepts/modules/pacm.md)** | Package manager for plugin distribution | base, net, json, http, archo, crypto |
| **[sched](https://auscaster.com/icey/docs/concepts/modules/sched.md)** | Task scheduler for deferred and periodic jobs | base, json |


## Read This With The Sidebar {#read-this-with-the-sidebar}


This page answers:

- what each module is for
- how the dependency graph is shaped
- where to start if you know the job but not the subsystem

The module guides answer the rest: architecture, contracts, usage, examples, and links into samples or apps. The concepts and workflow pages exist so you do not have to reverse-engineer that path from the module list every time.
