# DianaDB > DianaDB is the first fully featured DBMS written in Node.js — a column-oriented NoSQL database in TypeScript. It stores documents in a columnar format where every field acts as an index. It supports schema-enforced collections, spatial and time-based queries, cross-database lookups, materialized views that update on the fly, ACID transactions with document-level locking, change subscriptions, migrations, TLS/mTLS, and S3-compatible backup storage. DianaDB is authored and maintained by Data Bikers Limited (Hong Kong). It is conceptually close to MongoDB — the query language is similar to MQL — but architecturally distinct: columnar storage, mandatory document schemas, and a TypeScript-native ODM. Current release: Server v2.5.3 / ODM v2.5.3. Server >= 2.0.0 requires ODM >= 2.0.0. ## Server - [Install and Run DianaDB Server](https://diana-db.com/server/linux): Debian and Alpine install, the `diana-db` CLI (start/stop, user, access and backup management), and the full config-file / environment-variable reference including TLS and S3 storage keys - [DianaDB & Docker](https://diana-db.com/server/docker): Debian and Alpine Dockerfiles, entrypoint scripts, `docker run`, and Docker Compose - [Security](https://diana-db.com/security): TLS/mTLS, AES-256-GCM request encryption with a password-derived key (the password is never transmitted), per-user per-database access levels, and private S3 storage ## Desktop Application - [DianaDB Desktop Application](https://diana-db.com/desktop/gui): cross-platform GUI for browsing and managing data, editing schemas and relationships, inspecting materialized views, and testing queries. Linux (AppImage) and Windows builds, currently v1.1.2 ## ODM (Node.js client) - [DianaDB ODM for Node.js](https://diana-db.com/odm/overview): installation, `DianaDb` constructor options (object form and `diana-db://` / `diana-dbs://` connection string), and every client method — connect/disconnect, subscribe, migrations, transactions, database and collection management, schema reading and locking, views, health, version - [Schema and Types](https://diana-db.com/odm/schema): document schema definition, all field options (`type`, `required`, `unique`, `mutable`, `lowercase`, `uppercase`, `default`, `get`, `set`, `items`, `reference`, `triggerRemove`, `ttl`, `precision`) with their mutual exclusions, and all eight field types (STRING, NUMBER, BOOLEAN, POSITION, OBJECT_ID, REFERENCE, TIME, ARRAY) - [Model](https://diana-db.com/odm/model): the `Model` class, its options, and its methods — `init`, `insert`, `find`, `count`, `update`, `remove`, `distinct`, `max`, `min`, `createView`, `removeView`, `getViews`, `findByView`, `countByView`, `lock`, `unlock` - [Find and Count Documents](https://diana-db.com/odm/model/find): find/count arguments, every query operand (comparison, string, TIME parts, spatial, reference sub-queries), transform pipelines (`$project`, `$group`, `$match`, `$lookup`, `$unwind`, `$replaceRoot`, `$sort`, `$skip`, `$limit`), projection operands, and `distinct` / `max` / `min` - [Insert Documents](https://diana-db.com/odm/model/insert): `insert` usage and the returned document shape - [Update Documents](https://diana-db.com/odm/model/update): `update` usage and the string, number, array and TIME update operators, with the `UnitOfTime` and `Weekday` enums - [Remove Documents](https://diana-db.com/odm/model/remove): `remove` usage - [Materialized Views](https://diana-db.com/odm/model/views): `createView`, `removeView`, `getViews`, `findByView`, `countByView` — views recompute automatically when the underlying data changes and support cross-database lookups - [Subscribers](https://diana-db.com/odm/subscribe): subscribing to database or collection changes, and the `DatabaseUpdate` contract - [ACID Transactions](https://diana-db.com/odm/transactions): `startTransaction`, `commitTransaction`, `rollbackTransaction`, document-level locking, auto-rollback - [Migrations](https://diana-db.com/odm/migrations): `addMigration`, `migrateUp`, `migrateDown` ## Cook Book - [Example: A Mini Shop](https://diana-db.com/cookbook/shop-example): end-to-end example over seven collections (`user`, `userLocation`, `item`, `price`, `storeItem`, `order`, `transaction`) with seven materialized views — current price, reserved-aware inventory, three-way balance (actual, pending deposits, pending withdrawals), and `orderToPay` / `orderToShip` built from user and location lookups — plus seeding and an order flow that reserves stock inside an ACID transaction ## Testing - [Comparative Benchmark](https://github.com/databikers/db-benchmark): benchmark suite comparing DianaDB against other databases ## Project - [Changelog](https://diana-db.com/changes-log): release history with paired server and ODM version tags - [Announced Features](https://diana-db.com/announced-features): roadmap — desktop management tool, DiQL improvements, Golang/PHP/C#/Java clients, vectors and similarity search, multi-server replication - [Issue Reporting](https://diana-db.com/issue-reporting): GitHub Issues - [License](https://diana-db.com/license): MIT with a usage restriction — may not be used to create or offer a competing product or service without written consent from Data Bikers Limited - [npm](https://www.npmjs.com/package/@diana-db/odm): the ODM package - [GitHub](https://github.com/databikers/diana-db): source and issues - [Data Bikers Limited](https://databikers.com): the company behind DianaDB