Home Features Getting Started Examples Documentation Contributing Sponsorship Usage

dlib is a general-purpose library for game engine development in D language. It provides basic building blocks for writing graphics-intensive applications: containers, data streams, linear algebra and image decoders.

dlib is cross-platform, it supports Windows, Linux and all POSIX-compliant systems. It is fully written in D2 and has no external dependencies aside D's standard library, Phobos.

dlib is distributed under the Boost Software License, Version 1.0. You are free to use, copy, modify and redistribute dlib, even in closed-source products. The only requirement is to keep the license and copyright notice in all source code copies.

This project is not related to dlib for C++ in any way, it just has the same name by coincidence.

Important message to users of dlib due to the 2022 Ukraine crisis

I, Timur Gafarov, creator and maintainer of dlib, live in Russia. dlib has contributors from both Ukraine and Russia, as well as other countries of the world. When working on such projects, there are no borders between people. I strongly believe that politics should not prevent people from sharing knowledge with each other, creating new things and solving intellectual problems.

Yet the current political situation can lead to catastrophic consequences, up to the disconnection of all Russian developers from the world community for undefined period, which will seriously affect the projects in which they are actively involved. I hope these fears don't come true, but in case of the worst scenario, I will not be able to participate in the development of dlib and manage its package in Dub registry. It is also not clear yet whether I will be able to receive funding through Patreon, PayPal and other financial platforms.

Therefore, I strongly discourage using dlib as a critical dependency in important software products until the situation improves and there is confidence in the future for Russian developers.

Features

Currently dlib contains the following packages:

Getting started

Head on to releases page and get the latest source tarball. You may also use dub package instead - add the following dependency to your dub.json:


"dlib": "~>1.1.0"

A simple introductory tutorial on setting up a workspace for D projects can be found here.

Examples

Load PNG image and save its resized copy:


import dlib;

void main()
{
    loadPNG("input.png").resampleBilinear(240, 320).savePNG("output.png");
}

Transform a vector with 4x4 affine matrix:


import dlib;

void main()
{
    Vector3f v1 = Vector3f(1, 0, 0);
    Vector3f v2 = v1 * translationMatrix(Vector3f(0, 2, 0));
}

A simple 'Hello, world' HTTP server:


module main;

import std.stdio;
import dlib.network;

void main()
{
    StreamSocket listener = new StreamSocket(AddressFamily.INET);
    listener.bind(new InternetAddress("127.0.0.1", 8192));
    listener.listen(5);
    ubyte[] inputBuffer = new ubyte[1024];
    while(true)
    {
        ConnectedSocket connection = listener.accept();
        if (connection)
        {
            auto numBytesReceived = connection.receive(inputBuffer);
            string receivedStr = cast(string)inputBuffer[0..numBytesReceived];
            writeln(receivedStr);

            string responce = "HTTP/1.1 200 OK\r\nContent-Type: text/html; charset=UTF-8\r\n\r\nHello, world!\r\n";
            connection.send(cast(ubyte[])responce);

            connection.close();
        }
    }
}

Working with filesystem without garbage collection:


import dlib.core.memory;
import dlib.filesystem;
import dlib.text.str;
import json;

void main()
{
    StdFileSystem fs = New!StdFileSystem();
    
    foreach(path, entry; fs.traverseDir("./", true))
    {
        writeln(path);
        writeln(entry.isFile);
    }
    
    FileStat s;
    if (fs.stat("dub.json", s)) // otherwise doesn't exist
    {
        writeln(s.creationTimestamp);
        if (s.permissions & PRead)
        {
            StdInFileStream strm = fs.openForInput("dub.json");
            String text = String(strm);
            Delete(strm);
            writeln(text);
            text.free();
        }
    }
    
    Delete(fs);
}

Documentation

There is ddox documentation generated from source code. Be aware that it is currently incomplete, we are working towards making it more comprehensive. For support and overall discussions, use our Gitter chat room.

Articles on dlib:

Contributing

If you want to contribute code to dlib, send pull requests to the project repository. Please, read Contributing Guidelines first.

Found a bug? Please, create an issue here.

dlib was created by Timur Gafarov, Martin Cejp, Andrey Penechko, Vadim Lopatin, Nick Papanastasiou, Oleg Baharev, Roman Chistokhodov, Eugene Wissner, Roman Vlasov, Basile Burg, Valeriy Fedotov, Ferhat Kurtulmuş.

Sponsorship

If you like dlib, please support its development on Patreon and get a reward depending on your donation amount. Supporters who donate $10 and more will be listed on this page as Sponsors. You can also make donation via PayPal.

Big thanks to these awesome people for supporting dlib: Daniel Laburthe, Rafał Ziemniewski, Kumar Sookram, Aleksandr Kovalev, Robert Georges, Jan Jurzitza (WebFreak), Rais Safiullin (SARFEX), Benas Cernevicius, Koichi Takio.

Usage

Some interesting projects that use dlib:

Fork me on GitHub