|
ascii-chat 0.6.0
Real-time terminal-based video chat with ASCII art conversion
|
⛓️ External projects we rely on
⛓️ External projects we rely on
ascii-chat uses git submodules for vendored dependencies. Get them first:
This fetches uthash, BearSSL, tomlc17, sokol, and libsodium-bcrypt-pbkdf into deps/.
The easiest way to install everything is with the install script:
The script detects your platform and installs all required dependencies using your system's package manager (Homebrew, apt, yum, pacman, or vcpkg).
If you prefer to install manually or the script doesn't work for your system:
Ubuntu/Debian:
Arch Linux:
macOS (Homebrew):
Windows (Scoop + vcpkg):
First, install Visual Studio Build Tools and select the "Desktop development with C++" workload. This provides nmake for building BearSSL.
Once dependencies are installed, you're ready to compile. See Build System for build instructions, or just run:
These tools are required to build ascii-chat from source.
Website: https://clang.llvm.org/
Version: 18.0 or later
ascii-chat is a Clang-only project. We use Clang for:
Website: https://cmake.org/
Version: 4.2 or later
CMake configures the build. We use:
Website: https://ninja-build.org/
Version: Any
Ninja executes the build. Benefits:
Required for ascii-chat to function.
Purpose: Real-time audio capture and playback
Website: http://www.portaudio.com/
License: MIT License
Version: 19.7.0 or later
Used in lib/audio.c and lib/mixer.c for audio streaming. PortAudio abstracts platform differences (WASAPI on Windows, CoreAudio on macOS, ALSA/PulseAudio on Linux).
Purpose: End-to-end encryption and authentication
Website: https://libsodium.org/
License: ISC License
Version: 1.0.18 or later
Powers the cryptographic protocol in lib/crypto/. Provides:
Purpose: Real-time video frame compression
Website: https://facebook.github.io/zstd/
License: BSD License
Version: 1.4.0 or later
Used in lib/compression.c to compress ASCII frames before transmission. Level 1 compression gives ~50% size reduction at 400+ MB/s.
Included in deps/ and built from source for version consistency.
Purpose: O(1) hash table lookups for client management
Website: https://troydhanson.github.io/uthash/
License: BSD License
Header-only library for hash tables. Used for client ID lookups, symbol caching, and lock tracking.
Purpose: HTTPS client for fetching public keys from GitHub/GitLab
Website: https://bearssl.org/
License: MIT License
Small (~100KB) SSL library used in lib/crypto/http_client.c. Much smaller and simpler than OpenSSL.
Purpose: Configuration file parsing (future feature)
Website: https://github.com/cktan/tomlc17
License: MIT License
Prepared for ~/.ascii-chat/config.toml support.
Purpose: Future GPU-accelerated rendering
Website: https://github.com/floooh/sokol
License: zlib/libpng License
Header-only library for graphics, audio, and input. Available for future use.
Purpose: OpenSSH private key decryption
Website: https://github.com/imaami/libsodium-bcrypt-pbkdf
License: BSD License
Implements bcrypt-pbkdf for decrypting password-protected SSH keys.
Only required for building and running tests.
Purpose: Unit, integration, and performance testing
Website: https://criterion.readthedocs.io/
License: MIT License
Version: 2.4.0 or later
Platform: POSIX only (Linux, macOS). Windows tests run via Docker.
Provides automatic test discovery, fixtures, parameterized tests, and JUnit XML output for CI.
Optional for development, but required for portable static release builds.
Purpose: Fully static executables with no glibc dependencies
Website: https://musl.libc.org/
License: MIT License
Platform: Linux only
musl enables building fully static executables that run on any Linux distribution without shared library dependencies. Used with -DUSE_MUSL=ON.
Purpose: Fast memory allocation for production builds
Website: https://github.com/microsoft/mimalloc
License: MIT License
Version: 2.0.0 or later
Up to 2x faster than system malloc. Enabled with -DUSE_MIMALLOC=ON and used by default in release builds.
ascii-chat uses native platform APIs for webcam access and terminal I/O, eliminating heavy dependencies like OpenCV.
Video Capture:
Terminal I/O:
All dependencies use permissive licenses compatible with ascii-chat:
| License | Dependencies |
|---|---|
| MIT | BearSSL, PortAudio, Criterion, mimalloc, musl, tomlc17 |
| ISC | libsodium |
| BSD | zstd, uthash, libsodium-bcrypt-pbkdf |
| zlib | sokol |
No copyleft (GPL) dependencies in the core application.
| Dependency | Minimum | Rationale |
|---|---|---|
| CMake | 4.2 | CMake Presets, modern features |
| Clang | 18.0 | C23, sanitizers, defer/panic tools |
| PortAudio | 19.7.0 | Stable callback API |
| libsodium | 1.0.18 | Ed25519 support |
| zstd | 1.4.0 | Streaming API |
| Criterion | 2.4.0 | Theories and fixtures |
Git submodules are pinned to specific commits for reproducibility.
Git Submodules:
System Libraries:
Criterion is POSIX-only. Run tests via Docker:
BearSSL requires a native build tool:
make is installed (apt install build-essential or brew install make)nmake from Visual Studio Build Tools (install from https://visualstudio.microsoft.com/downloads/#build-tools-for-visual-studio-2022)