Architecture
EncodeX is a cross-platform multimedia conversion tool built on FFmpeg, React, TypeScript, and Electron. It is intended for developers who want to understand how the pieces fit together before contributing.

Design Principles
The renderer never spawns processes and never touches the filesystem directly. All privileged operations (file dialogs, FFmpeg execution, probing, window control) live in the main process and are reached through IPC.
- Three-process separation — main, preload, and renderer, following Electron's security model (
contextIsolation: true,nodeIntegration: false). - A single abstraction over media backends — the
ITranscoderinterface hides whether conversion is driven throughfluent-ffmpeg, a raw FFmpeg CLI child process, or the BMF framework. - IPC as a typed contract — every channel is a constant in
src/shared/ipc-channels.ts, and the renderer only ever talks to the main process through thewindow.electronAPIbridge exposed by the preload script. - Shared types and constants —
src/shared/is imported by all three processes so interfaces stay in sync by construction. - Progressive enhancement of the UI — pages are code-split with
React.lazy, state lives in Zustand stores, and long-running jobs stream progress back over IPC events.
Deep Dives
The full architecture is split into focused documents:
| Document | Topics |
|---|---|
| Processes, Build System & Startup | Process model (main/preload/renderer/shared), build system, binary resolution, startup sequence, CLI mode |
| Transcoder Abstraction & Conversion | ITranscoder interface, FfmpegCore / FFToolCore / BmfCore, shared flag building, hardware acceleration |
| Renderer, State & Subsystems | Render tree, pages, hooks, Zustand stores, batch queue, video player, timeline media, image processing |
Additional Documentation
| Document | Topics |
|---|---|
| CLI Usage | CLI usage, subcommands, all option tables |
| IPC Channels | IPC channels (request/send-only/events), electronAPI bridge |
| Testing | Test suite (123 files, 1603 tests), test setup, E2E specs |
| Project Structure | Full directory tree with annotations |
| Update Manager | In-app update manager implementation |