# EJDB 2.0 [![Join Telegram](https://img.shields.io/badge/join-ejdb2%20telegram-0088cc.svg)](https://tlg.name/ejdb2) [![license](https://img.shields.io/github/license/Softmotions/ejdb.svg)](https://github.com/Softmotions/ejdb/blob/master/LICENSE) ![maintained](https://img.shields.io/maintenance/yes/2021.svg) EJDB2 is an embeddable JSON database engine published under MIT license. [The Story of the IT-depression, birds and EJDB 2.0](https://medium.com/@adamansky/ejdb2-41670e80897c) * C11 API * Single file database * Online backups support * 500K library size for Android * [iOS](https://github.com/Softmotions/EJDB2Swift) / [Android](https://github.com/Softmotions/ejdb/tree/master/src/bindings/ejdb2_android/test) / [React Native](https://github.com/Softmotions/ejdb/tree/master/src/bindings/ejdb2_react_native) / [Flutter](https://github.com/Softmotions/ejdb/tree/master/src/bindings/ejdb2_flutter) integration * Simple but powerful query language (JQL) as well as support of the following standards: * [rfc6902](https://tools.ietf.org/html/rfc6902) JSON Patch * [rfc7386](https://tools.ietf.org/html/rfc7386) JSON Merge patch * [rfc6901](https://tools.ietf.org/html/rfc6901) JSON Path * [Support of collection joins](#jql-collection-joins) * Powered by [iowow.io](http://iowow.io) - The persistent key/value storage engine * Provides HTTP REST/Websockets network endpoints with help of [facil.io](http://facil.io) * JSON documents are stored in using fast and compact [binn](https://github.com/liteserver/binn) binary format --- * [Native language bindings](#native-language-bindings) * Supported platforms * [OSX](#osx) * [iOS](https://github.com/Softmotions/EJDB2Swift) * [Linux](#linux) * [Android](#android) * [Windows](#windows) * **[JQL query language](#jql)** * [Grammar](#jql-grammar) * [Quick into](#jql-quick-introduction) * [Data modification](#jql-data-modification) * [Projections](#jql-projections) * [Collection joins](#jql-collection-joins) * [Sorting](#jql-sorting) * [Query options](#jql-options) * [Indexes and performance](#jql-indexes-and-performance-tips) * [Network API](#http-restwebsocket-api-endpoint) * [HTTP API](#http-api) * [Websockets API](#websocket-api) * [C API](#c-api) * [License](#license) --- ## EJDB2 platforms matrix | | Linux | macOS | iOS | Android | Windows | | --- | --- | --- | --- | --- | --- | | C library | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark:1 | | NodeJS | :heavy_check_mark: | :heavy_check_mark: | | | :x:3 | | DartVM | :heavy_check_mark: | :heavy_check_mark:2 | | | :x:3 | | Flutter | | | :heavy_check_mark: | :heavy_check_mark: | | | React Native | | | :x:4 | :heavy_check_mark: | | | Swift | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | | | | Java | :heavy_check_mark: | :heavy_check_mark: | | :heavy_check_mark: | :heavy_check_mark:2 |
`[1]` No HTTP/Websocket support [#257](https://github.com/Softmotions/ejdb/issues/257)
`[2]` Binaries are not distributed with dart `pub.` You can build it [manually](https://github.com/Softmotions/ejdb/tree/master/src/bindings/ejdb2_node#how-build-it-manually)
`[3]` Can be build, but needed a linkage with windows node/dart `libs`.
`[4]` Porting in progress [#273](https://github.com/Softmotions/ejdb/issues/273) ## Native language bindings * [NodeJS](https://www.npmjs.com/package/ejdb2_node) * [Dart](https://pub.dartlang.org/packages/ejdb2_dart) * [Java](https://github.com/Softmotions/ejdb/blob/master/src/bindings/ejdb2_jni/README.md) * [Android support](#android) * [Swift | iOS](https://github.com/Softmotions/EJDB2Swift) * [React Native](https://github.com/Softmotions/ejdb/tree/master/src/bindings/ejdb2_react_native) * [Flutter](https://github.com/Softmotions/ejdb/tree/master/src/bindings/ejdb2_flutter) ### Unofficial EJDB2 language bindings * .Net * https://github.com/kmvi/ejdb2-csharp * Haskell * https://github.com/cescobaz/ejdb2haskell * https://hackage.haskell.org/package/ejdb2-binding * [Pharo](https://pharo.org) * https://github.com/pharo-nosql/pharo-ejdb * Lua * https://github.com/chriku/ejdb-lua ## Status * **EJDB 2.0 core engine is well tested and used in various heavily loaded deployments** * Tested on `Linux` and `OSX` platforms. [Limited Windows support](./WINDOWS.md) * Old EJDB 1.x version can be found in separate [ejdb_1.x](https://github.com/Softmotions/ejdb/tree/ejdb_1.x) branch. We are not maintaining ejdb 1.x. ## Use cases * Softmotions trading robots platform * [Gimme - a social toy tokens exchange mobile application.](https://play.google.com/store/apps/details?id=com.softmotions.gimme) EJDB2 is used both on mobile and server sides. Are you using EJDB? [Let me know!](mailto:info@softmotions.com) ## macOS / OSX EJDB2 code ported and tested on `High Sierra` / `Mojave` / `Catalina` See also [EJDB2 Swift binding](https://github.com/Softmotions/EJDB2Swift) for OSX, iOS and Linux ``` brew install ejdb ``` or ``` mkdir build && cd build cmake .. -DCMAKE_BUILD_TYPE=Release make install ``` ## Linux ### Ubuntu/Debian #### PPA repository ```sh sudo add-apt-repository ppa:adamansky/ejdb2 sudo apt-get update sudo apt-get install ejdb2 ``` #### Building debian packages cmake v3.15 or higher required ```sh mkdir build && cd build cmake .. -DCMAKE_BUILD_TYPE=Release -DPACKAGE_DEB=ON make package ``` #### RPM based Linux distributions ```sh mkdir build && cd build cmake .. -DCMAKE_BUILD_TYPE=Release -DPACKAGE_RPM=ON make package ``` ## Windows EJDB2 can be cross-compiled for windows **Note:** HTTP/Websocket network API is disabled and not supported on Windows until port of http://facil.io library (#257) Nodejs/Dart bindings not yet ported to Windows. **[Cross-compilation Guide for Windows](./WINDOWS.md)**