• Stars
    star
    176
  • Rank 209,330 (Top 5 %)
  • Language
    C
  • License
    Apache License 2.0
  • Created over 5 years ago
  • Updated 5 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

C and C++ database for objects and structs

ObjectBox Embedded Database for C and C++

ObjectBox is a superfast C and C++ database for embedded devices (mobile and IoT), desktop and server apps. The out-of-the-box Data Sync keeps data in sync across devices and any kind of backend/cloud reliably for occasionally connected devices. ObjectBox Data Persistence and Data Sync follows an offline-first approach and can be used on-premise as well as with a cloud setup.


Jobs: We're looking for a C++ Developer with a โค๏ธ for performant code


This is the ObjectBox runtime library to run ObjectBox as an embedded database in your C or C++ application.

Here's a C++ example that inserts a Task data object (a plain user defined struct) into the database:

obx::Box<Task> box(store);
box.put({.text = "Buy milk"}); 

See ObjectBox C and C++ docs for API details.

Latest version: 0.21.0 (2024-02-13). See changelog for more details.

Table of Contents:

Feature Highlights

๐Ÿ High performance on restricted devices, like IoT gateways, micro controllers, ECUs etc.
๐Ÿช‚ Resourceful with minimal CPU, power and Memory usage for maximum flexibility and sustainability
๐Ÿ”— Relations: object links / relationships are built-in
๐Ÿ’ป Multiplatform: Linux, Windows, Android, iOS, macOS

๐ŸŒฑ Scalable: handling millions of objects resource-efficiently with ease
๐Ÿ’ Queries: filter data as needed, even across relations
๐Ÿฆฎ Statically typed: compile time checks & optimizations
๐Ÿ“ƒ Automatic schema migrations: no update scripts needed

And much more than just data persistence
๐Ÿ‘ฅ ObjectBox Sync: keeps data in sync between devices and servers
๐Ÿ•’ ObjectBox TS: time series extension for time based data

Some more technical details:

  • Zero-copy reads for highest possible performance; access tens of millions of objects on commodity hardware
  • Lightweight for smart devices; its binary size is only around 1 MB
  • Direct support for FlatBuffers data objects (aka "flatbuffers table")
  • Flex type to represent any FlexBuffers
  • Secondary indexes based on object properties
  • Async API for asynchronous puts, inserts, updates, removes
  • Optimized for time series data (TS edition only)
  • Data synchronization across the network (sync edition only)

Usage and Installation

In most cases you want to use the C and C++ APIs in combination with the ObjectBox Generator tool. This way, you get a convenient C or C++ API which requires minimal code on your side to work with the database.

The APIs come as single header file for C and C++:

Compile your code against it and use the binary library (.so, .dylib, .dll depending on the platform) to link against. Head over to ObjectBox C and C++ installation docs for step-by-step instructions.

C++ API

The C++ API is built on top of the C API exposed by the library (e.g. you still need objectbox.h). You can also use both APIs from your code if necessary. For example, you use the C++ obx::Box class for most database operations, but "break out" into the C API for a special function you need.
Note that to use the obx::Box class, you also need the ObjectBox Generator to generate binding code. Find more details how to use it the Getting started section of the docs.

Examples

Have a look at the following TaskList example apps, depending on your programming language and preference:

Documentation

Current state / Changelog

The C API is a thin wrapper around a robust DB core, which is version 3.x and already used on millions of devices.

Beta notice: the C API will become stable starting from version 1.0. Until then, API improvements may result in breaking changes. For example, functions may still be renamed.

Changelog: If you update from a previous version, please check the changelog. Besides new features, there may be breaking changes requiring modifications to your code.

Supported platforms:

  • Linux 64-bit
  • Linux ARMv6hf (e.g. Raspberry PI Zero)
  • Linux ARMv7hf (e.g. Raspberry PI 3/4)
  • Linux ARMv8/AArch64 (e.g. Raspberry PI 3/4 with a 64 bit OS like Ubuntu)
  • MacOS 64-bit
  • Windows 32-bit
  • Windows 64-bit

C API as the Foundation for Higher Languages

The plain C API (without the Generator) also serves as a basis for ObjectBox bindings in higher languages. For example, the official APIs for Go, Swift, Dart/Flutter and Python rely on the C API. In the same way, you could create an ObjectBox API for another programming language, e.g. for JavaScript. For the C API, data consists of bytes representing FlatBuffers tables, which you can build and read in your language of choice.

Other languages/bindings

ObjectBox supports multiple platforms and languages. Besides C/C++, ObjectBox also offers:

How can I help ObjectBox?

Let us know what you love, what you donโ€™t, what do you want to see next?

We're looking forward to receiving your comments and requests:

  • Add GitHub issues
  • Upvote issues you find important by hitting the ๐Ÿ‘/+1 reaction button
  • Drop us a line via @ObjectBox_io
  • โญ us, if you like what you see

Thank you! ๐Ÿ™

Keep in touch: For general news on ObjectBox, check our blog!

License

Copyright 2018-2024 ObjectBox Ltd. All rights reserved.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

More Repositories

1

objectbox-java

Java and Android Database - fast and lightweight without any ORM
Java
4,283
star
2

objectbox-go

Embedded Go Database, the fast alternative to SQLite, gorm, etc.
Go
1,003
star
3

objectbox-dart

Flutter database for super-fast Dart object persistence
Dart
900
star
4

objectbox-swift

Swift database - fast, simple and lightweight (iOS, macOS)
Swift
416
star
5

objectbox-examples

Examples for ObjectBox Android/Java, the super-fast database
Java
383
star
6

objectbox-performance

Performance Benchmarking App for ObjectBox, SQLite(via Room and greenDAO), Realm
Java
119
star
7

objectbox-python

ObjectBox - the super-fast database
Python
50
star
8

objectbox-generator

ObjectBox Generator based on FlatBuffers schema files (fbs) for C and C++ (more languages in the future)
Go
34
star
9

objectbox-dart-performance

Flutter App benchmarking the performance of ObjectBox against others (e.g. sqflite, Hive).
Dart
10
star
10

objectbox-azure-sphere

Azure Sphere client connecting to ObjectBox
C
7
star
11

objectbox-go-performance

Open Source Performance Benchmarks for ObjectBox Go, GORM, and others
Go
6
star
12

objectbox-swift-performance

Open Source Performance Benchmarks for ObjectBox Swift
Swift
6
star
13

objectbox-swift-generator

Code generator and model.json builder for the ObjectBox database library. This is currently a quick fork off of Sourcery.
Swift
5
star
14

objectbox-ts-demo

Time Series example project for ObjectBox TS
C++
4
star
15

flatbuffers-benchmark

Testing the FlatBuffers performance of different programming languages
Dart
2
star
16

objectbox-swift-spec-staging

Staging repository for pre-releases. In general, you'd want the official repository at https://github.com/objectbox/objectbox-swift/
Ruby
2
star
17

objectbox-swift-integration-test

Roff
2
star
18

cla

2
star
19

.github

1
star
20

objectbox-go-gitbook

1
star