WinMerge is an open-source differencing and merging tool for Windows, written in C++ with MFC and ATL. It provides file and folder comparison (2- and 3-way), syntax highlighting, inline editing, patch generation, and archive support. The application is structured as a monolith with a plugin system (COM-based DLLs) for pre-diff filtering, unpacking, and transformation. It integrates tightly with Windows Explorer via a shell extension and supports internationalization, dark mode, and extensive customization through property pages. The architecture follows the MFC document/view pattern, with core diff engines (vendored xdiff and GNU diffutils), a filter engine with regex-based line/folder filtering, and an options manager using registry or INI file backends. Third-party dependencies are heavily vendored, including Boost (MPL, Fusion, Preprocessor), Poco (Foundation, XML, Encodings), tree-sitter, CrystalEdit, and libxdiff. The project is actively maintained with regular releases, a comprehensive manual, and automated CI/CD pipelines. While primarily a Windows desktop application, it showcases reusable patterns such as an extensible options management system, a self-contained byte comparison engine, a lightweight async task wrapper, and a property page host. However, the codebase carries significant legacy MFC idioms and platform-specific code, limiting cross-platform portability. The vendored dependency tree is large, and some preprocessor-heavy Boost headers are fragile with compiler updates.
Notepad-- is a cross-platform Qt/C++ desktop text editor with a Notepad++-style feature set. The production application is a monolithic Qt Widgets GUI that provides multi-tab editing, syntax highlighting for dozens of languages via vendored Scintilla/QScintilla, hex editing, file and directory comparison, encoding detection and batch conversion, find/replace across files, batch rename, macro recording, user-defined languages, theming, and an optional plugin system. The main entry point is src/main.cpp, which handles argument parsing, single-instance IPC, and session restore, then launches the central CCNotePad main window in src/cceditor/ccnotepad.cpp. Core editing behavior is implemented through ScintillaEditView and QsciDisplayWindow, while settings are persisted through QSettings and the NddSetting helper.