Back to Arky

Database

Key-value storage and serverless scripts

The Database module provides key-value storage and serverless script execution.

Put Data

POST /v1/platform/data
SDK: sdk.platform.data.put()

Store data with a key.

const { ok } = await sdk.platform.data.put({
key: 'user:preferences:usr_abc123',
value: {
  theme: 'dark',
  language: 'en',
  notifications: true
}
});

console.log(ok);

Parameters

Name Type Description
key required string Unique key for the data
value required JSON value JSON-serializable data to store
previous_key optional string Optional key to delete in the same write

Scan Data

GET /v1/platform/data
SDK: sdk.platform.data.scan()

Retrieve data by exact key prefix.

// Get single key
const result = await sdk.platform.data.scan({
	key: "user:preferences:usr_abc123",
});

console.log(result.value[0]?.value);

// Scan by prefix
const prefixResult = await sdk.platform.data.scan({
	key: "user:preferences:",
	limit: 100,
});

prefixResult.value.forEach((item) => {
	console.log(item.key, item.value);
});

Parameters

Name Type Description
key required string Exact key or key prefix to scan
limit optional number Max items to return

Delete Data

DELETE /v1/platform/data
SDK: sdk.platform.data.delete()

Delete data by key.

const { ok } = await sdk.platform.data.delete({
	key: "user:preferences:usr_abc123",
});

console.log(ok);

Run Script

POST /v1/platform/scripts
SDK: sdk.platform.runScript()

Execute a serverless script.

const { success, message } = await sdk.platform.runScript({
name: 'migrate',
value: JSON.stringify({ dryRun: true })
});

console.log(success, message);

Parameters

Name Type Description
name required string Script name
value optional string Script input
username optional string Write-only script credential when required
password optional string Write-only script credential when required

Use Cases

Namespaced Preferences

await sdk.platform.data.put({
	key: `user:preferences:${userId}`,
	value: {
		theme: "dark",
		notifications: true,
	},
});

const preferences = await sdk.platform.data.scan({
	key: `user:preferences:${userId}`,
});

console.log(preferences.value[0]?.value);

Feature Flags (Simple)

// Store feature config
await sdk.platform.data.put({
	key: "config:features",
	value: {
		newCheckout: true,
		darkMode: false,
		betaFeatures: ["feature-a", "feature-b"],
	},
});

// Check feature
async function isFeatureEnabled(feature: string): Promise<boolean> {
	const result = await sdk.platform.data.scan({
		key: "config:features",
	});

	const value = result.value[0]?.value;
	if (!value || typeof value !== "object" || Array.isArray(value)) return false;
	return (value as Record<string, unknown>)[feature] === true;
}

Key Naming Conventions

Use colons to create hierarchical keys:

user:preferences:{userId}
config:{name}
Tip

Use meaningful prefixes to organize your data and enable efficient prefix-based scans.

Warning

The key-value store is designed for simple data storage. For complex queries or relations, use your own database.