{"id":18455708,"url":"https://github.com/memowe/eventstore-tiny","last_synced_at":"2025-04-22T17:14:03.865Z","repository":{"id":49184226,"uuid":"117700643","full_name":"memowe/EventStore-Tiny","owner":"memowe","description":"A minimal event sourcing framework","archived":false,"fork":false,"pushed_at":"2021-07-22T14:15:28.000Z","size":161,"stargazers_count":2,"open_issues_count":2,"forks_count":1,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-02-16T14:57:16.455Z","etag":null,"topics":["event-sourcing","framework","perl"],"latest_commit_sha":null,"homepage":null,"language":"Perl","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/memowe.png","metadata":{"files":{"readme":"README.md","changelog":"Changes","contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-01-16T15:20:10.000Z","updated_at":"2021-07-28T19:08:17.000Z","dependencies_parsed_at":"2022-09-12T00:01:38.465Z","dependency_job_id":null,"html_url":"https://github.com/memowe/EventStore-Tiny","commit_stats":null,"previous_names":[],"tags_count":12,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/memowe%2FEventStore-Tiny","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/memowe%2FEventStore-Tiny/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/memowe%2FEventStore-Tiny/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/memowe%2FEventStore-Tiny/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/memowe","download_url":"https://codeload.github.com/memowe/EventStore-Tiny/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250285719,"owners_count":21405298,"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","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":["event-sourcing","framework","perl"],"created_at":"2024-11-06T08:08:47.386Z","updated_at":"2025-04-22T17:14:03.841Z","avatar_url":"https://github.com/memowe.png","language":"Perl","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![CPAN testers reports](https://img.shields.io/badge/testers-reports-blue.svg)](http://www.cpantesters.org/distro/E/EventStore-Tiny.html?distmat=1)\n[![CPAN testers matrix](https://img.shields.io/badge/testers-matrix-blue.svg)](http://matrix.cpantesters.org/?dist=EventStore-Tiny)\n[![CPAN version](https://badge.fury.io/pl/EventStore-Tiny.svg)](https://badge.fury.io/pl/EventStore-Tiny)\n\u003cbr\u003e\n[![GitHub repository](https://img.shields.io/badge/github-code-blue.svg)](https://github.com/memowe/EventStore-Tiny)\n[![GitHub issue tracker](https://img.shields.io/badge/github-issues-blue.svg)](https://github.com/memowe/EventStore-Tiny/issues)\n[![Linux tests](https://github.com/memowe/EventStore-Tiny/actions/workflows/linux-tests.yml/badge.svg?branch=main)](https://github.com/memowe/EventStore-Tiny/actions/workflows/linux-tests.yml)\n\n# EventStore::Tiny\n\nA minimal event sourcing framework.\n\n## Example\n\n```perl\nuse EventStore::Tiny;\n\nmy $store = EventStore::Tiny-\u003enew;\n\n# Register event type\n$store-\u003eregister_event(UserAdded =\u003e sub ($state, $data) {\n\n    # Use $data to inject the new user into the given $state\n    $state-\u003e{users}{$data-\u003e{id}} = {\n        name =\u003e $data-\u003e{name},\n    };\n});\n\n# ...\n\n# Store an event instance represented by type and data\n$store-\u003estore_event(UserAdded =\u003e {id =\u003e 17, name =\u003e 'Bob'});\n\n# ...\n\n# Work with the current state snapshot generated by event application\nsay 'His name is ' . $store-\u003esnapshot-\u003estate-\u003e{users}{17}{name}; # Bob\n```\n\n## Intro\n\nIn Event Sourcing, the state of a system is calculated as the application of a stream of events representing each change of the system. This framework is a minimal approach to use these mechanics in simple perl systems.\n\n## Features\n\n- Flexible snapshots (high-resolution timestamps) and event substreams\n- Customizable event logging\n- Simple storage solution for events in the file system\n- Transparent snapshot caching mechanism to improve performance\n\n## Read more\n\n- See the module's POD ([EventStore::Tiny on MetaCPAN][mcpan]) for details.\n- See [Tamagotchi.pm][tpm] and [tamagotchi.t][tt] for a non-trivial demo.\n\n[mcpan]: https://metacpan.org/pod/EventStore::Tiny\n[tpm]: t/9_demo/lib/Tamagotchi.pm\n[tt]: t/9_demo/tamagotchi.t\n\n## Author and license\n\nCopyright (c) 2018-2021 [Mirko Westermeier][mw] ([\\@memowe][gh], [mirko@westermeier.de][mail])\n\nReleased under the MIT License (see [LICENSE.txt][license]).\n\n### Contributors\n\n- Mohammad S Anwar ([\\@manwar][manwar])\n- Toby Inkster ([\\@tobyink][tobyink])\n\n[mw]: http://mirko.westermeier.de\n[gh]: https://github.com/memowe\n[mail]: mailto:mirko@westermeier.de\n[license]: LICENSE.txt\n[manwar]: https://github.com/manwar\n[tobyink]: https://github.com/tobyink\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmemowe%2Feventstore-tiny","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmemowe%2Feventstore-tiny","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmemowe%2Feventstore-tiny/lists"}