A fast, robust, richly-featured table serialisation library for Lua
Go to file
2015-05-21 14:04:33 +02:00
bigtest.lua Add support for lots of tables (> 200) 2014-12-23 23:56:46 +01:00
LICENSE.md Initial commit 2013-11-03 22:50:05 +01:00
README.md Add see also section to README 2014-09-06 18:45:42 +02:00
ser.lua Remove line of vestigial code 2015-05-21 14:04:33 +02:00
tests.lua Strip whitespace where possible 2015-05-20 02:13:34 +02:00

Ser

Ser is a fast, robust, richly-featured table serialization library for Lua. It was specifically written to store configuration and save files for LÖVE games, but can be used anywhere.

Originally, this was the code to write save games for Space, but was released as a stand-alone library after many much-needed improvements.

Like Space itself, you use, distribute and extend Ser under the terms of the MIT license.

Simple

Ser is very simple and easy to use:

local serialize = require 'ser'

print(serialize({"Hello", world = true}))
-- prints:
-- return {"Hello", world = true}

Fast

Using Serpent's benchmark code, Ser is 33% faster than Serpent.

Robust

Sometimes you have strange, non-euclidean geometries in your table constructions. It happens, I don't judge. Ser can deal with that, where some other serialization libraries cry "Iä! Iä! Cthulhu fhtagn!" and give up — or worse, silently produce incorrect data.

local serialize = require 'ser'

local cthulhu = {{}, {}, {}}
cthulhu.fhtagn = cthulhu
cthulhu[1][cthulhu[2]] = cthulhu[3]
cthulhu[2][cthulhu[1]] = cthulhu[2]
cthulhu[3][cthulhu[3]] = cthulhu
print(serialize(cthulhu))
-- prints:
-- local _3 = {}
-- local _2 = {}
-- local _1 = {[_2] = _3}
-- local _0 = {_1, _2, _3}
-- _0.fhtagn = _0
-- _2[_1] = _2
-- _3[_3] = _0
-- return _0

Tested

Check out tests.lua to see how Ser behaves with all kinds of inputs.

Other solutions

Check out the Lua-users wiki for other libraries that do roughly the same thing.

See also

  • Lady: for trusted-source savegames
  • Smallfolk: for untrusted-source serialization