
In-memory
SurrealDB can run in-memory, enabling high performance with the same transactional and multi-model features. This is suitable for caching data or testing locally.
Embedded
Run SurrealDB embedded within your application, executing directly inside Python and JavaScript runtimes, with WebAssembly, on mobile devices, at the edge, or within the browser.
Single node
SurrealDB supports single-node deployments with persistent on-disk storage, making it suitable for development, edge, or smaller production workloads.
Distributed
Run on a distributed storage architecture. Separation of compute and storage enables horizontally scaling compute nodes for read and write concurrency, and storage nodes for multi-TB datasets and high availability.
Horizontal scalability
Scale horizontally by adding more nodes to handle increased load and data volume.
Storage-compute separation
Independently scale storage and compute for optimal performance and cost.
Automatic data sharding
Automatic sharding distributes data across nodes for balanced load.
Partition-free tables
Scale tables without manual partitioning with automatic data distribution.
Read replicas
Separate read-only nodes for scaling read-heavy workloads with low-latency queries.
Multi-region replication
Replicate data across geographic regions for low-latency global reads and disaster recovery.
ACID compliant
Ensures data integrity with atomicity, consistency, isolation, and durability guarantees.
Multi-tenancy data separation
Split data into namespaces and databases. There is no limit to the number of databases under each namespace, with the ability to switch between databases inside queries and transactions.
Schemafull or schemaless
Store unstructured nested data with any columns, or limit data stored to only specific columns or fields. Get started quickly without having to define every column, and move to schemafull when your data model is defined.
Multi-table, multi-row transactions
As a fully ACID compliant database, SurrealDB allows you to run transactions across multiple rows, and across multiple different tables. There is no limit to the length of time a transaction can run.
Versioned temporal tables
Versioned temporal tables enable the option to 'go back in time' when querying your data. See how data looked before changes were made, or restore to a particular point-in-time.
Table fields
When a table is defined as schemafull, only data allowed by defined fields will be stored. Table fields can be nested, and can be limited to a certain data type. VALUE clauses can be used to ensure a default value is always specified if no data is entered.
Table events
Table events can be triggered after any change or modification to the data in a record. Each trigger is able to see the $before and $after value of the record, enabling advanced custom logic with each trigger.
Asynchronous events
Events can be processed asynchronously in the background, enabling non-blocking workflows, webhook triggers, and integration with external services without impacting query performance.
Relational data model
Traditional relational capabilities with tables, relationships, and SQL queries.
Document data model
Flexible document storage with nested objects, arrays, and JSON-native structures.
Graph data model
Native graph functionality with nodes, edges, and complex relationship traversal.
Time-series data modelling
Temporal data modelling with automatic table sharding and indexing.
Table constraints
Each defined table field supports an ASSERT clause which acts as a constraint on the data. This clause enables advanced SurrealQL statements which can ensure that the $value entered is within certain parameters. Each clause is also able to see the $before and $after value of the record, enabling advanced custom logic with each trigger.
Live queries and record changes
Live SQL queries allow for advanced filtering of the changes to specific documents, documents which match a particular filter, or all documents in a specific table. Live SQL queries can send the fully-updated document, or only the document changesets.
One-directional links
Create direct references between records with automatic referential integrity.
Bi-directional relationships
Establish two-way relationships between records with bi-directional graph traversal.
Recursive graph traversal
Traverse relationships to any depth with infinite recursive graph queries.
Global parameters
Global parameters can be used to store values across the database, which are then accessible to all queries.
Unique indexes
Enforce uniqueness constraints on one or more fields. Unique indexes prevent duplicate values while improving query performance.
Compound indexes
Define indexes across multiple fields for efficient multi-column queries. Compound indexes support all nested fields including arrays and objects.
Flattened array indexes
Index individual values within array fields using compound flattened indexes, enabling efficient queries on nested array content.
Non-blocking indexing
Indexes are built and maintained without blocking reads or writes. Tables remain fully queryable and writable while indexes are created, rebuilt, or updated.
Concurrent background processing
Index construction runs concurrently in the background across distributed cluster nodes, enabling efficient processing of massive datasets with minimal impact on query performance.
Full-text indexing and filtering
Define full-text indexes with configurable analysers, tokenizers, and filters. Supports BM25 ranking, relevance scoring, and highlighting with offset extraction.
Vector embedding indexing
HNSW vector indexing for approximate nearest neighbour search, with support for euclidean, cosine, and manhattan distance metrics. Configurable storage types including F64, F32, I64, I32, and I16 let you balance precision against memory usage.
Hybrid search
Combine full-text search and vector similarity in a single query using reciprocal rank fusion. Hybrid search merges lexical and semantic results for more accurate retrieval across structured and unstructured data.
Aggregate indexed views
Aggregate views let you pre-compute analytics queries as data is written to SurrealDB. Similarly to an index, a table view lets you select, aggregate, group, and order data, with support for moving averages, time-based windowing, and attribute-based counting.
Count indexes
Maintain a pre-computed record count for instant count() queries using GROUP ALL, avoiding full table scans on large datasets.
Partial indexes
Index only a subset of records matching a condition, reducing index size and improving write performance for filtered queries.
Expression indexes
Index the result of an expression or function rather than a raw field value, enabling efficient lookups on computed values.
Graph indexes
Dedicated indexing for graph traversals, optimising performance for multi-hop queries across relationships and edges.
Geospatial indexes
Spatial indexing for geometry and geography data types, enabling efficient containment, intersection, and proximity queries.
Record link indexes
Indexes on record link fields for faster graph-adjacent lookups and relationship traversals without requiring full graph indexes.
Basic types
Support for booleans, strings, bytes, integers, floats, decimal numbers, and empty values is built in by default.
Arrays
SurrealDB has native support for arrays, with no limit to the depth of nesting within arrays. Arrays can contain any other data value.
Objects
Embedded object types are an integral feature of SurrealDB, with no limit to the depth of nesting for objects.
Datetimes
Dates and datetimes in ISO-8601 format are supported. All dates are converted and stored in the UTC timezone.
Durations
Any duration from nanoseconds to weeks can be stored and used for calculations. Durations can be added to datetimes, and to other durations.
UUIDs
Native support for UUID values with built-in generation functions for v4 and v7 formats.
Geometry types
SurrealDB makes working with GeoJSON easy, with support for Point, Line, Polygon, MultiPoint, MultiLine, MultiPolygon, and Collection values. SurrealQL automatically detects GeoJSON objects, converting them into a single data type.
Strict typing
With a strict typing system, SurrealQL ensures that document structures are easier to understand, and any data conforms to the defined record schema. Advanced types for arrays and record links ensure that related data works in the same way as basic types. Values can be explicitly cast between types using operators including bool, int, float, string, number, decimal, datetime, and duration.
SELECT, CREATE, UPDATE, DELETE statements
Manipulation and querying of data in SurrealQL is done using the SELECT, CREATE, UPDATE, and DELETE methods. These enable selecting or modifying individual records, or whole tables. Each statement supports multiple different tables or record types at once.
RELATE statements
The RELATE statement adds graph edges between records in SurrealDB. It follows the convention of vertex -> edge -> vertex or noun -> verb -> noun, enabling the addition of metadata to the edge record.
INSERT statements
The INSERT statement resembles the traditional SQL statement, enabling users to get started quickly. It supports the creation of records using a VALUES clause, or by specifying the record data as an object.
FOR statements
FOR statements enable simplified iteration over data, or for advanced logic when dealing with nested arrays or recursive functions, within code blocks or custom functions.
THROW statements
Return custom errors which allow for complex programming and business logic right within the database and authentication engine.
Parameters
Parameters can be used to store values or result sets, and can be used as stored parameters in client code.
Subqueries
Recursive subqueries are useful for advanced querying or modification of values, whilst simplifying the overall query.
Nested field queries
In SurrealQL any nested array or object value can be accessed and manipulated using traditional dot notation, or array notation.
Set operators
Set operators enable working with sets of distinct values.
Geo operators
Geospatial operators enable geospatial containment and intersection operators on geospatial types.
Maths operators
Maths operators can be used to perform complex mathematical calculations.
Maths constants
Built-in constants can be usedfor advanced mathematical expressions and calculations, including math::E, math::PI, math::TAU, and more.
Expressions
SurrealQL supports fetching data using dot notation, array notation, and graph semantics. SurrealQL enables records to link to other records and traverses all embedded links or graph connections as desired. When traversing and fetching remote records SurrealQL enables advanced filtering using traditional WHERE clauses.
Complex record IDs
SurrealDB supports the ability to define complex record IDs using arrays. These values sort correctly, and can be used to store values or recordings in a timeseries context.
Record ID ranges
SurrealDB supports the ability to query a range of records using the record ID. The record ID ranges retrieve records using the natural sorting order of the record IDs. These range queries can be used to query a range of records in a timeseries context.
Custom machine learning models
Use SurrealML to train custom machine learning models in Python, using PyTorch, Tensorflow, or Sklearn. The models are stored in a custom .surml data-format, enabling the model to be run consistently and safely in Python, Rust, or SurrealDB.
Import models into SurrealDB
SurrealDB allows developers the choice of storing SurrealML models on local storage, or remote storage including Amazon S3, Google Cloud Storage, or Azure Storage.
PyTorch
PyTorch models are supported natively with SurrealML when running in Python, or within SurrealDB.
Tensorflow
Tensorflow models are supported natively with SurrealML when running in Python, or within SurrealDB.
Sklearn
Sklearn models are supported natively with SurrealML when running in Python, or within SurrealDB.
Export models from SurrealDB
SurrealDB allows developers to store multiple versions of each SurrealML model, and to export each model from the database as a binary file.
Model inference in Python
Inference on .surml model files in Python allows for consistent and reproducible model computation in development, continuous integration, testing, or production environments.
Model inference in SurrealDB
Model inference within SurrealDB is powered by a Rust-native runtime, backed by ONNX, with support for PyTorch, Tensorflow, and Sklearn models. This secure and performant runtime allows for CPU and GPU model inference right alongside the data within the database.
Buckets
Define storage buckets with DEFINE BUCKET to manage files directly from SurrealQL. Buckets support in-memory, file-backed, and global backends with fine-grained permission controls.
In-memory storage
Ephemeral storage for caching, temporary files, and session data. In-memory buckets are fast and ideal for transient workloads.
File-system storage
Persistent on-disk storage with allowlisted directory paths. Suitable for production workloads requiring durable file storage.
Object storage
S3, Google Cloud Storage, and Azure Blob Storage as bucket backends for scalable cloud-native file storage.
Global buckets
A single shared storage backend across all namespaces and databases, with automatic namespace and database path prefixing.
Bucket permissions
Control who can put, get, delete, copy, rename, and list files using PERMISSIONS clauses with $file, $target, and $action variables.
File operations
A full set of file methods including put, get, head, delete, copy, rename, exists, and list, accessible directly from SurrealQL.
Model Context Protocol
Connect AI tools like Cursor, VS Code, and Claude directly to SurrealDB using the Model Context Protocol for context-aware interactions and seamless data access.
Unified agent memory
Store structured data, documents, vectors, and graphs in one place, giving agents a single persistent source of context, state, and history.
RAG and Graph RAG
Combine vector similarity, graph traversal, and document retrieval in a single SurrealQL query for retrieval-augmented generation. Blend connections, facts, and semantics in a single round trip.
Real-time agent reactivity
Live queries and event triggers let agents react instantly to changing data, enabling more adaptive behaviour.
AI model integration
Call LLMs, embedding models, or GPU inference directly from within the database via Surrealism WebAssembly plugins.
Agent governance
Fine-grained permissions, access control, and audit trails for safe, compliant AI workflows.
Prompt-response session storage
Store conversation history and context for AI apps with automatic session management.
LangChain integration
Seamlessly integrate with LangChain for building AI apps with vector search and LLMs.
JSON-native unstructured data
Store and query unstructured data in its native JSON format without schema constraints.
Hybrid document-graph modelling
Combine document and graph models in a single database for flexible data representation.
Array functions
Functions for manipulation, joining, and diffing of arrays are built into SurrealDB as standard.
Http functions
HTTP functions can be used for remote trigger events and webhook functionality.
Math functions
Math functions can be used for complex statistical analysis of numbers and sets of numbers.
Parsing functions
Parsing functions can be used for parsing and extracting individual parts of URLs, emails, and domains.
Rand functions
Random generation functions can be used to generate random values, numbers, strings, UUIDs, and datetimes.
Search functions
Functions related to the full-text search capabilities, such as calculating relevance scores or highlighting content.
String functions
Functions for string manipulation enable modification and processing of strings.
Type functions
Type checking functions can be used to check the type of a value, which is useful in custom function definitions.
Vector functions
A collection of essential vector operations that provide foundational functionality for numerical computation, machine learning, and data analysis.
Geo functions
Geospatial functions can be used for converting between geohash values, and for calculating the distance, bearing, and area of GeoJSON data types.
Time functions
Time functions can be used to manipulate dates and times - with support for rounding, and extracting specific parts of datetimes.
Count functions
SurrealDB supports general count functionality for counting total values, or for aggregate grouping. It's also possible to count only those expressions which result in a truthy value.
Custom functions
Custom functions allow for complicated or repeated user-defined code, to be run seamlessly within any query across the database. Custom functions support typed arguments, and multiple nested queries with custom logic.
JavaScript functions
JavaScript functions can be used for more complex functions and triggers. Each JavaScript function iteration runs with its own context isolation - with the current record data passed in as the execution context or this value.
WebAssembly extensions
Write custom extensions in Rust, compile them to WebAssembly, and load them into SurrealDB at runtime. Surrealism plugins run in a sandboxed environment with near-native performance, shared ACID transactions, and fine-grained permission controls.
Role-based access control
Granular role-based permissions with inheritance and custom role definitions.
Field-level access control
Control access to individual fields for sensitive data protection.
Field-level encryption
Selectively encrypt sensitive fields with client-side key management.
Encryption at rest
Data encryption at rest with industry-standard algorithms and key management.
TLS in transit
End-to-end encryption for all data in transit with configurable TLS.
Multi-tenant isolation
Complete tenant isolation with separate compute and storage resources.
Root access
Root access enables full data access for all data in SurrealDB. Root access can be limited to specific IPv4 or IPv6 IP addresses.
Namespace access
Enable full data access for all databases under a specific namespace, controlled using custom defined usernames and passwords.
Database access
Enable full data access to a specific database under a specific namespace, controlled using custom defined usernames and passwords.
Record access
Record access is the powerful functionality which enables SurrealDB to operate as a web database. Flexible authentication and access rules enable fine-grained access to tables and fields with the highest security, whilst ensuring that performance is affected as little as possible.
Third-party authentication
If authentication with a third-party OAuth provider is desired, specific tokens can be used for authentication with SurrealDB. ES256, ES384, ES512, HS256, HS384, HS512, PS256, PS384, PS512, RS256, RS384, and RS512 algorithms are supported.
Table permissions
Fine-grained table permissions can be used to prevent users from accessing data which they shouldn't see. Independent permissions for selecting, creating, updating, and deleting data are supported, ensuring fine-grained control over all data in SurrealDB.
Database audit logs
Comprehensive audit trails of all database operations for compliance and monitoring.
Cloud audit logs
Detailed access logs and audit trails for cloud deployments with SIEM integration.
REST API
All tables and data can be queried using a traditional Key-Value REST API. In addition, SurrealQL statements can be submitted to the REST API for custom query logic.
HTTP protocol
SurrealQL querying and data modification is supported over HTTP using both text and binary protocols.
WebSocket protocol
SurrealQL querying and data modification is supported over WebSockets using both text and binary protocols, enabling bi-directional communication and real-time updates.
Custom HTTP API endpoints
Define custom REST API endpoints directly in SurrealQL using DEFINE API. Endpoints support GET, POST, and other HTTP methods, dynamic path parameters, custom middleware, and permission controls.
GraphQL schema
Support for automatic generation of GraphQL schema, from database tables, fields, types, and custom functions.
GraphQL querying
Support for querying all data using GraphQL, with embedded and remote record fetching.
GraphQL mutations
Support for modifying and updating any data using GraphQL, depending on permissions.
Postgres wire protocol
Postgres wire protocol compatibility for easy migration from existing applications and integration with existing tools that work with Postgres.
ANSI SQL querying
Query SurrealDB using standard ANSI SQL syntax for integration with existing tools and workflows, with JOINs and window functions.
Command-line tool
The command-line tool can be used to export data as SurrealQL, import data as SurrealQL, and start a SurrealDB instance or cluster.
SQL export
Export all data as SurrealQL from a SurrealDB database for backup purposes. This includes authentication scopes, tables, fields, events, indexes, and data.
SQL import
Import SurrealQL into a SurrealDB database in order to restore from a backup. This includes authentication scopes, tables, fields, events, indexes, and data.
Incremental backups
Export all data from SurrealDB as raw binary data. This will also support incremental binary backups for efficient backing up of SurrealDB clusters.
IDE language support
Official SurrealQL language highlighting packages for Visual Studio Code using TextMate grammar definitions.
Language Server Protocol
Support for the Language Server Protocol will help with code and query completion, and error highlighting for SurrealQL.
Web app
An easy-to-use interface with support for table-based views, SurrealQL querying, embedded object editing, and graph visualisation.
macOS
The interface is available as a desktop application for macOS.
Windows
The interface is available as a desktop application for Windows.
AI pair-programming tool
AI-powered development assistant for writing queries, debugging, and optimization.
Schema designer
Visual schema designer for creating and editing tables, fields, indexes, and relationships.
Graph visualiser
Interactive graph visualisation for exploring record relationships and traversal paths.
TypeScript ORM
ORM capabilities for type-safe database operations in your preferred language.
Python ORM library
ORM capabilities for type-safe database operations in your preferred language.
Golang ORM library
Integration with popular ORM libraries like Prisma, SQLAlchemy, and Entity Framework.
3rd party ORM libraries
Integration with popular ORM libraries like Prisma, SQLAlchemy, and Entity Framework.
BI tooling integrations
Integrate with BI tools like Tableau, Power BI, and Looker for analytics.
SurrealDB Cloud
Fully managed cloud service with automatic scaling, backups, and high reliability.
Self hosted deployment
Deploy SurrealDB on your own infrastructure with full control over configuration.
Edge deployment
Lightweight embedded deployment for edge computing and IoT applications.
Multi-node deployment
Distributed deployment across multiple nodes for high availability and horizontal scaling.
Multi-region support
Deploy across multiple geographic regions for global performance and disaster recovery.
Compute-compute separation
Separate read and write compute resources for optimized performance and cost management.
Docker container
SurrealDB is packaged as a Docker container for easy setup and configuration, and can be used to start a SurrealDB instance or cluster, or to import and export data.
Kubernetes operator
Native Kubernetes integration with a custom operator for automated deployment.
Helm charts
Pre-configured Helm charts for easy deployment and management in Kubernetes.
Terraform + IaC support
Infrastructure as Code support with Terraform for automated infrastructure management.
Management dashboard
Web-based dashboard for managing cloud deployments, monitoring, and configuration.
Team collaboration
Multi-user access with role-based permissions for team collaboration.
Instance logs and traces
Detailed logging and distributed tracing for monitoring performance and debugging.
Instance metrics
Comprehensive metrics collection including performance, resource usage, and statistics.
Query logs and traces
Individual query logging with execution plans and performance analysis.
Query metrics
Real-time query performance metrics with histograms and percentiles.
File-based log output
Persistent logging to files with automatic rotation and compression.
Automatic log rotation
Automatic log file rotation and archival to manage disk space and maintain history.
JSON log formatting
Structured JSON logging for easy parsing and integration with log aggregation.
OpenTelemetry source
Native OpenTelemetry integration for standardized observability and monitoring.
OpenTelemetry receiver
Receive and ingest OpenTelemetry data from external services directly into SurrealDB.
Instance health checks
Built-in health check endpoints for load balancers and monitoring systems.
SOC 2 Certified
SOC 2 Type II certification for security, availability, and confidentiality.
ISO 27001 Certified
ISO 27001 information security management certification for enterprise security.
HIPAA certified
HIPAA compliance for healthcare applications with privacy and security safeguards.
Cyber Essentials +
Cyber Essentials certification for basic cybersecurity controls and best practices.
GDPR Compliant
Full GDPR compliance with data protection, privacy controls, and user rights.
Access audit logging
Comprehensive audit logging of all access attempts and data operations for compliance.
Data encryption in transit
Industry-standard encryption for all data transmitted between clients and the database.
Data encryption at rest
Encryption of all stored data using strong cryptographic algorithms and key management.
Managed backups
Automated daily managed backups with one-click restore for all data.
SAML / SSO support
SAML-based single sign-on integration for enterprise authentication.
Enterprise SLAs
Enterprise-grade service level agreements with guaranteed uptime and support.
Custom SLAs
Customizable service level agreements tailored to specific business requirements.
Python
An SDK for sync or async Python runtimes, with binary communication over WebSocket or HTTP, and support for SurrealDB embedded in-memory and on-disk.
JavaScript
A native SDK for JavaScript with bi-directional, binary communication over WebSockets or HTTP, and support for SurrealDB embedded in-memory and on-disk.
TypeScript
Full support for TypeScript definitions from within the JavaScript SDK, for working with strongly-typed data with embedded and remote databases.
Rust
A native async-friendly SDK for Rust with bi-directional, binary communication over WebSocket or HTTP, and support for SurrealDB embedded in-memory and on-disk.
Golang
An SDK for Golang with binary communication over WebSocket or HTTP, and support for SurrealDB embedded in-memory and on-disk.
Java
An SDK for Java with binary communication over WebSocket or HTTP, and support for SurrealDB embedded in-memory and on-disk.
.NET
A native SDK for .NET with bi-directional communication over WebSockets or HTTP.
PHP
A native SDK for PHP with bi-directional, binary communication over WebSockets or HTTP.
C
An SDK for C with binary communication over WebSocket or HTTP, and support for SurrealDB embedded in-memory and on-disk.
Dart
An SDK for Dart with binary communication over WebSocket or HTTP, and support for SurrealDB embedded in-memory and on-disk.
Swift
A native SDK for Swift with bi-directional, binary communication over WebSockets or HTTP.
Ruby
A native SDK for Ruby with bi-directional, binary communication over WebSockets or HTTP.
JavaScript
A native SDK for JavaScript with bi-directional, binary communication over WebSockets or HTTP, and support for SurrealDB embedded in-memory and on-disk.
TypeScript
Full support for TypeScript definitions from within the JavaScript SDK, for working with strongly-typed data with embedded and remote databases.
WebAssembly
A WebAssembly plugin for use with the JavaScript SDK in the browser, enabling support for SurrealDB embedded in-memory or persisted in IndexedDB.
React.js
Support for React.js using the native JavaScript SDK, within TanStack Query, with support for data caching and syncing, and authentication.
Next.js
Support for Next.js using the native JavaScript SDK, within TanStack Query, with support for data caching and syncing, and authentication.
Vue.js
Support for Vue.js using the native JavaScript SDK, within TanStack Query, with support for data caching and syncing, and authentication.
Angular
Support for Angular using the native JavaScript SDK, within TanStack Query, with support for data caching and syncing, and authentication.
Solid.js
Support for Solid.js using the native JavaScript SDK, within TanStack Query, with support for data caching and syncing, and authentication.
Svelte
Support for Svelte using the native JavaScript SDK, within TanStack Query, with support for data caching and syncing, and authentication.
Flutter
An SDK for Flutter with bi-directional communication over WebSockets.