{"id":33605897,"url":"https://github.com/sofa-framework/sofaglfw","last_synced_at":"2026-06-08T05:01:12.298Z","repository":{"id":37883583,"uuid":"364289354","full_name":"sofa-framework/SofaGLFW","owner":"sofa-framework","description":"Quick and simple GUI for SOFA, based on GLFW and optionally Dear ImGui","archived":false,"fork":false,"pushed_at":"2026-05-28T02:41:55.000Z","size":3657,"stargazers_count":15,"open_issues_count":9,"forks_count":17,"subscribers_count":15,"default_branch":"master","last_synced_at":"2026-05-28T04:23:22.064Z","etag":null,"topics":["glfw","gui","imgui","project","sofa-framework"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"lgpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sofa-framework.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"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}},"created_at":"2021-05-04T14:47:06.000Z","updated_at":"2026-04-12T21:52:05.000Z","dependencies_parsed_at":"2023-09-24T03:18:15.032Z","dependency_job_id":"f7743659-bfe7-458d-a7a2-c0961ca913f9","html_url":"https://github.com/sofa-framework/SofaGLFW","commit_stats":null,"previous_names":[],"tags_count":33,"template":false,"template_full_name":null,"purl":"pkg:github/sofa-framework/SofaGLFW","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sofa-framework%2FSofaGLFW","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sofa-framework%2FSofaGLFW/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sofa-framework%2FSofaGLFW/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sofa-framework%2FSofaGLFW/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sofa-framework","download_url":"https://codeload.github.com/sofa-framework/SofaGLFW/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sofa-framework%2FSofaGLFW/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34048682,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-08T02:00:07.615Z","response_time":111,"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":["glfw","gui","imgui","project","sofa-framework"],"created_at":"2025-11-30T15:05:39.072Z","updated_at":"2026-06-08T05:01:12.254Z","avatar_url":"https://github.com/sofa-framework.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"## SofaGLFW\n\n[![Gitter](https://img.shields.io/badge/chat-on_Gitter-ff69b4.svg)](https://app.gitter.im/#/room/#sofa-framework_sofa:gitter.im)\n[![Support](https://img.shields.io/badge/support-on_GitHub_Discussions-blue.svg)](https://github.com/sofa-framework/sofa/discussions/categories/sofaglfw-imgui)\n\n![download](https://img.shields.io/github/downloads/sofa-framework/SofaGLFW/total.svg)\n![forks](https://img.shields.io/github/forks/sofa-framework/SofaGLFW.svg)\n![stars](https://img.shields.io/github/stars/sofa-framework/SofaGLFW.svg)\n\nThis SOFA plugin brings a simple GUI based on GLFW (a spiritual successor of Glut).\n\nIt only needs Sofa.Simulation.Graph, Sofa.Component.Visual, Sofa.GUI.Common and Sofa.GL as dependencies.\nIntegration of GLFW is automatic (automatic fetching and integration with CMake), and linked statically (does not need a glfw.dll to be shipped with)\n\nThis GUI is launchable with the standard runSofa (with the parameter \"-g glfw\"), or can be used with a (provided) stand-alone executable `runSofaGLFW` (which needs much less dependencies than runSofa)\n\nLastly, this GUI was designed to support multiple windows in the same time and multiple simulations. \n\n### Dependencies\n\n#### Linux\n\nUnix-like systems such as Linux need a few extra packages for GLFW. Read the documentation on the [GLFW website (section `Installing dependencies`)](https://www.glfw.org/docs/latest/compile_guide.html).\n**For example**, if you are on Ubuntu running X11, you need to do:\n\n```\nsudo apt install xorg-dev\n```\n\nIn case you want the video recording feature, make sure to also have installed the following dependencies:\n\n```\nsudo apt install libavcodec-dev libavformat-dev libavutil-dev libswresample-dev libswscale-dev\n```\n\n#### Others\n\nNo dependencies\n\n\n### Compilation\n\nAs any plugin, to compile SofaGLFW, follow the instructions on the [SOFA documentation website](https://www.sofa-framework.org/community/doc/plugins/build-a-plugin-from-sources/).\n\n### Keyboard Shortcuts\n\nSeveral shortcuts are related to the window:\n\n* F11: switch to fullscreen\n* Escape: close the app\n* Space: play/pause the simulation\n* Any letter on your keyboard would result in a search in the scene graph\n\nUsing the control (CTRL) key, you activate GUI shortcuts such as:\n\n* Ctrl+A: show the scene axis\n* Ctrl+B: switch the background\n* Ctrl+R: reload the current scene\n* Ctrl+O: open a scene file\n\nUsing the SHIFT key, you activate the scene interactions such as the mouse interaction.\n\nUsing the SHIFT + CTRL keys, you will trigger events on key pressed/released.\n\n\n### Command Line Options\n\n`runSofaGLFW` accepts the following command line options:\n\n* `-f` or `--file` to specify the scene file to load. If not defined, the default scene file `Demos/caduceus.scn` is loaded.\n* `-a` or `--start`: if true, starts the simulation just after opening. True by default.\n* `-s` or `--fullscreen`: set full screen at startup. False by default.\n* `-l` or `--load`: load given plugins as a comma-separated list. Example: -l SofaPython3\n\n## Dear ImGui\n\nBy default, SofaGLFW does not show any user interface.\nOnly the keyboard allows limited interactions with the simulation.\nThat is why a user interface based on [Dear ImGui](https://github.com/ocornut/imgui) is provided, in the form of a SOFA plugin.\n\nBy default, this interface is not compiled.\nThe CMake variable `PLUGIN_SOFAIMGUI` must be set to `ON`.\n\nIntegration of Dear ImGui is automatic (automatic fetching and integration with CMake), and linked statically.\n\n### Dependencies\n\nSofaImGui depends on SofaGLFW, so it must also be activated.\n\nThe GUI relies on the [NFD-extended library](https://github.com/btzy/nativefiledialog-extended).\nTherefore, it comes with its dependencies. See the list on [GitHub](https://github.com/btzy/nativefiledialog-extended#dependencies).\n\n### Compilation\n\nAs any plugin, to compile SofaImGui, follow the instructions on the [SOFA documentation website](https://www.sofa-framework.org/community/doc/plugins/build-a-plugin-from-sources/).\n\n### Usage\n\nTo run SOFA with the GUI from SofaImGui, execute the following command:\n\n```bash\nrunSofa -l SofaImGui -g imgui\n```\n\n- `-l SofaImGui`: loads the plugin in order to be able to use the GUI (see the [documentation](https://www.sofa-framework.org/community/doc/plugins/what-is-a-plugin/))\n- `-g imgui`: selects the `runSofa` GUI to be the one from SofaImGui\n\nIt is possible to run the Dear ImGui-based GUI by default when running the command `./runSofa` (without the `-l` and `-g` arguments). To do so, add the SofaImGui plugin into the list of loaded plugin in the `plugin_list.conf` file (see the [documentation](https://www.sofa-framework.org/community/doc/plugins/what-is-a-plugin/)). Then, run `runSofa -g imgui` at least once so that `runSofa` save the last used GUI. After that, `./runSofa` will load the imgui GUI.\n\n### Windows\n\nThe GUI is based on dockable windows.\nEach window gathers related features.\nHere are all the available windows:\n\n| Window            | Description                                                                      |\n|-------------------|----------------------------------------------------------------------------------|\n| __Performances__  | display simple metrics related to application performances: ms/frame, FPS, graph |\n| __Profiler__      | display detailed metrics related to the physics loop performances                |\n| __Scene Graph__   | show the scene graph and the Data associated to each components                  |\n| __Display Flags__ | filter which components are rendered in the 3D view                              |\n| __Plugin__        | show a list of plugins currently loaded                                          |\n| __Components__    | show a detailed list of components currently loaded                              |\n| __Log__           | all the messages sent by SOFA                                                    |\n\n### Screenshots\n\n![MainGUI](doc/screenshot.png)\n\n### Custom GUI\n\nThe software allows for flexible extension of its GUI through custom windows.\nUsers can develop and integrate their own GUI components tailored to the needs of a specific simulation scene.\nThis makes it possible to build highly specialized controls, panels, or visualization tools that enhance or modify the user experience.\n\nTo help users get started, the built-in `SofaImGui.Camera` extension serves as a reference implementation.\nIt demonstrates how a custom window can be structured and integrated into the GUI framework.\nDevelopers can use it as a foundation to build their own extensions, adapting it to different simulation contexts and requirements.\n\nAs any SOFA plugin, the custom GUI is available only if loaded (https://sofa-framework.github.io/doc/plugins/what-is-a-plugin/#plugin_loading).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsofa-framework%2Fsofaglfw","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsofa-framework%2Fsofaglfw","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsofa-framework%2Fsofaglfw/lists"}