KurrentDB
EventStoreDB, the event-native database. Designed for Event Sourcing, Event-Driven, and Microservices architectures
Top Related Projects
Seamless multi-primary syncing database with an intuitive HTTP/JSON API, designed for reliability
The MongoDB Database
Redis is an in-memory database that persists on disk. The data model is key-value, but many different kind of values are supported: Strings, Lists, Sets, Sorted Sets, Hashes, Streams, HyperLogLogs, Bitmaps.
CockroachDB — the cloud native, distributed SQL database designed for high availability, effortless scale, and control over data placement.
Free and Open Source, Distributed, RESTful Search Engine
Scalable datastore for metrics, events, and real-time analytics
Quick Overview
KurrentDB is an open-source, distributed, and scalable database system designed for high-performance data storage and retrieval. It aims to provide a robust solution for handling large-scale data operations with a focus on consistency and fault tolerance.
Pros
- Highly scalable architecture suitable for large-scale data operations
- Strong consistency model ensuring data integrity across distributed nodes
- Built-in support for complex queries and data analytics
- Active community development and regular updates
Cons
- Steep learning curve for newcomers to distributed database systems
- Limited documentation for advanced features and configurations
- Resource-intensive for small-scale applications or projects
- Requires careful tuning and configuration for optimal performance
Code Examples
# Connecting to KurrentDB
from kurrentdb import KurrentClient
client = KurrentClient("localhost", 8080)
connection = client.connect()
# Inserting data into KurrentDB
data = {"id": 1, "name": "John Doe", "age": 30}
result = connection.insert("users", data)
print(f"Insert successful: {result}")
# Querying data from KurrentDB
query = {"age": {"$gt": 25}}
results = connection.find("users", query)
for user in results:
print(user)
# Performing a transaction in KurrentDB
with connection.transaction() as txn:
txn.update("users", {"id": 1}, {"$set": {"age": 31}})
txn.delete("users", {"id": 2})
txn.commit()
Getting Started
To get started with KurrentDB, follow these steps:
-
Install KurrentDB using pip:
pip install kurrentdb
-
Start the KurrentDB server:
kurrentdb-server --config /path/to/config.yaml
-
Connect to KurrentDB in your Python application:
from kurrentdb import KurrentClient client = KurrentClient("localhost", 8080) connection = client.connect() # Perform database operations result = connection.insert("collection_name", {"key": "value"})
-
Refer to the official documentation for more advanced usage and configuration options.
Competitor Comparisons
Seamless multi-primary syncing database with an intuitive HTTP/JSON API, designed for reliability
Pros of CouchDB
- Mature and battle-tested database with a large community and extensive documentation
- Built-in support for multi-master replication and offline-first applications
- RESTful HTTP API for easy integration with various programming languages and platforms
Cons of CouchDB
- Steeper learning curve due to its unique document-based model and MapReduce views
- Limited support for complex queries and joins compared to traditional relational databases
- Potential performance issues with large datasets and complex view calculations
Code Comparison
CouchDB (JavaScript view function):
function(doc) {
if (doc.type === 'user') {
emit(doc._id, { name: doc.name, email: doc.email });
}
}
KurrentDB (SQL-like query):
SELECT id, name, email FROM users;
Summary
CouchDB is a mature, document-oriented database with strong replication features, while KurrentDB appears to be a newer project focusing on SQL-like syntax and potentially different use cases. CouchDB's document model and MapReduce views offer flexibility but may require more specialized knowledge, whereas KurrentDB's SQL-like approach might be more familiar to developers with traditional database experience. The choice between the two would depend on specific project requirements, scalability needs, and the development team's expertise.
The MongoDB Database
Pros of MongoDB
- Mature and widely adopted NoSQL database with extensive documentation and community support
- Flexible schema design allowing for easy adaptation to changing data structures
- Powerful query language and indexing capabilities for efficient data retrieval
Cons of MongoDB
- Higher resource consumption, especially for large datasets
- Lack of built-in support for ACID transactions across multiple documents
- Steeper learning curve for developers transitioning from traditional relational databases
Code Comparison
MongoDB query example:
db.collection('users').find({ age: { $gt: 18 } }).sort({ name: 1 }).limit(10)
KurrentDB query example:
SELECT * FROM users WHERE age > 18 ORDER BY name LIMIT 10
Key Differences
- MongoDB uses a document-based data model, while KurrentDB appears to use a more traditional SQL-like syntax
- MongoDB offers more flexibility in data structure, whereas KurrentDB likely provides stronger consistency guarantees
- KurrentDB seems to focus on real-time data processing, which may not be a primary feature of MongoDB
Conclusion
MongoDB is a well-established NoSQL database with a large ecosystem, suitable for applications requiring flexible schemas and horizontal scalability. KurrentDB, being a newer project, may offer advantages in real-time data processing and potentially easier adoption for developers familiar with SQL. The choice between the two would depend on specific project requirements and the development team's expertise.
Redis is an in-memory database that persists on disk. The data model is key-value, but many different kind of values are supported: Strings, Lists, Sets, Sorted Sets, Hashes, Streams, HyperLogLogs, Bitmaps.
Pros of Redis
- Mature and battle-tested in-memory database with extensive documentation
- Large ecosystem with numerous client libraries and tools
- Supports complex data structures like lists, sets, and sorted sets
Cons of Redis
- Limited persistence options compared to KurrentDB
- Lacks built-in support for distributed transactions
- Memory usage can be high for large datasets
Code Comparison
Redis:
SET key value
GET key
INCR counter
LPUSH mylist item
SADD myset element
KurrentDB:
INSERT INTO mytable (key, value) VALUES ('key', 'value');
SELECT value FROM mytable WHERE key = 'key';
UPDATE mytable SET counter = counter + 1 WHERE key = 'counter';
INSERT INTO mylist (item) VALUES ('item');
INSERT INTO myset (element) VALUES ('element');
Redis uses a custom command syntax, while KurrentDB appears to use SQL-like syntax for operations. Redis commands are generally shorter and more concise, but KurrentDB's SQL-like syntax may be more familiar to developers with relational database experience.
Both databases support basic key-value operations, but their approach to more complex data structures differs. Redis has built-in support for various data types, while KurrentDB seems to rely on traditional table structures for similar functionality.
CockroachDB — the cloud native, distributed SQL database designed for high availability, effortless scale, and control over data placement.
Pros of CockroachDB
- Mature, battle-tested distributed SQL database with a large community and extensive documentation
- Offers strong consistency and high availability with automatic sharding and replication
- Supports advanced features like geo-partitioning and multi-region deployments
Cons of CockroachDB
- More complex setup and configuration compared to KurrentDB's simpler approach
- Higher resource requirements and potential overhead for smaller-scale applications
- Steeper learning curve for developers new to distributed systems
Code Comparison
KurrentDB (JavaScript):
const db = new KurrentDB();
await db.connect('mongodb://localhost:27017');
const result = await db.collection('users').find({ age: { $gt: 18 } });
CockroachDB (SQL):
CREATE TABLE users (id UUID PRIMARY KEY DEFAULT gen_random_uuid(), name STRING, age INT);
INSERT INTO users (name, age) VALUES ('Alice', 30), ('Bob', 25);
SELECT * FROM users WHERE age > 18;
KurrentDB focuses on a MongoDB-like API with JavaScript integration, while CockroachDB uses standard SQL syntax. CockroachDB's approach may be more familiar to developers with traditional SQL database experience, but KurrentDB's API could be more intuitive for JavaScript developers working with document-based data models.
Free and Open Source, Distributed, RESTful Search Engine
Pros of Elasticsearch
- Mature and widely adopted full-text search engine with extensive documentation and community support
- Highly scalable and distributed architecture, capable of handling large-scale data and high query loads
- Rich ecosystem of plugins, integrations, and tools for various use cases
Cons of Elasticsearch
- Resource-intensive, requiring significant memory and CPU for optimal performance
- Complex setup and configuration process, especially for advanced features
- Steep learning curve for optimizing queries and managing large clusters
Code Comparison
Elasticsearch query example:
GET /my_index/_search
{
"query": {
"match": {
"title": "search keywords"
}
}
}
KurrentDB query example (hypothetical, as no public code is available):
SELECT * FROM my_table
WHERE MATCH(title) AGAINST('search keywords');
Note: The KurrentDB code example is speculative, as there is no publicly available code or documentation for the project. The comparison is based on limited information and may not accurately represent KurrentDB's actual query syntax or capabilities.
Scalable datastore for metrics, events, and real-time analytics
Pros of InfluxDB
- Mature and widely adopted time-series database with extensive documentation and community support
- Offers built-in data retention policies and continuous queries for efficient data management
- Provides a powerful query language (InfluxQL) optimized for time-series data analysis
Cons of InfluxDB
- Can be resource-intensive for large-scale deployments, requiring significant hardware resources
- Limited support for complex joins and multi-table queries compared to traditional relational databases
- Steep learning curve for users new to time-series databases and InfluxQL
Code Comparison
InfluxDB query example:
SELECT mean("value") FROM "cpu_usage"
WHERE "host" = 'server01' AND time >= now() - 1h
GROUP BY time(5m)
KurrentDB query example:
SELECT AVG(value) FROM cpu_usage
WHERE host = 'server01' AND timestamp >= NOW() - INTERVAL 1 HOUR
GROUP BY TIMESTAMP(5 MINUTE)
Both databases use SQL-like syntax for querying time-series data, but InfluxDB's InfluxQL has some unique features tailored for time-series analysis. KurrentDB appears to use a more standard SQL syntax, which may be more familiar to users with traditional database experience.
InfluxDB is a well-established solution for time-series data, offering robust features and scalability. KurrentDB, being a newer project, may offer a different approach to time-series data management, potentially with its own unique advantages. However, without more detailed information about KurrentDB, a comprehensive comparison is challenging.
Convert
designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual CopilotREADME

- What is Kurrent
- What is KurrentDB
- What is Kurrent Cloud
- Licensing
- Documentation
- Getting started with KurrentDB
- Getting started with Kurrent Cloud
- Client libraries
- Deployment
- Communities
- Contributing
- Building KurrentDB
- More resources
What is Kurrent
Event Store â the company and the product â are rebranding as Kurrent.
- The flagship product will be referred to as âthe Kurrent event-native data platformâ or âthe Kurrent platformâ or simply âKurrent"
- EventStoreDB will be referred to as KurrentDB
- Event Store Cloud will now be called Kurrent Cloud
Read more about the rebrand in the rebrand FAQ.
What is KurrentDB
KurrentDB is a database that's engineered for modern software applications and event-driven architectures. Its event-native design simplifies data modeling and preserves data integrity while the integrated streaming engine solves distributed messaging challenges and ensures data consistency.
Download the latest version. For more product information visit the website.
What is Kurrent Cloud?
Kurrent Cloud is a fully managed cloud offering that's designed to make it easy for developers to build and run highly available and secure applications that incorporate KurrentDB without having to worry about managing the underlying infrastructure. You can provision KurrentDB clusters in AWS, Azure, and GCP, and connect these services securely to your own cloud resources.
For more details visit the website.
Licensing
View KurrentDB's licensing information.
Docs
For guidance on installation, development, deployment, and administration, see the User Documentation.
Getting started with KurrentDB
Follow the getting started guide.
Getting started with Kurrent Cloud
Kurrent can manage KurrentDB for you, so you don't have to run your own clusters. See the online documentation: Getting started with Kurrent Cloud.
Client libraries
This guide shows you how to get started with KurrentDB by setting up an instance or cluster and configuring it. KurrentDB supports the gRPC protocol.
KurrentDB supported clients
- Python: pyeventsourcing/esdbclient
- Node.js (javascript/typescript): kurrent-io/KurrentDB-Client-NodeJS
- Java: (kurrent-io/KurrentDB-Client-Java
- .NET: kurrent-io/EventStore-Client-Dotnet
- Go: kurrent-io/KurrentDB-Client-Go
- Rust: kurrent-io/KurrentDB-Client-Rust
- Read more in the gRPC clients documentation
Community supported clients
- Elixir: NFIBrokerage/spear
- Ruby: yousty/event_store_client
Read more in the documentation.
Legacy clients (support ends with EventStoreDB v23.10 LTS)
Deployment
- Kurrent Cloud - steps to get started in Kurrent Cloud.
- Self-managed - steps to host KurrentDB yourself.
Communities
Join our global community of developers.
Contributing
Development is done on the master
branch.
We attempt to do our best to ensure that the history remains clean and to do so, commits are automatically squashed into a single logical commit when pull requests are merged.
If you want to switch to a particular release, you can check out the release branch for that particular release. For example:
git checkout release/v25.0
Building KurrentDB
KurrentDB is written in a mixture of C# and JavaScript. It can run on Windows, Linux and macOS (using Docker) using the .NET Core runtime.
Prerequisites
Once you've installed the prerequisites for your system, you can launch a Release
build of KurrentDB as follows:
dotnet build -c Release src
The build scripts: build.sh
and build.ps1
are also available for Linux and Windows respectively to simplify the build process.
To start a single node, you can then run:
dotnet ./src/KurrentDB/bin/Release/net8.0/KurrentDB.dll --dev --db ./tmp/data --index ./tmp/index --log ./tmp/log
Running the tests
You can launch the tests as follows:
dotnet test src/KurrentDB.sln
Build KurrentDB Docker image
You can also build a Docker image by running the command:
docker build --tag mykurrentdb . \
--build-arg CONTAINER_RUNTIME={container-runtime}
--build-arg RUNTIME={runtime}
For instance:
docker build --tag mykurrentdb . \
--build-arg CONTAINER_RUNTIME=bookworm-slim \
--build-arg RUNTIME=linux-x64
Note: Because of the Docker issue, if you're building a Docker image on Windows, you may need to set the DOCKER_BUILDKIT=0
environment variable. For instance, running in PowerShell:
$env:DOCKER_BUILDKIT=0; docker build --tag mykurrentdb . `
--build-arg CONTAINER_RUNTIME=bookworm-slim `
--build-arg RUNTIME=linux-x64
Currently, we support the following configurations:
- Bookworm slim:
CONTAINER_RUNTIME=bookworm-slim
RUNTIME=linux-x64
- Jammy:
CONTAINER_RUNTIME=Jammy
RUNTIME=linux-x64
- Alpine:
CONTAINER_RUNTIME=alpine
RUNTIME=linux-musl-x64
You can verify the built image by running:
docker run --rm mykurrentdb --insecure --what-if
More resources
Top Related Projects
Seamless multi-primary syncing database with an intuitive HTTP/JSON API, designed for reliability
The MongoDB Database
Redis is an in-memory database that persists on disk. The data model is key-value, but many different kind of values are supported: Strings, Lists, Sets, Sorted Sets, Hashes, Streams, HyperLogLogs, Bitmaps.
CockroachDB — the cloud native, distributed SQL database designed for high availability, effortless scale, and control over data placement.
Free and Open Source, Distributed, RESTful Search Engine
Scalable datastore for metrics, events, and real-time analytics
Convert
designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual Copilot