sol2 0,0,1,1 travis-ci

Sol v2.0 - a C++ <-> Lua API wrapper with advanced features and top notch performance - is here, and it's great! Documentation:

Sol 2.14

Build Status Documentation Status

Sol is a C++ library binding to Lua. It currently supports all Lua versions 5.1+ (LuaJIT 2.x included). Sol aims to be easy to use and easy to add to a project. The library is header-only for easy integration with projects.


Find it here. A run-through kind of tutorial is here! The API documentation goes over most cases (particularly, the “api/usertype” and “api/proxy” and “api/function” sections) that should still get you off your feet and going, and there’s an examples directory here as well.

Sneak Peek

#include <sol.hpp>
#include <cassert>

int main() {
    sol::state lua;
    int x = 0;
    lua.set_function("beep", [&x]{ ++x; });
    assert(x == 1);
#include <sol.hpp>
#include <cassert>

struct vars {
    int boop = 0;

int main() {
    sol::state lua;
    lua.new_usertype<vars>("vars", "boop", &vars::boop);
    lua.script("beep =\n"
               "beep.boop = 1");
    assert(lua.get<vars>("beep").boop == 1);

More examples are given in the examples directory.

Creating a single header

You can grab a single header out of the library here. For stable version, check the releases tab on github for a provided single header file for maximum ease of use. A script called is provided in the repository if there’s some bleeding edge change that hasn’t been published on the releases page. You can run this script to create a single file version of the library so you can only include that part of it. Check --help for more info.


  • Fastest in the land (see: sol2 graph and table entries).
  • Supports retrieval and setting of multiple types including std::string and std::map/unordered_map.
  • Lambda, function, and member function bindings are supported.
  • Intermediate type for checking if a variable exists.
  • Simple API that completely abstracts away the C stack API, including protected_function with the ability to use an error-handling function.
  • operator[]-style manipulation of tables
  • C++ type representations in lua userdata as usertypes with guaranteed cleanup.
  • Customization points to allow your C++ objects to be pushed and retrieved from Lua as multiple consecutive objects, or anything else you desire!
  • Overloaded function calls: my_function(1); my_function("Hello") in the same lua script route to different function calls based on parameters
  • Support for tables, nested tables, table iteration with table.for_each / begin() and end() iterators.

Supported Compilers

Sol makes use of C++1114 features. GCC 4.9 and Clang 3.4 (with std=c++1z and appropriate standard library) or higher should be able to compile without problems. However, the officially supported and CI-tested compilers are:

  • GCC 4.9.0+
  • Clang 3.5+
  • Visual Studio 2015 Community (Visual C++ 14.0)+


Sol is distributed with an MIT License. You can see LICENSE.txt for more info.

Related Repositories



Sol v2.0 - a C++ <-> Lua API wrapper with advanced features and top notch performance - is here, and it's great! Documentation: ...

Top Contributors

ThePhD snide Rapptz ericholscher agjohnson ehough tony Nava2 PrincessNyanara chebee7i OrfeasZ DanielOaks titilambert Ivoz zhanghongyi xuhdev PeterHajdu jodal Kami gl3n gsauthof benmwebb bport danez mitya57 THE-FYP alexwlchan hdt80 IKavanagh jonparrott


-   v2.14.10 zip tar
-   v2.14.9 zip tar
-   v2.14.8 zip tar
-   v2.14.5 zip tar
-   v2.14.2 zip tar
-   v2.14.0 zip tar
-   v2.12.4 zip tar
-   v2.12.3 zip tar
-   v2.12.2 zip tar
-   v2.12.1 zip tar
-   v2.12.0 zip tar
-   v2.11.7 zip tar
-   v2.11.6 zip tar
-   v2.11.5 zip tar
-   v2.11.4 zip tar
-   v2.11.3 zip tar
-   v2.11.2 zip tar
-   v2.11.1 zip tar
-   v2.11.0 zip tar
-   v2.10.5 zip tar
-   v2.10.1 zip tar
-   v2.10.0 zip tar
-   v2.9.3 zip tar
-   v2.9.2 zip tar
-   v2.9.1 zip tar
-   v2.9.0 zip tar
-   v2.8.9 zip tar
-   v2.8.6 zip tar
-   v2.8.5 zip tar
-   v2.8.0 zip tar