Noms

The versioned, forkable, syncable database
Alternatives To Noms
Project NameStarsDownloadsRepos Using ThisPackages Using ThisMost Recent CommitTotal ReleasesLatest ReleaseOpen IssuesLicenseLanguage
Noms7,50442 years ago11April 06, 2021295apache-2.0Go
The versioned, forkable, syncable database
Zsh Z1,401
a month ago12mitShell
Jump quickly to directories that you have visited "frecently." A native Zsh port of z.sh with added features.
Datakit999
a year ago34apache-2.0OCaml
Connect processes into powerful data pipelines with a simple git-like filesystem interface
Sirdb531
7 months ago3agpl-3.0JavaScript
:man: a simple, git diffable JSON database on yer filesystem. By the power of NodeJS
Dotmesh518
3 years ago217apache-2.0Go
dotmesh (dm) is like git for your data volumes (databases, files etc) in Docker and Kubernetes
Libsqlfs480
44a year ago1March 24, 20153lgpl-2.1C
a library that implements a POSIX style filesystem on top of an SQLite database
Fastcfs426
5 days ago4agpl-3.0C
A high performance distributed file system which can be used as the back-end storage of databases, K8s and VM etc.
Periscope339
24 days ago8December 26, 20214gpl-3.0Go
Periscope gives you "duplicate vision" to help you organize and de-duplicate your files without losing data 🔭
Filebase252342 years ago27February 24, 201921mitPHP
A Simple but Powerful Flat File Database Storage.
Lolcate Rs179
2 years ago8December 03, 202010gpl-3.0Rust
Lolcate -- A comically fast way of indexing and querying your filesystem. Replaces locate / mlocate / updatedb. Written in Rust.
Alternatives To Noms
Select To Compare


Alternative Project Comparisons
Readme

Warning - This project is not active

Noms is not being maintained. You shouldn't use it, except maybe for fun or research.

If you are interested in something like Noms, you probably want Dolt (dolthub/dolt) which is a fork of this project and actively maintained.

Send me (aaron at aaronboodman.com) a message if you have questions.


Use Cases  |  Setup  |  Status  |  Documentation  |  Contact

Build Status Docker Build Status GoDoc

Welcome

Noms is a decentralized database philosophically descendant from the Git version control system.

Like Git, Noms is:

  • Versioned: By default, all previous versions of the database are retained. You can trivially track how the database evolved to its current state, easily and efficiently compare any two versions, or even rewind and branch from any previous version.
  • Synchronizable: Instances of a single Noms database can be disconnected from each other for any amount of time, then later reconcile their changes efficiently and correctly.

Unlike Git, Noms is a database, so it also:

  • Primarily stores structured data, not files and directories (see: the Noms type system)
  • Scales well to large amounts of data and concurrent clients
  • Supports atomic transactions (a single instance of Noms is CP, but Noms is typically run in production backed by S3, in which case it is "effectively CA")
  • Supports efficient indexes (see: Noms prolly-trees)
  • Features a flexible query model (see: GraphQL)

A Noms database can reside within a file system or in the cloud:

  • The (built-in) NBS ChunkStore implementation provides two back-ends which provide persistence for Noms databases: one for storage in a file system and one for storage in an S3 bucket.

Finally, because Noms is content-addressed, it yields a very pleasant programming model.

Working with Noms is declarative. You don't INSERT new data, UPDATE existing data, or DELETE old data. You simply declare what the data ought to be right now. If you commit the same data twice, it will be deduplicated because of content-addressing. If you commit almost the same data, only the part that is different will be written.


Use Cases

Decentralization

Because Noms is very good at sync, it makes a decent basis for rich, collaborative, fully-decentralized applications.

Mobile Offline-First Database

Embed Noms into mobile applications, making it easier to build offline-first, fully synchronizing mobile applications.


Install

  1. Download the latest release:
  1. Unzip the directory somewhere and add it to your $PATH
  2. Verify Noms is installed correctly:
$ noms version
format version: 7.18
built from <developer build>

Run

Import some data:

go install github.com/attic-labs/noms/samples/go/csv/csv-import
curl 'https://data.cityofnewyork.us/api/views/kku6-nxdu/rows.csv?accessType=DOWNLOAD' > /tmp/data.csv
csv-import /tmp/data.csv /tmp/noms::nycdemo

Explore:

noms show /tmp/noms::nycdemo

Should show:

struct Commit {
  meta: struct Meta {
    date: "2017-09-19T19:33:01Z",
    inputFile: "/tmp/data.csv",
  },
  parents: set {},
  value: [  // 236 items
    struct Row {
      countAmericanIndian: "0",
      countAsianNonHispanic: "3",
      countBlackNonHispanic: "21",
      countCitizenStatusTotal: "44",
      countCitizenStatusUnknown: "0",
      countEthnicityTotal: "44",
...

Status

Nobody is working on this right now. You shouldn't rely on it unless you're willing to take over development yourself.

Major Open Issues

These are the major things you'd probably want to fix before relying on this for most systems.


Learn More About Noms

For the decentralized web: The Decentralized Database

Learn the basics: Technical Overview

Tour the CLI: Command-Line Interface Tour

Tour the Go API: Go SDK Tour


Contact Us

Interested in using Noms? Awesome! We would be happy to work with you to help understand whether Noms is a fit for your problem. Reach out at:

Licensing

Noms is open source software, licensed by Attic Labs, Inc. under the Apache License, Version 2.0.

Popular Database Projects
Popular Filesystem Projects
Popular Data Storage Categories

Get A Weekly Email With Trending Projects For These Categories
No Spam. Unsubscribe easily at any time.
Golang
Database
Filesystem
Tour