SurrealThe Surreal class is the primary interface for connecting to a SurrealDB instance, managing connections, executing queries, and handling database sessions. It extends SurrealSession and inherits all session management and query execution capabilities.
By default, a Surreal instance operates with a default session scope, but you can create additional isolated sessions using the session management methods.
Extends: SurrealSession → SurrealQueryable
Source: api/surreal.ts
Constructor Syntaxnew Surreal(options?)
| Parameter | Type | Description |
|---|---|---|
options optional | DriverOptions | Driver-wide configuration options for customizing engines, codecs, and implementations. |
Basic Usageimport { Surreal } from 'surrealdb'; const db = new Surreal();
With Custom Optionsimport { Surreal } from 'surrealdb'; const db = new Surreal({ codecOptions: { useNativeDates: true // Use native Date objects instead of DateTime } });
statusReturns the current connection status.
Type: ConnectionStatus
Values: "disconnected" | "connecting" | "reconnecting" | "connected"
Example:
console.log(db.status); // "connected"
isConnectedReturns whether the connection is currently established. This is equivalent to checking if status === "connected".
Type: boolean
Example:
if (db.isConnected) { console.log('Database is connected'); }
readyA promise that resolves when the connection is established and ready, or rejects if a connection error occurs.
Type: Promise<void>
Example:
await db.ready; console.log('Connection is ready');
The Surreal class inherits all properties from SurrealSession, including:
namespace - Current namespacedatabase - Current databaseaccessToken - Current access tokenparameters - Session parameterssession - Session IDisValid - Session validity status.connect()Connect to a local or remote SurrealDB instance.
WarningCalling
connect()will reset and dispose of any existing sessions created withnewSession().
Method Syntaxdb.connect(url, opts?)
| Parameter | Type | Description |
|---|---|---|
url required | string | URL | The endpoint URL to connect to (e.g., “ws://localhost:8000”, “http://localhost:8000/rpc”). |
opts optional | ConnectOptions | Connection-specific options such as namespace, database, and authentication. |
Promise<true> - Resolves to true when connection is successful
WebSocket Connectionawait db.connect('ws://localhost:8000');
HTTP Connectionawait db.connect('http://localhost:8000/rpc');
With Namespace and Databaseawait db.connect('ws://localhost:8000', { namespace: 'my_namespace', database: 'my_database' });
With Authenticationawait db.connect('ws://localhost:8000', { namespace: 'my_namespace', database: 'my_database', authentication: { username: 'root', password: 'root' } });
With Custom Reconnect Optionsawait db.connect('ws://localhost:8000', { reconnect: { enabled: true, attempts: 10, retryDelay: 1000, retryDelayMax: 10000, retryDelayMultiplier: 2 } });
.close()Disconnect from the active SurrealDB instance.
Method Syntaxdb.close()
Promise<true> - Resolves to true when disconnection is successful
await db.close(); console.log('Connection closed');
.health()Check the health status of the connected SurrealDB instance.
Method Syntaxdb.health()
Promise<void> - Resolves if the instance is healthy, rejects otherwise
try { await db.health(); console.log('Database is healthy'); } catch (error) { console.error('Health check failed:', error); }
.version()Retrieve version information from the connected SurrealDB instance.
Method Syntaxdb.version()
Promise<VersionInfo> - An object containing version information
const info = await db.version(); console.log(info.version); // "surrealdb-2.1.0"
.isFeatureSupported()Check whether a specific feature is available in the current connection.
Method Syntaxdb.isFeatureSupported(feature)
| Parameter | Type | Description |
|---|---|---|
feature required | Feature | A feature from the Features object (e.g. Features.LiveQueries, Features.Api). |
boolean - true if the feature is supported, false otherwise
import { Surreal, Features } from 'surrealdb'; if (db.isFeatureSupported(Features.LiveQueries)) { console.log('Live queries are supported'); }
.sessions()List all active sessions on the current connection.
Method Syntaxdb.sessions()
Promise<Uuid[]> - An array of session IDs
const sessionIds = await db.sessions(); console.log('Active sessions:', sessionIds);
.newSession()Create a new isolated session on the current connection. The new session will have its own namespace, database, variables, and authentication state, but will share the same connection.
Sessions are automatically restored when the connection reconnects. Call reset() on the returned session to destroy it.
Method Syntaxdb.newSession()
Promise<SurrealSession> - A new SurrealSession instance
// Create a new isolated session const session = await db.newSession(); // Use different namespace/database in the new session await session.use({ namespace: 'other_ns', database: 'other_db' }); // Query in the new session context const results = await session.select('users'); // Destroy the session when done await session.reset();
.closeSession()Close the primary session. This is equivalent to calling close() on the connection.
Method Syntaxdb.closeSession()
Promise<void> - Resolves when the session is closed
await db.closeSession();
.export()Export the database contents as a SQL string.
Method Syntaxdb.export(options?)
| Parameter | Type | Description |
|---|---|---|
options optional | SqlExportOptions | Options to customize what gets exported. |
Promise<string> - The exported database as a SQL string
Export Everythingconst sql = await db.export();
Export Only Specific Tablesconst sql = await db.export({ tables: ['users', 'posts'], records: true });
Export Schema Only (No Records)const sql = await db.export({ records: false, tables: true, functions: true });
.import()Import database contents from a SQL string.
Method Syntaxdb.import(input)
| Parameter | Type | Description |
|---|---|---|
input required | string | The SQL string to import into the database. |
Promise<void> - Resolves when the import is complete
const sqlData = ` DEFINE TABLE users SCHEMAFULL; DEFINE FIELD name ON users TYPE string; CREATE users:john SET name = 'John Doe'; `; await db.import(sqlData); console.log('Data imported successfully');
The Surreal class implements the EventPublisher interface and emits various events during the connection lifecycle. Subscribe to events using the subscribe() method.
connectingEmitted when the connection attempt starts.
Payload: None
Example:
const unsubscribe = db.subscribe('connecting', () => { console.log('Connecting to database...'); });
connectedEmitted when the connection is successfully established.
Payload: [version: string] - The SurrealDB version string
Example:
db.subscribe('connected', (version) => { console.log('Connected to SurrealDB version:', version); });
reconnectingEmitted when the connection is attempting to reconnect after being disconnected.
Payload: None
Example:
db.subscribe('reconnecting', () => { console.log('Attempting to reconnect...'); });
disconnectedEmitted when the connection is closed.
Payload: None
Example:
db.subscribe('disconnected', () => { console.log('Disconnected from database'); });
errorEmitted when a connection error occurs.
Payload: [error: Error] - The error object
Example:
db.subscribe('error', (error) => { console.error('Connection error:', error.message); });
The Surreal class also inherits and re-emits events from SurrealSession:
auth - Emitted when authentication state changesusing - Emitted when namespace/database changes.subscribe()Subscribe to connection and session events.
Method Syntaxdb.subscribe(event, listener)
| Parameter | Type | Description |
|---|---|---|
event required | keyof SurrealEvents | The event name to subscribe to. |
listener required | Function | Callback function invoked when the event is emitted. |
() => void - An unsubscribe function to remove the event listener
const unsubscribe = db.subscribe('connected', (version) => { console.log('Connected:', version); }); // Later, unsubscribe from the event unsubscribe();
As Surreal extends SurrealSession, it inherits all authentication and query methods:
signup() - Sign up a new usersignin() - Sign in with credentialsauthenticate() - Authenticate with a tokeninvalidate() - Invalidate the sessionuse() - Set namespace and databaseset() - Set a session parameterunset() - Remove a session parameterreset() - Reset the sessionAs Surreal extends SurrealQueryable (via SurrealSession), it also inherits all query execution methods:
query() - Execute raw SurrealQLselect() - Select recordscreate() - Create recordsinsert() - Insert recordsupdate() - Update recordsupsert() - Upsert recordsdelete() - Delete recordsrelate() - Create graph relationshipslive() - Subscribe to live queriesrun() - Execute functionsbeginTransaction() - Start a transactionThis class does not use generic type parameters.
import { Surreal } from 'surrealdb'; // Create and connect const db = new Surreal({ codecOptions: { useNativeDates: true } }); // Subscribe to connection events db.subscribe('connecting', () => console.log('Connecting...')); db.subscribe('connected', (version) => console.log('Connected:', version)); db.subscribe('error', (error) => console.error('Error:', error)); // Connect to database await db.connect('ws://localhost:8000', { namespace: 'my_namespace', database: 'my_database', authentication: { username: 'root', password: 'root' } }); // Check connection status console.log('Connected:', db.isConnected); // true console.log('Status:', db.status); // "connected" // Get version info const version = await db.version(); console.log('Version:', version.version); // Execute queries (inherited from SurrealSession/SurrealQueryable) const users = await db.select('users'); console.log('Users:', users); // Create a new isolated session const session = await db.newSession(); await session.use({ namespace: 'other_ns', database: 'other_db' }); const otherData = await session.select('data'); // Export database const backup = await db.export({ records: true }); console.log('Backup size:', backup.length); // Close connection await db.close();