Understand

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

GoalStart here
Runtime contracts, loop affinity, ownership rulesconcepts/runtime-contracts.md
Packet pipelines, queue boundaries, media graphsconcepts/packetstream.md
HTTP server or WebSocket servicerecipes/http-server.md
Browser media send pathrecipes/webrtc-webcam-to-browser.md
Browser media receive and recordingrecipes/webrtc-browser-to-recorder.md
Decoded media intelligence branchesmodules/vision.md and modules/speech.md
Full self-hosted media stackrun/index.md
Signalling, presence, and roomsmodules/symple.md
TURN relay and NAT traversalrecipes/turn-server.md
Low-level STUN message workmodules/stun.md
Capture, encode, decode, muxingmodules/av.md

Dependency Diagram

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

            archo     pluga     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

ModuleDescriptionDependencies
baseEvent loop (libuv), signals, PacketStream pipeline, logging, filesystem, timerslibuv (vendored)
cryptoHashing, HMAC, symmetric ciphers, X.509 certificates, RSAbase, OpenSSL
netTCP/SSL/UDP sockets, chainable adapters, async DNSbase, crypto
httpHTTP client/server, WebSocket, forms, cookies, streamingbase, net, crypto
jsonJSON serialization (nlohmann/json), configurationbase
avFFmpeg capture, encode, decode, device managementbase, FFmpeg (optional)
speechAudio intelligence primitives for decoded media streamsbase, av, json
visionVideo intelligence primitives for sampled decoded framesbase, av, json
webrtcWebRTC media transport via libdatachannelbase, net, crypto, av, json, libdatachannel, OpenSSL 3.x, FFmpeg 5+
sympleReal-time messaging, presence, rooms, WebRTC signallingbase, crypto, net, http, json
stunRFC 5389 STUN for NAT traversalbase, net, crypto
turnRFC 5766 TURN relay server and clientbase, net, stun, crypto
archoZIP archive extractionbase
pacmPackage manager for plugin distributionbase, net, json, http, archo, crypto
plugaPlugin system for shared library loadingbase
schedTask scheduler for deferred and periodic jobsbase, json

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.