{"id":13469781,"url":"https://github.com/balzack/databag","last_synced_at":"2025-05-14T11:11:10.830Z","repository":{"id":41061332,"uuid":"440314715","full_name":"balzack/databag","owner":"balzack","description":"fast \u0026 lightweight self-hosted messenger","archived":false,"fork":false,"pushed_at":"2025-04-11T22:07:38.000Z","size":43799,"stargazers_count":1006,"open_issues_count":44,"forks_count":57,"subscribers_count":19,"default_branch":"main","last_synced_at":"2025-04-11T23:22:22.486Z","etag":null,"topics":["android","chat-application","decentralized","dweb","end-to-end-encryption","fdroid","federated","golang","ios","messenger","openwrt","raspberry-pi","raspberry-pi-zero","react-native","reactjs","self-sovereign-identity","selfhosted","video-chat","webrtc"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/balzack.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-12-20T21:45:16.000Z","updated_at":"2025-04-11T22:07:42.000Z","dependencies_parsed_at":"2023-10-12T05:26:16.756Z","dependency_job_id":"6b32e3ff-cb29-4470-bfe0-161e85313ee4","html_url":"https://github.com/balzack/databag","commit_stats":{"total_commits":1950,"total_committers":11,"mean_commits":"177.27272727272728","dds":"0.37589743589743585","last_synced_commit":"3141ba09e94327a743b8c9327440dc86ebcc0b58"},"previous_names":[],"tags_count":21,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/balzack%2Fdatabag","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/balzack%2Fdatabag/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/balzack%2Fdatabag/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/balzack%2Fdatabag/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/balzack","download_url":"https://codeload.github.com/balzack/databag/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248631225,"owners_count":21136550,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android","chat-application","decentralized","dweb","end-to-end-encryption","fdroid","federated","golang","ios","messenger","openwrt","raspberry-pi","raspberry-pi-zero","react-native","reactjs","self-sovereign-identity","selfhosted","video-chat","webrtc"],"created_at":"2024-07-31T16:00:15.871Z","updated_at":"2025-04-12T20:35:50.449Z","avatar_url":"https://github.com/balzack.png","language":"TypeScript","funding_links":[],"categories":["TypeScript","JavaScript","置顶","Software","Apps","android","Communications","Projects"],"sub_categories":["07、安全与隐私工具","Communication - Custom Communication Systems","Communication","Chat and Messaging","Chat"],"readme":"\n[![contribute.design](https://contribute.design/api/shield/balzack/databag)](https://contribute.design/balzack/databag)\n\n\u003cdiv align=\"center\"\u003e\n  \u003ca href=\"#\"\u003e\u003cimg src=\"/doc/icon_v2.png\" width=\"8%\" style=\"border-radius:50%\"\u003e\u003c/a\u003e\n  \u003ch3 align=\"center\"\u003eDatabag\u003c/h3\u003e\n  \u003cp align=\"center\"\u003eA federated messenger for self-hosting\u003c/p\u003e\n\u003c/div\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"/doc/design_overview.md\"\u003e-\u003e Design Overview \u003c-\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cbr\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"/doc/mobile.png\"\u003e\u003cimg src=\"/doc/mobile.png\" width=\"48%\"/\u003e\u003c/a\u003e\n  \u0026nbsp;\u0026nbsp;\n  \u003ca href=\"/doc/browser.png\"\u003e\u003cimg src=\"/doc/browser.png\" width=\"48%\"/\u003e\u003c/a\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n  \u003csub\u003eMobile and Browser App Screens\u003c/sub\u003e\n\u003c/p\u003e\n\u003cbr\u003e\n\nDatabag is designed for efficiency, consuming minimal hosting resources. Notable features include:\n- Decentralized (direct communication between app and server node)\n- Federated (accounts on different nodes can communicate)\n- Public-Private key based identity (not bound to any blockchain or hosting domain)\n- End-to-End encryption (the hosting admin cannot view topics if sealed)\n- Audio and Video Calls (nat traversal requires separate relay server)\n- Topic based threads (messages organized by topic not contacts)\n- Unlimited participants (no limit on group thread members)\n- Lightweight (server can run on a raspberry pi zero v1.3)\n- Low latency (use of websockets for push events to avoid polling)\n- Unlimited accounts per node (host for your whole family)\n- Mobile alerts for new contacts, messages, and calls (supports UnifiedPush, FCM, APN)\n- Multi-Factor Authentication (integrates with TOTP apps)\n\n\u003cbr\u003e\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://f-droid.org/en/packages/com.databag/\"\u003e\n    \u003cimg src=\"/doc/fdroid.png\" width=\"18%\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://apps.apple.com/us/app/databag/id6443741428\"\u003e\n    \u003cimg src=\"/doc/astore.png\" width=\"18%\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://play.google.com/store/apps/details?id=com.databag\"\u003e\n    \u003cimg src=\"/doc/gplay.png\" width=\"18%\"\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\nThe app is available on fdroid as well as the google and apple stores. You can test out the project [here](https://databag.coredb.org/#/create), but don't post anything important as this server is regularly wiped.\n### Design \nRead the [Design Guidelines](https://github.com/balzack/databag/blob/main/.design/DESIGN.md). Link to [Figma File](https://www.figma.com/design/eVFi8bYlybn5KeyEePEaey/Databag---Github?node-id=1-6\u0026t=Is2AiTfwktFO5aY0-1). Feel free to duplicate the Figma file to edit. Feedback on the UI/UX, bugs or features is greatly appreciated.\n\n## Installation\n\nTo 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). \n\n### Docker Compose \n\nLaunch with dockerhub container using docker compose:\n\n#### Standard launch\n```shell\n# From the net/container sub directory:\ndocker-compose -f compose.yaml -p databag up\n```\n\n#### Launch with certbot https certificate\n```shell\n# FIRST: create a DNS entry in your DNS to point your desired subdomain to your host\n# SECOND: edit the net/container/docker-compose-swag.yml to include your domain name\n# THIRD: From the root of the project directory:\nmkdir -p ~/appdata\ndocker-compose -f net/container/docker-compose-swag.yml -p databag up\n```\n\n### Example with Portainer and Nginx Proxy Manager\n\nFrom Portainer:\n  - In the volume view, click add volume:\n    - Enter a name, then click 'Create the volume'\n  - In the container view, click add container:\n    - In the 'Image' field enter 'balzack/databag:latest'\n    - Click 'publish a new network port', and select port 7000 for both host and container\n    - Under 'Advanced container settings', select 'Env', and click 'Add Environment Variable'\n      - Enter 'Name' as 'ADMIN' and your admin password [password]\n    - Under 'Advanced container settings', select 'Volumes', then 'map additional volume'\n      - Enter '/var/lib/databag' for 'container' and the created volume for 'volume'\n    - Click 'Deploy the Container'\n\nFrom Nginx Proxy Manager:\n  - Add a host and specify:\n    - Hostname [hostname.domain]\n    - Portainer IP address [address]\n    - Port '7000'\n    - Request new SSL certificate\n\n\u003cdetails\u003e\n  \u003csummary\u003eNginx Proxy config\n➡️ Click to expand ⬅️\n  \u003c/summary\u003e\n\n  ```\nserver {\n  server_name your.site.tld;\n\nlocation / {\n    proxy_http_version 1.1;\n    proxy_set_header Upgrade $http_upgrade;\n    proxy_set_header Connection \"Upgrade\";\n    proxy_set_header Host $host;\n    proxy_pass http://127.0.0.1:7000;\n    client_max_body_size 0;\n    proxy_max_temp_file_size 0;\n\n}\n\n    listen 443 ssl http2;\n    ssl_certificate /etc/letsencrypt/live/your.site.tld/fullchain.pem;\n    ssl_certificate_key /etc/letsencrypt/live/your.site.tld/privkey.pem;\n    include /etc/letsencrypt/options-ssl-nginx.conf;\n    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;\n    add_header Strict-Transport-Security \"max-age=0\";\n\n}\n\nserver {\n    if ($host = your.site.tld) {\n        return 301 https://$host$request_uri;\n    }\n  listen 80;\n  server_name your.site.tld;\n    return 404;\n}\n```\n\u003c/details\u003e\n\nFrom Your Browser:\n  - Enter your server address in the address bar [hostname.domain]\n    - Click the cog icon in the top right\n    - Enter your admin password: [password]\n    - Click the cog icon in the dashboard\n      - Enter Federated Host as [hostname.domain]\n      - Click 'Save'\n    - Click the user icon to generate a new account link\n      - Follow the link to create an account\n\n### Other installation options\n\nInstall without a container on a Raspberry Pi Zero [here](/doc/pizero.md).\n\nInstall without a container in AWS [here](/doc/aws.md).\n\nIntegrate Databag in an OpenWrt firmware [here](/doc/openwrt.md).\n\n1-click installs in [CapRover](https://caprover.com/), [CasaOS](https://casaos.io), [Unraid](https://unraid.net/), [Runtipi](https://www.runtipi.io/), [Kubero](https://www.kubero.dev/), [Umbrel](https://umbrel.com/)\n\n## Audio and Video Calls\n\nDatabag provides audio and video calling and relies on a STUN/TURN relay server for NAT traversal. Testing was done with both [coturn](https://github.com/coturn/coturn) and [cloudflare](https://developers.cloudflare.com/calls/turn/) and should work with any implementation. Instructions for installing a coturn server are provided [here](https://gabrieltanner.org/blog/turn-server/).\n\nIf you want to enable audio and video calls, you should setup your own relay server or use the cloudflare [turn service](https://developers.cloudflare.com/calls/turn/). For testing purposes you can however use the demo relay server configuration. In the admin configuration modal, set:\n  - Enable WebRTC Calls: -switch on-\n  - WebRTC Server URL: turn:34.210.172.114:3478?transport=udp\n  - WebRTC Username: user\n  - WebRTC Password: pass\n\n### Roadmap\n\nPlease add any missing features; [here](/doc/backlog.md) is the current backlog. Features are prioritized based on interest from the community.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbalzack%2Fdatabag","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbalzack%2Fdatabag","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbalzack%2Fdatabag/lists"}