A delightfully simple 2D game engine for the D programming language. It's easy to set up, hackable, and comes with the essentials built in.
Parin sits somewhere between a small library like raylib and a big engine like Godot. It offers more direction than small libraries, but far less overhead than big engines. Its main ideas are:
Basic code example:
import parin;
// Called every frame while the game is running.
bool hello(float dt) {
lockResolution(320, 180);
drawText("Helloo!!!", mouse);
return false;
}
// Creates a main function that calls the given function.
mixin runDemo!hello;
This section shows how to install Parin using DUB. Create a new folder and run the following commands inside it:
dub init -t parin
dub run
If everything is set up correctly, a window will appear showing a simple message.
Available starting templates:
dub init -t parin -- basic
dub init -t parin -- entity
Create a new folder and run the following to...
Prepare the folder:
git clone --depth 1 https://github.com/Kapendev/parin parin_package
./parin_package/scripts/prepare
# Or: .\parin_package\scripts\prepare.bat
Run the project:
./parin_package/scripts/run
# Or: .\parin_package\scripts\run.bat
# Or: ./parin_package/scripts/run ldc2 macos
# Or: ./parin_package/scripts/run opend
Some libraries for sound, graphics, and input handling are required before using Parin on Linux. Below are installation commands for some Linux distributions.
Ubuntu:
sudo apt install libasound2-dev libx11-dev libxrandr-dev libxi-dev libgl1-mesa-dev libglu1-mesa-dev libxcursor-dev libxinerama-dev libwayland-dev libxkbcommon-dev
Fedora:
sudo dnf install alsa-lib-devel mesa-libGL-devel libX11-devel libXrandr-devel libXi-devel libXcursor-devel libXinerama-devel libatomic
Arch:
sudo pacman -S alsa-lib mesa libx11 libxrandr libxi libxcursor libxinerama
Void:
sudo xbps-install make alsa-lib-devel libglvnd-devel libX11-devel libXrandr-devel libXi-devel libXcursor-devel libXinerama-devel mesa MesaLib-devel
Start with the examples folder or the cheatsheet for a quick overview. For more details, see the tour page. The DDOX documentation engine can also be used to create an overview with:
git clone --depth=1 https://github.com/Kapendev/parin parin_package
cd parin_package
dub run -b ddox
Articles:
Parin includes a build script for the web in the packages folder.
Building for the web requires LDC and Emscripten (version 4.0.23 is recommended).
While installing LDC, unpack ldc2-X.Y.Z-addon-emscripten.tar.xz from the same releases page into the LDC installation folder.
Running the script with DUB:
dub run parin:web
Without DUB:
./parin_package/scripts/web
# Or: .\parin_package\scripts\web.bat
API:
Usage:
dub run parin:web -- [flags] [libs]
Flags:
-help Show this.
-betterc Use the `-betterC` flag.
-release Use the `-release` flag.
-build Avoid emrun after a successful build.
Libs:
Any non-flag argument is linked as an extra library.
Example: dub run parin:web -- web/libbox2d.a
Uploading to itch.io:
index.* files and add them to a ZIP file.If you notice anything missing, feel free to open an issue! You can also share things in the GitHub discussions. Most ideas are welcome, except hot reloading.
Small extras that don't belong in the core can live in the addons folder as single-file D libraries. Open a PR and add the file there.
No. However, there are examples of how to build them using the Union type in the examples folder:
No. The following projects might be useful:
Yes. Parin includes bindings for Steamworks and ENet in parin.bindings.
See the integration examples.
The binaries themselves are not included, so they need to be downloaded or built and linked separately.
For Zed, install the Path Server extension to get autocomplete for paths inside the assets folder.
Call setIsUsingAssetsPath(false) to disable the default behavior.
Or setAssetsPath(assetsPath.pathDirName) to load from the executable's folder.
Hot reloading is not supported out of the box because I (Kapendev) don't care about that feature. The arsd libraries may help.
Yes. Be sure to check the associated README for any licensing notes.
No. Raylib is one of its backends. A custom backend is being worked on, but it's still experimental. Contributions are welcome.
Yes.
86 followers · starred Jan 2026
16 followers · starred May 2026
10 followers · starred Feb 2026
A delightfully simple 2D game engine for the D programming language. It's easy to set up, hackable, and comes with the essentials built in.
Parin sits somewhere between a small library like raylib and a big engine like Godot. It offers more direction than small libraries, but far less overhead than big engines. Its main ideas are:
Basic code example:
import parin;
// Called every frame while the game is running.
bool hello(float dt) {
lockResolution(320, 180);
drawText("Helloo!!!", mouse);
return false;
}
// Creates a main function that calls the given function.
mixin runDemo!hello;
This section shows how to install Parin using DUB. Create a new folder and run the following commands inside it:
dub init -t parin
dub run
If everything is set up correctly, a window will appear showing a simple message.
Available starting templates:
dub init -t parin -- basic
dub init -t parin -- entity
Create a new folder and run the following to...
Prepare the folder:
git clone --depth 1 https://github.com/Kapendev/parin parin_package
./parin_package/scripts/prepare
# Or: .\parin_package\scripts\prepare.bat
Run the project:
./parin_package/scripts/run
# Or: .\parin_package\scripts\run.bat
# Or: ./parin_package/scripts/run ldc2 macos
# Or: ./parin_package/scripts/run opend
Some libraries for sound, graphics, and input handling are required before using Parin on Linux. Below are installation commands for some Linux distributions.
Ubuntu:
sudo apt install libasound2-dev libx11-dev libxrandr-dev libxi-dev libgl1-mesa-dev libglu1-mesa-dev libxcursor-dev libxinerama-dev libwayland-dev libxkbcommon-dev
Fedora:
sudo dnf install alsa-lib-devel mesa-libGL-devel libX11-devel libXrandr-devel libXi-devel libXcursor-devel libXinerama-devel libatomic
Arch:
sudo pacman -S alsa-lib mesa libx11 libxrandr libxi libxcursor libxinerama
Void:
sudo xbps-install make alsa-lib-devel libglvnd-devel libX11-devel libXrandr-devel libXi-devel libXcursor-devel libXinerama-devel mesa MesaLib-devel
Start with the examples folder or the cheatsheet for a quick overview. For more details, see the tour page. The DDOX documentation engine can also be used to create an overview with:
git clone --depth=1 https://github.com/Kapendev/parin parin_package
cd parin_package
dub run -b ddox
Articles:
Parin includes a build script for the web in the packages folder.
Building for the web requires LDC and Emscripten (version 4.0.23 is recommended).
While installing LDC, unpack ldc2-X.Y.Z-addon-emscripten.tar.xz from the same releases page into the LDC installation folder.
Running the script with DUB:
dub run parin:web
Without DUB:
./parin_package/scripts/web
# Or: .\parin_package\scripts\web.bat
API:
Usage:
dub run parin:web -- [flags] [libs]
Flags:
-help Show this.
-betterc Use the `-betterC` flag.
-release Use the `-release` flag.
-build Avoid emrun after a successful build.
Libs:
Any non-flag argument is linked as an extra library.
Example: dub run parin:web -- web/libbox2d.a
Uploading to itch.io:
index.* files and add them to a ZIP file.If you notice anything missing, feel free to open an issue! You can also share things in the GitHub discussions. Most ideas are welcome, except hot reloading.
Small extras that don't belong in the core can live in the addons folder as single-file D libraries. Open a PR and add the file there.
No. However, there are examples of how to build them using the Union type in the examples folder:
No. The following projects might be useful:
Yes. Parin includes bindings for Steamworks and ENet in parin.bindings.
See the integration examples.
The binaries themselves are not included, so they need to be downloaded or built and linked separately.
For Zed, install the Path Server extension to get autocomplete for paths inside the assets folder.
Call setIsUsingAssetsPath(false) to disable the default behavior.
Or setAssetsPath(assetsPath.pathDirName) to load from the executable's folder.
Hot reloading is not supported out of the box because I (Kapendev) don't care about that feature. The arsd libraries may help.
Yes. Be sure to check the associated README for any licensing notes.
No. Raylib is one of its backends. A custom backend is being worked on, but it's still experimental. Contributions are welcome.
Yes.
86 followers · starred Jan 2026
16 followers · starred May 2026
10 followers · starred Feb 2026