# ssb-gossip

> ssb-server gossip plugin

Latest version **1.1.1** (published 2019-09-26) · MIT license · 0 weekly downloads

## Install

```sh
npm install ssb-gossip
pnpm add ssb-gossip
yarn add ssb-gossip
bun add ssb-gossip
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.1.1 |
| Published | 2019-09-26 |
| First published | 2019-01-05 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 12 |
| Unpacked size | 31.4 KB |
| Known vulnerabilities | 0 (+1 in 1 direct dependencies) |
| Install scripts | no |
| GitHub stars | 10 |
| Author | Dominic Tarr |
| Maintainers | ahdinosaur, aljoscha-meyer, andregarzia, arj03, cel, christianbundy, cryp7ix, dominictarr, happy0, kyphae, luandro, mixmix, mmckegg, noffle, pfrazee, pietgeursen, regular, staltz, vtduncan |

## Links

- npm: https://www.npmjs.com/package/ssb-gossip
- Repository: https://github.com/dominictarr/ssb-gossip
- Issues: https://github.com/dominictarr/ssb-gossip/issues
- npm.io page: https://npm.io/package/ssb-gossip

## Dependencies (12)

- [ip](https://npm.io/package/ip.md) ^1.1.5
- [ssb-ref](https://npm.io/package/ssb-ref.md) ^2.13.9
- [on-wakeup](https://npm.io/package/on-wakeup.md) ^1.0.1
- [pull-ping](https://npm.io/package/pull-ping.md) ^2.0.2
- [deep-equal](https://npm.io/package/deep-equal.md) ^1.0.1
- [statistics](https://npm.io/package/statistics.md) ^3.3.0
- [atomic-file](https://npm.io/package/atomic-file.md) ^1.1.5
- [has-network](https://npm.io/package/has-network.md) 0.0.1
- [pull-notify](https://npm.io/package/pull-notify.md) ^0.1.1
- [pull-stream](https://npm.io/package/pull-stream.md) ^3.6.9
- [muxrpc-validation](https://npm.io/package/muxrpc-validation.md) ^3.0.0
- [on-change-network](https://npm.io/package/on-change-network.md) 0.0.2

## Recent versions

- 1.1.1 (latest) — 2019-09-26
- 1.1.0 — 2019-06-03
- 1.0.10 — 2019-04-17
- 1.0.9 — 2019-04-16
- 1.0.8 — 2019-04-15
- 1.0.7 — 2019-04-15
- 1.0.6 — 2019-03-07
- 1.0.5 — 2019-02-07
- 1.0.4 — 2019-01-27
- 1.0.3 — 2019-01-09
- 1.0.2 — 2019-01-07
- 1.0.1 — 2019-01-05
- 1.0.0 — 2019-01-05

## README

# ssb-gossip

ssb-server gossip plugin

to have a peer to peer network, a ssb instance needs to have some other peers to connect with.
This module keeps track of those peers. There are a number of ways a you can know about a peer,

* observed a local udp broadcast from them [ssb-server/plugins/local](https://github.com/ssbc/ssb-server/blob/master/plugins/local.js)
* received their device-address message [ssb-device-address](https://github.com/ssbc/ssb-device-address)
* received a pub message about them [ssb-gossip/init](https://github.com/ssbc/ssb-gossip/blob/master/init.js#L14-L29)
* configured their address manually as a [seed](https://github.com/ssbc/ssb-gossip/blob/master/init.js#L11-L12)
* or the user called [gossip.add](#add-sync)

Notice these are mostly managed by other plugins.

The gossip plugin then decides when to connect to those peers, which it does mostly randomly.
(connecting randomly means you will _eventually_ connect to everyone, thus a useful database property: [eventual consistency](https://en.wikipedia.org/wiki/Eventual_consistency)) 

## peers: sync

Get the current known peers.

```bash
peers
```

```js
peers(cb)
```

## add: sync

Add a peer.

```bash
#add a multiserver address.
add {addr}
#legacy format
add --host {string} --port {number} --key {feedid}
```

```js
add(addr, cb)
add({ host:, port:, key: }, cb)
```

 - `addr` (address string): A [multiserver address](https://github.com/ssbc/multiserver#address-format)
 - `host` (host string): IP address or hostname.
 - `port` (port number)
 - `key` (feedid)

## remove: sync

Remove an address from the peer table.

```bash
remove {addr}
remove --host {string} --port {number} --key {feedid}
```

```js
remove(addr)
remove({ host:, port:, key: })
```

## ping: duplex

used internally by the gossip plugin to measure latency and clock skew

## connect: async

Add an address to the peer table, and connect immediately.

```bash
connect {addr}
connect --host {string} --port {number} --key {feedid}
```

```js
connect(addr, cb)
connect({ host:, port:, key: }, cb)
```

 - `addr` (address string): An address string, of the following format: `hostname:port:feedid`.
 - `host` (host string): IP address or hostname.
 - `port` (port number)
 - `key` (feedid)


## changes: source

Listen for gossip events.

```bash
changes
```

```js
changes()
```

Events come in the following forms:

```
{ type: 'discover', peer:, source: }
{ type: 'connect', peer: }
{ type: 'connect-failure', peer: }
{ type: 'disconnect', peer: }
```

## reconnect: sync

Tell ssb-server to reinitiate gossip connections now.


## enable: sync

Update the config to enable a gossip type.

```bash
enable {type}
```
```js
enable(type, cb)
```

 - type (string): The type of gossip to enable: local, global, or seed. Default
     global.


## disable: sync

Update the config to disable a gossip type.

```bash
disable {type}
```
```js
disable(type, cb)
```

 - type (string): The type of gossip to enable: local, global, or seed. Default
     global.

## License

MIT

---
_Source: https://npm.io/package/ssb-gossip · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
