• Stars
    star
    326
  • Rank 129,027 (Top 3 %)
  • Language
    Objective-C
  • License
    MIT License
  • Created almost 11 years ago
  • Updated 7 months ago

Reviews

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

Repository Details

Distributed version control + object persistence framework

CoreObject

Maintainers : Eric Wasylishen, Quentin Mathe Authors : Eric Wasylishen [email protected], Quentin Mathe [email protected], Christopher Armstrong [email protected] License : MIT License Version : 0.5

CoreObject is a version-controlled object database, designed to be a humane persistence layer for applications with a "never lose any work" philosophy.

At the center is an ACID-compliant object store using SQLite, and built on this are semantic merging, rich undo/redo support, collaborative editing, and a transaction API for viewing database snapshots in memory and batching changes for commit.

Read more at coreobject.org

Build Status

Key Features

  • Revision Control

    • Built on a DVCS (distributed version control system) model
    • Persistent roots have isolated history
      • Comparable to separate Git repositories
    • Based on Object Graph Diff and Merging Model
      • Each Change is a delta represented as an Object Graph Patch
    • Two-level History
      • History Graph per document
      • Undo Track per activity
    • Branch
    • Cheap Copy (copying a document requires O(1) space)
    • Localizable History
    • History Compression and Compaction // Not finished!
    • Serialization Formats
      • JSON and Binary (endian-, 32/64-bit- independent)
      • Stable over multiple invocations for the same object graph (no merge issues in SCM)
      • Integrity Checking (every single committed change includes a checksum)
  • Undo Framework

    • Built on the Revision Control model
      • Never need to define new Command objects
    • Pervasive Undo/Redo
      • Document Changes (Creation, Update and Deletion inside a Document)
      • Store Changes (Document/Branch Creation, Update and Deletion)
    • Selective Undo (each change can be cancelled individually)
    • Persistent Undo Stacks (tree structured/branching undo)
      • Mutiple Undo Views on the same document
      • Undo Stack Union View
  • Object Store

    • Pragmatic OODB atop SQLite
    • Minimalistic Metamodel
    • Flexible Storage Model
      • Coarse-grained Objects with Metadata (e.g. Documents and their Branches)
      • Fine-grained Objects (e.g. inside Document Branches)
      • Optional Object Organization Model based on Tags and Libraries
      • Built-in Indexing and Search (history included)
    • Flexible Collection and Relationship Model
      • Unidirectional or bidirectional
        • Ordered or unordered
        • To-one or to-many
        • Composite
      • Undirectional Unordered Keyed
      • Transparent Constraint Enforcements on Update
    • Cross Document References
      • named branch
      • current branch
      • unidirectional accross arbitrary branch
      • bidirectional between the current branches
    • Synthesized Accessors
    • Transparent Object Graph Copy
    • Transient Object Graph
  • Real-Time Collaboration

    • Any CoreObject-based model supports it (for free)
    • Based on the Revision Control Model
    • Very Fast
    • Full Branch and Undo Support per User
      • Per User Persistent Undo Stack
      • Per User Selective Undo
    • Based on XMPP
  • Overall Design

    • Small Code Base (~ 20 000 loc)

    • Pretty Large Test suite (over 3000 tests)

    • High Quality API documentation

    • Good Debugging Support

      • View object graph in memory as PDF diagram (can be generated from the debugger or in code)
      • Short and Detailed Descriptions for logging objects
    • Minimal dependencies (SQLite and EtoileFoundation)

    • Pervasive UUID use (no string, number or content-based identifiers)

    • Favor JSON formats

    • Create a Persistent Object and save it in 3 loc

        COEditingContext *ctx = [COEditingContext contextWithURL: [NSURL fileURLWithPath: @"TestStore.db"]];
        COPersistentRoot *persistentRoot = [ctx insertNewPersistentRootWithEntityName: @"COObject"];
        [persistentRoot commit];
      

Note: Viewing object graphs as PDF diagrams is not supported on iOS.

Build and Install

Clone CoreObject and its dependencies into the same directory (or extract a release .tgz which contains all 3 projects):

git clone https://github.com/etoile/CoreObject.git
git clone https://github.com/etoile/EtoileFoundation.git
git clone https://github.com/etoile/UnitKit.git

The Xcode projects and schemes of interest are:

  • CoreObject/CoreObject.xcodeproj
    • CoreObject - builds the framework itself
    • BasicPersistence - a minimal example app
    • TestCoreObject - the test suite
    • BenchmarkCoreObject - the benchmark
  • CoreObject/Samples/ProjectDemo/ProjectDemo.xcodeproj
    • ProjectDemo - an experimental testbed application with a drawing editor, outliner, and collaborative editing support used in the demo videos
  • CoreObject/Samples/Typewriter/Typerwriter.xcodeproj
    • Typewriter - a reasonably polished note manager that uses CoreObject

Note: ProjectDemo and Typewriter cannot be run on iOS.

For more details, see INSTALL.Cocoa or INSTALL.GNUstep.

macOS and iOS support

CoreObject is supported on macOS (10.8 or higher), and iOS (7 or higher).

Warning: Xcode 4.6 or higher is required to build the Xcode projects.

More Repositories

1

Etoile

Aggregate repository to check out and build all Étoilé subproject repositories
Makefile
86
star
2

EtoileFoundation

Étoilé core framework – traits, collection protocols, high order functions, metamodel, UTI etc.
Objective-C
49
star
3

ObjC2JS

C++
16
star
4

SourceCodeKit

ObjC source code introspection based on libclang and libobjc (for run-time introspection)
C
16
star
5

EtoileUI

Post-WIMP UI toolkit to support live and composable UI with full separation of concerns
Objective-C
14
star
6

Languages

Framework to create dynamic OO languages, either interpreted or compiled with LLVM, on top of the ObjC runtime (includes Étoilé Smalltalk implementation)
C
14
star
7

UnitKit

Minimalistic unit testing framework for Mac OS X, iOS and GNUstep
Objective-C
13
star
8

XMPPKit

Objective-C
6
star
9

libdispatch-objc2

C
6
star
10

ProjectManager

Objective-C
6
star
11

FontManager

Objective-C
5
star
12

DictionaryReader

Objective-C
5
star
13

BuildScripts

Scripts to download and build Étoilé + GNUstep + LLVM from scratch
Shell
4
star
14

ParserKit

PEG library based on OMeta (written in Étoilé Smalltalk)
Smalltalk
4
star
15

ScriptKit

Objective-C
4
star
16

EtoilePaint

Objective-C
4
star
17

EtoileText

Objective-C
3
star
18

ObjectManager

Objective-C
3
star
19

StructuredTextEditor

Objective-C
3
star
20

System

Objective-C
3
star
21

DocGenerator

Minimalistic doc generation system (can parse GNUstep GSDoc or ObjC source code directly with SourceCodeKit)
Objective-C
3
star
22

SystemConfig

Objective-C
3
star
23

Inbox

Objective-C
3
star
24

IconKit

Objective-C
3
star
25

ModelBuilder

Objective-C
2
star
26

StepChat

Objective-C
2
star
27

Worktable

Objective-C
2
star