[![contribute.design](https://contribute.design/api/shield/balzack/databag)](https://contribute.design/balzack/databag)
Databag
Communication for the Decentralized Web
Mobile and Browser App Screens
Databag is a self-hosted messaging service. Notable features include:
- Decentralized (direct communication between app and contact's node)
- Federated (accounts on different nodes can communicate)
- Public-private key based identity (not bound to any blockchain or hosting domain)
- End-to-end encryption (the hosting admin cannot view sealed topics)
- Audio and Video Calls (enabled with separate relay server)
- Topic based threads (messages organized by topic not contacts)
- Lightweight (server runs on a raspberry pi zero v1.3)
- Low latency (use of websockets for push events to avoid polling)
- Responsive (renders well on phone, tablet and pc)
- Unlimited accounts per node (host for your whole family)
- Mobile alerts (push notifications on new contacts and messages)
The app is available in the google and apple stores. You can also test out the project [here](https://databag.coredb.org/#/create), but don't post anything important as this server is regularly wiped. Feedback on the UI/UX, bugs or features is greatly appreciated.
## Installation
To use databag, you will need a DNS name pointing to your node with a certificate. You can deploy a node manually, but you will have a much easier time using a container service. Containers for arm64 and amd64 are available [here](https://hub.docker.com/r/balzack/databag/tags).
### Docker Compose Command
From the net/container sub directory:
- sudo docker-compose -f compose.yaml -p databag up
### Example with Portainer and Nginx Proxy Manager
From Portainer:
- In the volume view, click add volumen:
- Enter a name, then click 'Create the volume'
- In the container view, click add container:
- In the 'Image' field enter 'balzack/databag:latest'
- Click 'publish a new network port', and select port 7000 for both host and container
- Under 'Advanced container settings', select 'Env', and click 'Add Environment Variable'
- Enter 'Name' as 'ADMIN' and your admin password [password]
- Under 'Advanced container settings', select 'Volumes', then 'map additional volume'
- Enter '/var/lib/databag' for 'container' and the created volume for 'volume'
- Click 'Deploy the Container'
From Nginx Proxy Manager:
- Add a host and specify:
- Hostname [hostname.domain]
- Portainer IP address [address]
- Port '7000'
- Request new SSL certificate
From Your Browser:
- Enter your server address in the address bar [hostname.domain]
- Click the cog icon in the top right
- Enter your admin password: [password]
- Click the cog icon in the dashboard
- Enter Federated Host as [hostname.domain]
- Click 'Save'
- Click the user icon to generate a new account link
- Follow the link to create an account
### Other installation options
Instruction for installing without a container on a Raspberry Pi Zero are [here](/doc/pizero.md).
Instruction for installing without a container in AWS are [here](/doc/aws.md).
## Audio and Video Calls
Databag depends on a separate STUN/TURN relay server to provide audio and video calls. Testing was done with both [cuturn](https://github.com/coturn/coturn) and [pion](https://github.com/pion/turn) and should work with any implementation. Instruction for installing a coturn server are provided [here](https://gabrieltanner.org/blog/turn-server/).
If you want to enable audio and video calls, you need setup your own relay server. For testing purposes you can however use the demo relay server configuration. In the admin page set:
- Enable WebRTC Calls: -switch on-
- WebRTC Server URL: turn:34.210.172.114:3478?transport=udp
- WebRTC Username: user
- WebRTC Password: pass