This expirement will attempt to implement IndexedDB features for Go.
It wraps goleveldb similar to how Chrome’s implementation utilizes LevelDB under the hood.


Key Value
["core"] database definition
["core", "store", <store>] store spec
["core", "index", <index>] index spec
["data", <store>, <id>] data record
["idx", <index>, <key>] index record (unique)
["idx", <index>, <key>, <id>] index record
  • <store> (string) Name of the Store
  • <index> (string) Name of the Index
  • <id> (string, float, bool, nil, slice) unique identifier for a document
  • <key> (string, float, bool, nil, slice) index key


Implement the API as described by MDN and defined by W3C.


As per the spec, objects to be stored should be supported by the structured clone algorithm. Currently using Go’s json marshalling.


One obvious differentiator between Go and Javascript would be the need to make the library asynchronous.
In Go it is pretty easy to make sync libraries work async, so should be up to the user. However if there is
enough demand async wrappers could be added.

storage limits

Browser storage limits and eviction criteria are beyond the scope of this project. At least initially.


View Github