{"id":34743804,"url":"https://github.com/gioui-plugins/gio-plugins","last_synced_at":"2025-12-25T04:28:39.219Z","repository":{"id":61627450,"uuid":"539396430","full_name":"gioui-plugins/gio-plugins","owner":"gioui-plugins","description":"Gio-Plugins offers new plugins to extend and enhance your Gio app. Inspired by flutter/plugins repository,","archived":false,"fork":false,"pushed_at":"2025-12-19T21:44:21.000Z","size":10034,"stargazers_count":70,"open_issues_count":19,"forks_count":5,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-12-21T02:45:30.986Z","etag":null,"topics":["android","gio","gioui","go","golang","ios","linux","macos","ui","wasm","webassembly","windows"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gioui-plugins.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE.md","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":["inkeliz"],"patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"lfx_crowdfunding":null,"custom":null}},"created_at":"2022-09-21T09:02:05.000Z","updated_at":"2025-12-19T21:44:26.000Z","dependencies_parsed_at":"2024-06-20T16:32:07.924Z","dependency_job_id":"53065697-8e40-47a5-ad4b-834a2049fa77","html_url":"https://github.com/gioui-plugins/gio-plugins","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/gioui-plugins/gio-plugins","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gioui-plugins%2Fgio-plugins","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gioui-plugins%2Fgio-plugins/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gioui-plugins%2Fgio-plugins/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gioui-plugins%2Fgio-plugins/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gioui-plugins","download_url":"https://codeload.github.com/gioui-plugins/gio-plugins/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gioui-plugins%2Fgio-plugins/sbom","scorecard":{"id":427486,"data":{"date":"2025-08-11","repo":{"name":"github.com/gioui-plugins/gio-plugins","commit":"653221ccd7703ca6a27b062c89619218d91b19d0"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":1.1,"checks":[{"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":"Maintained","score":2,"reason":"3 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 2","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"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":"Code-Review","score":0,"reason":"Found 0/30 approved changesets -- score normalized to 0","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":"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":"Binary-Artifacts","score":0,"reason":"binaries present in source code","details":["Warn: binary detected: auth/auth_android.jar:1","Warn: binary detected: auth/vendors/android/jar/annotation-1.2.0.jar:1","Warn: binary detected: auth/vendors/android/jar/annotations-13.0.jar:1","Warn: binary detected: auth/vendors/android/jar/collection-1.1.0.jar:1","Warn: binary detected: auth/vendors/android/jar/concurrent-futures-1.0.0.jar:1","Warn: binary detected: auth/vendors/android/jar/core-common-2.0.0.jar:1","Warn: binary detected: auth/vendors/android/jar/kotlin-stdlib-1.8.22.jar:1","Warn: binary detected: auth/vendors/android/jar/kotlin-stdlib-common-1.8.22.jar:1","Warn: binary detected: auth/vendors/android/jar/kotlin-stdlib-jdk7-1.8.0.jar:1","Warn: binary detected: auth/vendors/android/jar/kotlin-stdlib-jdk8-1.8.0.jar:1","Warn: binary detected: auth/vendors/android/jar/kotlinx-coroutines-core-1.7.1.jar:1","Warn: binary detected: auth/vendors/android/jar/kotlinx-coroutines-core-jvm-1.7.1.jar:1","Warn: binary detected: auth/vendors/android/jar/lifecycle-common-2.0.0.jar:1","Warn: binary detected: auth/vendors/android/jar/listenablefuture-1.0.jar:1","Warn: binary detected: explorer/explorer_android.jar:1","Warn: binary detected: explorer/file_android.jar:1","Warn: binary detected: hyperlink/hyperlink_android.jar:1","Warn: binary detected: safedata/safedata_android.jar:1","Warn: binary detected: share/share_android.jar:1","Warn: binary detected: webviewer/webview/sys_android.jar:1","Warn: binary detected: webviewer/webview/sys_windows_386.dll:1","Warn: binary detected: webviewer/webview/sys_windows_amd64.dll:1","Warn: binary detected: webviewer/webview/sys_windows_arm64.dll:1"],"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":"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":"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":"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":"License","score":9,"reason":"license file detected","details":["Info: project has a license file: LICENSE.md:0","Warn: project license file does not contain an FSF or OSI license."],"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":-1,"reason":"no releases found","details":null,"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":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"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 30 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"}},{"name":"Vulnerabilities","score":2,"reason":"8 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GO-2024-3321 / GHSA-v778-237x-gjrc","Warn: Project is vulnerable to: GO-2025-3487 / GHSA-hcg3-q754-cr77","Warn: Project is vulnerable to: GO-2023-1990 / GHSA-j3p8-6mrq-6g7h","Warn: Project is vulnerable to: GO-2023-1989 / GHSA-x92r-3vfx-4cv3","Warn: Project is vulnerable to: GO-2024-2937 / GHSA-9phm-fm57-rhg8","Warn: Project is vulnerable to: GO-2024-3333","Warn: Project is vulnerable to: GO-2025-3503 / GHSA-qxp5-gwg8-xv66","Warn: Project is vulnerable to: GO-2025-3595 / GHSA-vvgc-356p-c3xw"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-19T02:32:37.621Z","repository_id":61627450,"created_at":"2025-08-19T02:32:37.621Z","updated_at":"2025-08-19T02:32:37.621Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28019490,"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-12-25T02:00:05.988Z","response_time":58,"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":["android","gio","gioui","go","golang","ios","linux","macos","ui","wasm","webassembly","windows"],"created_at":"2025-12-25T04:28:37.124Z","updated_at":"2025-12-25T04:28:39.204Z","avatar_url":"https://github.com/gioui-plugins.png","language":"Go","readme":"Gio-Plugins\n-------\n\nCompatible with Gio v0.9.1 (go get gioui.org@7bcb315ee174467d8e51c214ee434c41207cc718)\n\n\u003e [!NOTE]\n\u003e This package is not maintained by the Gio core team, and it is not part of the official Gio project. It is used\n\u003e in a commercial application, and some efforts are made to keep it up-to-date with internal changes.\n\n\u003e [!IMPORTANT]\n\u003e You may need to use a FORKED GOGIO to build your application with those plugins,\n\u003e see [gogio-fork](https://github.com/inkeliz/gio-cmd).\n\n------\n\nGio plugins is a system to use _third-party_ plugins similar to Gio features, this package also holds one collection\nof plugins for the [Gio](https://gioui.org). All plugins uses the same interface, and just one line of code must be\nadded in the main-loop, as explained below. _Furthermore, some packages can be used as standalone and doesn't require\nthe `plugin` package._\n\nThat package also serves as experimentation ground for \"plugin system\", which may land to Gio in the future.\n\n### Motivation\n\nGio is a great GUI library, but it lacks some features that are important for some applications. I worked in some\nextensions before, and I also maintained one fork of Gio, which contains some changes. However, that leads to many\nissues: keeping the fork updated is problematic. Creating extensions that are similar to Gio is impossible.\n\nI decided to create a plugin system to make it easier to use _third-party_\nextensions. [I also proposed this idea to the Gio-core](https://lists.sr.ht/~eliasnaur/gio/%3Cfe3835f7-b4d4-4db9-81fb-dfd8ab06f2ed%40www.fastmail.com%3E)\n.\n\n### Usage\n\nFirst, you must download the `plugin` package:\n\n```bash\ngo get -u github.com/gioui-plugins/gio-plugins@latest\n```\n\nYou need to modify your event-loop, you must include `gioplugins.Hijack(window)` in your event-loop, before handling\nevents and `gioplugins.ProxyEvents(app.Events)`, like this:\n\n```diff\nwindow := \u0026app.Window{} // Gio window\n\ngo func() {\n  for { \n+   evt := gioplugins.Hijack(window) // Gio main event loop\n  \n      switch evt := evt.(type) {\n        // ...\n      }\n  }\n}()\n\ngo gioplugins.ProxyEvents(app.Events) // Proxy Gio events to gioplugins\n\napp.Main()\n```\n\nEach plugin has its own README.md file, explaining how to use it. In general, you can simple\nuse `nameOfPlugin.SomeOp{}.Add(gtx.Ops)`, similar of how you use `pointer.PassOp{}.Add(gtx.Ops)`, native\nfrom Gio. Beginning with Gio 0.6, it also introduces `Command`, which is executed using `gtx.Execute`, you can\nalso use Commands, if the plugin supports it, for instance\n`gioplugins.Execute(gtx, gioshare.TextCmd{Text: \"Hello, World!\"})`,\nsimilar to what you are familiar with `gtx.Execute(clipboard.WriteCmd{Text: \"Hello, World!\"})`.\n\nOnce `gioplugins.Event` is set, you can use the plugins as simple `op` operations or `cmd` commands. If you are unsure\nif the plugin is working, you can use the `pingpong` package, which will return on `PongEvent` to the given Tag:\n\n```go\npingpong.PingOp{Tag: \u0026something}.Add(gtx.Ops)\n\ngioplugins.Execute(gtx, pingpong.PingCmd{Tag: \u0026something})\n```\n\n\u003e [!IMPORTANT]  \n\u003e It's uses `gioplugins.Execute` and not `gtx.Execute`!\n\nYou can receive responses using the `Tag`, similar Gio-core operations:\n\n```go\nfor {\n  evt, ok := gioplugins.Event(gtx, pingpong.Filter{Tag: \u0026something})\n  if !ok {\n    break\n  }\n  \n  if evt, ok := evt.(pingpong.PongEvent); ok {\n    fmt.Println(evt.Pong)\n  } \n}\n```\n\nOf course, `pingpong` has no use in real-world applications, but it can be used to test if the plugin is working.\n\n\u003e [!IMPORTANT]\n\u003e It uses `gioplugins.Event` and not `gtx.Event`!\n\n## Plugins\n\n**Available from Gio (not in this repository):**\n\n| Name                                                       | Description                                                              |\n|------------------------------------------------------------|--------------------------------------------------------------------------|\n| **[Clipboard](https://pkg.go.dev/gioui.org/io/clipboard)** | Read/Write text from/to the native clipboard.                            |\n| **[Deeplink](https://pkg.go.dev/gioui.org/app)**           | Handle deeplinks (custom URL schemes) using the native platform support. |\n\n**Available plugins in this repository:**\n\n| Name                                                                              | Description                                                                      | OS                                                          |\n|-----------------------------------------------------------------------------------|----------------------------------------------------------------------------------|-------------------------------------------------------------|\n| **[PingPong](https://github.com/gioui-plugins/gio-plugins/tree/main/pingpong)**   | Test if the plugin system is working.                                            | _Android, iOS, macOS, Windows, WebAssembly, Linux, FreeBSD_ |  \n| **[Share](https://github.com/gioui-plugins/gio-plugins/tree/main/share)**         | Share text/links using the native share dialog.                                  | _Android, iOS, macOS, Windows, WebAssembly_                 |  \n| **[WebViewer](https://github.com/gioui-plugins/gio-plugins/tree/main/webviewer)** | Display in-app webview using the native webview implementation on each platform. | _Android, iOS, macOS, Windows, WebAssembly_                 |  \n| **[Hyperlink](https://github.com/gioui-plugins/gio-plugins/tree/main/hyperlink)** | Open hyperlinks in the default browser.                                          | _Android, iOS, macOS, Windows, WebAssembly_                 |  \n| **[Explorer](https://github.com/gioui-plugins/gio-plugins/tree/main/explorer)**   | Opens the native file-dialog, to read/write files.                               | _Android, iOS, macOS, Windows, WebAssembly_                 |  \n| **[Safedata](https://github.com/gioui-plugins/gio-plugins/tree/main/safedata)**   | Read/Write files into the secure storage of the device.                          | _Android, iOS, macOS, Windows, WebAssembly_                 |\n| **[Auth](https://github.com/gioui-plugins/gio-plugins/tree/main/auth)**           | Authenticate the user using third party (Google and Apple).                      | _Android, iOS, macOS, Windows, WebAssembly_                 |\n| **ALTCHA (Coming Soon)**                                                          | Display captchas using ALTCHA, a reCaptcha alternative.                          | _Android, iOS, macOS, Windows, WebAssembly_                 |\n| **InAppPay (Coming Soon)**                                                        | Display in-app products to buy, using Google Play, Apple Store and Aptoide.      | _Android, iOS_                                              |\n| **Ads (Coming Soon)**                                                             | Display advertisements using AdMob.                                              | _Android, iOS_                                              |\n\n* ALTCHA, Google Play, Apple Store and Aptoide are names trademarks of their respective owners.\n  Currently, those plugins are not endorsed by those companies.\n\nMore plugins are planned, but not yet implemented, follow the development\nat https://github.com/orgs/gioui-plugins/projects/1. Also,\nconsider send some 👍 on issues which mentions features that you like.\n\n\u003e [!TIP]\n\u003e If you want to help, please open an issue or a PR! If you want to suggest a plugin, please open an issue.\n\n-----------\n\n### Creating a new plugin\n\nIf you want to create a new plugin, you can check the `pingpog` package, which is the simplest plugin available.\nGenerally, you need implement `plugin.Handler`, and call `plugin.Register` in your `init()` function. Your code will get\nspecific events and ops, which you define in your `Handler` implementation.\n\n#### Limitations\n\n- Android: XML/Manifest: There's no direct integration with `gogio`. Consequently, your plugin cannot require any\n  additional XML file or changes in the manifest. That may limit some plugins, but it's a limitation of `gogio` itself.\n- General: Position: There's no way to get relative position of each operation, or mimic the `paint.PaintOp{}`, so if\n  your plugin is adding views to the screen, you must use absolute positions. This is a limitation of Gio itself, which\n  doesn't easily expose the relative position of each operation.\n\n### Compatibility\n\nMost packages are compatible with the latest version of Gio, and only the latest version should be supported. Beware\nthat internal changes in the Gio API can break the compatibility with `plugin`. None of the packages has stable API,\nand breaking changes can happen at any time.\n\nMost plugins are compatible with Android 5+, iOS 13+, MacOS 12+, Windows 10+ and WebAssembly.\n\nFurthermore, we don't have any plans to support Linux and FreeBSD due to the low market-share and the lack of API\nstandards.\n\n| Priority | OS          | Arch         |\n|----------|-------------|--------------|\n| High     | Android     | ARM64, ARMv7 |\n| High     | iOS         | ARM64        |\n| Medium   | Windows     | AMD64        |\n| Low      | WebAssembly | WASMv1       |\n| Low      | MacOS       | ARM64, AMD64 |\n| Ignored  | FreeBSD     | -            |\n| Ignored  | Linux       | -            |\n\nCurrently, some package might not work on some platforms, and some features might not be available on some platforms.\n\n### Security\n\nThis package heavily uses `unsafe`, and as it suggest: it can be unsafe to use. We are not responsible for any damage\ncaused by this package. Some plugins also use `unsafe` and CGO to interact with the native platform. While we try to\nkeep the code safe, we can't guarantee that it is safe enough for your use-case. Also, is impossible to verify the\nintegrity of native-APIs, so we can't guarantee that the native-APIs will have the expected behavior.\n\n### Testing\n\nSince we have limited resources and devices, we can't test all plugins on all platforms and devices. Currently, we have\na few devices available and with limited range of OS versions. Plugins are usually tested on those devices:\n\n- **Android**:\n    - Motorola Droid Maxx,\n    - Motorola G 2Gen,\n    - Motorola E6,\n    - Motorola E14,\n    - Motorola E15,\n    - Xiaomi A7,\n    - Xiaomi Note 9,\n    - Xiaomi Redmi A3,\n    - Samsung Galaxy A20e,\n    - SPC Discovery,\n    - Blackberry Key One,\n    - (+ BrowserStack)\n- **iOS**:\n    - iPhone SE 2Gen (2020),\n    - iPad Air 5Gen,\n    - (+ BrowserStack),\n- **WASM**:\n    - Chrome,\n    - Firefox,\n    - Safari,\n    - (+ BrowserStack)\n- **Windows**:\n    - Custom Device (RYZEN 3900X + RX 7900XT),\n    - Custom VM (EPYC 7501P),\n- **MacOS**:\n    - MacBook Air (M1, 2020)\n    - MacStudio (M2 Max, 2022)\n\nTests are performed manually, since most features interact with the native platform, and automated tests are not\neasy to implement. We are open to suggestions on how to improve the testing process.\n\n\u003e [!TIP]\n\u003e Please, if you find any bug, open an issue or a PR! If area looking for more devices to test, if you are in Europe and\n\u003e have a device that you can lend to us, please contact us.\n\n### Hacking\n\nEach OS has its own way to interact with the native APIs. For example, on Android, you need to create a Java class and\ncall it using JNI. On iOS and MacOS you need to write some Objective-C code and call it using CGO. On Windows, you need\nto write some code using `syscall` to each DLL, which may use COM API, some APIs uses WinRT instead of Win32, which can\nbe harder to use. On WebAssembly, you need to use `syscall/js` to interact with the browser APIs, or use InkWasm, which\nis faster. On Linux/FreeBSD you may need to use C and CGO to interact with the native APIs.\n\n### License\n\nThis package is licensed under the MIT License, some pre-compiled files may have other license. See\nthe [LICENSE](LICENSE) file for details.\n","funding_links":["https://github.com/sponsors/inkeliz"],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgioui-plugins%2Fgio-plugins","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgioui-plugins%2Fgio-plugins","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgioui-plugins%2Fgio-plugins/lists"}