{"id":29843288,"url":"https://github.com/kappaduck/quack","last_synced_at":"2026-01-26T02:25:25.900Z","repository":{"id":306999912,"uuid":"1027189568","full_name":"kappaduck/quack","owner":"kappaduck","description":"2D/3D Game engine build on top of SDL3 for modern .NET ","archived":false,"fork":false,"pushed_at":"2025-07-28T21:40:49.000Z","size":26,"stargazers_count":0,"open_issues_count":137,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-07-28T23:18:41.631Z","etag":null,"topics":["csharp","game-development","game-engine","net","sdl3"],"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/kappaduck.png","metadata":{"files":{"readme":"readme.md","changelog":"changelog.md","contributing":null,"funding":null,"license":"license","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/codeowners","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-07-27T14:01:07.000Z","updated_at":"2025-07-28T21:40:52.000Z","dependencies_parsed_at":"2025-07-28T23:19:02.470Z","dependency_job_id":"2b57824d-f708-465d-99af-c089aa91f393","html_url":"https://github.com/kappaduck/quack","commit_stats":null,"previous_names":["kappaduck/quack"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/kappaduck/quack","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kappaduck%2Fquack","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kappaduck%2Fquack/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kappaduck%2Fquack/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kappaduck%2Fquack/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kappaduck","download_url":"https://codeload.github.com/kappaduck/quack/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kappaduck%2Fquack/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":267710180,"owners_count":24131936,"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-07-29T02:00:12.549Z","response_time":2574,"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":["csharp","game-development","game-engine","net","sdl3"],"created_at":"2025-07-29T15:42:32.702Z","updated_at":"2026-01-26T02:25:25.894Z","avatar_url":"https://github.com/kappaduck.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Quack! 🦆 ![NuGet Version](https://img.shields.io/nuget/vpre/KappaDuck.Quack?style=flat\u0026label=stable)\n\nQuack! is a fast, lightweight, and code-first 2D/3D game engine built on [SDL] and its extensions ([SDL_image], [SDL_mixer], [SDL_ttf]).\nIt is designed for modern .NET 9+ games and desktop apps, providing a clean and flexible API that abstracts low-level platform details.\n\nQuack! offers a wide range of features, including:\n\n- Rendering 2D/3D graphics using SDL's rendering API ([SDL_renderer] and [SDL_gpu])\n- Window management and event handling\n- Input handling for keyboard, mouse, and game controllers\n- Audio playback and management\n- And much more!\n\n## Quack \u0026 SDL compatibility\n\nQuack! is shipped with native binaries of SDL and its extensions.\nBelow is a compatibility table showing which versions of SDL are used in each Quack! release.\n\n| Quack! version | SDL version | SDL_image version | SDL_ttf version | SDL_mixer version |\n| :------------: | :---------: | :---------------: | :-------------: | :---------------: |\n|    `source`    |   `3.4.0`   |      `3.2.6`      |     `3.2.2`     |       `N/A`       |\n|    `0.4.0`     |   `3.4.0`   |      `3.2.6`      |     `3.2.2`     |       `N/A`       |\n|    `0.3.0`     |  `3.2.30`   |      `3.2.6`      |     `3.2.2`     |       `N/A`       |\n|    `0.2.0`     |  `3.2.28`   |      `3.2.4`      |     `3.2.2`     |       `N/A`       |\n|    `0.1.0`     |  `3.2.18`   |       `N/A`       |      `N/A`      |       `N/A`       |\n\n\u003e :warning: During active development, SDL dependencies may be updated frequently. :warning:\n\n## Cross-platform support\n\nQuack! currently supports Windows and Linux.\n\nThe API is designed to be cross-platform thanks to SDL's abstraction layer, making porting to other platforms straightforward.\n\n\u003e Other platforms such as Android or WebAssembly may be supported in the future, but there are no immediate plans.\n\n## Installation\n\nQuack! is available on [NuGet]. Install it via the .NET CLI:\n\n```bash\ndotnet add package KappaDuck.Quack -v 0.4.0\n```\n\nor add it directly to your `.csproj` file:\n\n```xml\n\u003cPackageReference Include=\"KappaDuck.Quack\" Version=\"0.4.0\" /\u003e\n```\n\nYou can also install via the NuGet Package Manager in your Visual Studio or JetBrains Rider.\n\n## Usage\n\nA minimal example creating a resizable window and handling quit events:\n\n```csharp\nusing KappaDuck.Quack.Events;\nusing KappaDuck.Quack.Graphics.Rendering;\n\nusing RenderWindow window = new(\"Quack! Playground\", 1080, 720)\n{\n    Resizable = true\n};\n\nwhile (window.IsOpen)\n{\n    while (window.Poll(out Event e))\n    {\n        if (e.RequestQuit())\n        {\n            return;\n        }\n    }\n}\n```\n\nMore examples can be found in the [Examples] directory.\n\n## Development \u0026 Playground\n\nYou can build Quack! from source or run quick experiments using a playground file.\n\n### Prerequisites\n\n- [.NET 9.0 SDK](https://dotnet.microsoft.com/download/dotnet/9.0)\n- [.NET 10.0 SDK](https://dotnet.microsoft.com/download/dotnet/10.0)\n\n\u003e The SDK includes everything needed to build and run .NET applications.\n\n### Setup\n\n1. Clone the repository\n```bash\ngit clone https://github.com/KappaDuck/quack.git\ncd quack\n```\n\n2. Install SDL and its extensions\n\n#### Windows\n```bash\ndotnet ./SDL3/setup.cs\n```\n\n#### Linux\n```bas\nchmod +x ./SDL3/setup.cs\n./SDL3/setup.cs\n```\n\n\u003e The setup script installs SDL and all required extensions. On linux, you only need to make it executable once.\n\n### Build \u0026 Run\n\nOpen the solution in your preferred IDE (e.g., Visual Studio, Rider, VS Code).\n\u003e Most IDEs do not support running single-file scripts directly, so you'll need to run the playground file from the command line.\n\u003e\n\u003e VS Code provides intellisense but cannot run the playground file directly.\n\n### Playground file (quack.playground.cs)\n\nThe playground allows you to experiment with windows, input, rendering, and more without modifying the main source code.\n\nCreate a file named `quack.playground.cs` at the root of the repository with the following content:\n\u003e This file is ignored by git, so it's safe to use for your experiments.\n\n```csharp\n#!/usr/bin/env dotnet\n\n// Ignore the warning about missing copyright header in this file\n#:property NoWarn=IDE0073\n#:property TargetFramework=net10.0-windows\n#:property IncludeNativeLibs=true\n#:project src/KappaDuck.Quack\n\nusing KappaDuck.Quack.Events;\nusing KappaDuck.Quack.Graphics.Rendering;\n\nusing RenderWindow window = new(\"Quack! Playground\", 1080, 720)\n{\n    Resizable = true\n};\n\nwhile (window.IsOpen)\n{\n    while (window.Poll(out Event e))\n    {\n        if (e.RequestQuit())\n        {\n            return;\n        }\n    }\n}\n\n```\n\n### Run the playground\n\n#### Windows\n```bash\ndotnet ./quack.playground.cs\n```\n\n#### Linux\n```bash\nchmod +x ./quack.playground.cs # only needed once\n./quack.playground.cs\n```\n\n## Credits\n\nQuack! draws inspiration from and leverages the following projects:\n\n- [SDL]\n- [SDL_image]\n- [SDL_ttf]\n- [SDL_mixer]\n- [LazyFoo](https://lazyfoo.net/index.php)\n- [Sayers.SDL2.Core](https://github.com/JeremySayers/Sayers.SDL2.Core)\n- [SDL3-CS](https://github.com/flibitijibibo/SDL3-CS)\n- [SFML](https://www.sfml-dev.org/)\n\n[SDL]: https://www.libsdl.org/\n[SDL_image]: https://www.libsdl.org/projects/SDL_image/\n[SDL_ttf]: https://www.libsdl.org/projects/SDL_ttf/\n[SDL_mixer]: https://www.libsdl.org/projects/SDL_mixer/\n[SDL_renderer]: https://wiki.libsdl.org/CategoryRender\n[SDL_gpu]: https://wiki.libsdl.org/CategoryGPU\n[Examples]: examples\n[dotnet run app.cs]: https://devblogs.microsoft.com/dotnet/announcing-dotnet-run-app/\n[NuGet]: https://www.nuget.org/packages/KappaDuck.Quack/\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkappaduck%2Fquack","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkappaduck%2Fquack","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkappaduck%2Fquack/lists"}