{"id":32163575,"url":"https://github.com/mgsloan/store","last_synced_at":"2026-02-19T02:02:44.525Z","repository":{"id":40661237,"uuid":"53919403","full_name":"mgsloan/store","owner":"mgsloan","description":"Fast binary serialization in Haskell","archived":false,"fork":false,"pushed_at":"2024-12-21T17:58:27.000Z","size":557,"stargazers_count":110,"open_issues_count":47,"forks_count":37,"subscribers_count":8,"default_branch":"master","last_synced_at":"2025-12-13T01:25:51.079Z","etag":null,"topics":["binary-serialization","serialization"],"latest_commit_sha":null,"homepage":"","language":"Haskell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mgsloan.png","metadata":{"files":{"readme":"README.md","changelog":"ChangeLog.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2016-03-15T06:08:24.000Z","updated_at":"2025-11-19T11:15:02.000Z","dependencies_parsed_at":"2024-06-19T00:15:44.284Z","dependency_job_id":"6399fbd3-176c-429e-abbe-a4a5fad49db4","html_url":"https://github.com/mgsloan/store","commit_stats":{"total_commits":433,"total_committers":22,"mean_commits":"19.681818181818183","dds":0.3325635103926097,"last_synced_commit":"60d62a12b6eabeced3b5fb569f942b583eb73d8c"},"previous_names":["fpco/store"],"tags_count":56,"template":false,"template_full_name":null,"purl":"pkg:github/mgsloan/store","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mgsloan%2Fstore","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mgsloan%2Fstore/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mgsloan%2Fstore/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mgsloan%2Fstore/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mgsloan","download_url":"https://codeload.github.com/mgsloan/store/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mgsloan%2Fstore/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29600848,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-19T00:59:38.239Z","status":"online","status_checked_at":"2026-02-19T02:00:07.702Z","response_time":117,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["binary-serialization","serialization"],"created_at":"2025-10-21T14:35:18.753Z","updated_at":"2026-02-19T02:02:44.517Z","avatar_url":"https://github.com/mgsloan.png","language":"Haskell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# store\n\nThe 'store' package provides efficient binary serialization. There are\na couple features that particularly distinguish it from most prior\nHaskell serialization libraries:\n\n* Its primary goal is speed. By default, direct machine\n  representations are used for things like numeric values (`Int`,\n  `Double`, `Word32`, etc) and buffers (`Text`, `ByteString`,\n  `Vector`, etc). This means that much of serialization uses the\n  equivalent of `memcpy`.\n\n  We have plans for supporting architecture independent\n  serialization - see [#36](https://github.com/fpco/store/issues/36)\n  and [#31](https://github.com/fpco/store/issues/31). This plan makes\n  little endian the default, so that the most common endianness has no\n  overhead.\n\n  - Another way that the serialization behavior can vary is if\n    integer-simple is used instead of GHC's default of using\n    GMP. `Integer` serialized with the `integer-simple` flag enabled\n    are not compatible with those serialized without the flag enabled.\n\n* Instead of implementing lazy serialization / deserialization\n  involving multiple input / output buffers, `peek` and `poke` always\n  work with a single buffer. This buffer is allocated by asking the\n  value for its size before encoding. This simplifies the encoding\n  logic, and allows for highly optimized tight loops.\n\n* `store` can optimize size computations by knowing when some types\n  always use the same number of bytes.  This allows us to compute the\n  byte size of a `Vector Int32` by just doing `length v * 4`.\n\nIt also features:\n\n* Optimized serialization instances for many types from base, vector,\n  bytestring, text, containers, time, template-haskell, and more.\n\n* TH and GHC Generics based generation of Store instances for\n  datatypes.\n\n* TH generation of testcases.\n\n* Utilities for streaming encoding / decoding of Store encoded\n  messages, via the `store-streaming` package.\n\n## Gotchas\n\nStore is best used for communication between trusted processes and\nlocal caches.  It can certainly be used for other purposes, but the\nbuiltin set of instances have some gotchas to be aware of:\n\n* Store's builtin instances serialize in a format which depends on\n  machine endianness.\n\n* Store's builtin instances trust the data when deserializing. For\n  example, the deserialization of `Vector` will read the vector's\n  length from the first 8 bytes. It will then allocate enough memory\n  to store all the elements. Malicious or malformed input could cause\n  allocation of large amounts of memory.  See [issue #122][].\n\n* Serialization may vary based on the version of datatypes. For\n  example, `Text` serialized from `text \u003c 2` will not be compatible\n  with `Text` from `text \u003e= 2`, because the internal representation\n  switched from UTF-16 to UTF-8.\n\n[issue #122]: https://github.com/fpco/store/issues/122\n\n## Blog posts\n\n* [Initial release announcement](https://www.fpcomplete.com/blog/2016/05/store-package)\n* [Benchmarks of the prototype](https://www.fpcomplete.com/blog/2016/03/efficient-binary-serialization)\n* [New 'weigh' allocation benchmark package](https://www.fpcomplete.com/blog/2016/05/weigh-package),\n  created particularly to aid optimizing `store`.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmgsloan%2Fstore","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmgsloan%2Fstore","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmgsloan%2Fstore/lists"}