{"id":15032298,"url":"https://github.com/aiekick/imguifiledialog","last_synced_at":"2025-10-08T12:53:43.546Z","repository":{"id":37548106,"uuid":"117348282","full_name":"aiekick/ImGuiFileDialog","owner":"aiekick","description":"Full featured file Dialog for Dear ImGui","archived":false,"fork":false,"pushed_at":"2025-09-30T00:27:07.000Z","size":13930,"stargazers_count":1401,"open_issues_count":13,"forks_count":229,"subscribers_count":18,"default_branch":"master","last_synced_at":"2025-09-30T02:33:51.478Z","etag":null,"topics":["bookmark","cimgui","cross-platform","custom-filter","custom-pane","dialog","directory-chooser","dlg","emscripten","filedialog","filter-collections","filter-coloring","free-library","icons","imgui","linux","macos","multi-selection","pane","windows"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/aiekick.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"aiekick"}},"created_at":"2018-01-13T14:04:14.000Z","updated_at":"2025-09-30T00:27:03.000Z","dependencies_parsed_at":"2023-10-12T00:18:53.797Z","dependency_job_id":"4bd10c76-d874-46bc-b26c-c476d060d854","html_url":"https://github.com/aiekick/ImGuiFileDialog","commit_stats":{"total_commits":459,"total_committers":28,"mean_commits":"16.392857142857142","dds":0.09150326797385622,"last_synced_commit":"c66089f509bbfbc0d8852d54106b1af88a104822"},"previous_names":[],"tags_count":19,"template":false,"template_full_name":null,"purl":"pkg:github/aiekick/ImGuiFileDialog","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aiekick%2FImGuiFileDialog","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aiekick%2FImGuiFileDialog/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aiekick%2FImGuiFileDialog/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aiekick%2FImGuiFileDialog/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/aiekick","download_url":"https://codeload.github.com/aiekick/ImGuiFileDialog/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aiekick%2FImGuiFileDialog/sbom","scorecard":{"id":172822,"data":{"date":"2025-08-11","repo":{"name":"github.com/aiekick/ImGuiFileDialog","commit":"58292701b8224e58703d15811b69a39444185e30"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.8,"checks":[{"name":"Code-Review","score":1,"reason":"Found 3/26 approved changesets -- score normalized to 1","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Maintained","score":9,"reason":"9 commit(s) and 2 issue activity found in the last 90 days -- score normalized to 9","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact v0.6.7 not signed: https://api.github.com/repos/aiekick/ImGuiFileDialog/releases/143016264","Warn: release artifact v0.6.6.1 not signed: https://api.github.com/repos/aiekick/ImGuiFileDialog/releases/131476252","Warn: release artifact v0.6.6 not signed: https://api.github.com/repos/aiekick/ImGuiFileDialog/releases/131433878","Warn: release artifact v0.6.7 does not have provenance: https://api.github.com/repos/aiekick/ImGuiFileDialog/releases/143016264","Warn: release artifact v0.6.6.1 does not have provenance: https://api.github.com/repos/aiekick/ImGuiFileDialog/releases/131476252","Warn: release artifact v0.6.6 does not have provenance: https://api.github.com/repos/aiekick/ImGuiFileDialog/releases/131433878"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 7 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-16T17:01:57.190Z","repository_id":37548106,"created_at":"2025-08-16T17:01:57.190Z","updated_at":"2025-08-16T17:01:57.190Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":278948022,"owners_count":26073748,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-08T02:00:06.501Z","response_time":56,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bookmark","cimgui","cross-platform","custom-filter","custom-pane","dialog","directory-chooser","dlg","emscripten","filedialog","filter-collections","filter-coloring","free-library","icons","imgui","linux","macos","multi-selection","pane","windows"],"created_at":"2024-09-24T20:17:57.440Z","updated_at":"2025-10-08T12:53:43.540Z","avatar_url":"https://github.com/aiekick.png","language":"C++","funding_links":["https://github.com/sponsors/aiekick"],"categories":[],"sub_categories":[],"readme":"# ImGuiFileDialog\n\n## Build Matrix\n\n|  | Win | Linux | MacOs |\n|  :---: |  :---: |  :---: |  :---: |\n| Msvc | [![Win Msvc](https://github.com/aiekick/ImGuiFileDialog/actions/workflows/Win_Msvc.yml/badge.svg)](https://github.com/aiekick/ImGuiFileDialog/actions/workflows/Win_Msvc.yml)  |  |   |\n| Gcc |  | [![Linux Gcc](https://github.com/aiekick/ImGuiFileDialog/actions/workflows/Linux_Gcc.yml/badge.svg)](https://github.com/aiekick/ImGuiFileDialog/actions/workflows/Linux_Gcc.yml) | [![Osx Gcc](https://github.com/aiekick/ImGuiFileDialog/actions/workflows/Osx_Gcc.yml/badge.svg)](https://github.com/aiekick/ImGuiFileDialog/actions/workflows/Osx_Gcc.yml) |\n| Clang |  | [![Linux Clang](https://github.com/aiekick/ImGuiFileDialog/actions/workflows/Linux_Clang.yml/badge.svg)](https://github.com/aiekick/ImGuiFileDialog/actions/workflows/Linux_Clang.yml)  | [![Osx Clang](https://github.com/aiekick/ImGuiFileDialog/actions/workflows/Osx_Clang.yml/badge.svg)](https://github.com/aiekick/ImGuiFileDialog/actions/workflows/Osx_Clang.yml)  |\n| Leak Sanitizer | | [![Leak Sanitizer](https://github.com/aiekick/ImGuiFileDialog/actions/workflows/Leak.yml/badge.svg)](https://github.com/aiekick/ImGuiFileDialog/actions/workflows/Leak.yml) | |\n\n## Purpose\n\nImGuiFileDialog is a file selection dialog built for (and using only) [Dear ImGui](https://github.com/ocornut/imgui).\n\nMy primary goal was to have a custom pane with widgets according to file extension. This was not possible using other\nsolutions.\n\n## Possible Dialog Customization\n\n![alt text](https://github.com/aiekick/ImGuiFileDialog/blob/DemoApp/doc/demo_dialog.png)\n\n## ImGui Supported Version\n\n\u003e [!NOTE]\n\u003e ImGuiFileDialog follow the master and docking branch of ImGui.\n\u003e Currently : [![Wrapped Dear ImGui Version](https://img.shields.io/badge/Dear%20ImGui%20Version-1.92.3-blue.svg)](https://github.com/ocornut/imgui)\n\n### Documentation :\n\n\u003e [!NOTE]\n\u003e for a complete explanation and howto about ImGuiFileDialog Api, \n\u003e you can check the [**Documentation**](https://github.com/aiekick/ImGuiFileDialog/blob/master/Documentation.md)\n\n## Structure\n\n* The library is in [Master branch](https://github.com/aiekick/ImGuiFileDialog/tree/master)\n* A demo app can be found in the [DemoApp branch](https://github.com/aiekick/ImGuiFileDialog/tree/DemoApp)\n\nThis library is designed to be dropped into your source code rather than compiled separately.\n\nFrom your project directory:\n\n```\nmkdir lib    \u003cor 3rdparty, or externals, etc.\u003e\ncd lib\ngit clone https://github.com/aiekick/ImGuiFileDialog.git\ngit checkout master\n```\n\nThese commands create a `lib` directory where you can store any third-party dependencies used in your project, downloads\nthe ImGuiFileDialog git repository and checks out the Lib_Only branch where the actual library code is located.\n\nAdd `lib/ImGuiFileDialog/ImGuiFileDialog.cpp` to your build system and include\n`lib/ImGuiFileDialog/ImGuiFileDialog.h` in your source code. ImGuiFileLib will compile with and be included directly in\nyour executable file.\n\nIf, for example, your project uses cmake, look for a line like `add_executable(my_project_name main.cpp)`\nand change it to `add_executable(my_project_name lib/ImGuiFileDialog/ImGuiFileDialog.cpp main.cpp)`. This tells the\ncompiler where to find the source code declared in `ImGuiFileDialog.h` which you included in your own source code.\n\n## Requirements:\n\nYou must also, of course, have added [Dear ImGui](https://github.com/ocornut/imgui) to your project for this to work at\nall.\n\nImguiFileDialog is agnostic about the filesystem api you can use.\nIt provides a IFileSystem you can override for your needs.\n\nBy default you can use dirent or std::filesystem. you have also a demo of using boost filesystem api in the DemoApp branch\n\nAndroid Requirements : Api 21 mini\n\n## Features\n\n- C Api (succesfully tested with CimGui)\n- Separate system for call and display\n\t- Can have many function calls with different parameters for one display function, for example\n- Can create a custom pane with any widgets via function binding\n\t- This pane can block the validation of the dialog\n\t- Can also display different things according to current filter and UserDatas\n- Advanced file style for file/dir/link coloring / icons / font\n    - predefined form or user custom form by lambda function (the lambda mode is not available for the C API)\n- Multi-selection (ctrl/shift + click) :\n\t- 0 =\u003e Infinite\n\t- 1 =\u003e One file (default)\n\t- n =\u003e n files\n- Compatible with MacOs, Linux, Windows, Emscripten, Android\n- Supports modal or standard dialog types\n- Select files or directories\n- Filter groups and custom filter names\n- can ignore filter Case for file searching\n- Keyboard navigation (arrows, backspace, enter)\n- Exploring by entering characters (case insensitive)\n- Custom places (bookmarks, system devices, whatever you want)\n- Directory manual entry (right click on any path element)\n- Optional 'Confirm to Overwrite\" dialog if file exists\n- Thumbnails Display (agnostic way for compatibility with any backend, sucessfully tested with OpenGl and Vulkan)\n- The dialog can be embedded in another user frame than the standard or modal dialog\n- Can tune validation buttons (placements, widths, inversion)\n- Can quick select a parrallel directory of a path, in the path composer (when you clikc on a / you have a popup)\n- regex support for filters, collection of filters and filestyle (the regex is recognized when between (( and )) in a filter)\n- multi layer extentions like : .a.b.c .json.cpp .vcxproj.filters etc..\n- advanced behavior regarding asterisk based filter. like : .* .*.* .vcx.* .*.filters .vcs*.filt.* etc.. (internally regex is used)\n- result modes GetFilePathName, GetFileName and GetSelection (overwrite file ext, keep file, add ext if no user ext exist)\n- you can use your own FileSystem Api\n    - by default Api Dirent and std::filesystem are defined\n\t- you can override GetDrieveList for specify by ex on android other fs, like local and SDCards\n- can select all displayed files with \"ctrl+a\" as in any OS \n- natural sorting for filenames and extension on demand\n\n### WARNINGS :\n- the nav system keyboard behavior is not working as expected, so maybe full of bug for ImGuiFileDialog\n \n### Simple Usage :\n\n```cpp\nvoid drawGui() { \n  // open Dialog Simple\n  if (ImGui::Button(\"Open File Dialog\")) {\n    IGFD::FileDialogConfig config;\n\tconfig.path = \".\";\n    ImGuiFileDialog::Instance()-\u003eOpenDialog(\"ChooseFileDlgKey\", \"Choose File\", \".cpp,.h,.hpp\", config);\n  }\n  // display\n  if (ImGuiFileDialog::Instance()-\u003eDisplay(\"ChooseFileDlgKey\")) {\n    if (ImGuiFileDialog::Instance()-\u003eIsOk()) { // action if OK\n      std::string filePathName = ImGuiFileDialog::Instance()-\u003eGetFilePathName();\n      std::string filePath = ImGuiFileDialog::Instance()-\u003eGetCurrentPath();\n      // action\n    }\n    \n    // close\n    ImGuiFileDialog::Instance()-\u003eClose();\n  }\n}\n```\n\n![alt text](https://github.com/aiekick/ImGuiFileDialog/blob/DemoApp/doc/dlg_simple.gif)\n\n### How to build the sample app\n\nThe sample app is [here in master branch](https://github.com/aiekick/ImGuiFileDialog/tree/master)\n\nYou need to use CMake. For the 3 Os (Win, Linux, MacOs), the CMake usage is exactly the same,\n\n    Choose a build directory. (called here my_build_directory for instance) and\n    Choose a Build Mode : \"Release\" / \"MinSizeRel\" / \"RelWithDebInfo\" / \"Debug\" (called here BuildMode for instance)\n    Run CMake in console : (the first for generate cmake build files, the second for build the binary)\n\ncmake -B my_build_directory -DCMAKE_BUILD_TYPE=BuildMode\ncmake --build my_build_directory --config BuildMode\n\nSome CMake version need Build mode define via the directive CMAKE_BUILD_TYPE or via --Config when we launch the build. This is why i put the boths possibilities\n\nBy the way you need before, to make sure, you have needed dependencies.\n\n### On Windows :\n\nYou need to have the opengl library installed\n\n### On Linux :\n\nYou need many lib : (X11, xrandr, xinerama, xcursor, mesa, wayland)\n\nIf you are on debian you can run :\n\nsudo apt-get update \nsudo apt-get install libgl1-mesa-dev libx11-dev libxi-dev libxrandr-dev libxinerama-dev libxcursor-dev libwayland-dev\n\n### On MacOs :\n\nyou need many lib : opengl and cocoa framework\n\n\u003c/blockquote\u003e\u003c/details\u003e\n\n## That's all folks :-)\n\nYou can check by example in this repo with the file CustomImGuiFileDialogConfig.h :\n- this trick was used to have custom icon font instead of labels for buttons or messages titles\n- you can also use your custom imgui button, the button call stamp must be same by the way :)\n\nThe Custom Icon Font (in CustomFont.cpp and CustomFont.h) was made with ImGuiFontStudio (https://github.com/aiekick/ImGuiFontStudio) i wrote for that :)\nImGuiFontStudio is also using ImGuiFileDialog.$\n\n![Alt](https://repobeats.axiom.co/api/embed/22a6eef207d0bce7c03519d94f55100973b451ca.svg \"Repobeats analytics image\")\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faiekick%2Fimguifiledialog","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faiekick%2Fimguifiledialog","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faiekick%2Fimguifiledialog/lists"}