This is a mirror page, please see the original page:

Introduction (中文)

TBOX is a glib-like cross-platform C library that is simple to use yet powerful in nature.

The project focuses on making C development easier and provides many modules (.e.g stream, coroutine, regex, container, algorithm ...),
so that any developer can quickly pick it up and enjoy the productivity boost when developing in C language.

It supports the following platforms:

And it provides many compiling options using xmake:

If you want to know more, please refer to:


The stream library

The coroutine library

The database library

The xml parser library

The serialization and deserialization library

The memory library

The container library

The algorithm library

The network library

The platform library

The charset library

The zip library

The utils library

The math library

The libc library

The libm library

The regex library

The hash library


Some projects using tbox:


Please install xmake first: xmake

# build for the host platform
$ cd ./tbox
$ xmake

# build for the mingw platform
$ cd ./tbox
$ xmake f -p mingw --sdk=/home/mingwsdk 
$ xmake

# build for the iphoneos platform
$ cd ./tbox
$ xmake f -p iphoneos 
$ xmake

# build for the android platform
$ cd ./tbox
$ xmake f -p android --ndk=xxxxx
$ xmake

# build for the linux cross-platform
$ cd ./tbox
$ xmake f -p linux --sdk=/home/sdk # --bin=/home/sdk/bin
$ xmake


#include "tbox/tbox.h"

int main(int argc, char** argv)
    // init tbox
    if (!tb_init(tb_null, tb_null)) return 0;

    // trace
    tb_trace_i("hello tbox");

    // init vector
    tb_vector_ref_t vector = tb_vector_init(0, tb_element_cstr(tb_true));
    if (vector)
        // insert item
        tb_vector_insert_tail(vector, "hello");
        tb_vector_insert_tail(vector, "tbox");

        // dump all items
        tb_for_all (tb_char_t const*, cstr, vector)
            // trace
            tb_trace_i("%s", cstr);

        // exit vector

    // init stream
    tb_stream_ref_t stream = tb_stream_init_from_url("");
    if (stream)
        // open stream
        if (tb_stream_open(stream))
            // read line
            tb_long_t size = 0;
            tb_char_t line[TB_STREAM_BLOCK_MAXN];
            while ((size = tb_stream_bread_line(stream, line, sizeof(line))) >= 0)
                // trace
                tb_trace_i("line: %s", line);

        // exit stream

    // wait 

    // exit tbox
    return 0;