Lightning Fast
Sub-millisecond response times with full-text search in under 3ms
Atomic Server is a powerful open-source graph database and headless CMS built on the Atomic Data specification. Written in Rust and powered by actix-web and sled, it delivers exceptional performance with sub-millisecond response times while maintaining an incredibly lightweight footprint—just 8MB with zero runtime dependencies.
Atomic Server combines the connectivity of linked data (RDF) with the simplicity of JSON and the reliability of type-safety. It’s designed for developers who need a flexible, real-time database that can power everything from simple websites to complex collaborative applications.
Lightning Fast
Sub-millisecond response times with full-text search in under 3ms
Real-Time Sync
WebSocket-based live updates for collaborative applications
AI Integration
MCP support with OpenRouter and Ollama compatibility
Type-Safe Data
Schema validation with custom classes, properties, and datatypes
Atomic Server provides a comprehensive feature set for modern data management:
| Feature | Description |
|---|---|
| Graph Database | Store and query interconnected data with Atomic Data’s linked structure |
| Full-Text Search | Fuzzy search with operators, powered by Tantivy |
| Collaborative Documents | Google Docs-like rich text editing with real-time sync |
| Tables | Airtable-style spreadsheets with strict schema validation |
| Group Chat | Built-in messaging with attachments, search, and replies |
| File Management | Upload, download, and preview file attachments |
| Version History | Event-sourced versioning with Atomic Commits |
| Authorization | Fine-grained read/write permissions with hierarchical structures |
| Feature | Atomic Server | Traditional CMS | Standard Database |
|---|---|---|---|
| Setup | Single binary, no dependencies | Multiple services | Requires drivers |
| Real-time | Built-in WebSockets | Plugin required | Manual implementation |
| Type Safety | Schema enforced | Often loosely typed | Varies by engine |
| Collaboration | Native support | Third-party tools | Not included |
| File Size | ~8MB | Often 100MB+ | Varies |
Before deploying Atomic Server on Klutch.sh, ensure you have:
Set up your Atomic Server deployment:
Create a Dockerfile for your Atomic Server deployment:
FROM joepmeneer/atomic-server:latest
# Set environment variables for productionENV ATOMIC_PORT=80ENV ATOMIC_IP=::ENV ATOMIC_DATA_DIR=/atomic-storageENV ATOMIC_HTTPS=false
# Expose the HTTP portEXPOSE 80
# Create data directoryRUN mkdir -p /atomic-storage
# Start Atomic ServerCMD ["atomic-server"]For more control over your deployment:
FROM joepmeneer/atomic-server:latest
# Production environment variablesENV ATOMIC_PORT=80ENV ATOMIC_IP=::ENV ATOMIC_DATA_DIR=/atomic-storageENV ATOMIC_HTTPS=falseENV RUST_LOG=info
# Create necessary directoriesRUN mkdir -p /atomic-storage
# Health checkHEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \ CMD wget --no-verbose --tries=1 --spider http://localhost:80/ || exit 1
EXPOSE 80
CMD ["atomic-server"]Atomic Server is highly configurable through environment variables:
| Variable | Default | Description |
|---|---|---|
ATOMIC_PORT | 9883 | HTTP port for the server |
ATOMIC_PORT_HTTPS | 9884 | HTTPS port (when enabled) |
ATOMIC_IP | :: | IP address to bind to |
ATOMIC_DOMAIN | localhost | Domain name for the server |
ATOMIC_SERVER_URL | Generated | Full URL of the server (set when using external proxy) |
ATOMIC_DATA_DIR | OS-dependent | Path for data storage |
ATOMIC_HTTPS | false | Enable built-in HTTPS with Let’s Encrypt |
ATOMIC_EMAIL | - | Email for Let’s Encrypt certificates |
ATOMIC_PUBLIC_MODE | false | Skip authentication (use with caution) |
ATOMIC_INITIALIZE | false | Recreate setup invite and rebuild indexes |
RUST_LOG | info | Log level (warn, info, debug, trace) |
Test your Atomic Server setup locally:
services: atomic-server: image: joepmeneer/atomic-server:latest container_name: atomic-server ports: - "9883:9883" volumes: - atomic-storage:/atomic-storage environment: - ATOMIC_PORT=9883 - ATOMIC_DATA_DIR=/atomic-storage - ATOMIC_DOMAIN=localhost - RUST_LOG=info restart: unless-stopped
volumes: atomic-storage:Push your repository to GitHub
git initgit add .git commit -m "Initial Atomic Server configuration"git remote add origin https://github.com/yourusername/atomic-server.gitgit push -u origin mainCreate a new app on Klutch.sh
Configure environment variables
| Variable | Value |
|---|---|
ATOMIC_PORT | 80 |
ATOMIC_DATA_DIR | /atomic-storage |
ATOMIC_SERVER_URL | https://your-app.klutch.sh |
ATOMIC_HTTPS | false |
RUST_LOG | info |
Configure the internal port
Set up persistent storage
| Mount Path | Size | Purpose |
|---|---|---|
/atomic-storage | 10 GB | Database, files, configuration |
Deploy your application
https://your-app.klutch.shComplete initial setup
https://your-app.klutch.sh/setup to create your admin userAfter setup, you can start creating data through the web interface:
Atomic Server includes powerful spreadsheet-like tables:
Create rich-text documents with real-time collaboration:
Integrate Atomic Server with your applications using official SDKs:
import { Store, Agent } from '@tomic/lib';
// Initialize the storeconst store = new Store({ serverUrl: 'https://your-app.klutch.sh',});
// Authenticate with your agentconst agent = Agent.fromSecret('your-private-key');store.setAgent(agent);
// Fetch a resourceconst resource = await store.getResource('https://your-app.klutch.sh/my-resource');console.log(resource.get('https://atomicdata.dev/properties/name'));
// Create a new resourceconst newResource = store.createResource('https://atomicdata.dev/classes/Document');newResource.set('https://atomicdata.dev/properties/name', 'My Document');await newResource.save();import { useResource, useStore, useValue } from '@tomic/react';
function MyComponent() { const store = useStore(); const resource = useResource('https://your-app.klutch.sh/my-resource'); const [name] = useValue(resource, 'https://atomicdata.dev/properties/name');
if (resource.loading) return <div>Loading...</div>; if (resource.error) return <div>Error: {resource.error.message}</div>;
return <h1>{name}</h1>;}<script> import { getResource } from '@tomic/svelte';
const resource = getResource('https://your-app.klutch.sh/my-resource');</script>
{#if $resource.loading} <p>Loading...</p>{:else if $resource.error} <p>Error: {$resource.error.message}</p>{:else} <h1>{$resource.props.name}</h1>{/if}# JavaScript/TypeScriptnpm install @tomic/lib
# Reactnpm install @tomic/react @tomic/lib
# Sveltenpm install @tomic/svelte @tomic/libAtomic Server provides a RESTful API with JSON-AD responses:
# Get a resource as JSON-ADcurl https://your-app.klutch.sh/my-resource \ -H "Accept: application/ad+json"
# Get as other formatscurl https://your-app.klutch.sh/my-resource \ -H "Accept: application/ld+json" # JSON-LDcurl https://your-app.klutch.sh/my-resource \ -H "Accept: text/turtle" # Turtle/N-TriplesConnect to the WebSocket endpoint for live updates:
const ws = new WebSocket('wss://your-app.klutch.sh/ws');
ws.onopen = () => { // Subscribe to a resource ws.send(JSON.stringify({ type: 'subscribe', subject: 'https://your-app.klutch.sh/my-resource' }));};
ws.onmessage = (event) => { const update = JSON.parse(event.data); console.log('Resource updated:', update);};# Search across all resourcescurl "https://your-app.klutch.sh/search?q=your+query"
# Search with filterscurl "https://your-app.klutch.sh/search?q=document&class=https://atomicdata.dev/classes/Document"Export your data as JSON-AD for backup:
# Using atomic-server CLI inside the containerdocker exec atomic-server atomic-server export > backup.jsonRestore from a backup:
# Import with version historydocker exec -i atomic-server atomic-server import < backup.json
# Force import without commitsdocker exec -i atomic-server atomic-server import --force < backup.jsonAgent Keys
Store your Agent Private Key securely—it grants full access to your data
HTTPS
Klutch.sh provides automatic SSL certificates for secure connections
Permissions
Use hierarchical permissions to control read/write access
Regular Backups
Export your data regularly for disaster recovery
Atomic Server uses a hierarchical authorization system:
Monitor your Atomic Server instance:
# Check server statuscurl https://your-app.klutch.sh/
# View versioncurl https://your-app.klutch.sh/app/aboutIf you experience search issues, rebuild indexes:
# Add to your Dockerfile for one-time rebuildENV ATOMIC_REBUILD_INDEX=trueOr run manually:
docker exec atomic-server atomic-server --rebuild-indexesCommon issues and solutions:
| Issue | Cause | Solution |
|---|---|---|
| Setup page not loading | Wrong ATOMIC_SERVER_URL | Ensure URL matches your Klutch.sh domain |
| Authentication failures | Agent key mismatch | Verify your private key and agent subject |
| Search not returning results | Index out of sync | Run --rebuild-indexes |
| WebSocket disconnections | Network timeouts | Check client reconnection logic |
| Data not persisting | Volume not mounted | Verify /atomic-storage mount path |
Check server logs for debugging:
# Set verbose loggingENV RUST_LOG=debugInject custom JavaScript into the frontend:
ENV ATOMIC_SCRIPT="console.log('Custom script loaded');"Enable AI features with MCP support:
# Configure AI backend (requires external service)ENV ATOMIC_AI_PROVIDER=openrouterENV ATOMIC_AI_API_KEY=your-api-key