gitmyhub

noms

Go ★ 7.4k updated 4y ago ▣ archived

The versioned, forkable, syncable database

Noms was a Git-like database where every data change was versioned, branchable, and mergeable, it is archived and no longer maintained, the README points to Dolt as the active successor built on the same ideas.

GoAmazon S3GraphQLsetup: hardcomplexity 3/5

Noms is an archived database project that is no longer maintained. The README opens with a clear warning: you should not rely on this for any real-world use. If you want something that builds on the same ideas and is actively developed, the README points you to Dolt, which is a fork of Noms that has continued evolving.

When it was active, Noms was designed to work like the version control system Git, but for structured data rather than code files. Just as Git keeps a full history of every change to a codebase, Noms kept every version of a database. You could go back to any earlier state, compare two points in time, or branch off from a past version to experiment without affecting the main data. Multiple copies of a Noms database could be disconnected from each other, then later merged together, in much the same way that developers working offline can later sync their code changes.

Unlike a traditional database where you write commands to insert, update, or delete rows, Noms used a declarative approach. You described what the data should look like right now, and the system figured out what changed and stored only the differences. Because every piece of data was identified by its content rather than a location, writing the same data twice would not create duplicates.

Noms supported storing data either in a local file system or in Amazon S3. It also included experimental support for querying data using GraphQL, though that part of the project was described as incomplete.

The intended use cases were decentralized collaborative applications and mobile apps that need to work offline and then sync up when a connection is available. None of these reached production readiness before development stopped.

The code is written in Go and is available under the Apache 2.0 open source license. Known issues around sync performance, data migration, and garbage collection were never resolved.

Where it fits