aboutsummaryrefslogtreecommitdiffstats
path: root/docs/diy-dat.md
diff options
context:
space:
mode:
Diffstat (limited to 'docs/diy-dat.md')
-rw-r--r--docs/diy-dat.md41
1 files changed, 41 insertions, 0 deletions
diff --git a/docs/diy-dat.md b/docs/diy-dat.md
new file mode 100644
index 0000000..fb16fc1
--- /dev/null
+++ b/docs/diy-dat.md
@@ -0,0 +1,41 @@
+# DIY Dat
+
+This document shows how to write your own compatible `dat` client using node modules.
+
+The three essential node modules are called [hyperdrive](https://npmjs.org/hyperdrive), [hyperdrive-archive-swarm](https://npmjs.org/hyperdrive-archive-swarm) and [level](https://npmjs.org/level). Hyperdrive does file synchronization and versioning, hyperdrive-archive-swarm does peer discovery over local networks and the Internet, and level provides a local LevelDB for storing metadata. More details are available in [How Dat Works](how-dat-works.md). The [dat](https://npmjs.org/dat) module itself is just some code that combines these modules and wraps them in a command-line API.
+
+Here's the minimal code needed to download data from a dat:
+
+```js
+// run this like: node thisfile.js 4c325f7874b4070blahblahetc
+// the dat link someone sent us, we want to download the data from it
+var link = new Buffer(process.argv[2], 'hex')
+
+var Hyperdrive = require('hyperdrive')
+var Swarm = require('hyperdrive-archive-swarm')
+var level = require('level')
+var raf = require('random-access-file')
+var each = require('stream-each')
+
+var db = level('./dat.db')
+var drive = Hyperdrive(db)
+var archive = drive.createArchive(link, {
+ file: function (name) {
+ return raf(path.join(self.dir, name))
+ }
+})
+var swarm = Swarm(archive)
+
+archive.open(function (err) {
+ if (err) return console.error(err)
+ each(archive.list({live: archive.live}), function (data, next) {
+ var startBytes = self.stats.bytesDown
+ archive.download(data, function (err) {
+ if (err) return console.error(err)
+ console.log('file downloaded', data.relname)
+ next()
+ })
+ }, done)
+})
+
+```