{"id":13640018,"url":"https://github.com/sammyfreg/netImgui","last_synced_at":"2025-04-20T02:32:31.722Z","repository":{"id":37093252,"uuid":"261725281","full_name":"sammyfreg/netImgui","owner":"sammyfreg","description":"'Dear Imgui' remote access library and application","archived":false,"fork":false,"pushed_at":"2024-08-05T22:41:08.000Z","size":25194,"stargazers_count":580,"open_issues_count":5,"forks_count":49,"subscribers_count":16,"default_branch":"master","last_synced_at":"2024-08-06T01:31:52.942Z","etag":null,"topics":["dear-imgui","imgui","remote-access"],"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/sammyfreg.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","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}},"created_at":"2020-05-06T10:26:38.000Z","updated_at":"2024-08-02T01:37:17.000Z","dependencies_parsed_at":"2024-01-14T11:09:00.168Z","dependency_job_id":"9157c1a2-ff3d-4963-931a-1d9e30e9494f","html_url":"https://github.com/sammyfreg/netImgui","commit_stats":null,"previous_names":[],"tags_count":17,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sammyfreg%2FnetImgui","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sammyfreg%2FnetImgui/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sammyfreg%2FnetImgui/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sammyfreg%2FnetImgui/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sammyfreg","download_url":"https://codeload.github.com/sammyfreg/netImgui/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":223816333,"owners_count":17207840,"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","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":["dear-imgui","imgui","remote-access"],"created_at":"2024-08-02T01:01:07.093Z","updated_at":"2025-04-20T02:32:31.703Z","avatar_url":"https://github.com/sammyfreg.png","language":"C","funding_links":[],"categories":["Game Engine","C"],"sub_categories":[],"readme":"\n \u003cp align=\"center\"\u003e\u003cimg src=\"https://raw.githubusercontent.com/wiki/sammyfreg/netImgui/Web/img/netImguiLogo.png\" width=128 height=128\u003e\u003c/p\u003e\n\n\n# Summary\n[![(Build VS2022 Main)](https://github.com/sammyfreg/netImgui/actions/workflows/msbuild_vs2022_main.yml/badge.svg?branch=master)](https://github.com/sammyfreg/netImgui/actions/workflows/msbuild_vs2022_main.yml)\n[![(Build VS2022 Dev)](https://github.com/sammyfreg/netImgui/actions/workflows/msbuild_vs2022_dev.yml/badge.svg?branch=dev)](https://github.com/sammyfreg/netImgui/actions/workflows/msbuild_vs2022_dev.yml)\n\n[![Release Version](https://img.shields.io/github/release/sammyfreg/netImgui.svg)](https://github.com/sammyfreg/netImgui/releases)\n![Release Date](https://shields.io/github/release-date/sammyfreg/netImgui)\n[![Downloads](https://shields.io/github/downloads/sammyfreg/netImgui/total)]((https://github.com/sammyfreg/netImgui/releases))\n[![Forks](https://img.shields.io/github/forks/sammyfreg/netImgui)](https://github.com/sammyfreg/netImgui/network/members)\n![Stars](https://img.shields.io/github/stars/sammyfreg/netImgui)\n[![License](https://img.shields.io/github/license/sammyfreg/netImgui)](https://github.com/sammyfreg/netImgui/blob/master/LICENSE.txt)\n\n**NetImgui** is a library to remotely display and control **[Dear ImGui](https://github.com/ocornut/imgui)** menus with an associated **NetImgui Server** application. Designed to painlessly integrate into existing codebase with few changes required. It allows any program using **Dear ImGui** to receives input from a remote PC and then forwards its UI rendering to it (*textures, vertices, indices, draw commands*).\n\n![NetImgui](https://raw.githubusercontent.com/wiki/sammyfreg/netImgui/Web/img/netImgui1_7.png)\n\n# Purpose\nInitially created to assist game developers in debugging their game running on a game console or smartphone, from a PC. However, its use extends to wider applications. The only requirements are that a program is using **Dear ImGui** using C++ and available TCP/IP communications.\n\n#### 1. UI for devices without display/input.\nSome applications lack display and inputs access, preventing feedbacks and easy control. It could be a program running on a [Raspberry Pie](https://www.raspberrypi.org/products/ \"Raspberry Pie\") device, or [Unreal 4](https://www.unrealengine.com \"Unreal4\") running in server mode, etc . . . Using **NetImgui** allows the display of a user interface with full control on your PC while the logic remains on the client application itself.\n\n**Note**: *SampleNoBackend demonstrate using Dear ImGui without any backend implementation. It is a simple console application connecting to the NetImguiServer to draw its Imgui content. There is no rendering/input backend that's usually require by Dear ImGui*\n\n#### 2. Ease of use\nWhile inputs might be available on a particular device (keyboard, gamepad, . . .), it might still not be convenient for certain aspect. For example, text input is still more comfortable on a physical keyboard than on a smartphone. Idem for gaming consoles with gamepads control or VR development.\n\n#### 3. Declutter display\n**Dear ImGui** is often used to display relevant debug information during development, but UI elements can obscure the regular content. **NetImgui** sends the UI content to a remote window, leaving the original display clutter-free and with the freedom to use the entire screen for more elaborate content.\n\n###### Before\n![DearImGui](https://raw.githubusercontent.com/wiki/sammyfreg/netImgui/Web/img/AppWithoutNetImgui.png)\n\n###### With NetImgui\n![NetImgui](https://raw.githubusercontent.com/wiki/sammyfreg/netImgui/Web/img/AppWithNetImguiGif.gif)\n\n# How it works\nHere is a quick overview of the logic behind using the **NetImgui Server** and one (or more) program using the **NetImgui Client** code.\n\n![NetImgui](https://raw.githubusercontent.com/wiki/sammyfreg/netImgui/Web/img/NetImguiExplanation.gif)\n\n**1.** *(NetImgui Server)* **Capture user's inputs with mouse/keyboard**\n\n**2.** *(NetImgui Server)* **Send the Inputs to client and request a draw update**\n\n**3.** *(NetImgui Client)* **Draw the *Dear ImGui* content normally** (without need to display on client) \n\n**4.** *(NetImgui Client)* **Send the drawing results to server**\n\n**5.** *(NetImgui Server)* **Receives the drawing result and display them**\n\n**6. Go back to 1**\n\n#### Note\nThe NetImgui Server application currently compiles under Windows and Mac, but few changes are required to properly have it running under other Operating Systems. To compile for Mac, modify NetImguiServer_App.h to enable the GLFW_GL3 rendering API.\n\n# Integration\n1. Download the [latest version](https://github.com/sammyfreg/netImgui/releases \"latest version\") of the **NetImgui** library.\n2. Add the content of ***Code\\Client*** to your codebase.\n3. In your codebase:\n   - [once]\n     - Call `NetImgui::Startup()` *(at program start)*.\n     - Call `NetImgui::ConnectToApp()` or `NetImgui::ConnectFromApp()`.\n     - Call `NetImgui::Shutdown()` *(at program exit)*.\n   - [every redraw]\n     - Draw your ImGui menu as usual.\n     - *If **Dear ImGui** 1.80 and lower (or want frameskip support)*.\n       - Replace call to `ImGui::NewFrame()` with `NetImgui::NewFrame()`.\n       - Replace call to `ImGui::Render()` / `ImGui::EndFrame()` with `NetImgui::EndFrame()`.\n4. Start the **NetImgui** server application and connect your application to it.\n\n- *More integration details can be found on the [Wiki](https://github.com/sammyfreg/netImgui/wiki \"Wiki\").*\n- *Multiple samples are also provided in the depot, providing additional insights.*\n\n#### Note\n- Connection between **NetImgui Server** and a **netImGui Client** can be achieved in 4 different ways.\n - **Server waits for connection and** :\n   - (A) Client calls `ConnectToApp()` with the Server address.\n - **Client calls `ConnectFromApp()` then waits for connection and** :\n   - (B) Server configure the Client's address and connect to it.\n   - (C) Server is launched with the Client's address in the commandline.\n   - (D) Server receives a Client's address from another application, through [Windows named pipe](https://docs.microsoft.com/en-us/windows/win32/ipc/named-pipes \"Windows named pipe\") : \\\\.\\pipe\\netImgui'.\n \n \n- **Advanced:** Different **Dear ImGui** content can be displayed locally and remotely at the same time. Look at *SampleDualUI* for more information.\n\n- `NetImgui::IsConnected()` and `NetImgui::IsDrawingRemote()` can be used during Dear ImGui drawing, helping to make selective decisions on the content to draw based on where it will be displayed.\n\n#### Dear Imgui versions\n- Tested against **Dear ImGui** versions **1.71** to **1.90**.\n- *Note*: Should support other versions without too much difficulties.\n- *Note*: See **Build\\GenerateCompatibilityTest.bat** for an exact list of tested versions.\n\n# Related\nRelated projects making use of **NetImgui**.\n- **[Unreal NetImgui](https://github.com/sammyfreg/UnrealNetImgui \"UnrealNetImgui\")** : **Unreal 4 plugin**  adding access to **Dear ImGui** and **NetImgui** functionalities. Unlike the next plugin, it is a simple implementation with only remote access possible (no Dear ImGui drawing over the game).\n- **[Unreal ImGui](https://github.com/segross/UnrealImGui/ \"UnrealImGui\") :** **Unreal 4 Plugin** adding **Dear ImGui** drawing support over your game and editor display. The **net_imgui** branch of this repository contains an integration of this **NetImgui** library for remote access and is ready to go.\n- For **Unreal 4** developpers with their own **Dear ImGui** integration, **[Unreal NetImgui](https://github.com/sammyfreg/UnrealNetImgui \"UnrealNetImgui\")** has support for an **Imgui Unreal Commands window** that can be of interest. The code can easily be imported in your own codebase, with no dependency to **Unreal NetImgui** proper.\n![NetImgui](https://raw.githubusercontent.com/wiki/sammyfreg/netImgui/Web/img/UnrealCommandsFull.gif)\n\n# Release notes\n### To do\n- Support of additional texture formats\n- Handle Linear/sRGB vertex color format\n- Add logging information to NetImgui Server Application\n- Add new **Dear ImGui** multi windows support (docking branch)\n- ~~Commands to assign custom backgrounds~~\n- ~~Add compression to data between Client and Server~~\n- ~~Support of monitor DPI~~\n- ~~Support for connection takeover~~\n\n### Version 1.12.1\n(2024/12/10)\n- **API Changes**\n  - None\n- **Various small changes and fixes**\n  - Fixed a Copy/paste and a Disconnect crash\n\t\n### Version 1.12\n(2024/12/08)\n- **API Changes**\n  - None\n- **Backend change**\n  - Networking protocol has been reworked\n  - If you are using our own networking layer, you will need to support changes made to *'DataReceive'* and *'DataSend'* and the addition of *'DataReceivePending'*\n  - This was done to drastically improve performances by using non-blocking sockets\n  - For more details, please look at the changes done to *NetImgui_NetworkWin32.cpp* or *NetImgui_NetworkUE4.cpp*\n  - ***Note:** The Posix network code has not been updated to new protocol yet, only Windows and UE4 have been done*\n- **Various small changes and fixes**\n    - Tested **Dear ImGui** versions up to 1.91.5 and updated the **NetImgui Server** to it (docking branch).\n\n### Older\n[Release Notes](https://github.com/sammyfreg/netImgui/wiki/Release-notes)\n\n# Contact\nIt seems that various gaming studios are making use of this code. I would enjoy hearing back from library users, for general comments and feedbacks. Always interested in learning of people usercase. I can be reached through my  [**GitHub profile**](https://github.com/sammyfreg) (email or twitter) or creating a new entry in [**GitHub Issue**](https://github.com/sammyfreg/netImgui/issues \"GitHub Issues\"). \n\n# Credits\nSincere thanks to [Omar Cornut](https://github.com/ocornut/imgui/commits?author=ocornut) for the incredible work on **[Dear ImGui](https://github.com/ocornut/imgui)**.\n\nSupport of image formats via [**stb_image.h**](https://github.com/nothings/stb/blob/master/stb_image.h) by Sean Barrett (public domain).\n\nSupport of Solutions generation via [**Sharpmake**](https://github.com/ubisoft/Sharpmake) by Ubisoft (public domain).\n\nSupport of Posix sockets thanks to [Aaron Lieberman](https://github.com/AaronLieberman).\n\nSupport of json save file via [**nlohmann json**](https://github.com/nlohmann/json)\n \u003cp align=\"center\"\u003e\u003cimg src=\"https://raw.githubusercontent.com/wiki/sammyfreg/netImgui/Web/img/netImguiLogo.png\" width=128 height=128\u003e\u003c/p\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsammyfreg%2FnetImgui","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsammyfreg%2FnetImgui","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsammyfreg%2FnetImgui/lists"}