{"id":23449459,"url":"https://github.com/mhhollomon/memorandum","last_synced_at":"2026-04-19T05:37:05.715Z","repository":{"id":269482874,"uuid":"905833311","full_name":"mhhollomon/memorandum","owner":"mhhollomon","description":"toy embedded in-memory database","archived":false,"fork":false,"pushed_at":"2024-12-25T18:09:55.000Z","size":28,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-10T05:49:57.507Z","etag":null,"topics":["cpp20","database","header-only"],"latest_commit_sha":null,"homepage":"","language":"C++","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/mhhollomon.png","metadata":{"files":{"readme":"README.md","changelog":null,"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}},"created_at":"2024-12-19T16:01:08.000Z","updated_at":"2024-12-25T18:08:54.000Z","dependencies_parsed_at":"2024-12-23T22:25:38.948Z","dependency_job_id":"88e149a1-fd8b-47be-afe8-7ce0e803b3e8","html_url":"https://github.com/mhhollomon/memorandum","commit_stats":null,"previous_names":["mhhollomon/memorandum"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/mhhollomon/memorandum","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mhhollomon%2Fmemorandum","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mhhollomon%2Fmemorandum/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mhhollomon%2Fmemorandum/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mhhollomon%2Fmemorandum/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mhhollomon","download_url":"https://codeload.github.com/mhhollomon/memorandum/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mhhollomon%2Fmemorandum/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":268470798,"owners_count":24255391,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-02T02:00:12.353Z","response_time":74,"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":["cpp20","database","header-only"],"created_at":"2024-12-23T23:18:39.506Z","updated_at":"2026-04-19T05:37:05.669Z","avatar_url":"https://github.com/mhhollomon.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# memorandum\n\nEmbedded, in-memory database.\n\nBeing written for the needs of the [kbDaw](https://github.com/mhhollomon/kbdaw)\nproject.\n\nRequires C++20.\n\nMIT license.\n\n## Overview\n\nThe idea is that - unlike most databases - the rows are directly stored as C++\nstructures (or classes). Doing so would keep from having to have code that continuously\nmarshalled and unmarshalled the separate fields into the database.\n\nThe drawback, is of course, that joins and projections are not possible.\n\nSo, if you want to call this a key-value store rather than a database, that would\nmake sense.\n\n\n## Concurrency\n\nThis is not concurrency safe without additional locking.\nThe  methods can be called without problems from different threads. However,\ntwo threads may not call methods at the same time - unless they are both reads.\n\nCaveat Scriptor\n\n## Interface\n\nSee [DB API](docs/api.md)\n\n\n## Using in a project\n\n### Direct copy\n\nThis is a header only project. All that would be needed is to copy the contents\nof the `src` directory along with its subdirectories to some suitable place\nand point your compiler there as an include  directory.\n\n### using CMake and CPM\n\nAn easier way, if you use cmake, is to use [CPM](https://github.com/cpm-cmake/CPM.cmake).\n\nSomething like the following :\n\n```cmake\ninclude(CPM)\n\n...\n\nCPMAddPackage(\"gh:mhhollomon/memorandum@0.2.0\")\n\ntarget_link_libraries(my_project PRIVATE memorandum)\n```\nYou can control the creation of the tests by setting\n`MEMORANDUM_BUILD_TESTS`. it is on by default.\n\n\n## Technology\n- [Catch2](https://github.com/catchorg/Catch2) for testing framework.\n- [CPM](https://github.com/cpm-cmake/CPM.cmake) for managing dependencies.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmhhollomon%2Fmemorandum","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmhhollomon%2Fmemorandum","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmhhollomon%2Fmemorandum/lists"}