Tesseract is a powerful in-memory analytics engine for Node.js that provides flexible data processing, querying, and real-time analytics capabilities with optional distributed synchronization via Redis. It features advanced querying, aggregations, SubSessions for relational data, and includes a comprehensive SQL-to-Tessio converter.
- Advanced Analytics Engine: In-memory data processing with complex querying capabilities
- Relational Data Support: SubSessions for handling relationships between datasets
- Real-time Analytics: Event-driven data updates with live query results
- Distributed Architecture: Redis-based cluster synchronization for multi-node deployments
- SQL Converter: Convert SQL queries to Tessio session parameters with subquery support and automatic WHERE + GROUP BY optimization
- High Performance: Optimized for large datasets with efficient memory usage
- Aggregations & GroupBy: Multi-level grouping with various aggregation functions
- Expression Engine: Fully functional support for custom expressions, calculated fields, and complex parentheses operations
- Real-time Updates: Automatic query result updates when data changes
npm install tessioimport { EventHorizon, Tesseract } from 'tessio';
// Create EventHorizon instance (data manager)
const eventHorizon = new EventHorizon();
// Define table structure
const userTableOptions = {
columns: [
{ name: 'id', primaryKey: true },
{ name: 'name', columnType: 'string' },
{ name: 'email', columnType: 'string' },
{ name: 'age', columnType: 'number' },
{ name: 'department', columnType: 'string' },
{ name: 'salary', columnType: 'number' }
]
};
// Create tesseract (table) for users
const userTesseract = eventHorizon.createTesseract('users', userTableOptions);
// Add sample data
userTesseract.add([
{ id: 1, name: 'Alice', email: 'alice@company.com', age: 30, department: 'Engineering', salary: 75000 },
{ id: 2, name: 'Bob', email: 'bob@company.com', age: 25, department: 'Sales', salary: 55000 },
{ id: 3, name: 'Carol', email: 'carol@company.com', age: 35, department: 'Engineering', salary: 85000 }
]);
// Create a session for querying
const session = eventHorizon.createSession({
table: 'users',
columns: [
{ name: 'name' },
{ name: 'department' },
{ name: 'salary' }
],
filter: [
{ field: 'department', comparison: '==', value: 'Engineering' }
],
sort: [
{ field: 'salary', direction: 'desc' }
]
});
// Get results
const results = session.getDataSnapshot();
console.log(results); // Engineering employees sorted by salaryimport { sqlToTessio, SqlToTessioConverter } from 'tessio';
// Convert SQL to Tessio session parameters
const sql = `
SELECT name, department, salary
FROM employees
WHERE department = 'Engineering' AND salary > 50000
ORDER BY salary DESC
LIMIT 10
`;
const result = sqlToTessio(sql);
console.log(result.sessionConfig);
// Create session from SQL
const session = eventHorizon.createSession(result.sessionConfig);
// ✅ NEW: WHERE + GROUP BY combinations now work correctly
const complexSql = `
SELECT department, COUNT(*) as count, AVG(salary) as avg_salary
FROM employees
WHERE salary > 50000 AND active = true
GROUP BY department
HAVING count > 5
`;
const complexResult = sqlToTessio(complexSql);
// Automatically uses nested table structure for proper filter + aggregation
const complexSession = eventHorizon.createSession(complexResult.sessionConfig);The main data management hub that creates and manages Tesseracts (tables) and Sessions (queries).
A data table that holds your dataset with defined columns and types. Supports CRUD operations and real-time updates.
A query configuration that defines what data to retrieve, how to filter it, sort it, and aggregate it. Sessions provide live results that update automatically.
Enable relational data queries by joining multiple Tesseracts, similar to SQL JOINs but with real-time capabilities.
const salesSession = eventHorizon.createSession({
table: 'transactions',
columns: [
{ name: 'region' },
{ name: 'total_sales', aggregator: 'sum', dataIndex: 'amount' },
{ name: 'avg_sale', aggregator: 'avg', dataIndex: 'amount' },
{ name: 'transaction_count', aggregator: 'count' }
],
groupBy: [
{ dataIndex: 'region' }
],
sort: [
{ field: 'total_sales', direction: 'desc' }
]
});const userOrdersSession = eventHorizon.createSession({
table: 'users',
columns: [
{ name: 'name' },
{ name: 'email' },
{
name: 'order_count',
resolve: {
underlyingField: 'id',
session: {
table: 'orders',
columns: [{ name: 'count', aggregator: 'count' }],
filter: [{ field: 'user_id', comparison: '==', value: '${id}' }]
},
valueField: 'count',
displayField: 'count'
}
}
]
});// Complex SQL with subqueries
const complexSQL = `
SELECT
u.name,
u.email,
(SELECT COUNT(*) FROM orders WHERE user_id = u.id) as order_count,
(SELECT AVG(amount) FROM orders WHERE user_id = u.id) as avg_order_value
FROM users u
WHERE u.active = true
AND EXISTS (SELECT 1 FROM orders WHERE user_id = u.id AND status = 'completed')
ORDER BY order_count DESC
LIMIT 50
`;
const converted = sqlToTessio(complexSQL);
const session = eventHorizon.createSession(converted.sessionConfig);Enable Redis-based clustering for multi-node deployments:
import { EventHorizon, ClusterRedis } from 'tessio';
const cluster = new ClusterRedis({
redis: {
host: 'localhost',
port: 6379
},
nodeId: 'node-1'
});
const eventHorizon = new EventHorizon({ cluster });# Convert single SQL query
npx sql-to-tessio "SELECT name FROM users WHERE age > 25"
# Convert from file
npx sql-to-tessio --file queries.sql
# Batch conversion with output
npx sql-to-tessio --batch --input queries/ --output converted/Tesseract is optimized for high-performance analytics:
- Memory Efficient: Smart data structures for large datasets
- Fast Queries: Indexed filtering and sorting
- Real-time Updates: Incremental result updates
- Batch Operations: Efficient bulk data processing
Performance benchmarks show handling of:
- 100,000+ records with sub-millisecond query times
- Complex aggregations across multiple dimensions
- Real-time updates at 90,000+ operations/second
# Run all tests
npm test
# Run SQL converter tests only
npm run test:sql-converter
# Run performance benchmarks
npm run test:perf
# Run with Docker
npm run test:dockerCheck out the /examples directory for comprehensive usage examples:
- Basic CRUD operations
- Advanced aggregations
- SQL query conversions
- Real-time data processing
- Distributed setups
# Install dependencies
npm install
# Build the project
npm run build
# Watch mode for development
npm run build:watch
# Build browser version
npm run build:browser
# Run tests
npm test- Node.js 14+ (TypeScript 4.9+)
- Optional: Redis for distributed features
MIT License - see LICENSE file for details.
Copyright (c) 2019 Rafal Okninski
Made by Rafal Okninski