{"id":22488672,"url":"https://github.com/reductstore/reductstore","last_synced_at":"2026-04-21T12:05:53.674Z","repository":{"id":36997161,"uuid":"441299511","full_name":"reductstore/reductstore","owner":"reductstore","description":"High Performance Storage and Streaming Solution for Data Acquisition Systems","archived":false,"fork":false,"pushed_at":"2026-04-01T16:06:01.000Z","size":4461,"stargazers_count":279,"open_issues_count":21,"forks_count":20,"subscribers_count":4,"default_branch":"main","last_synced_at":"2026-04-01T18:13:42.116Z","etag":null,"topics":["ai","big-data","bigdata","blob-storage","edge-computing","etl","historian","iiot","iot","reductstore","robotics","storage","storage-engine","time-series","timeseries"],"latest_commit_sha":null,"homepage":"https://www.reduct.store","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/reductstore.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":"CITATION.cff","codeowners":".github/CODEOWNERS","security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":"NOTICE","maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2021-12-23T21:27:52.000Z","updated_at":"2026-04-01T15:57:34.000Z","dependencies_parsed_at":"2023-12-22T20:50:26.661Z","dependency_job_id":"0d5f38e6-9adb-4690-b2eb-ccf8678cf372","html_url":"https://github.com/reductstore/reductstore","commit_stats":{"total_commits":300,"total_committers":4,"mean_commits":75.0,"dds":"0.020000000000000018","last_synced_commit":"8b33d052da1aa5e992a8aab18f8df1dba8095f0c"},"previous_names":[],"tags_count":113,"template":false,"template_full_name":null,"purl":"pkg:github/reductstore/reductstore","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/reductstore%2Freductstore","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/reductstore%2Freductstore/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/reductstore%2Freductstore/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/reductstore%2Freductstore/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/reductstore","download_url":"https://codeload.github.com/reductstore/reductstore/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/reductstore%2Freductstore/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31291247,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-01T13:12:26.723Z","status":"ssl_error","status_checked_at":"2026-04-01T13:12:25.102Z","response_time":53,"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":["ai","big-data","bigdata","blob-storage","edge-computing","etl","historian","iiot","iot","reductstore","robotics","storage","storage-engine","time-series","timeseries"],"created_at":"2024-12-06T17:18:20.956Z","updated_at":"2026-04-21T12:05:53.662Z","avatar_url":"https://github.com/reductstore.png","language":"Rust","funding_links":[],"categories":["Rust"],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://www.reduct.store\"\u003e\n    \u003cimg src=\"./docs/images/reductstore-header.jpg\" alt=\"ReductStore banner\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/reductstore/reductstore/releases/latest\"\u003e\u003cimg alt=\"GitHub release (latest SemVer)\" src=\"https://img.shields.io/github/v/release/reductstore/reductstore\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/reductstore/reductstore/actions\"\u003e\u003cimg alt=\"GitHub Workflow Status\" src=\"https://img.shields.io/github/actions/workflow/status/reductstore/reductstore/ci.yml?branch=main\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://hub.docker.com/r/reduct/store\"\u003e\u003cimg alt=\"Docker Pulls\" src=\"https://img.shields.io/docker/pulls/reduct/store\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/reductstore/reductstore/releases/latest\"\u003e\u003cimg alt=\"GitHub all releases\" src=\"https://img.shields.io/github/downloads/reductstore/reductstore/total\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://codecov.io/gh/reductstore/reductstore\"\u003e\u003cimg alt=\"codecov\" src=\"https://codecov.io/gh/reductstore/reductstore/branch/main/graph/badge.svg?token=8FCWEX9VSQ\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://community.reduct.store/signup\"\u003e\u003cimg alt=\"Community\" src=\"https://img.shields.io/discourse/status?server=https%3A%2F%2Fcommunity.reduct.store\" /\u003e\u003c/a\u003e\n\u003c/p\u003e\n\nReductStore is a high-performance, time-series object storage and streaming solution for ELT-based data acquisition (DAQ) systems in robotics and industrial IoT (IIoT). It's designed to handle large volumes of unstructured data - images, sensor readings, logs, files, ROS bags - captured in raw form and stored with a precise time index (timestamp) and optional labels (e.g. device status, AI inference). This enables fast, efficient retrieval based on when the data was collected and how it's categorized, while also allowing control over data reduction strategies by replicating (streaming) only selected data from the edge to the cloud.\n\nFor more information, please visit https://www.reduct.store/.\n\n## Why Does It Exist?\n\nThere are numerous time-series databases available in the market that provide remarkable functionality and scalability. However, all of them concentrate on numeric data and have limited support for unstructured data, which may be represented as strings.\n\nOn the other hand, S3-like object storage solutions could be the best place to keep blob objects, but they don't provide an API to work with data in the time domain.\n\nThere are many kinds of applications where we need to collect unstructured data such as images, high-frequency sensor data, binary packages, or huge text documents and provide access to their history.\nMany companies build a storage solution for these applications based on a combination of TSDB and Blob storage in-house. It might be a working solution; however, it is a challenging development task to keep data integrity in both databases, implement retention policies, and provide data access with good performance.\n\nThe ReductStore project aims to solve the problem of providing a complete solution for applications that require unstructured data to be stored and accessed at specific time intervals.\nIt guarantees that your data will not overflow your hard disk and batches records to reduce the number of critical HTTP requests for networks with high latency.\n\n**All of these features make the database the right choice for edge computing and IoT applications if you want to avoid development costs for your in-house solution.**\n\n## Features\n\n- Storing and accessing unstructured data as time series\n- Labeling data for annotation and filtering\n- JSON-based query language for filtering data\n- Data replication\n- Real-time FIFO bucket quota based on size to avoid disk space shortage\n- Readonly replicas for horizontal scaling of read operations\n- Primary\\Secondary mode for high availability\n\n## Get Started\n\nThe quickest way to get up and running is with our Docker image:\n\n```\ndocker run -p 8383:8383 -v reduct-data:/data reduct/store:latest\n```\n\nIf you prefer a bind mount instead of a Docker volume:\n\n```bash\nmkdir -p ./data\nsudo chown -R 10001:10001 ./data\ndocker run -p 8383:8383 -v ${PWD}/data:/data reduct/store:latest\n```\n\nAlternatively, you can opt for Cargo:\n\n```\ncurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh  # Install the latest Rust\napt install protobuf-compiler\ncargo install reductstore\nRS_DATA_PATH=./data reductstore\n```\n\nFor a more in-depth guide, visit the **[Getting Started](https://reduct.store/docs/)** and **[Download](https://www.reduct.store/download)** sections.\n\nAfter initializing the instance, dive in with one of our **[Client SDKs](#client-sdks)** to write or retrieve data. To illustrate, here's a Python sample:\n\n```python\nfrom reduct import Client, BucketSettings, QuotaType\n\nasync def main():\n    # 1. Create a ReductStore client\n    async with Client(\"http://localhost:8383\", api_token=\"my-token\") as client:\n        # 2. Get or create a bucket with 1Gb quota\n        bucket = await client.create_bucket(\n            \"my-bucket\",\n            BucketSettings(quota_type=QuotaType.FIFO, quota_size=1_000_000_000),\n            exist_ok=True,\n        )\n\n        # 3. Write some data with timestamps and labels to the 'entry-1' entry\n        await bucket.write(\"/telemetry/sensor-1\", b\"\u003cBlob data\u003e\", timestamp=\"2024-01-01T10:00:00Z\",\n                           labels={\"score\": 10})\n        await bucket.write(\"/telemetry/sensor-2\", b\"\u003cBlob data\u003e\", timestamp=\"2024-01-01T10:00:01Z\",\n                           labels={\"score\": 20})\n\n        # 4. Query the data by time range and condition\n        async for record in bucket.query(\"/telemetry/*\",\n                                         start=\"2024-01-01T10:00:00Z\",\n                                         stop=\"2024-01-01T10:00:02Z\",\n                                         when={\"\u0026score\": {\"$gt\": 20}}):\n            print(f\"Entry name: {record.entry}\")\n            print(f\"Record timestamp: {record.timestamp}\")\n            print(f\"Record size: {record.size}\")\n            print(await record.read_all())\n\n\n# 5. Run the main function\nif __name__ == \"__main__\":\n    import asyncio\n    asyncio.run(main())\n```\n\n## Client SDKs\n\nReductStore is built with adaptability in mind. While it comes with a straightforward HTTP API that can be integrated into virtually any environment, we understand that not everyone wants to interact with the API directly.\nTo streamline your development process and make integrations smoother, we've developed a series of client SDKs tailored for different programming languages and environments. These SDKs wrap around the core API, offering a more intuitive and language-native way to interact with ReductStore, thus accelerating your development cycle.\nHere are the client SDKs available:\n\n- [Rust Client SDK](https://github.com/reductstore/reduct-rs)\n- [Python Client SDK](https://github.com/reductstore/reduct-py)\n- [JavaScript Client SDK](https://github.com/reductstore/reduct-js)\n- [C++ Client SDK](https://github.com/reductstore/reduct-cpp)\n- [Go Client SDK](https://github.com/reductstore/reduct-go)\n\n## Tools\n\nReductStore is not just about data storage; it's about simplifying and enhancing your data management experience. Along with its robust core features, ReductStore offers a suite of tools to streamline administration, monitoring, and optimization. Here are the key tools you can leverage:\n\n- [CLI Client](https://github.com/reductstore/reduct-cli) - a command-line interface for direct interactions with ReductStore\n- [Web Console](https://github.com/reductstore/web-console) - a web interface to administrate a ReductStore instance\n- [ReductBridge](https://github.com/reductstore/reduct-bridge) - a data collector to get data from various sources and write it to ReductStore\n\n## **Feedback \u0026 Contribution**\n\nYour input is invaluable to us! 🌟 If you've found a bug, have suggestions for improvements, or want to contribute directly to the codebase, here's how you can help:\n\n- **Questions and Ideas**: Join our [**Discourse community**](https://community.reduct.store) to ask questions, share ideas, and collaborate with fellow ReductStore users.\n- **Bug Reports**: Open an issue on our **[GitHub repository](https://github.com/reductstore/reductstore/issues)**. Please provide as much detail as possible so we can address it effectively.\n\n## **Get Involved**\n\nWe believe in the power of community and collaboration. If you've built something amazing with ReductStore, we'd love to hear about it! Share your projects, experiences, and insights on our [Discourse community](https://community.reduct.store).\n\nIf you find ReductStore beneficial, give us a ⭐ on our GitHub repository.\n\nYour support fuels our passion and drives us to keep improving.\n\nTogether, let's redefine the future of blob data storage! 🚀\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Freductstore%2Freductstore","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Freductstore%2Freductstore","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Freductstore%2Freductstore/lists"}