GUN is an ecosystem of tools that let you build tomorrow's dApps, today.
Decentralized alternatives to Reddit, YouTube, Wikipedia, etc. are already pushing terabytes of daily P2P traffic on GUN. We are a friendly community creating a free fun future for freedom:






The ecosystem is one nice stack of technologies that looks like this:


For now, it is best to start with GUN and learn the basics:
Quickstart
- Try the interactive tutorial in the browser (5min ~ average developer).
- Or
npm install gun
and run the examples withcd node_modules/gun && npm start
(5min ~ average developer).
Note: If you don't have node or npm, read this first. If the
npm
command line didn't work, you may need tomkdir node_modules
first or usesudo
.
- An online demo of the examples are available here: http://gunjs.herokuapp.com/
- Or write a quick app: (try now in jsbin)
<script src="https://cdn.jsdelivr.net/npm/gun/gun.js"></script>
<script>
// var Gun = require('gun'); // in NodeJS
// var Gun = require('gun/gun'); // in React
var gun = Gun();
gun.get('mark').put({
name: "Mark",
email: "mark@gunDB.io",
});
gun.get('mark').on(function(data, key){
console.log("update:", data);
});
</script>
- Or try something mind blowing, like saving circular references to a table of documents! (play)
var cat = {name: "Fluffy", species: "kitty"};
var mark = {boss: cat};
cat.slave = mark;
// partial updates merge with existing data!
gun.get('mark').put(mark);
// access the data as if it is a document.
gun.get('mark').get('boss').get('name').val(function(data, key){
// `val` grabs the data once, no subscriptions.
console.log("Mark's boss is", data);
});
// traverse a graph of circular references!
gun.get('mark').get('boss').get('slave').once(function(data, key){
console.log("Mark is the slave!", data);
});
// add both of them to a table!
gun.get('list').set(gun.get('mark').get('boss'));
gun.get('list').set(gun.get('mark'));
// grab each item once from the table, continuously:
gun.get('list').map().once(function(data, key){
console.log("Item:", data);
});
// live update the table!
gun.get('list').set({type: "cucumber", goal: "scare cat"});
Support
Thanks to:
Lorenzo Mangani,
Sam Liu,
Daniel Dombrowsky,
Vincent Woo,
AJ ONeal,
Bill Ottman,
Sean Matheson,
Alan Mimms,
Dário Freire,
John Williamson
- Join others in sponsoring code: https://www.patreon.com/gunDB !
- Ask questions: http://stackoverflow.com/questions/tagged/gun ?
- Found a bug? Report at: https://github.com/amark/gun/issues ;
- Need help? Chat with us: https://gitter.im/amark/gun .
Documentation
API reference |
Tutorials |
Examples |
GraphQL |
Electron |
React Native |
Vue |
React |
Webcomponents |
CAP Theorem Tradeoffs |
How Data Sync Works |
How GUN is Built |
Crypto Auth |
Modules |
Roadmap |
This would not be possible without community contributors, big shout out to:
anywhichway (Block Storage); beebase (Quasar); BrockAtkinson (brunch config); Brysgo (GraphQL); d3x0r (SQLite); forrestjt (file.js); hillct (Docker); JosePedroDias (graph visualizer); JuniperChicago (cycle.js bindings); jveres (todoMVC); kristianmandrup (edge); Lightnet (User Kitchen Sink Playground); lmangani (Cytoscape Visualizer, Cassandra, Fastify, LetsEncrypt); mhelander (SEA); omarzion (Sticky Note App); PsychoLlama (LevelDB); RangerMauve (schema); robertheessels (gun-p2p-auth); sbeleidy; Sean Matheson (Observable/RxJS/Most.js bindings); Stefdv (Polymer/web components); sjones6 (Flint); zrrrzzt (JWT Auth); 88dev (Database Viewer);
I am missing many others, apologies, will be adding them soon!
Deploy
To quickly spin up a Gun test server for your development team, utilize either Heroku or Docker or any variant thereof Dokku, Flynn.io, now.sh, etc. !
Heroku
Or:
git clone https://github.com/amark/gun.git
cd gun
heroku create
git push -f heroku HEAD:master
Then visit the URL in the output of the 'heroku create' step, in a browser.
Now.sh
npm install -g now
now --npm amark/gun
Then visit the URL in the output of the 'now --npm' step, in your browser.
Docker
Pull from the Docker Hub . Or:
docker run -p 8765:8765 gundb/gun
Or build the Docker image locally:
git clone https://github.com/amark/gun.git
cd gun
docker build -t myrepo/gundb:v1 .
docker run -p 8765:8765 myrepo/gundb:v1
Or, if you prefer your Docker image with metadata labels (Linux/Mac only):
npm run docker
docker run -p 8765:8765 username/gun:git
Then visit http://localhost:8765 in your browser.
License
Designed with ♥ by Mark Nadal, the GUN team, and many amazing contributors.
Openly licensed under Zlib / MIT / Apache 2.0.