An open-source graph database


Build Status Container Repository

Cayley is an open-source database for Linked Data. It is inspired by the graph database behind Google's Knowledge Graph (formerly Freebase).

Get it from the Snap Store



  • Built-in query editor, visualizer and REPL
  • Multiple query languages:
  • Modular: easy to connect to your favorite programming languages and back-end stores
  • Production ready: well tested and used by various companies for their production workloads
  • Fast: optimized specifically for usage in applications


Rough performance testing shows that, on 2014 consumer hardware and an average disk, 134m quads in LevelDB is no problem and a multi-hop intersection query -- films starring X and Y -- takes ~150ms.


  • make cayley go-gettable

    make cayley go-gettable

    This set of changes reorganises the cayley codebase to conform to the normal Go project organisation. In addition to this it makes superficial changes to take code and files closer to Go convention.

    opened by kortschak 31
  • Improve Frontend

    Improve Frontend

    Hi @barakmich

    Vision: Let's make Cayley more approachable for novices whilst also allowing "experts" to not feel "babied" in the environment.

    Some thoughts I wanted the team's buy-in on before submitting PRs:

    Front-end Architecture

    • [ ] Implement AngularJS, this will give the UI a front-end platform to expand on, allowing us to do a range of "snappy" things with the front end as features get rolled out.
    • [ ] Use Angular Material for the layout. The current responsive layout is somewhat broken.. Angular material will give us a nice look and feel out of the box as well as a powerful set of UI-features to work with.

    Proposed Frontend Overhaul Phases

    Phase 1: Migrate to Angular

    • [ ] Replicate existing functionality on the new AngularJS/Material setup.
    • [ ] Produce UX mockups for Phase 2.

    Phase 2: Create State Based Views

    • [ ] Implement UI-router to move from the current setup to a modular, state based front-end. (May be achievable in Phase 1)

    Phase 3: Produce Training Content

    • [ ] Tour of the UI for newbies.
    • [ ] Create "In line" documentation to introduce people to Gremlin/Graph Visualisation. It's the basics of query writing that help people "get over the line". I will need someone to help me put together a set of absolute beginner tutes and I'll happily weave these into the front-end. These will be woven directly into the front end as helpers.

    Phase 4: Integrate Training Content

    Basically: Integrate documentation produced in Phase 3 into the UI.

    • [ ] Implement "inline documentation" from Phase 3.
    • [ ] "Quickstart.." templates. Let users choose typical modelling scenarios (e.g. I want to select users of type X who visited Y that happen to be related to Z) to give users a headstart on scripting.
    • [ ] "Expert mode" that basically hides "distractions" and let's people focus on modelling their stup.

    Thoughts? I have availability over the next 3-4 weeks to make this happen (I am currently in between roles).

    opened by viztastic 27
  • Add Err() and Close() methods to Iterators

    Add Err() and Close() methods to Iterators

    This PR does the following:

    • As mentioned in #208, add an Err() method to all Iterators.
    • Adds tests that the various iterators pass through the underlying Err value.
    • Makes the Close() method on Iterators return an error.
    • Remove a bunch of uses of glog.Fatal* calls, instead either propagating the errors, or calling panic (when it's a programming bug).
    • Try to handle errors in other locations that use Next().

    cc @kortschak

    Updates #157

    opened by andrew-d 26
  • Go API

    Go API

    First run at a Go-importable API for Cayley. This would be the first step into using Cayley as a library and tackling #64 to a degree.

    It's more or less a port of Gremlin into Go syntax with a little magic behind the scenes. Evaluation still remains unchanged (that'd be a nice followup PR -- get all top level nodes, get all tags, etc) but it's much, much easier to build iterator trees now.

    Needs a large amount of documentation before committing. Sending the PR for initial feedback.

    /cc @sdboyer @kortschak

    opened by barakmich 26
  • Fix Sessions to properly manage worker routines

    Fix Sessions to properly manage worker routines

    I used the repl console to execute some queries, but after a while the application crashes. Below is the stack trace. Would you know what is the cause ?

    cayley> panic: runtime error: close of closed channel
    goroutine 50 [running]:
    runtime.panic(0xa46720, 0xf1f7d5)
        pkg/runtime/panic.c:279 +0xf5·011() +0x4d
    created by*Session).runUnsafe +0x136
    goroutine 16 [syscall]:
    syscall.Syscall(0x0, 0x0, 0xc208089000, 0x1000, 0x7f0b67402318, 0xc20803a008, 0x43c338)
        pkg/syscall/asm_linux_amd64.s:21 +0x5, 0xc208089000, 0x1000, 0x1000, 0x4cb355, 0x0, 0x0)
        pkg/syscall/zsyscall_linux_amd64.go:838 +0x75
    syscall.Read(0x0, 0xc208089000, 0x1000, 0x1000, 0x8, 0x0, 0x0)
        pkg/syscall/syscall_unix.go:136 +0x5c
    os.(*File).read(0xc20803a000, 0xc208089000, 0x1000, 0x1000, 0x4, 0x0, 0x0)
        pkg/os/file_unix.go:190 +0x62
    os.(*File).Read(0xc20803a000, 0xc208089000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
        pkg/os/file.go:95 +0x98
        pkg/bufio/bufio.go:97 +0x1b3
    bufio.(*Reader).ReadSlice(0xc208400de0, 0xc20803a00a, 0x0, 0x0, 0x0, 0x0, 0x0)
        pkg/bufio/bufio.go:298 +0x22c
    bufio.(*Reader).ReadLine(0xc208400de0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)
        pkg/bufio/bufio.go:326 +0x69, 0xc20811e0f0, 0xad11c0, 0x7, 0xc208004540, 0x0, 0x0) +0x266
    main.main() +0xbd6
    goroutine 19 [finalizer wait, 4 minutes]:
    runtime.park(0x414c00, 0xf27020, 0xf24a49)
        pkg/runtime/proc.c:1369 +0x89
    runtime.parkunlock(0xf27020, 0xf24a49)
        pkg/runtime/proc.c:1385 +0x3b
        pkg/runtime/mgc0.c:2644 +0xcf
    goroutine 20 [chan receive]:*loggingT).flushDaemon(0xf29a80) +0x75
    created by·1 +0x37a
    goroutine 17 [syscall, 4 minutes]:
    goroutine 21 [select, 1 minutes]:*DB).compactionError(0xc2080246c0) +0x1fa
    created by +0x4b2
    goroutine 22 [select, 1 minutes]:*DB).tCompaction(0xc2080246c0) +0x777
    created by +0x4f4
    goroutine 23 [select, 1 minutes]:*DB).mCompaction(0xc2080246c0) +0x1b9
    created by +0x50c
    goroutine 24 [select, 1 minutes]:*DB).jWriter(0xc2080246c0) +0x143
    created by +0x524
    goroutine 38 [sleep]:
        pkg/runtime/time.goc:39 +0x31·011() +0x35
    created by*Session).runUnsafe +0x136
    opened by scampi 25
  • Revise parser to use generated code

    Revise parser to use generated code

    This approach brings us into conformity with the spec. It slows down parsing by a factor of 5, but we are being more careful so I think this is reasonable. There is some possibility that working in byte space instead of rune space would speed this up, but this would be at an increased complexity cost in the ragel grammar - at the moment we are leveraging the language to do that work for us with some allocation costs as a result.

    There is some risk that this change will break queries, but that should be addressable and the short term pain will IMO be worth the effort.

    opened by kortschak 22
  • Postgres backend!

    Postgres backend!

    One of the things in is supporting Postgres as a backend. As someone who loves Postgres when dealing with relational data, I'd like to hear more thoughts on this, because I'd be interested in implementing it. For example, would native data types be best or could every entry just make use of Postgres' awesome native support for JSON documents?

    As stated in the document, why not :smile:?

    - Jonathan

    Note: I've signed the CLA.

    opened by jonathanmarvens 21
  • Add options to ignore duplicate or missing quad

    Add options to ignore duplicate or missing quad

    Add command line option to ignore duplicated quad when loading and ignore missing quads when deleting (two different options) as discussed in issue #201

    The command line options are:

    • -noerrdup to ignore duplicate
    • -noerrdel to ignore missing

    This is my first contribution to a go project so forgive me if some choice are not in line with the go coding style

    Also note that leveldb doesn't actually detect duplicated line in the same block because is loaded in the db with the same batch. I don't know the impact of such bug.

    opened by LAlbertalli 19
  • Transversing a tree in Cayley

    Transversing a tree in Cayley

    How do you walk an entire tree in cayley to generate json? Without looping and making multiple requests at each level? Especially for a tree that could go as far as 8 levels, with each node having one to 100 children? I'm using a remotely hosted mongodb database, so keeping requests down would be nice.

    I'm using cayley as a library, but converting a gremlin query to golang code shouldnt be an issue.

    opened by tonyalaribe 16
  • Higher-level Go API

    Higher-level Go API

    Tracking for this discussion that keeps happening -- now it's got a number.

    Basically, it'd be great to write queries (or, more explicitly, build iterator trees) without having to be so mechanistic in building the iterator trees. Exposing such an API makes it easier for people using Cayley as a library, makes it easier to write query languages (that have repeated patterns in a lot of places) and, perhaps, make it easier to talk about external API connections -- essentially, the wire format for building iterator trees. Which would allow interesting bindings for other languages without catting together Javascript.

    This may be directly related to the Gremlin API, in that one may influence the other and vice versa.

    query languages Feature Design 
    opened by barakmich 16
  • mongo empty result

    mongo empty result

    whatever query, cayley return empty result for me.

    eg: (1) g.V("Humphrey Bogart").All() return {"result": [ { "id": "" } ]}

    (2) g.V().GetLimit(2) { "result": [ { "id": "" }, { "id": "" } ]}

    this is my command 1, cayley_0.3.1_linux_amd64 2, config to mongodb 3, load data like : ./cayley load --config=cayley.cfg --triples=30kmoviedata.nq.gz 4, found 471705 document in mongo

    opened by changeYi 15
  • fix(sec): upgrade to 1.6.1

    fix(sec): upgrade to 1.6.1

    What happened?

    There are 1 security vulnerabilities found in v0.7.3-0.20180412203414-a422774e593b

    What did I do?

    Upgrade from v0.7.3-0.20180412203414-a422774e593b to 1.6.1 for vulnerability fix

    What did you expect to happen?

    Ideally, no insecure libs should be used.

    The specification of the pull request

    PR Specification from OSCS

    This change is Reviewable

    opened by Awei2020 0
  • Repl Allows One Command to Execute and Subsequent Commands Fail

    Repl Allows One Command to Execute and Subsequent Commands Fail


    When I use the repl, I can run one command and that's it. After that I get an error.

    Steps to reproduce the issue:

    1. run repl
    2. run 2 + 2 (works)
    3. run 2 + 1 (error)

    Received results:

    cayley> 2 + 2
    => 4
    1 Result
    Elapsed time: 1.95 ms
    cayley> 2+1
    Error:  iterator closed at <eval>:1:1(0)

    Expected results:

    It should allow me to run multiple commands

    Output of cayley version or commit hash:

    ERROR: logging before flag.Parse: E1014 21:20:53.997357   97410 cayley.go:142] The assets flag is deprecated as assets are provided as part of the binary.
    Cayley version: 0.7.7
    Git commit hash: dcf764f

    Environment details:

    Backend database: bolt version unknown

    opened by joshglenn 0
  • Security fixes

    Security fixes

    The latest Cayley release v0.7.7 has multiple security vulnerabilities in its Docker image. This is my first pull request, so I apologise if the process isn't correct. I have branched off of the v0.7.7 release, and if possible, would like a v0.7.8 release created for it. I have no interest in obtaining the latest code from master branches.

    This commit resolves those issues by;

    • Compiling in Golang 1.19
    • Updating packages where required
    • Resolving build error in parser.go
    • Updating Dockerfile to use 1.19 base image and go install for packr2

    This change is Reviewable

    opened by mojoex 2
  • Security issue with version < 1.3.2

    Security issue with version < 1.3.2 versions lower that 1.3.2 there is security weakness.

    An issue was discovered in GoGo Protobuf before 1.3.2. plugin/unmarshal/unmarshal.go lacks certain index validation, aka the "skippy peanut butter" issue.
    opened by gennadylaventman 1
  • Relationships not displaying correctly in new cayley version

    Relationships not displaying correctly in new cayley version

    • Cayley Forum -
    • Slack -, invites:


    Unable to display relationships correctly. We have a set of entity relations.

    When A -->B

    and when we query the relation. It would give relation between A and B when we query for A. This is not happening in the latest version of Cayley. When we give B , it would give the relation. In previous version that is 7.2 we are getting the results correctly. But in 7.7 we are unable to get this and customers have raised bug Steps to reproduce the issue: Create relation between A and B, A Query for A

    Received results:

    Getting empty results

    { "result": [ [] ] }

    Expected results:

    "result": [
    		"relation": "DependsOn",
    		"source": "test-A",
    		"target": "test-B"

    Backend database: (database and version)


    opened by indupulikkot 1
  • v0.7.6(Oct 14, 2019)

    The long anticipated release brings a lot of bug fixes and some performance improvements, especially for KV backends.



    • New SQLite backend (
    • KV and NoSQL backends migrated to Hidalgo.
    • Initial import to KV backends should be much faster now (

    Query languages

    • A new Order() iterator and corresponding method for Gizmo (
    • Set of changes to Gizmo to make it more Gremlin-compatible (,,
    • Gizmo can now emit JSON-LD via HTTP API if appropriate Accept header is set (

    Bug fixes

    • A lot of bug fixes for queries, backends, etc. See the full changelog for details.

    Go library

    • Switched to Go modules.
    • Quads package split to it's own repository.

    Breaking changes

    • The query.Session interface changed to be more user-friendly.

    Note: Cayley haven't reached 1.0 yet, thus you should pin a specific version in go.mod to avoid breaking changes. We try hard to minimize those.

    Source code(tar.gz)
    Source code(zip)
    cayley_0.7.6_darwin_386.tar.gz(15.33 MB)
    cayley_0.7.6_darwin_amd64.tar.gz(15.81 MB)
    cayley_0.7.6_linux_386.tar.gz(14.88 MB)
    cayley_0.7.6_linux_amd64.tar.gz(15.35 MB)
    cayley_0.7.6_linux_arm64.tar.gz(14.45 MB)
    cayley_0.7.6_linux_armv6.tar.gz(14.70 MB) MB) MB)
    checksums.txt(778 bytes)
  • v0.7.5(Nov 26, 2018)

    This release brings multiple stability fixes and adds initial support for cyclic objects to the schema lib.



    • Fix bug when deleted a reinserted quad in KV backends (@3pCode,
    • Fix Optional iterator not propagating own tags (@phyrwork,
    • Update BoomFilter to avoid panic (@hypirion,


    • schema: Support loading and writing objects containing loops (,
    • schema: Fix recursive ID lookup in anonymous fields (@phyrwork,
    • New Resolver iterator (@phyrwork,
    • Add RefsOf to BatchQuadStore interface (@phyrwork,

    As always, we expect Go users to pin a specific Cayley version tag with dep.


    on Github

    dennwc: iterator: do not drop an error in resolver
    phyrwork: Implement Resolver iterator
    HaraldNordgren: Bump Go versions and use '.x' to always get latest minor versions
    3pCode: update test to check all return codes, update variable name.
    3pCode: Update authors and contributors
    3pCode: Fix bug when deleted a reinserted quad.
    cristaloleg: Use type-switch
    dennwc: schema: support loading objects with loops
    dennwc: schema: split schema package into multiple files
    phyrwork: Add RefsOf to the BatchQuadStore interface
    dennwc: schema: support writing structs that contain loops; fix #731
    phyrwork: Fix mock store ValueOf implementation never returning nil
    hypirion: Update dependency revision on BoomFilters
    phyrwork: Fix Optional iterator not propagating own tags
    s_guozhuming: run tests for a specific backend implementations
    s_guozhuming: pull image from remote repository if there is not image at local machine
    barakmich: change order of dep grabbing
    barakmich: Update pouchdb version
    barakmich: fix goja dep, update travis
    lynic: Correct db name using mongo backend (#723)
    phyrwork: Fix Config.idFor() recursive ID lookup in anonymous fields (fixes #732)
    tooolbox: Begin the Glossary (#728)
    jtorvald: Added unsigned integer types (#725)

    Special thanks goes to @phyrwork and @3pCode for their contributions.

    Source code(tar.gz)
    Source code(zip)
    cayley_0.7.5_darwin_386.tar.gz(16.96 MB)
    cayley_0.7.5_darwin_amd64.tar.gz(17.37 MB)
    cayley_0.7.5_linux_386.tar.gz(16.93 MB)
    cayley_0.7.5_linux_amd64.tar.gz(17.46 MB)
    cayley_0.7.5_linux_arm.tar.gz(16.42 MB)
    cayley_0.7.5_linux_arm64.tar.gz(16.43 MB)
    cayley_0.7.5_src.tar.gz(10.04 MB) MB) MB)
  • v0.7.4-2(Jun 3, 2018)

    This release fixes few bugs and adds label support for the schema lib.


    • Schema lib now allows adding a label to all written quads (1a0c7cb9443b31a8450ebff58c312cf434e1c579)
    • Fixed a bug with KV backend that allowed to write duplicate quads in the same TX (#675)
    • All() query for nodes now honors a query limit (#718). Previous behavior can be achieved by passing ?limit=-1 parameter.

    As always, we expect Go users to pin a specific Cayley version tag with dep.


    on Github

    dennwc: graphql: update dependency and test filter with multiple values
    dennwc: schema: allow to specify quads label on write
    dennwc: bolt: do not insert duplicate quads found in the same tx; fixes #675
    dennwc: set a correct limit in integration tests
    dennwc: cli: assume stdout as an output when no arguments are specified
    dennwc: gizmo: All should honor a query limit; fixes #718
    robfig: cayley-single.yml: update version tag to latest
    Source code(tar.gz)
    Source code(zip)
    cayley_0.7.4_darwin_386.tar.gz(13.22 MB)
    cayley_0.7.4_darwin_amd64.tar.gz(13.58 MB)
    cayley_0.7.4_linux_386.tar.gz(13.24 MB)
    cayley_0.7.4_linux_amd64.tar.gz(13.62 MB)
    cayley_0.7.4_linux_arm.tar.gz(13.05 MB)
    cayley_0.7.4_linux_arm64.tar.gz(13.01 MB)
    cayley_0.7.4_src.tar.gz(10.05 MB) MB) MB)
  • v0.7.3(Apr 23, 2018)

    This release brings Elasticsearch v6.x support, a transition to dep and few bug fixes.


    • Cayley now supports ElasticSearch v6.x (#711)
    • SaveOptional is exposed in Gizmo (#702)
    • Transition to dep for dependency management (#704, #703)
    • Bug fixes (#710, #709, #708, #707)

    As always, we expect Go users to pin a specific Cayley version tag with dep.


    on Github

    dennwc: quad: do not un-quote strings in StringToValue; fixes #710
    dennwc: add CODEOWNERS
    dennwc: elastic: support v6; fix #711
    skydan: Fix dep ensure and downloading with "follow redirects" option
    mguentner: hello_bolt: replace TempFile with TempDir
    mguentner: hello_schema: replace TempFile with TempDir
    dennwc: gizmo: expose SaveOptional; resolves #702
    dennwc: build and test for go 1.10
    dennwc: switch from glide to dep
    glaslos: replace badge png with scaling svg
    Source code(tar.gz)
    Source code(zip)
    cayley_0.7.3_darwin_386.tar.gz(13.22 MB)
    cayley_0.7.3_darwin_amd64.tar.gz(13.57 MB)
    cayley_0.7.3_linux_386.tar.gz(13.24 MB)
    cayley_0.7.3_linux_amd64.tar.gz(13.62 MB)
    cayley_0.7.3_linux_arm.tar.gz(13.05 MB)
    cayley_0.7.3_linux_arm64.tar.gz(13.00 MB)
    cayley_0.7.3_src.tar.gz(10.05 MB) MB) MB)
  • v0.7.2(Mar 5, 2018)

    This minor release brings few bug fixes, faster CockroachDB backend, configurable schema package and new GraphQL features.

    It will be the last feature release before switching to v0.8 branch. Only bug fixes will be backported to v0.7 moving forward.


    • Faster CockroachDB transactions (@dsymonds).
    • Support for un-nesting objects and expand-all for GraphQL (#686, #692).
    • Configurable schema package (#694).
    • Fixes for json-ld, graphviz data formats (@jtorvald).
    • Fixes for Recursive iterator and optimization of And.

    As always, we expect Go users to pin a specific Cayley version tag with a dependency manager.


    dennwc: schema: allow to customize behavior; resolves #694
    dennwc: graphql: support un-nesting objects into parent; resolves #686
    dsymonds: Switch CockroachDB driver from lib/pq to jackc/pgx.
    dennwc: graphql: support expand all; resolves #692
    dennwc: properly close sub-iterator in recursive; fix #693
    dsymonds: Rewrite CockroachDB SQL construction to be much faster.
    dsymonds: Bump cockroachdb Docker tag for testing to the latest version, v1.1.5.
    dennwc: iterator: do not add empty iterator to And on failed optimization
    jtorvald: jsonld: added a DocumentLoader to NewReaderFromMap; fix NPE (#689)
    dennwc: dot: correctly escape slashes; additional file extension
    Source code(tar.gz)
    Source code(zip)
    cayley_0.7.2_darwin_386.tar.gz(12.63 MB)
    cayley_0.7.2_darwin_amd64.tar.gz(13.17 MB)
    cayley_0.7.2_linux_386.tar.gz(12.64 MB)
    cayley_0.7.2_linux_amd64.tar.gz(13.21 MB)
    cayley_0.7.2_linux_arm.tar.gz(12.46 MB)
    cayley_0.7.2_linux_arm64.tar.gz(12.40 MB)
    cayley_0.7.2_src.tar.gz(17.76 MB) MB) MB)
  • v0.7.1(Jan 30, 2018)

    This minor release brings multiple bug fixes, query performance improvements, wildcards query and new CouchDB backend support.

    As noted in v0.7.0 release, support for legacy bolt1, leveldb1, mongo1 backends was dropped. New backend implementation are still available under bolt, leveldb and mongo names.


    • CouchDB support (@elliott5)
    • PouchDB support via GopherJS (@elliott5)
    • Support for wildcard queries (#676)
    • Multiple fixes for FollowRecursive (@jtorvald)
    • Better location of UI assets (@gauravtiwari)
    • KV and SQL backends will now track node ref counters properly.
    • Various fixes and performance improvements (1f53d04893ea9b2736e9b2277bbba3f47b88711a, 463642efb05f1cf0e1ce8815c8b68f19ea677e31, 2d6d563950d464777b17658961b3fada8e7c0e16; thx to @jtorvald)

    As always, we expect Go users to pin a specific Cayley version tag with a dependency manager.


    dennwc: nosql: iterator size should not be negative in case of error
    dennwc: dock: expose container port on darwin properly
    dennwc: nosql: if store has only 32 bits, store a copy of int field
    dennwc: graphtest: test max int roundtrips and comparisons
    elliott5: ouch: new couchdb/pouchdb backend
    dennwc: cli: fix database close on init
    dennwc: iterator: correctly limit depth for recursive; fix #685
    dennwc: gizmo: always initialize context; fixes #674
    dennwc: graph: unwrap implementation to enable optional interfaces
    dennwc: sql: copy tags when cloning an iterator
    dennwc: allow to specify quad file address for non-persistent backends; fix #677
    dennwc: iterator: correctly clone error iterator and make a distinct type for it
    dennwc: gizmo: clarify Count docs
    jtorvald: All negative values should result in unlimited depth (#679)
    jtorvald: Javascript error from sigma was not visible
    dennwc: path: test comparisons with wildcards
    dennwc: nosql: support regexp and wildcards
    dennwc: sql: do better job optimizing filters
    dennwc: sql: optimize regular expressions
    dennwc: shape,gizmo: support wildcard value filter
    dennwc: iterator: get some rough size estimates for comparisons
    dennwc: iterator: calculate real size for LinksTo(Fixed)
    dennwc: all: add benchmarks
    dennwc: kv: fix typo in bloom filter init; fix #675
    dennwc: cli: allow to pass file name as argument for load and dump
    dennwc: nosql: do not process invalid deltas
    dennwc: sql: do not decrement nodes from non-existent quads; return delta errors
    dennwc: kv: fix decrement of node refs from non-existent quads
    dennwc: test all writer parameters for each backend
    dennwc: remove test flag for backends without nodes gc
    dennwc: bump version to 0.7.1 and drop legacy backends
    gauravtiwari: Adds locations for looking up static assets (#673)
    Source code(tar.gz)
    Source code(zip)
    cayley_0.7.1_darwin_386.tar.gz(12.16 MB)
    cayley_0.7.1_darwin_amd64.tar.gz(12.67 MB)
    cayley_0.7.1_linux_386.tar.gz(12.16 MB)
    cayley_0.7.1_linux_amd64.tar.gz(12.71 MB)
    cayley_0.7.1_linux_arm.tar.gz(12.00 MB)
    cayley_0.7.1_linux_arm64.tar.gz(11.95 MB)
    cayley_0.7.1_src.tar.gz(17.58 MB) MB) MB)
  • v0.7.0(Dec 24, 2017)

    Release covers nearly 8 months of work, mostly on implementing meta-backends, new query optimizer, performance improvements and bug fixes.

    Note: From now on we plan to release point releases on regular basis to push fixes and new features faster.

    Storage format for backends received an upgrade bringing backward incompatible changes. Check migration guide for more details. It only affects the database format, HTTP API remains backward-compatible.

    This release defines new internal interfaces (meta-backends) for working with various database kinds. Currently three of them are defined: KV, NoSQL, SQL. Each of them significantly simplifies a process of implementing a new backend, as well as allows us to lower maintenance overhead by sharing most optimizations, read and write paths, etc. This also means that optimization work on one backend will be automatically applied to other backends of the same kind in the future.

    Part of this effort was an implementation of new query representation that we call "shapes". All optimizations like query rewrites and reordering are now done on a generic level, without any backend-specific code. It will allow us to save query stats, make more complex optimizations and even store query templates in the database, or split it to be executed in distributed manner by multiple backends. Since new representation can be manipulated more easily, most backends will now rewrite complex query types into their native query language (SQL, for example).


    • ElasticSearch support
    • New query optimizer (aka query shapes)
    • New command line interface
    • KV meta-backend + port of Bolt and LevelDB to it
    • NoSQL meta-backend, + port of Mongo and ElasticSearch to it
    • "Raw" value type is deprecated
    • Exposed node delete API for HTTP
    • Consistent behavior for all backends on node delete
    • New query types in Gizmo: Labels, SaveInPredicates, SaveOutPredicates, see docs
    • Has traversal now supports value filters
    • FollowRecursive can be limited to a maximal depth
    • GraphQL now supports quad labels
    • SQL query optimizer improvements
    • SQL backends now has their own names: postgres, mysql, cockroach (no need to specify flavor)
    • Significant performance improvements
    • Smaller Docker image
    • Minor UI improvements

    Breaking changes

    • Bolt, LevelDB and Mongo backends were rewritten and database format has changed. Old implementations are still available under bolt1, leveldb1 and mongo1 names. Old backends will be removed in next minor release. c26639218ace9bdb7339d47f84785fa6b2bc2569
    • SQL table structure has changed 31b0f4852ebb379b8128a56eb9811bc27169f3e0, #617
    • Cayley now ignores duplicated quads by default 9cb0eefcc5e88c45d7de822688643f79e88112bc
    • Gremlin is deprecated and dropped in favor of Gizmo #519
    • Count in gizmo is now a 'final' instead of traversal and returns result #576

    Breaking changes (Go)

    As always, we expect users to pin a specific Cayley version tag with a dependency manager and sync with following changes in the code:

    • Cayley uses Go version 1.9+
    • Bolt, LevelDB and Mongo backends were rewritten and database format has changed. Old implementations are still available under old paths, but will be dropped in next minor release. Users are encouraged to update imports to kv/bolt, kv/leveldb and nosql/mongo.
    • SQL flavors moved to their own packages and needs to be imported separately (sql/postgres for example). sql backend name will be deprecated in next major release. 48e7946cd21045266a16109b2a839424b32086e6
    • "Raw" value type (quad.Raw and quad.MakeRaw) is deprecated and replaced with a helper to preserve at least some compatibility. It's strongly recommended to switch to quad.String or IRI and quad.Make. 41bf496d9dfe622b385c1482789480df8b106472
    • Iterator optimizations for backends are mostly disabled. It is recommended to build queries with new graph/shape package and run optimizations on it.
    • Removed unused methods from QuadStore: Horizon, FixedIterator, Type d994e2aa16d99de8a60620adc14f97875f21de10, b63faea683e6cbb5d98e64385277c66fe5d2fdd2, #631
    • Removed graph.PrimaryKey type d994e2aa16d99de8a60620adc14f97875f21de10
    • graph.Value is now type-safe e4ab526266257d0233baca3e91607ddef01adbb0
    • Removed ID and Timestamp fields from graph.Delta - they will be assigned by server 524c8e26293df3d8c94b2641b912fe1c21ce80aa
    • RemoveNode type changed to quad.Value to match other methods #607
    • Quad writers produced by graph.NewWriter and NewRemover now requires Flush to be called a420e62b5f84d43bd84f03e2638448c853a0c08b
    • Iterator now accepts context for Next, NextPath and Contains f3e814fae02ec4b782fecb6ccb3d8cd832d9b0bd
    • Describe method was removed from Iterator and replaced by String method on iterator and graph.DescribeIterator b491f41f8be954be016610f3c49c4bb3e4699b54
    • Iterator type is now a string instead of enum and registration is not necessary anymore


    dennwc: http: expose node delete api; resolves #622
    dennwc: deprecate quad.Raw type
    dennwc: code-wide cleanup
    dennwc: iterator: remove unused equality function for fixed
    dennwc: graph: remove unused horizon function
    dennwc: memstore: use correct size for all iterator
    dennwc: add context argument to iterators and kv
    dennwc: kv: track nodes reference count; fixes #617
    dennwc: sql: track nodes reference count and simplify dialects; fixes #617
    dennwc: memstore: remove nodes if all their references are gone; addresses #617
    dennwc: iterator: returns correct subiterator slice for empty And; fixes #659
    dennwc: nosql: use base64 instead of hex encoding for hashes
    dennwc: update Go version to 1.9
    dennwc: update integration test, make it a part of suite; move paths as well
    dennwc: fix tests for predicate save query; fix node tokens for bolt
    dennwc: nosql: use shapes optimizer for queries
    dennwc: shape: allow to simplify shapes; add helpers for building node filters
    dennwc: elastic: port to nosql layer; resolves #653
    dennwc: nosql: store each typed value in separate field; support batch inserts
    dennwc: separate mongo logic and define a generic nosql layer; resolves #652
    dennwc: iterator: replace Describe method with a helper
    dennwc: graphql: support @label directive; resolves #614
    dennwc: path/gizmo: support Has with filters; resolves #650
    dennwc: bolt,leveldb: swap names to a new kv backend implementations
    michaelqiu94: ElasticSearch as Supported Backend (#634)
    dennwc: path,gizmo: allow to save predicates without moving from nodes; fix #591
    dennwc: http: allow to serve API without web files; fix #503
    dennwc: ui: format json results; resolve #454
    dennwc: sql: optimize intersection, value lookup and comparison
    dennwc: sql: fix params propagation from sub-queries
    dennwc: sql: rewrite query builder to shapes; fix #563
    dennwc: shape: optimize multiple Pages; push Fixed values from Intersect into NodesFrom
    dennwc: propagate sub-iterator errors from And properly
    dennwc: stream ops in node delete; return error if node is missing; fix #608
    dennwc: add a single package that imports all supported backends
    derekrliang: Add optional max recursion depth to FollowRecursive (#639)
    derekrliang: Fix query shape error when query has no result data links (#641)
    derekrliang: Add running local unit test documentation (#640)
    dennwc: bolt,leveldb: port to kv layer
    dennwc: kv: add in-memory implementation
    dennwc: integration: open and close db for each test set; use table benchmarks
    dennwc: kv: support for index scans and indexes on multiple directions
    dennwc: kv: allow to customize indexes
    dennwc: kv: batch get requests and simplify bucket interface
    Yannic: Reduce Docker image size (#637)
    dennwc: sql: separate packages for flavors (#633)
    Yannic: Remove unused Type function (#631)
    dennwc: docs: add http api definitions (swagger v3)
    dennwc: iterator: remove duplicated TagResults code and  type registration
    dennwc: github: simplify issue template header, add slack link
    dennwc: tag values in recursive iterator correctly
    dennwc: shape: new query optimizer
    dennwc: memstore: iterator optimizations
    dennwc: graph: rewrite pk; remove horizon and ts from delta; rewrite memstore
    dennwc: kv: registration, scan by prefix, support for flat kv
    dennwc: integration: allow to load data to remote backends
    dennwc: gizmo: fix #620 and bump goja version
    dennwc: graph: helper for writing quads to tx (useful for schema)
    dennwc: writer: add a direct constructor for single replication
    Jason Kingsbury: make bloom filter buffer before initialisation
    dennwc: cli: read query timeout from config file; fix #613
    dennwc: graphql: allow full IRI charset in names; resolve #616
    dennwc: schema: allow to limit depth; fix #609
    joostverdoorn: Set CORS headers on gephi stream
    dennwc: http: allow to specify query limit; fix #612
    joostverdoorn: Add labels morphism and Gizmo API (#610)
    dennwc: http: do not add .md extension if it's already present; fix #597
    dennwc: schema: return an error on write if required field is not set; fix #602
    dennwc: accept quad.Value instead of graph.Value for RemoveNode; fix #607
    dennwc: print warning on set verbosity for glog; fix #599
    dennwc: flush writer in schema example; fix #606
    harlantwood: Remove "angry highlighting" from JSON examples
    dennwc: generic kv backend based on bolt
    h4ck3rm1k3: query from stdin (#601)
    chrispassas: Fix example startup command
    dennwc: make graph.Value safe again
    h4ck3rm1k3: adding help to repl
    dennwc: schema: handle id in anonymous struct fields
    h4ck3rm1k3: Update sidebar.tmpl (#595)
    dennwc: schema: allow to load objects from path
    dennwc: cli: implement query command
    barakmich: conversion check
    h4ck3rm1k3: Update transaction.go
    dennwc: graph: batch quads automatically if caller uses single AddQuad on writer
    gkontos: gae: fix add of previously deleted quads (#580)
    MarioAriasGa: Glog issues (#579)
    barakmich: bolt2: use bloom filter to speed insertion
    barakmich: bolt2: working queries
    barakmich: graph: Add primitive proto
    barakmich: Fix glide story; ignore docker deps, `glide.lock` is now sane
    dennwc: gizmo: make Count a final instead of traversal
    dennwc: fix contains on recursive iterator
    dennwc: check for nil result from NameOf; fix #574
    dennwc: ignore duplicate quads by default
    dennwc: docs: add example configs for kubernetes; resolves #327
    dennwc: do not load test dataset in container
    dennwc: golang client for data import/export; add tests for v2 api
    dennwc: http: support queries in api v2; expose api v2 as a library
    dennwc: http: get rid of custom handler type
    dennwc: http: use optional interface to create qs for request
    dennwc: bind to localhost by default
    owulveryck: The -host option was missing the port argument
    mikaelcabot: cockroach: schema changes within transactions are restricted (#567)
    dennwc: gizmo: generate docs from Go function comments; resolve #520 (#560)
    dennwc: cli: register glog flags; make conv an alias for convert; resolve #561
    oren: Update - add MySQL and CockroachDB
    dennwc: deprecate gremlin in favor of gizmo; resolve #519
    dennwc: cli: deduplication tool for nodes with same properties
    dennwc: cayley: switch to cobra/viper cli
    Source code(tar.gz)
    Source code(zip)
    cayley_0.7.0_darwin_386.tar.gz(12.01 MB)
    cayley_0.7.0_darwin_amd64.tar.gz(12.52 MB)
    cayley_0.7.0_linux_386.tar.gz(12.01 MB)
    cayley_0.7.0_linux_amd64.tar.gz(12.56 MB)
    cayley_0.7.0_linux_arm.tar.gz(11.86 MB)
    cayley_0.7.0_linux_arm64.tar.gz(11.80 MB)
    cayley_0.7.0_src.tar.gz(17.41 MB) MB) MB)
  • v0.6.1(Apr 12, 2017)

    This release marks community build number three. It includes all the pending features that can be merged before v0.7, which will be a major release to introduce Reification, and may cause breaking changes.

    The storage format was not changed for this release. Existing databases should work properly without any migration needed.

    Cayley now supports multiple SQL flavors, including MySQL and CockroachDB.

    To avoid further confusion, our Gremlin-style query language was renamed to Gizmo to emphasize that it's not fully Gremlin-compliant. We also switched to the Goja JavaScript VM for better performance and ES5.1 support. Error handling was also improved for our query language.

    This release introduces an experimental GraphQL implementation. Note that it only shares a similar syntax and does not support schema yet. It's a preview feature, so the implementation or API may change in following releases.

    The import and export formatter system is now modular and can be easily extended. Cayley now supports JSON-LD, Graphviz (aka DOT; export only) and custom binary formats for better import speed. The HTTP API was updated (v2) to support the new formatter system and allows for the streaming of large amounts of data in single request.

    The recursive iterator is finally available via the Go path library and Gizmo. It allows traversal of a path recursively to potentially unlimited depth.

    A new Schema library was implemented to allow developers to save and load complex Go objects with a single method call.


    • Support for MySQL and CockroachDB.
    • Gizmo query language with faster ES5.1-complaint VM (supersedes Gremlin).
    • Experimental GraphQL-like query language.
    • Modular import/export formats system.
    • Support for JSON-LD, Graphviz (DOT) and Cayley-specific binary format.
    • HTTP API v2 with better import/export performance for large data files.
    • Recursive iterator support (FollowRecursive).
    • Schema lib (aka ORM or Object Persistence Layer).
    • IRI prefix registration.

    Full changelog:

    dennwc: gizmo: expose recursive traversal and update docs
    dennwc: path: FollowRecursive traverses quad.Values
    barakmich: add FollowRecursive to the path lib
    barakmich: graph/iterator: Add Recursive iterator
    dennwc: graphql: close iterator properly; fixes #545
    dennwc: tests: require.NoError instead of Nil
    dennwc: gae: fix nop iterator optimization
    dennwc: sql: append WHERE only if constraints are present
    dennwc: http: CORS, API to get supported formats and RO mode fix
    dennwc: quads: add json stream format
    dennwc: mql: fix NPE
    dennwc: gephi: allow to filter quads in raw mode
    dennwc: gephi: inline primitive values automatically; inline schema:url
    dennwc: gephi: initial support for graph stream
    jtorvald: Updated documentation based on Issue #349 (#541)
    caosiyang: docs: fix a typo in (#542)
    jtorvald: Issue #286 init db and config documentation (#538)
    Yannic: graph: cleanup and more robust options handling (#536)
    dennwc: initial graphql support
    dennwc: cli: fix loading of data for non-persistent backend
    jtorvald: docs: replace broken MQL link, add quick-start cli usage example (#535)
    mikaelcabot: CockroachDB transaction retries (#534)
    dennwc: bolt: make bolt concurrent-safe as it should be
    dennwc: gizmo/gremlin: fix tags for Both traversal; fix #532
    dennwc: fix #530 and write errors as plain json
    dennwc: quad: support for graphviz format
    dennwc: memstore: close iterator properly
    dennwc: memstore: do not hash values in QuadDirection
    dennwc: memstore: no recursion in Next
    dennwc: http: use formats - implement write api v2; resolves #176
    dennwc: mongo: allow to pass full urls; fix #526
    dennwc: add missing build tags; find relative path of data files automatically
    dennwc: sql: support flavors: mysql, cockroachdb
    dennwc: mongo: remove nodes with no references; fix #517
    dennwc: gizmo: allow to register custom IRI prefixes; resolves #505
    barakmich: revert proto GetNativeValue and check for crashing nils on describe
    barakmich: Fill literal strings in MQL the same way we do results in Gremlin
    dennwc: gremlin: fix limit in ForEach; fixes #518
    barakmich: Fix non-persistent load, modernize MQL test
    barakmich: Fix -v option and debug error
    barakmich: Tidy up Optional iterator, and allow MQL to support JS-like string syntax
    dennwc: switch to goja (gizmo)
    barakmich: Fix dependencies, make Docker an optional dependency, add build tags for docker and appengine tests
    mzats: Updated examples so that they work in repl/http. (#499)
    barakmich: Remove IsNode() from the graph.Value definition.
    dennwc: schema: move well-known types package
    dennwc: graph: refactor interfaces
    dennwc: add example for schema library
    dennwc: ported schema lib
    dennwc: use vocabulary constants for value types, allow to shorten and expand IRIs
    dennwc: register known rdf vocabularies, add constants
    joostverdoorn: Add missing gojsonld dependency to glide (#502)
    dennwc: bolt/leveldb: stop complaining about existing quads even if ignore is set
    dennwc: http/repl: handle errors correctly
    dennwc: nquads: remove duplicated code
    dennwc: integrate quad formats, replace exporter, use quad helpers in tests
    dennwc: quad: readers, writers and formats.
    dennwc: Update minimal Go version
    dwhitena: Ability to pass the Mongo Backend an externally managed session. (#486)
    pbsladek: Update quickstart for 0.6.0 (#487)
    dennwc: add github issue template
    dennwc: sql: fix sqlNodeIterator size
    dennwc: fix count iterator
    dennwc: path: test both optimized and unoptimized case; few more test for gremlin
    kaneshin: Fix minor typos (#483)
    barakmich: Add arm64 support
    Source code(tar.gz)
    Source code(zip)
    cayley_v0.6.1_darwin_386.tar.gz(12.92 MB)
    cayley_v0.6.1_darwin_amd64.tar.gz(13.51 MB)
    cayley_v0.6.1_linux_386.tar.gz(12.93 MB)
    cayley_v0.6.1_linux_amd64.tar.gz(13.57 MB)
    cayley_v0.6.1_linux_arm.tar.gz(12.98 MB)
    cayley_v0.6.1_linux_arm64.tar.gz(12.94 MB)
    cayley_v0.6.1_src.tar.gz(16.05 MB) MB) MB)
  • v0.6.0(Oct 7, 2016)

    Current release marks community build number two, introducing major change to data layout and bringing new features to Gremlin.

    Storage format changed slightly. We highly recommend to do a clean import of the database with a new binary.

    Cayley now honors types of nquad values. IRIs (<name>) were converted to untyped strings (name), so it was possible for nodes with different types to be loaded as a single node. Now Cayley preserves type information, making these nodes separate. Queries that used IRIs without <> quotes will break because of this change. Gremlin now requires IRI it to be in "<follows>" form and the path lib expect these values to be of quad.IRI Go type. The same stands for Strings (aka RDF literals) and BNodes (aka blank nodes, _:name).

    Data loader now recognizes few basic typed literals like "10"^^<> and converts them into corresponding native type (Int for this example). It may also affect existing queries. Gremlin will automatically convert basic types into corresponding RDF typed literals.


    • Typed values support for all backends. Includes types: String, IRI, BNode, Int, Float, Bool, Time.
    • New traversals in path lib and Gremlin: HasReverse, Skip, Limit, Count, Unique, Comparison/Filter, Regex.
    • More consistent backends behavior thanks to unified tests.
    • Updated docs and added examples.
    • Updated Docker image, and added example for it.
    • Many, many bugfixes and some optimizations.

    Full changelog:

    gabrys: Fix link to (#477)
    dennwc: expose Unique via path lib and gremlin; implement and expose Count iterator; resolve #240
    dennwc: gremlin: add regex support, make it harder to abuse regexps; add docs explaining why
    guycook: Implement regex filter as iterator (#474)
    dennwc: bolt,leveldb: fix AllQuads iterator not skipping deleted quads, add test
    dennwc: iterator: add variadic arguments to Add, Or and Fixed constructors
    dennwc: query: Refactor interfaces (#471)
    dennwc: fix lru panic
    wayeast: Clone receiver paths (#466)
    kenshaw: appengine: updating dependency paths and adding documentation (#464)
    dennwc: gremlin: handle string slice in via parameter
    kenshaw: appengine: add build constraint (#463)
    dennwc: Glide migration (#460)
    dwhitena: user/pass functionality for mongo backend
    allanino: Fix Docker building (#456)
    barakmich: gremlin: don't require a session to last as long as the timeout
    kris-runzer: graph: fix Is*(err error) checkers to properly compare against *DeltaError, add tests
    dennwc: optimize by default in Iterate helper
    dennwc: gremlin: clone path objects
    neonstalwart: simplify the signature of NextLogOut (manual merge of #264)
    dennwc: graph: add iteration helpers, update examples; resolves #446
    dennwc: http: fix json quads decoding
    dennwc: gremlin: fix ToArray without arguments
    dennwc: iterator: promote Next to main interface; make NoNext an optional interface
    oren: Example of BoltDB, update examples/
    robertmeta: Just better quickstart + examples creation
    dennwc: query: check type assertions, recover properly in gremlin; fixes #450
    josephschorr: Add Clone() to Path for easier reuse of Path segments (#444)
    dennwc: Wire Skip and Limit to Gremlin. Also fixed #254.
    dennwc: postgres: store hashes as binary data instead of hex strings
    dennwc: postgres: prepare each statement in ApplyDeltas
    dennwc: postgres: generate distinct node insert statements only
    dennwc: cquads: convert TypedString values to native types automatically on loading
    dennwc: gremlin: allow to specify multiple conditions in Filter
    dennwc: mongo: optimize comparison iterator
    dennwc: Test for typed value comparison and optimization
    dennwc: gremlin: expose value comparison iterator via path lib, add tests
    dennwc: gremlin: support for typed values
    dennwc: gremlin: replace JS-based graph object with reflect-based (rewritten, now it's easier extend)
    dennwc: comparison: compare only values with the same type, add a test for mixed set
    dennwc: mongo: use native value types where possible, fix indexing, remove recursion in LinksTo, remove unnecessary roundtrip
    dennwc: postgres: new table structure, store typed values natively; fix iterators; separate LRU cache
    dennwc: Update value comparison iterator. Stop graph.Value madness.
    dennwc: cquads: recognize TypedString and LangString in parser
    dennwc: Add a test for Raw-to-typed values exchange. Fix memstore not using hashes in map.
    dennwc: GAE (untyped). More tests. Fixed handling of size and conflicts in postgres.
    dennwc: quad: add support for few basic types (int, float, bool, time)
    dennwc: Unify tests for QuadStore. Run Mongo/Postgres in Docker automatically.
    dennwc: leveldb: use protobuf instead of json, migration code
    dennwc: bolt: migration code
    dennwc: add typed fields to protobufs
    dennwc: graph,query,exporter,path: updated to use typed values
    dennwc: quad: directions are typed
    kortschak: graph: provide more meaningful errors for bad actions (#443)
    josephschorr: Don't iterate over all quads unless necessary (#440)
    kortschak: clog: fix comment typos and add package comment (#442)
    dennwc: Implement Skip and Limit iterators (#369)
    EntilZha: Delete node API (#158)
    dennwc: Updated Dockerfile (fixed #357)
    dennwc: fix Unique iterator for non-comparable tokens; fixes #437
    kortschak: clog: make nil Logger safe (#436)
    robertmeta: Sweep through docs update/cleanup
    oren: remove duplicate in readme (#435)
    dennwc: fix postgres error on import, fixes #429
    dennwc: Added HasReverse function to path lib (#351)
    drzippie: Added sync.RWMutex to mongo cache  (#380)
    robertmeta: Update docs (README, Locations, Quickstart-As-Lib, Quickstart-As-Application, HACKING, FAQ, Container)
    robertmeta Rerouting CONTRIBUTING to the discourse, updating CONTRIBUTORS to remove mention of CLA
    robertmeta: Moving Hacking from wiki to project
    dennwc: separate log package, resolves #221
    Source code(tar.gz)
    Source code(zip) MB) MB)
    cayley_v0.6.0_linux_386.tar.gz(10.88 MB)
    cayley_v0.6.0_linux_amd64.tar.gz(11.34 MB)
    cayley_v0.6.0_linux_arm.tar.gz(10.63 MB)
    cayley_v0.6.0_src.tar.gz(12.31 MB) MB) MB)
  • v0.5.0(Jul 3, 2016)

    We've spun out of the google namespace, so this is community build number one. There's some good chatter in IRC and places, and expect some notes in the mailing list soon. The project isn't dead, it was just resting.

    Now that we can add contributors, it's time to tag and build a release as a baseline. There may be some turbulence as some longstanding changes get merged over the next version or two, so before we do that, here are some binaries for people to try out the latest.


    • Postgres/SQL backend support
    • Add support for LabelContext() to query the Label field across Quads
    • SaveOptional()
    • Many, many bugfixes

    Full changelog:

    barakmich: Add SaveOptional() to save predicates if they exist, and add the
    dennwc: path: Added SaveOptional
    dennwc: Fix interface conversion in Gremlin
    barakmich: fix build on 1.6 -- more accurate interface conversion
    josephschorr: Make call to `Sprintf` lazy
    barakmich: query/gremlin, graph/path: Add support for querying with labels
    Quentin-M: Fix NPE in SQL initialization
    jzelinskie: dockerfile: fix go install command
    jzelinskie: initial Dockerfile
    barakmich: graph: make quadstore init functions idempotent
    barakmich: Update README to mention Postgres and remove unused trello board
    jzelinskie: add Triple function
    Quentin-M: Fix SLOW DELETEs
    Quentin-M: Fix a deadlock behavior with DELETE transactions
    Quentin-M: Ensure that quads in a transaction are applied in the desired order.
    Quentin-M: Use a Size() estimate for SQL Quadstore when noSizes is enabled.
    barakmich: sql: Combine AND(Fixed, SQL) and fix Save() roundtrips
    barakmich: graph/sql: Use an IN clause when optimizing a fixed iterator
    barakmich: query/gremlin: fix building Or iterator, add test
    barakmich: query/gremlin: Refactor in terms of graph/path
    Quentin-M: Fix NPE in SQL Quadstore
    Quentin-M: Improve Transaction: deduplicate quads, allow adding/removing a quad in the same tx
    barakmich: Fix corners after causing a couple merges
    ds--: Adds exporting capabilities
    barakmich: Add migration tool and use protos in Bolt store
    barakmich: graph: Postgres backend
    sayden: Typo fix when building cayley from scratch
    sayden: Order of parameters when using :a and :d are switched
    Kavec: Refactor for readability
    kortschak: graph/bolt: don't panic on unitialised store
    barakmich: Fixes memstore transaction semantics
    Quentin-M: Make the SQL connection fail-fast
    Quentin-M: Fix NPEs in SQL Next and Contains
    barakmich: Roll the Go version forward on Travis builds (new stable)
    barakmich: Add check for multiple all iterators
    kortschak: internal: move {config,db,http} into internal
    skynet: Update
    neonstalwart: add string comparison to value comparison iterator
    tmlbl: Small REPL Improvements
    igm: Fixed multiplier for position of "label" in case of "po" key entry
    cayleydb: Update
    barakmich: Docs update based on @KamiQuasi #280
    lytics: Use new import path for go-uuid
    jzelinskie: travis.yml: bump appengine dependency
    barakmich: Add transaction (a list of deltas) as a primitive for applying sets o…
    nii236: Widened visualisation box to 100%
    panamafrancis: Added myself to the A+C
    barakmich: Add Save and Has API functions
    Quentin-M: Allow opening a database (bolt, leveldb, mongo) through Go API
    barakmich: Clean up Linkage definition
    allonhadaya: In out predicates
    barakmich: Fix bug where first Bolt iteration ignores deletion
    barakmich: Fix describe in Or iterator
    neonstalwart: collapse 2 iterations into 1 in memstore
    op: Fix nil pointer panic when meta bucket is missing
    barakmich: Fix LevelDB deleted-triple iterator stack overflow bug
    neonstalwart: move cmp to where it's used
    kortschak: graph: remove redundant type
    barakmich: Go API
    heyalexej: update leveldb link and fix some https links in README
    andrew-d: Refactor packages
    andrew-d: Fix TravisCI tests
    andrew-d: Remove deprecated ResultTree API
    Dabaez: Update
    barakmich: Implement the Unique iterator
    Source code(tar.gz)
    Source code(zip) MB) MB)
    cayley_v0.5.0_linux_386.tar.gz(11.33 MB)
    cayley_v0.5.0_linux_amd64.tar.gz(11.86 MB)
    cayley_v0.5.0_linux_arm.tar.gz(11.07 MB) MB) MB)
  • v0.4.1(Apr 26, 2015)

    Point release, to get a number of speedups and fixes out to the binary distribution channel.

    Roadmap for 0.5 includes a number of major open PRs.

    Notable features:

    • #236 Much faster Mongo support
    • #180 No Mongo empty values
    • #153 Gremlin Except() operator
    • #184 Fix Google Appengine Support
    • #235 Repeatable builds with Godep

    Full changelist:

        @jf87: added example n-quad file for gremlin api description
        @barakmich: Mongo Indexed LinksTo
        @jzelinskie: store dependencies' versions with godep
        @barakmich: fix decompressing for http
        @andrew-d: Add myself to AUTHORS + CONTRIBUTORS
        @andrew-d: Add Err() and Close() methods to Iterators
        @barakmich: Fix PrimaryKey Marshalling and add Bolt test
        @alexwlchan: A couple of small spelling fixes in the docs
        @barakmich: Rewrite keys into concrete types, remove key package
        @barakmich: Clean up a little lint and some shadowed variables
        @LAlbertalli: Add options to ignore duplicate or missing quad
        @kortschak: Make query/... interfaces more idiomatic
        @barakmich: bench: Add some grunty Not queries to the integration test (derived from...
        @buley: Misspellings in Gremlin and Config docs
        @mataevs: Except/Not Operator for Gremlin.
        @barakmich: Minor doc fixes
        @kortschak: Provide informative logging for dups/absences
        @bkendall: Prevent empty values in cache (using mongo)
        @kortschak: Make graph.Delta zero state invalid for use
        @kortschak: Ensure callers get errors when they happen
        @varadharajan: Allocate 82 bytes instead of 62 bytes in LevelDB's CreateKeyFor method
        @bcleenders: Prevents repl panic, uses primary key generation for all writers                              
        @panamafrancis: Implementation of the PrimaryKey type
        @barakmich: mathutil is back in line
        @barakmich: temporary travis fix
        @kortschak: Fix leveldb change skew
        @barakmich: Remove the news in the README, add Trello Link
        @kortschak: Issue160
        @kortschak: Don't retain results where the value is empty
        @kortschak: Ensure we don't examine empty token
        @kortschak: Replace DebugString with a well defined type returned by Describe
        @kortschak: Delinting, deadcode removal and vetting                                                                  
    Source code(tar.gz)
    Source code(zip) MB) MB)
    cayley_0.4.1_linux_386.tar.gz(7.86 MB)
    cayley_0.4.1_linux_amd64.tar.gz(8.11 MB)
    cayley_0.4.1_linux_arm.tar.gz(7.76 MB) MB) MB)
  • v0.4.0(Aug 26, 2014)

    Worth noting: you may have to reload your data in this version, as the database format has changed (hence the minor version bump). This is part of working with early software.

    On the plus side, you'll notice quite a few benefits, including the new features.

    For example, the memory benchmarks:

    benchmark                                   old ns/op        new ns/op     delta     mult
    BenchmarkNamePredicate                      917680           1072457       +16.87%   +1.17x
    BenchmarkLargeSetsNoIntersection            176704664        48692651      -72.44%   -3.63x
    BenchmarkVeryLargeSetsSmallIntersection     32566448297      154770005     -99.52%   -208.33x
    BenchmarkHelplessContainsChecker            16041341849      40699233      -99.75%   -400.00x
    BenchmarkNetAndSpeed                        71710442         16658337      -76.77%   -4.30x
    BenchmarkKeanuAndNet                        13858313         12192151      -12.02%   -1.14x
    BenchmarkKeanuAndSpeed                      16161303         15231229      -5.75%    -1.06x
    BenchmarkKeanuOther                         3748121471       60429073      -98.39%   -62.11x
    BenchmarkKeanuBullockOther                  300796920802     99996852      -99.97%   -3333.33x

    If you think those look good, they also get better with bigger backends. The big wins come from optimized iteration, which benefits all backends.

    New in this release:

    • Bolt backend for persistence
    • Log-structure persistence
    • Materialize iterator and related speedups
    • Better memory backend (based on cznic/b)
    • Better Gremlin session handling
    • Underscore.js available in Gremlin

    Shortlist of Bugfixes: #9 Use boltdb in the backend #70 Write-log and as_of_time and replication preparation #93 Simplify the Nexter Interface #107 by default #106 #108 Use cquads in the web UI loader #114 Materializer regression sparking odd results #117 Data-race when handling many simultaneous queries #125 Underscore.js available in Gremlin environment #104 #129 Better REPL support (history, etc) #141 Parser conformance for IRIRef #145 Gremlin workers

    Source code(tar.gz)
    Source code(zip) MB) MB)
    cayley_0.4.0_linux_386.tar.gz(7.78 MB)
    cayley_0.4.0_linux_amd64.tar.gz(7.91 MB)
    cayley_0.4.0_linux_arm.tar.gz(7.69 MB) MB) MB)
  • v0.3.1(Aug 1, 2014)

    New in this release:

    • Loading straight from compressed files
    • New, compilant NQuads parser (strict compliance variation compiled in, available in a future point release).
    • Linux/ARM release included (tried with tiny graphs on Raspberry Pi, though it's slow on the SD)

    Bugfixes: #3: Printing empty fixed iterator #21: Unexpected/incorrect MQL values #72: NQuads silently drops lines with quotes

    Source code(tar.gz)
    Source code(zip) MB) MB)
    cayley_0.3.1_linux_386.tar.gz(7.57 MB)
    cayley_0.3.1_linux_amd64.tar.gz(7.70 MB)
    cayley_0.3.1_linux_arm.tar.gz(7.49 MB) MB) MB)
  • v0.3.0(Jun 28, 2014)

    This is the initial binary release for Cayley, having now become go get friendly. Current feature list from the README is:

    • Written in Go
    • RESTful API
      • or a REPL if you prefer
    • Built-in query editor and visualizer
    • Multiple query languages:
      • Javascript, with a Gremlin-inspired* graph object.
      • (simplified) MQL, for Freebase fans
    • Plays well with multiple backend stores:
    • Modular design; easy to extend with new languages and backends
    • Decent test coverage
    • Speed, where possible.

    No changes, because initial release.

    Source code(tar.gz)
    Source code(zip) MB) MB)
    cayley_0.3.0_linux_386.tar.gz(7.50 MB)
    cayley_0.3.0_linux_amd64.tar.gz(7.64 MB) MB) MB)
An open-source graph database
CockroachDB - the open source, cloud-native distributed SQL database.

CockroachDB is a cloud-native SQL database for building global, scalable cloud services that survive disasters. What is CockroachDB? Docs Quickstart C

CockroachDB 26.3k Jan 2, 2023
TiDB is an open source distributed HTAP database compatible with the MySQL protocol

Slack Channel Twitter: @PingCAP Reddit Mailing list: For support, please contact PingCAP What is TiDB? TiDB ("Ti" stands for Titanium) i

PingCAP 33.1k Jan 9, 2023
RadonDB is an open source, cloud-native MySQL database for building global, scalable cloud services

OverView RadonDB is an open source, Cloud-native MySQL database for unlimited scalability and performance. What is RadonDB? RadonDB is a cloud-native

RadonDB 1.7k Dec 31, 2022
LinDB is an open-source Time Series Database which provides high performance, high availability and horizontal scalability.

LinDB is an open-source Time Series Database which provides high performance, high availability and horizontal scalability. LinDB stores all monitoring data of ELEME Inc, there is 88TB incremental writes per day and 2.7PB total raw data.

LinDB 2.3k Jan 1, 2023
Native GraphQL Database with graph backend

The Only Native GraphQL Database With A Graph Backend. Dgraph is a horizontally scalable and distributed GraphQL database with a graph backend. It pro

Dgraph 18.8k Jan 4, 2023
EliasDB a graph-based database.

EliasDB EliasDB is a graph-based database which aims to provide a lightweight solution for projects which want to store their data as a graph. Feature

Matthias Ladkau 959 Jan 4, 2023
Set out to become the de facto open-source alternative to MongoDB

MangoDB MangoDB is set out to become the de facto open-source alternative to MongoDB. MangoDB is an open-source proxy, which converts MongoDB wire pro

MangoDB 5k Dec 29, 2022
Owl is a db manager platform,committed to standardizing the data, index in the database and operations to the database, to avoid risks and failures.

Owl is a db manager platform,committed to standardizing the data, index in the database and operations to the database, to avoid risks and failures. capabilities which owl provides include Process approval、sql Audit、sql execute and execute as crontab、data backup and recover .

null 34 Nov 9, 2022
Hard Disk Database based on a former database

Hard Disk Database based on a former database

null 0 Nov 1, 2021
Simple key value database that use json files to store the database

KValDB Simple key value database that use json files to store the database, the key and the respective value. This simple database have two gRPC metho

Francisco Santos 0 Nov 13, 2021
Beerus-DB: a database operation framework, currently only supports Mysql, Use [go-sql-driver/mysql] to do database connection and basic operations

Beerus-DB · Beerus-DB is a database operation framework, currently only supports Mysql, Use [go-sql-driver/mysql] to do database connection and basic

Beerus 7 Oct 29, 2022
An embedded key/value database for Go.

bbolt bbolt is a fork of Ben Johnson's Bolt key/value store. The purpose of this fork is to provide the Go community with an active maintenance and de

etcd-io 6.1k Jan 1, 2023
BuntDB is an embeddable, in-memory key/value database for Go with custom indexing and geospatial support

BuntDB is a low-level, in-memory, key/value store in pure Go. It persists to disk, is ACID compliant, and uses locking for multiple readers and a sing

Josh Baker 4k Dec 30, 2022
ACID key-value database.

Coffer Simply ACID* key-value database. At the medium or even low latency it tries to provide greater throughput without losing the ACID properties of

Eduard 32 Dec 7, 2022
A decentralized, trusted, high performance, SQL database with blockchain features

中文简介 CovenantSQL(CQL) is a Byzantine Fault Tolerant relational database built on SQLite: ServerLess: Free, High Availabile, Auto Sync Database Service

CovenantSQL 1.4k Jan 3, 2023
LevelDB key/value database in Go.

This is an implementation of the LevelDB key/value database in the Go programming language. Installation go get R

Suryandaru Triandana 5.5k Jan 1, 2023
immudb - world’s fastest immutable database

immudb Note: The master branch is the joint point for all ongoing development efforts. Thus it may be in an unstable state and should not be used in p

CodeNotary 8k Jan 4, 2023
A high performance NoSQL Database Server powered by Go

LedisDB Ledisdb is a high-performance NoSQL database library and server written in Go. It's similar to Redis but store data in disk. It supports many

LedisDB 3.9k Dec 26, 2022
Lightweight RESTful database engine based on stack data structures

piladb [pee-lah-dee-bee]. pila means stack or battery in Spanish. piladb is a lightweight RESTful database engine based on stack data structures. Crea

Fernando Álvarez 200 Nov 27, 2022