github.com/jbendotnet/noms@v0.0.0-20190904222105-c43e4293ea92/doc/decent/about.md (about) 1 [Home](../../README.md) » [Use Cases](../../README.md#use-cases) » **Decentralized** » 2 3 **About** | [Quickstart](quickstart.md) | [Architectures](architectures.md) | [P2P Chat Demo](demo-p2p-chat.md) | [IPFS Chat Demo](demo-ipfs-chat.md) 4 <br><br> 5 # Noms — The Decentralized Database 6 7 [Noms](http://noms.io) makes it ~~easy~~ tractable to create rich, 8 multiuser, collaborative, fully-decentralized applications. 9 10 Like most databases, Noms features a rich data model, atomic 11 transactions, support for large-scale data, and efficient searches, 12 scans, reads, and updates. 13 14 Unlike any other database, Noms has built-in multiparty sync and 15 conflict resolution. This feature makes Noms a very good fit for P2P 16 decentralized applications. 17 18 Any number of dapp peers in a P2P network can 19 concurrently modify the same logical Noms database, and continuously 20 and efficiently sync their changes with each other. All peers will 21 converge to the same state. 22 23 For many applications, peers can store an entire local copy of the 24 data they are interested in. For larger applications, it should be 25 possible to back Noms by a decentralized blockstore like IPFS, Swarm, 26 or Sia (or in the future, Filecoin), and store large-scale data in a 27 completely decentralized way, without replicating it on every 28 node. Noms also has a blockstore for S3, which is ideal for 29 applications that have some centralized components. 30 31 **We'd love to talk to you about the possibility of using noms in your project** so please don't hestitate to contact us at [noms@attic.io](mailto:noms@attic.io). 32 33 ## How it Works 34 35 Think of Noms like a programmable Git: changes are bundled as commits 36 which reference previous states of the database. Apps pull changes 37 from peers and merge them using a principled set of APIs and 38 strategies. Except that rather than users manually pulling and 39 merging, applications typically do this continuously, automatically 40 converging to a shared state. 41 42 Your application uses a [Go client 43 library](https://github.com/attic-labs/noms/blob/master/doc/go-tour.md) 44 to interact with Noms data. There is also a [command-line 45 interface](https://github.com/attic-labs/noms/blob/master/doc/cli-tour.md) 46 for working with data and initial support for a [GraphQL-based query 47 language](https://github.com/attic-labs/noms/blob/master/go/ngql/README.md). 48 49 Some additional features include: 50 * **Versioning**: It’s easy to use, compare, or revert to older database versions 51 * **Efficient diffs**: diffing even huge datasets is efficient due to 52 noms’ use of a novel BTree-like data structure called a [Prolly 53 Tree](https://github.com/attic-labs/noms/blob/master/doc/intro.md#prolly-trees-probabilistic-b-trees) 54 * **Efficient storage**: data are chunked and content-addressable, so 55 there is exactly one copy of each chunk in the database, shared by 56 other data that reference it. Small changes to massive data 57 structures always result in small operations. 58 * **Verifiable**: The entire database rolls up to a single 20-byte hash 59 that uniquely represents the database at that moment - anyone can 60 verify that a particular database hashes to the same value 61 62 Read the [Noms design overview](https://github.com/attic-labs/noms/blob/master/doc/decent/intro.md). 63 64 ## Status 65 66 For overall status of the database, see [Noms Status](../../README.md#status). 67 68 For the decentralized use case in particular: we are fairly confident in this approach and are actively looking for partners to work with to build it out. 69 70 - [x] Demonstrate core concept of using Noms to continuously sync across many users (Done! See noms-chat demos) 71 - [ ] Demonstrate using libp2p or similar to traverse NATs 72 - [ ] Investigate backing IPFS with Noms rather than the reverse - this should improve stability and dramatically improve local performance 73 - [ ] Demonstrate using IPFS with a schema that permits nodes to disappear 74 75 **_If you would like to use noms in your project we’d love to hear from you_**: 76 drop us an email ([noms@attic.io](mailto:noms@attic.io)) or send us a 77 message in slack ([slack.noms.io](http://slack.noms.io)).