xmpp resources https://www.reddit.com/r/xmpp/comments/cavyiv/good_xmpp_clients_and_servers/ clients https://xmpp.org/getting-started/ one such is https://mov.im/login, conversejs and gajim for windows and linux ie https://github.com/gajim/gajim - xmpp providers: https://providers.xmpp.net/provider/07f.de/, https://providers.xmpp.net/provider/chapril.org/ (weird capchas) , https://providers.xmpp.net/provider/movim.eu/ (50 mb max file) https://07f.de/ provides other free services too dino client https://github.com/dino/dino/ after building it,to have different profiles `XDG_DATA_HOME="$HOME/.dino_profiles/work/share" XDG_CONFIG_HOME="$HOME/.dino_profiles/work/config" dino` or `XDG_DATA_HOME="$HOME/.dino_profiles/work/" dino` **server** prosody https://prosody.im/doc/installing_from_source first install lua and all the dependecnies `apt install lua5.4 liblua5.4-dev libicu-dev libssl-dev` and also luarocks too then more lua dependencies using luarocks to use luarocks directly `luarocks install luaexpat --local --lua-version=5.4` similarly do same for luafilesystem and luaunbound too this can be headache too like setting ssl and all that thing so using snikket can help too, only con is more space required and cant be simply used in termux **snikket** https://snikket.org/service/quickstart/ if using podman then add `docker.io/` before images so podman knows to fetch from here and also change the port too by changing `snikket.conf` and adding these lines ```txt SNIKKET_TWEAK_HTTP_PORT=5080 SNIKKET_TWEAK_HTTPS_PORT=5443 # The primary domain of your Snikket instance SNIKKET_DOMAIN=snikket.local # An email address where the admin can be contacted # (also used to register your Let's Encrypt account to obtain certificates) SNIKKET_ADMIN_EMAIL=admin@localhost ``` Also create a `.env` file and ```txt SNIKKET_DATA_DIR=/home/hpmi/Downloads/executables/Snikket/data ``` and in compose file make these changes ```yml version: "3.3" services: snikket_proxy: container_name: snikket-proxy image: docker.io/snikket/snikket-web-proxy:stable env_file: snikket.conf network_mode: host volumes: - ${SNIKKET_DATA_DIR}:/snikket - acme_challenges:/var/www/html/.well-known/acme-challenge restart: "unless-stopped" snikket_certs: container_name: snikket-certs image: docker.io/snikket/snikket-cert-manager:stable network_mode: host env_file: snikket.conf volumes: - ${SNIKKET_DATA_DIR}:/snikket - acme_challenges:/var/www/.well-known/acme-challenge restart: "unless-stopped" snikket_portal: container_name: snikket-portal image: docker.io/snikket/snikket-web-portal:stable network_mode: host env_file: snikket.conf restart: "unless-stopped" snikket_server: container_name: snikket image: docker.io/snikket/snikket-server:stable network_mode: host volumes: - ${SNIKKET_DATA_DIR}:/snikket env_file: snikket.conf restart: "unless-stopped" volumes: acme_challenges: ``` so for localhost, need to generate fake certificates ```sh # 1. Create the new folder structure matching the domain mkdir -p /your/custom/path/letsencrypt/live/snikket.local/ # 2. Generate the certificate with Multi-SAN support openssl req -x509 -newkey rsa:4096 -sha256 -days 3650 -nodes \ -keyout /your/custom/path/letsencrypt/live/snikket.local/privkey.pem \ -out /your/custom/path/letsencrypt/live/snikket.local/fullchain.pem \ -subj "/CN=snikket.local" \ -addext "subjectAltName=DNS:snikket.local,DNS:localhost,IP:127.0.0.1,IP: ``` in `/etc/hosts` ```txt 127.0.0.1 snikket.local share.snikket.local ``` using this will give invite link for admin `docker exec snikket create-invite --admin --group default` since port 5443 is used so add that. eg `https://snikket.local:5443/invite/PP46bac4bk0wxHD50RbR7_6G/`