A fast, robust, richly-featured table serialisation library for Lua
Go to file
Robin Wellner 0c42f20f63 Apply ivan's optimisation
Thanks to Ivan (2DEngine.com), who wrote this and convinced me it was
a good idea.

This change in writing tables results in up to 20% faster
serialization in common cases, and doesn't significantly affect
performance in contrived cases.
2015-05-25 14:15:58 +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 Apply ivan's optimisation 2015-05-25 14:15:58 +02:00
tests.lua Apply ivan's optimisation 2015-05-25 14:15:58 +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