{"id":13657284,"url":"https://github.com/bogdanovich/siberite","last_synced_at":"2026-01-11T22:09:43.938Z","repository":{"id":57483090,"uuid":"42572204","full_name":"bogdanovich/siberite","owner":"bogdanovich","description":"Siberite is a simple, lightweight, leveldb backed message queue written in Go.","archived":false,"fork":false,"pushed_at":"2024-10-17T21:31:50.000Z","size":2342,"stargazers_count":588,"open_issues_count":4,"forks_count":25,"subscribers_count":17,"default_branch":"master","last_synced_at":"2025-10-05T21:22:05.725Z","etag":null,"topics":["darner","kestrel","message-queue","queue"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bogdanovich.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}},"created_at":"2015-09-16T07:38:09.000Z","updated_at":"2025-05-10T23:18:01.000Z","dependencies_parsed_at":"2024-11-10T10:32:23.906Z","dependency_job_id":"ee6c2f7a-20ef-4488-9c77-85205bdc69e8","html_url":"https://github.com/bogdanovich/siberite","commit_stats":null,"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/bogdanovich/siberite","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bogdanovich%2Fsiberite","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bogdanovich%2Fsiberite/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bogdanovich%2Fsiberite/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bogdanovich%2Fsiberite/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bogdanovich","download_url":"https://codeload.github.com/bogdanovich/siberite/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bogdanovich%2Fsiberite/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28325082,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-11T18:42:50.174Z","status":"ssl_error","status_checked_at":"2026-01-11T18:39:13.842Z","response_time":60,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["darner","kestrel","message-queue","queue"],"created_at":"2024-08-02T05:00:39.952Z","updated_at":"2026-01-11T22:09:43.905Z","avatar_url":"https://github.com/bogdanovich.png","language":"Go","funding_links":[],"categories":["Go (134)","Go"],"sub_categories":[],"readme":"# Siberite\n[![License][License-Image]][License-Url] [![Build][Build-Status-Image]][Build-Status-Url] [![Release][Release-Image]][Release-Url]\n\nSiberite is a simple LevelDB-backed message queue server\u003cbr\u003e\n([twitter/kestrel](https://github.com/twitter/kestrel), [wavii/darner](https://github.com/wavii/darner) rewritten in Go).\n\nSiberite is a simple message queue server.  Unlike in-memory servers like [Redis](http://redis.io/), Siberite is\ndesigned to handle queues much larger than what can fit in RAM. And unlike enterprise-level servers such as\n[RabbitMQ](http://www.rabbitmq.com/), Siberite stores all messages **out of process**,\nusing [goleveldb](https://github.com/syndtr/goleveldb) for persistent storage.\n\nThe result is a durable queue server that uses minimal in-resident memory, regardless of the queue size.\n\nSiberite is based on Robey Pointer's [Kestrel](https://github.com/robey/kestrel), a simple, distributed message queue.\nLike Kestrel, Siberite follows the \"No talking! Shhh!\" approach to distributed queues:\nA single Siberite server maintains a set of queues identified by name. Each queue operates as a strictly-ordered FIFO,\nwhile querying from multiple Siberite servers results in a loosely-ordered distributed queue.\nSiberite also supports Kestrel's two-phase reliable fetch. If a client disconnects before confirming\nthat it has processed a message, the message will be handed off to the next client.\n\nCompared to Kestrel and Darner, Siberite is easier to build, maintain, and distribute.\nIt consumes significantly less memory than Kestrel and offers the ability\nto consume a queue multiple times using durable cursors.\n\n## Features\n\n1. **Durable cursors for multiple reads**\n\n  - Siberite clients can consume a single source queue multiple times using the `get \u003cqueue\u003e.\u003ccursor_name\u003e` syntax.\n  - Normally, with the `get \u003cqueue\u003e` syntax, the returned message is expired and deleted from the queue.\n  - Using the cursor syntax `get \u003cqueue\u003e.\u003ccursor_name\u003e`, a durable cursor is initialized. It advances with every read without deleting messages from the source queue. There is no limit on the number of cursors per queue.\n  - If you resume reading from the queue using the standard syntax, Siberite will continue deleting already-served messages from the queue head. Any existing cursor that points to an expired message will restart reading from the current queue head on the next read.\n  - Durable cursors also support two-phase reliable reads. Failed reads for each cursor are stored in the cursor’s persistent queue and served to other cursor readers.\n\n2. **Fanout queues**\n\n  - Siberite allows inserting a message into multiple queues simultaneously using the following syntax: `set \u003cqueue\u003e+\u003canother_queue\u003e+\u003cthird_queue\u003e ...`\n\n\n## Benchmarks\n\n[Siberite performance benchmarks](docs/benchmarks.md)\n\n\n## Build\n\nMake sure your `GOPATH` is correct\n\n```\ngo get github.com/bogdanovich/siberite\ncd $GOPATH/src/github.com/bogdanovich/siberite\ngo get ./...\ngo build siberite.go\nmkdir ./data\n./siberite -listen localhost:22133 -data ./data\n2015/09/22 06:29:38 listening on 127.0.0.1:22133\n2015/09/22 06:29:38 initializing...\n2015/09/22 06:29:38 data directory:  ./data\n```\n\nor download [darwin-x86_64 or linux-x86_64 builds](https://github.com/bogdanovich/siberite/releases)\n\n## Protocol\n\nSiberite follows the same protocol as [Kestrel](http://github.com/robey/kestrel/blob/master/docs/guide.md#memcache),\nwhich is the memcache TCP text protocol.\n\n[List of compatible clients](docs/clients.md)\n\n## Telnet demo\n\n```\ntelnet localhost 22133\nConnected to localhost.\nEscape character is '^]'.\n\nset work 0 0 10\n1234567890\nSTORED\n\nset work 0 0 2\n12\nSTORED\n\nget work\nVALUE work 0 10\n1234567890\nEND\n\nget work/open\nVALUE work 0 2\n12\nEND\n\nget work/close\nEND\n\nstats\nSTAT uptime 47\nSTAT time 1443308758\nSTAT version siberite-0.4.1\nSTAT curr_connections 1\nSTAT total_connections 1\nSTAT cmd_get 2\nSTAT cmd_set 2\nSTAT queue_work_items 0\nSTAT queue_work_open_transactions 0\nEND\n\n# other commands:\n# get work/peek\n# get work/open\n# get work/close/open\n# get work/abort\n# get work.cursor_name\n# get work.cursor_name/open\n# get work.my_cursor/close/open\n# set work+fanout_queue\n# flush work\n# delete work\n# flush_all\n# quit\n```\n\n\n## Not supported\n\n  - Waiting a given time limit for a new item to arrive /t=\u003cmilliseconds\u003e (allowed by protocol but does nothing)\n\n[License-Url]: http://opensource.org/licenses/Apache-2.0\n[License-Image]: https://img.shields.io/hexpm/l/plug.svg\n[Build-Status-Url]: https://travis-ci.org/bogdanovich/siberite\n[Build-Status-Image]: https://travis-ci.org/bogdanovich/siberite.svg?branch=master\n[Release-Url]: https://github.com/bogdanovich/siberite/releases/latest\n[Release-image]: https://img.shields.io/badge/release-v0.6-blue.svg\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbogdanovich%2Fsiberite","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbogdanovich%2Fsiberite","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbogdanovich%2Fsiberite/lists"}