Dear ImGui: Bloat-free Graphical User interface for C++ with minimal dependencies
This report summarizes scanner evidence for ocornut/imgui, a C++ project with 76,574 GitHub stars. SynthScan examined 125,410 lines of code across 157 source files, recording 585 pattern matches distributed across 10 syntactic categories. The legacy adjusted pattern signal is 4.4 (Low pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Can maintainers explain intent, assumptions, and trade-offs? 577 finding(s).
Are imports declared and package/API names verified? 8 finding(s).
Are wrappers, guards, and repeated structures necessary? 2 finding(s).
Which changes need focused human review? 585 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 585 distinct pattern matches across 10 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | imgui.h | 1 | // dear imgui, v1.93.0 WIP | COMMENT |
| LOW | imgui.h | 21 | // - Issues & support ........... https://github.com/ocornut/imgui/issues | COMMENT |
| LOW | imgui.h | 41 | // [SECTION] Forward declarations and basic types | COMMENT |
| LOW | imgui.h | 61 | #pragma once | COMMENT |
| LOW | imgui.h | 81 | COMMENT | |
| LOW | imgui.h | 101 | #define IM_STRINGIFY(_EXPR) IM_STRINGIFY_HELPER(_EXPR) // Preprocessor idiom to stringify e.g. | COMMENT |
| LOW | imgui.h | 121 | COMMENT | |
| LOW | imgui.h | 141 | // Warnings | COMMENT |
| LOW | imgui.h | 321 | IM_NODEBUGSTEP constexpr inline ImVec4(float _x, float _y, float _z, float _w) : x(_x), y(_y), z(_z), w(_w) { } | COMMENT |
| LOW | imgui.h | 341 | // - To use something other than a 64-bit value: add '#define ImTextureID MyTextureType*' in your imconfig.h file. | COMMENT |
| LOW | imgui.h | 361 | // This is what gets passed to functions such as `ImGui::Image()`, `ImDrawList::AddImage()`. | COMMENT |
| LOW | imgui.h | 441 | // anything to the window. Always call a matching End() for each Begin() call, regardless of its return value! | COMMENT |
| LOW | imgui.h | 521 | // - PushFont(font, font->LegacySize) // Change font and set size to size passed to AddFontXXX() function | COMMENT |
| LOW | imgui.h | 601 | IMGUI_API float GetFrameHeightWithSpacing(); // ~ FontSize + style.FrameP | COMMENT |
| LOW | imgui.h | 781 | // - Read comments near ImGuiMultiSelectIO for instructions/details and see 'Demo->Widgets->Selection State & Multi- | COMMENT |
| LOW | imgui.h | 841 | // - SetItemTooltip() is a shortcut for the 'if (IsItemHovered(ImGuiHoveredFlags_ForTooltip)) { SetTooltip(...); }' | COMMENT |
| LOW | imgui.h | 861 | // Popups: open/close functions | COMMENT |
| LOW | imgui.h | 881 | // - After: The default = 0 means ImGuiPopupFlags_MouseButtonRight. Explicitly passing a literal 1 also means ImG | COMMENT |
| LOW | imgui.h | 901 | // - 3. Optionally call TableSetupScrollFreeze() to request scroll freezing of columns/rows. | COMMENT |
| LOW | imgui.h | 921 | // Tables: Headers & Columns declaration | COMMENT |
| LOW | imgui.h | 1081 | COMMENT | |
| LOW | imgui.h | 1101 | // - Visualize registered routes in 'Metrics/Debugger->Inputs'. | COMMENT |
| LOW | imgui.h | 1261 | //--------------------------------------------------------------------------------- | COMMENT |
| LOW | imgui.h | 1681 | ImGuiKey_GamepadRStickDown, // | | | [Analog] | COMMENT |
| LOW | imgui.h | 1841 | #ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS | COMMENT |
| LOW | imgui.h | 2061 | // - Table defaults to ImGuiTableFlags_SizingStretchSame -> all Columns defaults to ImGuiTableColumnFlags_WidthStretc | COMMENT |
| LOW | imgui.h | 2221 | COMMENT | |
| LOW | imgui.h | 2421 | IMGUI_API void ScaleAllSizes(float scale_factor); // Scale all spacing/padding/thickness values. Do not scale font | COMMENT |
| LOW | imgui.h | 2521 | // - Recovery after running an exception handler or any error processing which may skip code after an error has b | COMMENT |
| LOW | imgui.h | 2541 | bool ConfigDebugIsDebuggerPresent; // = false // Enable various tools calling IM_DEBUG_BREAK(). | COMMENT |
| LOW | imgui.h | 2681 | // Legacy: before 1.91.1, clipboard functions were stored in ImGuiIO instead of ImGuiPlatformIO. | COMMENT |
| LOW | imgui.h | 2921 | // scale using lists with tens of thousands of items without a problem) | COMMENT |
| LOW | imgui.h | 2961 | // Seek cursor toward given item. This is automatically called while stepping. | COMMENT |
| LOW | imgui.h | 3021 | // - Any setting other than the default will need custom backend support. The only standard backend that supports anythi | COMMENT |
| LOW | imgui.h | 3061 | }; | COMMENT |
| LOW | imgui.h | 3081 | // - Identify submitted items with SetNextItemSelectionUserData(), most likely using an index into your current data-set | COMMENT |
| LOW | imgui.h | 3161 | { | COMMENT |
| LOW | imgui.h | 3221 | // [SECTION] Drawing API (ImDrawCmd, ImDrawIdx, ImDrawVert, ImDrawChannel, ImDrawListSplitter, ImDrawFlags, ImDrawList, | COMMENT |
| LOW | imgui.h | 3341 | ImDrawFlags_Closed = 1 << 9, // OK -- // PathStroke(), AddPolyline(): specify that shape sh | COMMENT |
| LOW | imgui.h | 3501 | IMGUI_API void PathBezierQuadraticCurveTo(const ImVec2& p2, const ImVec2& p3, int num_segments = 0); | COMMENT |
| LOW | imgui.h | 3801 | // Load and rasterize multiple TTF/OTF fonts into a same texture. The font atlas will build a single texture holding: | COMMENT |
| LOW | imgui.h | 3881 | #endif | COMMENT |
| LOW | imgui.h | 4241 | // Some of the older obsolete names along with their replacement (commented out so they are not reported in IDE) | COMMENT |
| LOW | imgui.h | 4261 | //IMGUI_API ImGuiKey GetKeyIndex(ImGuiKey key); { IM_ASSERT(key >= | COMMENT |
| LOW | imgui.h | 4281 | //static inline bool DragFloat4(const char* label, float v[4], float v_speed, float v_min, float v_max, const char* | COMMENT |
| LOW | imgui.h | 4301 | //static inline float GetItemsLineHeightWithSpacing() { return GetFrameHeightWithSpacing(); } | COMMENT |
| LOW | imgui.h | 4341 | unsigned int GlyphID:31; // Input // [Internal] For custom font glyphs only (ID < 0x110000) | COMMENT |
| LOW | imgui.h | 4361 | // ImDrawCornerFlags_Bot = ImDrawFlags_RoundBottomLeft | ImDrawFlags_RoundBottomRight, | COMMENT |
| LOW | imgui.h | 4381 | #error IMGUI_DISABLE_METRICS_WINDOW was renamed to IMGUI_DISABLE_DEBUG_TOOLS, please use new name. | COMMENT |
| LOW | imgui.h | 4401 | #else | COMMENT |
| LOW | imstb_textedit.h | 1 | // [DEAR IMGUI] | COMMENT |
| LOW | imstb_textedit.h | 21 | // It is intended for use in games and other systems that need to build | COMMENT |
| LOW | imstb_textedit.h | 41 | // VERSION HISTORY | COMMENT |
| LOW | imstb_textedit.h | 61 | // 0.1 (2010-07-08) initial version | COMMENT |
| LOW | imstb_textedit.h | 81 | // | COMMENT |
| LOW | imstb_textedit.h | 101 | // moderate sizes. The undo system does no memory allocations, so | COMMENT |
| LOW | imstb_textedit.h | 121 | // in the displayed textedit. This is true for both plain text and | COMMENT |
| LOW | imstb_textedit.h | 141 | // to the xpos of the i+1'th char for a line of characters | COMMENT |
| LOW | imstb_textedit.h | 161 | // STB_TEXTEDIT_K_PGUP keyboard input to move cursor up a page | COMMENT |
| LOW | imstb_textedit.h | 181 | // STB_TEXTEDIT_K_LINEEND2 secondary keyboard input to move cursor to end of line | COMMENT |
| 503 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | imgui_demo.cpp | 7837 | ImGui::TextWrapped("Lorem ipsum dolor sit amet"); | CODE |
| LOW⚡ | imgui_demo.cpp | 7837 | ImGui::TextWrapped("Lorem ipsum dolor sit amet"); | CODE |
| LOW⚡ | imgui_demo.cpp | 7839 | ImGui::Text("Lorem ipsum dolor sit amet"); | CODE |
| LOW⚡ | imgui_demo.cpp | 7839 | ImGui::Text("Lorem ipsum dolor sit amet"); | CODE |
| LOW | imgui_demo.cpp | 9754 | ImGui::TextWrapped("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor i | CODE |
| LOW | imgui_demo.cpp | 9754 | ImGui::TextWrapped("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor i | CODE |
| LOW | imgui_demo.cpp | 10846 | ImGui::TextWrapped("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut | CODE |
| LOW | imgui_demo.cpp | 10846 | ImGui::TextWrapped("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | examples/example_glfw_wgpu/CMakeLists.txt | 190 | # In this example IMGUI_IMPL_WEBGPU_BACKEND_DAWN / IMGUI_IMPL_WEBGPU_BACKEND_WGPU internal define is set according to: | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | imgui.cpp | 6888 | // FIXME: Essentially we want to restrict manual resizing to WindowMinSize+Decoration, and allow api resizing to be | COMMENT |
| MEDIUM | imgui.cpp | 9290 | // FIXME-NEWATLAS-V2: perhaps we can now leverage ImFontAtlasUpdateDrawListsTextures() ? | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | imgui.cpp | 3518 | // Step 0: Let you process the first element (regardless of it being visible or not, so we can measure the element h | COMMENT |
| LOW | imgui.cpp | 3535 | // Step 1: Let the clipper infer height from first range | COMMENT |
| LOW | .github/workflows/build.yml | 707 | # WARNING: This will need updating if toolset/sdk change in project files! | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | imgui_widgets.cpp | 7505 | // Tip: pass a non-visible label (e.g. "##hello") then you can use the space to draw other text or image. | COMMENT |
| LOW | imgui.cpp | 1080 | - 2017/08/25 (1.52) - io.MousePos needs to be set to ImVec2(-FLT_MAX,-FLT_MAX) when mouse is unavailable/missing. Previ | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | imgui.cpp | 3518 | // Step 0: Let you process the first element (regardless of it being visible or not, so we can measure the element h | COMMENT |
| LOW | imgui.cpp | 3535 | // Step 1: Let the clipper infer height from first range | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | misc/debuggers/imgui_lldb.py | 1 | # This file implements synthetic children providers and summaries for various Dear ImGui types for LLDB. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | backends/imgui_impl_win32.cpp | 968 | // Borrowed from GLFW's function updateFramebufferTransparency() in src/win32_window.c | COMMENT |
| LOW | docs/CHANGELOG.txt | 7318 | - Misc: Added obsolete redirection function GetItemsLineHeightWithSpacing() (which redirects to GetFrameHeightWithSpacin | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | misc/fonts/binary_to_compressed_c.cpp | 20 | // Usage example: | COMMENT |