A lightweight, dependency-free library for binding Lua to C++

Related tags

Scripting LuaBridge

LuaBridge 2.6

LuaBridge is a lightweight and dependency-free library for mapping data, functions, and classes back and forth between C++ and Lua (a powerful, fast, lightweight, embeddable scripting language) . LuaBridge has been tested and works with Lua revisions starting from 5.1.5., although it should work in any version of Lua from 5.1.0 as well as LuaJit.

LuaBridge offers the following features:

  • MIT Licensed
  • A printable Reference Manual.
  • Headers-only: No Makefile, no .cpp files, just one #include!
  • Simple, light, and nothing else needed (like Boost).
  • No macros, settings, or configuration scripts needed.
  • Supports different object lifetime management models.
  • Convenient, type-safe access to the Lua stack.
  • Automatic function parameter type binding.
  • Easy access to Lua objects like tables and functions.
  • Written in a clear and easy to debug style.

Please read the LuaBridge Reference Manual for more details on the API.

Unit Tests

Unit test build requires a CMake and C++11 compliant compiler.

There are 4 unit test flavors:

  • Tests51 - uses Lua 5.1, with C++11 features
  • Tests51L - uses Lua 5.1, no C++11 features
  • Tests52 - uses Lua 5.2, with C++11 features
  • Tests52L - uses Lua 5.2, no C++11 features

Build using Make on Linux/MacOS:

clone --recurse-submodules [email protected]:vinniefalco/LuaBridge.git
cd LuaBridge
cmake -DCMAKE_BUILD_TYPE=Debug -B build
# or cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo -B build
# or cmake -DCMAKE_BUILD_TYPE=Release -B build
cd build
make -j

Generate XCode project on MacOS:

clone --recurse-submodules [email protected]:vinniefalco/LuaBridge.git
cd LuaBridge
cmake -G Xcode -B build
# Generates XCode project build/LuaBridge.xcodeproj

Generate MSVS solution on Windows:

clone --recurse-submodules git@github.com:vinniefalco/LuaBridge.git
cd LuaBridge
mkdir build
cd build
cmake -G "Visual Studio 15 2017 Win64" -B build
# or cmake -G "Visual Studio 14 2015" -B build
# or cmake -G "Visual Studio 15 2017 Win64" -B build
# or cmake -G "Visual Studio 15 2017" -B build
# or cmake -G "Visual Studio 15 2019" -A Win64 -B build
# or cmake -G "Visual Studio 15 2019" -B build
# Generates MSVS solution build/LuaBridge.sln

LuaBridge Demo

LuaBridge provides both a command line program and a stand-alone graphical program for compiling and running the test suite. The graphical program brings up an interactive window where you can enter execute Lua statements in a persistent environment. This application is cross platform and works on Windows, Mac OS, iOS, Android, and GNU/Linux systems with X11. The stand-alone program should work anywhere. Both of these applications include LuaBridge, Lua version 5.2, and the code necessary to produce a cross platform graphic application. They are all together in a separate repository, with no additional dependencies, available on Github at LuaBridge Demo and Tests. This is what the GUI application looks like, along with the C++ code snippet for registering the two classes:

Official Repository

LuaBridge is published under the terms of the MIT License.

The original version of LuaBridge was written by Nathan Reed. The project has been taken over by Vinnie Falco, who added new functionality, wrote the new documentation, and incorporated contributions from Nigel Atkinson.

For questions, comments, or bug reports feel free to open a Github issue or contact Vinnie Falco directly at the email address indicated below.

Copyright 2019, Dmitry Tarakanov
Copyright 2012, Vinnie Falco (<[email protected]>)
Copyright 2008, Nigel Atkinson
Copyright 2007, Nathan Reed

Portions from The Loki Library:
Copyright (C) 2001 by Andrei Alexandrescu

Older versions of LuaBridge up to and including 0.2 are distributed under the BSD 3-Clause License. See the corresponding license file in those versions (distributed separately) for more details.

  • LuaRef, access table keys

    LuaRef, access table keys

    Hey Vinnie, is there a means to iterate over a LuaRef and access keys and values? Like pairs() or ipairs()? I'd like to pass lua tables to juce to populate css-like data.

    e.g. in lua:

    cssstyle = {
      background = "ff336688",
      font_size = 11,
      font_name = "Arial"

    in juce: (something to this effect)

    void doMap(LuaRef v) {
        HashMap<String, String>::Iterator it (v);
        while (it.next()) {
                String keyId = it.getKey();
                String val = it.getValue();
    opened by drunkenbird 25
  • Ownership management policies

    Ownership management policies

    Hi Vinnie,

    I think it makes sense to continue the discussion here.

    Your suggestion to implement policies was the following:

    classname can be expanded to include a policy. Given:

    struct Policy
      virtual void push () = 0;
      virtual void addref () = 0;
      virtual void release () = 0;
      template <class PolicyType>
      static Policy* getPolicy ()
        static PolicyType policy;
        return &policy;

    We can add this:

    template <typename T>
    struct classname
      static inline Policy& policy()
         return *classname <T>::m_policy;
      template <class PolicyType>
      static inline void set_policy ()
        classname <T>::m_policy = &Policy::getPolicy <PolicyType> ();
      static PolicyType* m_policy;
    template <typename T>
    PolicyType* classname <T>::m_policy = Policy::getPolicy <DefaultPolicy> ();

    Then we expand class__ to include an additional PolicyType template parameter, and set the policy in the classname at the same time we associate the name with it:

    template <typename T, class PolicyType>
    class__<T>::class__ (lua_State *L_, const char *name_): scope(L_, name_)
      classname<T>::set_policy <typename PolicyType> ();

    Here are some examples of code using this scheme:

    s.class_ <test3> ("test3").method ("f", &test3::f); // default policy
    s.class_ <test3, BoostSharedPtrPolicy> ("test3").method ("f", &test3::f); // use boost::shared_ptr
    s.class_ <test3, CustomPolicy> ("test3").method ("f", &test3::f); // use domain specific policy
    s.class_ <test3, ImmortalPolicy> ("test3").method ("f", &test3::f); // straight pointer with no ref count policy

    Comments, criticisms?

    opened by marton78 24
  • Setting table variable to an initialized class ?

    Setting table variable to an initialized class ?


    I'm currently binding my GameEntity Class like this

    .beginClass<GameEntity> ("GameEntity")
        .addConstructor<void (*) (void)> ()
        .addFunction("setGEC", &GameEntity::setGEC)
        .addProperty("id", &GameEntity::getId)
        .addProperty("active", &GameEntity::getIsActive, &GameEntity::setIsActive)
        .addProperty("x", &GameEntity::getPositionX, &GameEntity::setPositionX)
        .addProperty("y", &GameEntity::getPositionY, &GameEntity::setPositionY)

    I'm trying to do something like this on the Lua side:

    entity = GameEntity()
    entity.components = {}

    But I get an error:

    SampleFile.lua:23: no member named 'components'

    Is there a way to circumvent this issue ?

    opened by Goles 22
  • Acess violation being thrown when my class calls a function.

    Acess violation being thrown when my class calls a function.

    I have this function

        Vector WorldToScreen(const Vector origin) {
            Vector screen(0,0,0);
            if (!ScreenTransform(origin, screen)) {
                           //Do stuff here
            return screen;

    That call crashes. Why? Because of this.

        bool ScreenTransform(const Vector& point, Vector& screen) {
             matrix3x4_t w2sMatrix = g_pEngine->WorldToScreenMatrix();

    that's literally the only thing in there (and a return true). The error is in lua_pcall (static libs, so im not 100% sure where). My last error message: Exception thrown at 0x33D9C121 (the dll.dll) in csgo.exe: 0xC0000005: Access violation reading location 0x8D050014.

    opened by ar1a 16
  • Cannot pass from C++ published classes as argument in Lua ?

    Cannot pass from C++ published classes as argument in Lua ?

    I got a small vector class and I have some calculation functions in there like Add. It just adds two vectors and returns the one who called the function. But Lua says

    -- main.lua:5: bad argument #2 to 'Add' (TexVector expected, got table)

    the main.lua is:

    Cheap.Moo( ) -- for generall printing test
    a = Cheap.TexVector( 1, 2 )
    b = Cheap.TexVector( 3, 4 )
    a.Add( b )
    print( a.X, a.Y, b.X, b.Y )

    So what's the problem there ?

    opened by JoshuaBehrens 14
  • How to call lua function in C++?

    How to call lua function in C++?

    platform:win7 lua:5.3

    lua file

    test = {}
    test.Init = function(kernel, self, arg)
        io.write("Hello Lua Init!\n");
    test.AfterInit = function(kernel, self, arg)
        io.write("Hello Lua AfterInit!\n");

    C++ file

    luabridge::LuaRef compent = luabridge::getGlobal(luaState, "test");
    luabridge::LuaRef func = compent.getGlobal(luaState, "Init");
    func(NFScriptIdent(kernel, self, arg);

    I got an assert,

    I tried to use

    luabridge::LuaRef func = luabridge::getGlobal(luaState, "test.Init");
    func(NFScriptIdent(kernel, self, arg);

    it's still assert.

    so I'm confused, plz help me, thanks

    opened by nickyang4github 13
  • constructor/addConstructor functions do not compile with Visual Studio 2010

    constructor/addConstructor functions do not compile with Visual Studio 2010

    A simple example: class TestClass { public: TestClass(int id) :_Id(id) {} virtual ~TestClass() {}

    void run()
    int _Id;


    ... luabridge::scope s(lua_state); s .beginClass ("TestClass") .addConstructor<void (*) (int)> () .addMethod("run", &TestClass::run);

    will not compile on Visual Studio 2010 (and 2005 I guess) with the following error: error C2783: 'luabridge::Namespace::Class &luabridge::Namespace::Class::addConstructor(void)' : could not deduce template argument for 'C'

    Is there a workaround to explicetly tell the compiler the Type of C?

    opened by psyinf 13
  • Is it possible work with LUA_MULTRET?

    Is it possible work with LUA_MULTRET?

    function isConnected() return 1, "srvname","ip:" end

    LuaRef f_isConnected = getGlobal(L, "isConnected"); LuaRef v = f_isConnected(); /// not supported LUA_MULTRET why?!

    opened by gem81 12
  • please help me to determine the index of the class is on the stack?

    please help me to determine the index of the class is on the stack?

    please help me to determine the index of the class is on the stack? The function takes an object class, you need what is the object of the class?

    int checkerror(lua_State* L, const char* file) {
    	int status = luaL_loadfile(L, file);// проверка есть ли ошибки.
    	try {
    		if (luaL_dostring(L, file) == LUA_OK) {
    			return 0;
    		else {
    			string x = lua_tostring(L, -1);
    			throw x;
    			return 0;
    	catch (string x) {
    		cout << x << endl;
    		return 0;
    struct a {
    	int x = 302;
    	a(int x) { this->x = x;  }
    	void get() const /* время жизни lua.*/ { cout << x << " " << endl; }
    struct b{
    	void show() const /* время жизни lua.*/ { cout << "show " << endl; }
    void pri(lua_State* L) {
    		a* b1 = (a*)Userdata::getExact<a>(L, 1);
    		try	{
    			b* c = (b*)Userdata::getExact<b>(L, 1);
    		catch (std::exception& e)	{	}
    	catch (std::exception& e)
    const char* LUA = R"(
    b1 = st1()
    int main(int argc, char* argv[]) {
    	lua_State* L = luaL_newstate();
    	luaL_openlibs(L); getGlobalNamespace(L)// получить глоб место.
    		.beginClass<a>("st")// имя класса в lua.
    		.addConstructor<void(*)(int)>()// конструктор класса.
    		.addFunction("get", &a::get)// метод класса
    		.endClass()// закрыть регистрацию класса. 
    		.beginClass<b>("st1")// имя класса в lua.
    		.addConstructor<void(*)()>()// конструктор класса.
    		.addFunction("show", &b::show)// метод класса
    		.endClass()// закрыть регистрацию класса. 
    		.addFunction("pri", &pri);// Регистрация функции.
    	checkerror(L, LUA);
    	return 0;
    opened by egor230 10
  • Setting a global variable to an already initialized variable.

    Setting a global variable to an already initialized variable.

    Hey, so I was wanting to hook up this

                        .addFunction("Cmd", &CEngine::ClientCmd)

    I can only have one instance of the class (It points to a game class)

    I have initialized the variable fine and I can call its functions fine in C++.

                .addVariable("Engine", &g_pEngine, false)

    I'm trying to add an instance of it to the global namespace. I want to be able to call the function from CEngine in lua. (At this moment, I think it's best i mention g_pEngine is a CEngine*)

    But when i try and do this

    CSGO.Engine:Cmd("clear;echo testing123")

    it throws me this error exec.lua:1: attempt to call a nil value (method 'Cmd')

    How can I fix this?

    EDIT: Using lua 5.3

    opened by ar1a 10
  • LuaJIT and 5.1 compatibility

    LuaJIT and 5.1 compatibility


    Thank you for the amazing work you have done on getting LuaBridge 1.0 polished up and improved :)

    A lot of folks are on Lua 5.1 and if you're using LuaJIT the 5.2 API isn't available.

    Fortunately, this is simple to remedy in LuaBridge right now (and likely in the future) as only some cosmetic 5.2 functions are used. Here are some back ports of these 3 methods to 5.1

    // 5.1 backport of 5.2 stuff
    ** convert an acceptable stack index into an absolute index
    LUA_API int lua_absindex (lua_State *L, int idx) {
      return (idx > 0 || idx <= LUA_REGISTRYINDEX)
             ? idx
             : cast_int(L->top - L->ci->func + idx);
    LUA_API void lua_rawgetp (lua_State *L, int idx, const void *p) {
        idx = lua_absindex(L, idx);
        lua_pushlightuserdata(L, (void *) p);
    LUA_API void lua_rawsetp (lua_State *L, int idx, const void *p) {
        idx = lua_absindex(L, idx);
        lua_pushlightuserdata(L, (void*) p);
        // put key behind value
        lua_insert(L, -2);
    opened by JoshEngebretson 10
  • Fix userdata nil bug

    Fix userdata nil bug

    This fix prevents a segmentation fault in case a C++ function is called from Lua and nil instead of an object of a registered class is passed as parameter.

    • The get function correctly tests if nil is on the stack and returns a null pointer.
    • The bug is located in the StackHelper where the returned pointer is always dereferenced. This is the source of the undefined behavior/segmentation fault.
    opened by stefanfrings 0
  • Fix CMake in MSYS2 environment

    Fix CMake in MSYS2 environment

    This fix only adds the /MP parameter to Visual Studio compilers instead of adding it to all compilers under Windows. Without this change the build in a MSYS2 environment with a g++ compiler doesn't work.

    opened by stefanfrings 0
  • i386 __attribute__((fastcall))

    i386 __attribute__((fastcall))

    on i386 32-bit openbsd with luabridge https://github.com/vinniefalco/LuaBridge/commit/9092ace9615d14e3f5926f2e8a3b612ddc6c8efa I get a compilation error when trying to addFunction with a function that uses attribute fastcall. Removing fastcall allows the program to compile.

    relevant section of Namespace.h:

       1280     //----------------------------------------------------------------------------
       1281     /**
       1282         Add or replace a free function.
       1283     */
       1284     template<class ReturnType, class... Params>
       1285     Namespace& addFunction(char const* name, ReturnType (*fp)(Params...))
       1286     {

    reproducible example:

    // c++ -I/usr/local/include -I/usr/local/include/lua-5.3 /usr/local/lib/liblua5.3.so.5.3 luabridge.cpp
    #include <vector>
    #include <cmath>
    #include <iostream>
    #include <lua.hpp>
    #include <LuaBridge/LuaBridge.h>
    using std::vector;
    using std::cout;
    using std::endl;
    //basic types
    typedef int8_t  s8;
    typedef int16_t s16;
    typedef int32_t s32;
    typedef int64_t s64;
    typedef uint8_t  u8;
    typedef uint16_t u16;
    typedef uint32_t u32;
    typedef uint64_t u64;
    typedef float f32;
    typedef double f64;
    #define DYNACALL __attribute__((fastcall))
    u8 DYNACALL _vmem_readt_8(u32 addr)
            return 23;
    using namespace luabridge;
    int main()
            static lua_State *L;
                            .addFunction("read8", _vmem_readt_8)
            return 0;
    $ c++ -I/usr/local/include -I/usr/local/include/lua-5.3 /usr/local/lib/liblua5.3.so.5.3 luabridge.cpp         
    luabridge.cpp:42:5: error: no matching member function for call to 'addFunction'
                            .addFunction("read8", _vmem_readt_8)
    /usr/local/include/LuaBridge/detail/Namespace.h:1326:16: note: candidate function not viable: no known conversion from 'DYNACALL u8 (u32) __attribute__((fastcall))' (aka 'unsigned char (unsigned int) __attribute__((fastcall))') to 'int (*const)(lua_State *)' for 2nd argument
        Namespace& addFunction(char const* name, int (*const fp)(lua_State*))
    /usr/local/include/LuaBridge/detail/Namespace.h:1263:16: note: candidate template ignored: could not match 'function<type-parameter-0-0 (type-parameter-0-1...)>' against 'unsigned char (*)(unsigned int) __attribute__((fastcall))'
        Namespace& addFunction(char const* name, std::function<ReturnType(Params...)> function)
    /usr/local/include/LuaBridge/detail/Namespace.h:1285:16: note: candidate template ignored: deduced type 'unsigned char (*)(unsigned int)' of 2nd parameter does not match adjusted type 'DYNACALL u8 (*)(u32) __attribute__((fastcall))' (aka 'unsigned char (*)(unsigned int) __attribute__((fastcall))') of argument [with ReturnType = unsigned char, Params = <unsigned int>]
        Namespace& addFunction(char const* name, ReturnType (*fp)(Params...))
    1 error generated.
    opened by namtsui 0
  • Lua_Ref Func Access violation

    Lua_Ref Func Access violation

    Ok so I'm a student and trying to make a basic game that can be custom coded using lua and I'm using luabridge and i have a custom class that allows the user to render his custom objects

    std::vector<luabridge::LuaRef> RenderHooks = std::vector<luabridge::LuaRef>();
    class RenderManager {
    	void OnRender(luabridge::LuaRef Func) {
    		printf("Added a hook\n");
    		printf("Hooks Count: %i\n", RenderHooks.size());
    	bool ClearHooks() {
    		return true;
    	void CallHooks() {
    		printf("Hooks Count: %i\n", RenderHooks.size());
    		for (luabridge::LuaRef hook : RenderHooks) {
    			try {
    				// call hook
    				printf("Calling a hook\n");
    			catch (luabridge::LuaException const& e) {
    				std::cout << e.what() << std::endl;

    and i use

    		.addFunction("OnRender", &RenderManager::OnRender)
    		.addFunction("ClearHooks", &RenderManager::ClearHooks)
    		.addVariable("RenderManager", &renderMng, false)

    to register it

    so i can use

    render = function()
        print("a message from lua")
    while true do 
       -- Some game calculations happen here and it can run forever

    but the issue is when i try to run renderMng.CallHooks() which is supposed to trigger the lua function defined earlier i get the following issue

    LuaException: missing error

    and access violation some times and the lua function never gets triggered and after a few more calls the app exits when debugging i get

    Exception thrown at 0x00007FFDC54EFFA6 (msvcrt.dll) in gamebase.exe: 0xC0000005: Access violation reading location 0x0000000065BCF000. another run Exception thrown at 0x00007FFDC552D2D0 (msvcrt.dll) in gamebase.exe: 0xC0000005: Access violation reading location 0xFFFFFFFFFFFFFFFF. My console before it exits image

    0.157?? image

    which seems to be triggered here image

    I tried calling the function using luabridge::getGlobal(L, "funcname"); and same issue

    it seems to be working as expected if i remove my while true loop that I have, but there are some important calculations that are being ran on it so I cannot remove it

    Its my first time using luabridge and i don't know what am i wrong at

    I'm using luabridge2 from vcpkg and Lua 5.4.4

    opened by andrew351 1
Vinnie Falco
I'm into C++ and Boost. Currently working on Boost.JSON and Boost.URL. Also president of the @CPPAlliance
Vinnie Falco
Sol3 (sol2 v3.0) - a C++ <-> Lua API wrapper with advanced features and top notch performance - is here, and it's great! Documentation:

sol2 sol2 is a C++ library binding to Lua. It currently supports all Lua versions 5.1+ (LuaJIT 2.0+ and MoonJIT included). sol2 aims to be easy to use

The Phantom Derpstorm 3.3k Jan 4, 2023
A portable foreign-function interface library.

Status libffi-3.4 was released on TBD. Check the libffi web page for updates: URL:http://sourceware.org/libffi/. What is libffi? Compilers for high le

null 2.7k Jan 5, 2023
:sparkles: Magical headers that make your C++ library accessible from JavaScript :rocket:

Quick start | Requirements | Features | User guide | Contributing | License nbind is a set of headers that make your C++11 library accessible from Jav

charto 1.9k Dec 26, 2022
Library to build PHP extensions with C++

PHP-CPP The PHP-CPP library is a C++ library for developing PHP extensions. It offers a collection of well documented and easy-to-use classes that can

Copernica 1.3k Dec 24, 2022
Structy is an irresponsibly dumb and simple struct serialization/deserialization library for C, Python, and vanilla JavaScript.

Structy Structy is an irresponsibly dumb and simple struct serialization/deserialization library for C, Python, and vanilla JavaScript. You can think

Stargirl Flowers 53 Dec 29, 2022
A dependency free, embeddable debugger for Lua in a single file (.lua or .c)

debugger.lua A simple, embedabble debugger for Lua 5.x, and LuaJIT 2.x. debugger.lua is a simple, single file, pure Lua debugger that is easy to integ

Scott Lembcke 600 Dec 31, 2022
Source code for the data dependency part of Jan Kossmann's PhD thesis "Unsupervised Database Optimization: Efficient Index Selection & Data Dependency-driven Query Optimization"

Unsupervised Database Optimization: Data Dependency-Driven Query Optimization Source code for the experiments presented in Chapter 8 of Jan Kossmann's

Jan Koßmann 4 Apr 24, 2022
C++ reflection library with Lua binding, and JSON and XML serialisation.

Ponder Linux & OSX: - Windows: Currents status: 3.2-alpha. API is unstable as features added/changed. New: Version 3 V1 replaced Boost with C++11. V2

Bill Quith 573 Dec 28, 2022
LuaZDF - Lua Zero Dependency Functions

LuaZDF - Lua Zero Dependency Functions LuaZDF is a collection of independet functions that have zero dependencies among themselves. A function in LuaZ

null 46 Jun 4, 2022
C++ binding to Lua

bLua C++与Lua的胶水层,b代表着bridge 特性 依赖C++17 只有一个头文件 接口简单轻量 userdata的方式管理c++指针生命周期 用法 lua调用c++ 首先注册类及需要的成员函数 // 注册全局函数 bLua::reg_global_func(L, "newA", newA

null 3 Sep 30, 2022
libmagic binding for lua.

lua-libmagic libmagic binding for lua. see man libmagic for more details. Dependencies libmagic: https://github.com/file/file Installation luarocks in

Masatoshi Fukunaga 2 Jan 14, 2022
A binding between C++11 and Lua language

lua-intf lua-intf is a binding between C++11 and Lua language, it provides three different set of API in one package: LuaBinding, Export C++ class or

Steve K. Chiu 406 Dec 5, 2022
Advanced version of lutok C++/Lua binding

Lutok2 C++/Lua binding helper for Lua 5.1 and LuaJIT 2.x+. Dependencies To use Lutok2 successfully you'll need: A standards-compliant C++11 complier L

Mário Kašuba 9 Jul 19, 2022
C++ binding to Lua

Kaguya C++ binding to Lua Licensed under Boost Software License Requirements Lua 5.1 to 5.3 (recommended: 5.3) C++03 compiler with boost library or C+

null 317 Jan 4, 2023
A Sol-inspired minimalist Lua binding for Zig.

zoltan A Sol-inspired minimalist Lua binding for Zig. Features Supports Zig 0.9.0 Lua tables table creation from Zig get/set/create methods possible k

null 79 Dec 4, 2022
lua binding for Software implementation in C of the FIPS 198 Keyed-Hash Message Authentication Code HMAC

lua-hmac Compute the SHA-224, SHA-256, SHA-384, and SHA-512 message digests and the Hash-based Message Authentication Code (HMAC). this module is Lua

Masatoshi Fukunaga 3 Dec 3, 2022
DwThreadPool - A simple, header-only, dependency-free, C++ 11 based ThreadPool library.

dwThreadPool A simple, header-only, dependency-free, C++ 11 based ThreadPool library. Features C++ 11 Minimal Source Code Header-only No external depe

Dihara Wijetunga 27 Oct 28, 2022
C++11 Lightweight Redis client: async, thread-safe, no dependency, pipelining, multi-platform

C++11 Lightweight Redis client: async, thread-safe, no dependency, pipelining, multi-platform

Simon Ninon 1k Jan 8, 2023
Lightweight single-file utilities for C99. Portable & zero dependency

plainlibs Lightweight single-file utilities for C99. Key Features Portable across Unix & Windows (including MSVC) Zero dependencies (besides C stdlib)

null 5 Oct 5, 2022
header only, dependency-free deep learning framework in C++14

The project may be abandoned since the maintainer(s) are just looking to move on. In the case anyone is interested in continuing the project, let us k

tiny-dnn 5.6k Dec 31, 2022