Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up

Back end web app services over WebRTC.

License

NotificationsYou must be signed in to change notification settings

chr15m/bugout

Repository files navigation

Browser-to-browser networking built onWebTorrent. Web service bug-out bag.Messageboard demo.Bugout demo.

  • Easily send messages directly between browsers.
  • Write servers that run in a browser tab.
  • Host backend services without a VPS, domain or SSL cert.
  • Easy to deploy & "self-hosted" servers by leaving a browser tab open.
  • Client-server over WebRTC instead of HTTPS.

The old way:

The new way:

Bugout is a humble attempt to re-decentralize the web a little.

This is a functional prototype. It's pre-alpha quality software. It will allow people to connect directly to your browser from outside your network. Be careful.

Demos |Install |Use |API documentation |Server boilerplate |Deploy headless

Demos

Install

Using npm:

npm i bugout

Script tag:

<scriptsrc="https://chr15m.github.io/bugout/bugout.min.js"></script>

Clojurescript:

:install-depsfalse:npm-deps {"bugout""chr15m/bugout"}:foreign-libs [{:file"node_modules/bugout/docs/bugout.min.js":provides ["cljsjs.bugout"]:global-exports {cljsjs.bugout Bugout}}](:require [cljsjs.bugout:as Bugout])

Use

varBugout=require("bugout");

To create a Bugout server that runs in a browser tab:

varb=newBugout();// get the server address (public key hash) to share with clients// this is what clients will use to connect back to this serveralert(b.address());// register an API call the remote user can makeb.register("ping",function(address,args,callback){// modify the passed arguments and replyargs.hello="Hello from "+b.address();callback(args);});// save this server's session key seed to re-uselocalStorage["bugout-server-seed"]=b.seed;// passing this back in to Bugout() means the// server-public-key stays the same between reloads// for example:// b = new Bugout({seed: localStorage["bugout-server-seed"]});

To start a client connection specify the server's public key to connect to (b.address() from the server):

varb=newBugout("server-public-key");// wait until we see the server// (can take a minute to tunnel through firewalls etc.)b.on("server",function(address){// once we can see the server// make an API call on itb.rpc("ping",{"hello":"world"},function(result){console.log(result);// {"hello": "world", "pong": true}// also check result.error});});// save this client instance's session key seed to re-uselocalStorage["bugout-seed"]=JSON.stringify(b.seed);

Both clients and servers can interact with other connected clients:

// receive all out-of-band messages from the server// or from any other another connected clientb.on("message",function(address,message){console.log("message from",address,"is",message);});// broadcast an unecrypted message to all connected clientsb.send({"hello":"all!"});// send an encrypted message to a specific clientb.send(clientaddress,"Hello!");// whenever we see a new client in this swarmb.on("seen",function(address){// e.g. send a message to the client we've seen with this address});// you can also close a bugout channel to stop receiving messages etc.b.close();

Note that you can connect to a generic peer-to-peer swarm without a server by simply using a non-public-key identifier which can be any string as long as it's the same for every client connecting:

varb=newBugout("some shared swarm identifier");

Boilerplate

Thequick-start boilerplate server in a single HTML file will quickly get you up and running with your own Bugout server.

Options

See theAPI documentation for options.

Turn on debug logging

localStorage.debug="bugout";

Deploy

Bugout servers can deployed and run inside of browser tabs on long running PCs but you can also deploy them "headless" more like traditional servers. There are a couple of ways of doing that as follows:

Headless browser server

Bugout launcher is a nodejs based helper script to launch and run your Bugout servers from the command line using a headless browser instance.

Nodejs

Check outthe nodejs demo for an example of running a Bugout service under Node. Note that thewrtc library is not that stable at the time of writing and running Bugout in headless Chrome or Firefox seems to work better. Bugout servers running inside nodejs obviously won't have access to browser facilities like localStorage.

Stay updated

Subscribe atbugout.network for updates and new releases.

The FAMGA virus

Infected with theFAMGA virus everybody's eating brains. Time to grab yr bugout box & hit the forest.

About

Back end web app services over WebRTC.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

[8]ページ先頭

©2009-2025 Movatter.jp