Skip to content

kappaduck/quack

Quack! 🦆 Static Badge NuGet Version

A modern .NET multimedia framework for building games and interactive apps, built on SDL3


Overview

Quack! is a modern, simple and fast multimedia framework for building games and interactive applications, built on top of SDL3 and its extensions (SDL_image, SDL_mixer, SDL_ttf). It targets .NET 10+ desktop and web apps, providing a clean and flexible API that hides the complexity of SDL.

Features

  • 2D rendering via the Renderer API and 3D rendering via the GPU API
  • Window and display management
  • Audio management
  • Input & events
  • Image and font loading
  • Native UI integration, system utilities, and cross-platform support

Usage

using KappaDuck.Quack.Core;
using KappaDuck.Quack.Events;
using KappaDuck.Quack.Windows;

using EngineScope _ = QuackEngine.Init(Subsystem.Video);
using Window window = new("Quack!", 1280, 720);

while (window.IsOpen)
{
    while (window.Poll(out Event e))
    {
        if (e is QuitEvent || e is KeyEvent { Key: Key.Escape })
        {
            window.Close();
            return;
        }
    }
}

More examples and documentation can be found at Documentation

Installation

Install Quack! via NuGet:

dotnet package add KappaDuck.Quack -v 0.5.0

or via your .csproj:

<PackageReference Include="KappaDuck.Quack" Version="0.5.0">

You can also install via the NuGet Package Manager in Visual Studio or JetBrains Rider.

Warning

Quack! is still in early development. Expect breaking changes and frequent updates. Always use the latest version for the best experience.

Beta packages

Pre-release versions are published to NuGet.org alongside stable releases. To install the latest beta:

dotnet package add KappaDuck.Quack --prerelease

Documentation

Full API documentation and samples are available:

Contributing

Contributions are welcome! Please read CONTRIBUTING.md before opening a pull request.

Cross-platform support

Quack! supports Windows and Linux thanks to SDL3's abstraction layer.

The framework may have platform-specific implementations or limitations depending on the underlying SDL support. Using platform-specific features will surface a compiler warning indicating the code may not be portable across all targets.

Note

Android and WebAssembly (WASM) support is planned for a future milestone. macOS and iOS are not in scope.

SDL compatibility

SDL3 native libraries are bundled via KappaDuck.Quack.Runtimes. The table below shows the SDL versions included in each release of both packages.

During active development, KappaDuck.Quack references the pre-release version of KappaDuck.Quack.Runtimes. When a stable release of KappaDuck.Quack is published, it switches to the corresponding production version of KappaDuck.Quack.Runtimes.

Quack! Runtimes SDL3 SDL_image SDL_ttf SDL_mixer
source 0.1.0-beta.2 3.4.10 3.4.4 3.2.2 3.2.2

Development & Sandbox

You can build Quack! from source and experiment quickly using the included sandbox project.

Prerequisites

Setup

1. Clone the repository

git clone https://github.com/KappaDuck/quack.git
cd quack

2. Create an entry point in the sandbox

The sandbox project requires at least one .cs file to compile. All .cs files inside src/Quack.Sandbox/ are listed in .gitignore, so create any file you like there. A simple starting point:

using KappaDuck.Quack.Core;
using KappaDuck.Quack.Events;
using KappaDuck.Quack.Windows;

using EngineScope _ = QuackEngine.Init(Subsystem.Video);
using Window window = new("Quack! Sandbox", 1280, 720);

while (window.IsOpen)
{
    while (window.Poll(out Event e))
    {
        if (e is QuitEvent || e is KeyEvent { Key: Key.Escape })
        {
            window.Close();
            return;
        }
    }
}

3. Build

dotnet build

4. Run the tests

dotnet test

Quack.Sandbox

The repository includes a dedicated sandbox project at src/Quack.Sandbox/ for experimenting without touching the main source. It references KappaDuck.Quack directly so changes are reflected immediately.

To run your sandbox:

cd sandbox/Quack.Sandbox
dotnet run

or simply run in your IDE

AI disclosure

AI tools assisted with two things in this project: documentation (XML doc comments, README, CONTRIBUTING guidelines) and design exploration (prototyping API shapes, exploring implementation approaches, and thinking through architecture decisions).

Credits

Built with inspiration from