{"id":13737169,"url":"https://github.com/nimgl/nimgl","last_synced_at":"2025-04-06T20:09:08.220Z","repository":{"id":46732000,"uuid":"113264504","full_name":"nimgl/nimgl","owner":"nimgl","description":"NimGL is a Nim library that offers bindings for popular libraries used in computer graphics","archived":false,"fork":false,"pushed_at":"2024-07-15T16:21:28.000Z","size":5967,"stargazers_count":377,"open_issues_count":23,"forks_count":25,"subscribers_count":14,"default_branch":"master","last_synced_at":"2025-03-30T19:05:10.665Z","etag":null,"topics":["bindings","computer-graphics","glfw","imgui","nim","nimgl","opengl","vulkan"],"latest_commit_sha":null,"homepage":"https://nimgl.github.io/docs","language":"Nim","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/nimgl.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}},"created_at":"2017-12-06T03:34:27.000Z","updated_at":"2025-03-26T17:54:50.000Z","dependencies_parsed_at":"2024-11-15T05:41:47.412Z","dependency_job_id":null,"html_url":"https://github.com/nimgl/nimgl","commit_stats":null,"previous_names":[],"tags_count":29,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nimgl%2Fnimgl","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nimgl%2Fnimgl/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nimgl%2Fnimgl/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nimgl%2Fnimgl/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nimgl","download_url":"https://codeload.github.com/nimgl/nimgl/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247543589,"owners_count":20955865,"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":["bindings","computer-graphics","glfw","imgui","nim","nimgl","opengl","vulkan"],"created_at":"2024-08-03T03:01:36.707Z","updated_at":"2025-04-06T20:09:08.186Z","avatar_url":"https://github.com/nimgl.png","language":"Nim","funding_links":[],"categories":["Game Development"],"sub_categories":["Game Libraries"],"readme":"\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://nimgl.dev/\"\u003e\n    \u003cimg width=\"120\" height=\"120\" src=\"https://nimgl.github.io/media/logo.png\"\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n\u003ch3 align=\"center\"\u003eNim Game Library\u003c/h3\u003e\n\n\n\u003cp align=\"center\"\u003e\n  A collection of bindings for popular libraries\u003cbr/\u003e\n  Mostly used in computer graphics\n  \u003cbr/\u003e\n  \u003ca href=\"https://nimgl.dev/docs/\"\u003e\u003cstrong\u003eExplore the docs »\u003c/strong\u003e\u003c/a\u003e\n  \u003cbr/\u003e\n  \u003cbr/\u003e\n  \u003ca href=\"https://choosealicense.com/licenses/mit\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/license-MIT-blue.svg?style=flat-square\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/nimgl/nimgl/graphs/contributors\"\u003e\n   \u003cimg src=\"https://img.shields.io/github/contributors/nimgl/nimgl.svg?color=orange\u0026style=flat-square\"\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n## Table of Contents\n\n- [About](#about)\n- [Getting Started](#getting-started)\n  - [Installation](#installation)\n  - [Usage](#usage)\n  - [Green Window Example](#green-window-example)\n- [Contribute](#contribute)\n- [Supported Bindings](#supported-bindings)\n- [Roadmap](#roadmap)\n- [Gallery](#gallery)\n- [Contact](#contact)\n- [Credits](#credits)\n- [License](#license)\n\n## About\n\nNimGL (Nim Game Library) is a collection of bindings for popular libraries,\nmostly used in computer graphics. *A library of libraries.*\n\nThis collection of bindings is heavily inspired by LWJGL3. It enables low level\naccess and it is not a framework, so we highly encourage you to use a game\nengine if you do not have experience in working with low level graphics\ndevelopment. These bindings contain several optional helper procedures to help\nwith development and to better suit it to the language.\n\n## Getting Started\n\nWe highly recommend using a Nimble project to easily add requirements such as\nNimGL.\n\n### Installation\n\n#### With Nimble file (recommended)\n\n1. Install Nimble, it comes preinstalled with Nim.\n2. Add it to your .nimble file.\n```nim\nrequires \"nimgl \u003e= 1.0.0\"\n```\n3. Build with nimble.\n```sh\nnimble build\n```\n\n#### With Nimble install\n\n1. Install Nimble, it comes preinstalled with Nim.\n2. Install NimGL with Nimble.\n```sh\nnimble install nimgl\n```\n3. Build with Nim.\n```sh\nnim c -r main.nim\n```\n\n#### Develop with Nimble\n\n1. Install Nimble, it comes preinstalled with Nim.\n2. Clone and link with Nimble in another directory.\n```sh\nnimble develop nimgl\n```\n3. Build with either Nim or Nimble.\n\n\nIt is currently being developed and tested on\n\n- Windows 10\n- MacOS Catalina\n- Linux Ubuntu 18.10\n\n### Usage\n\nPlease refer to each binding documentation to further understand its usage.\n\n### Green Window Example\n```nim\nimport nimgl/[glfw, opengl]\n\nproc keyProc(window: GLFWWindow, key: int32, scancode: int32,\n             action: int32, mods: int32): void {.cdecl.} =\n  if key == GLFWKey.ESCAPE and action == GLFWPress:\n    window.setWindowShouldClose(true)\n\nproc main() =\n  assert glfwInit()\n\n  glfwWindowHint(GLFWContextVersionMajor, 3)\n  glfwWindowHint(GLFWContextVersionMinor, 3)\n  glfwWindowHint(GLFWOpenglForwardCompat, GLFW_TRUE) # Used for Mac\n  glfwWindowHint(GLFWOpenglProfile, GLFW_OPENGL_CORE_PROFILE)\n  glfwWindowHint(GLFWResizable, GLFW_FALSE)\n\n  let w: GLFWWindow = glfwCreateWindow(800, 600, \"NimGL\")\n  if w == nil:\n    quit(-1)\n\n  discard w.setKeyCallback(keyProc)\n  w.makeContextCurrent()\n\n  assert glInit()\n\n  while not w.windowShouldClose:\n    glfwPollEvents()\n    glClearColor(0.68f, 1f, 0.34f, 1f)\n    glClear(GL_COLOR_BUFFER_BIT)\n    w.swapBuffers()\n\n  w.destroyWindow()\n  glfwTerminate()\n\nmain()\n```\n\n## Contribute\n\nYour contributions truly mean the world to this project. If you are missing some\nprocedures, bindings or functionality feel free to open an Issue with the\nspecification and some example on how to properly implement it. For the\nadventurous also feel free to open a Pull Request which will be greatly\nappreciated.  \nThank you so much :tada:\n\nRead the [Contribution Guide](https://github.com/nimgl/.github/blob/master/CONTRIBUTING.md) for more information.\n\n## Supported Bindings\n\n| Library              | Description                                                                                                                                                                                                    |\n|----------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| [GLFW][glfw-url]     | Create multiple windows, handle user input (keyboard, mouse, gaming peripherals) and manage contexts. Also features multi-monitor support, clipboard access, file drag-n-drop, and much more.                  |\n| [Vulkan][vulkan-url] | A new generation graphics and compute API that provides high-efficiency, cross-platform access to modern GPUs used in a wide variety of devices from PCs and consoles to mobile phones and embedded platforms. |\n| [OpenGL][opengl-url] | Open Graphics Library is a cross-language, cross-platform application programming interface for rendering 2D and 3D vector graphics. NimGL only supports modern OpenGL.                                        |\n| [ImGUI][imgui-url]   | Dear ImGui is a bloat-free graphical user interface library for C++. It outputs optimized vertex buffers that you can render anytime in your 3D-pipeline enabled application.                                  |\n\n## Gallery\n\nPlease let me know if you want to be showcased or removed from here.\n\nchip-8 emulator by [@kraptor](https://github.com/kraptor)\n\u003cimg src=\"https://user-images.githubusercontent.com/7249728/60570947-e6787f80-9d72-11e9-8b26-d189f44b1256.gif\"\u003e\n\n\n## Credits\n\nDeveloped by [Leonardo Mariscal](https://lmariscal.com/) and all the amazing\ncontributors in GitHub.\n\nHeavily inspired by [LWJGL3](https://github.com/LWJGL/lwjgl3) and\n[GLAD](https://github.com/Dav1dde/glad).\n\nEach binding contains a small credits comment at the top of the file, but in\ngeneral thank you to every contributor of each individual library used in this\nproject :rose:.\n\n## License\n\n[MIT License](https://choosealicense.com/licenses/mit).\n\nNimGL is open source and is under the MIT License, we highly encourage every\ndeveloper that uses it to make improvements and fork them here.\n\n\u003c!-- MARKDOWN LINKS --\u003e\n[glfw-url]: https://glfw.org/\n[opengl-url]: https://www.khronos.org/opengl/\n[imgui-url]: https://github.com/ocornut/imgui\n[vulkan-url]: https://www.khronos.org/vulkan/\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnimgl%2Fnimgl","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnimgl%2Fnimgl","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnimgl%2Fnimgl/lists"}