{"id":34881929,"url":"https://github.com/dpipstudio/botwave","last_synced_at":"2026-02-10T21:12:28.267Z","repository":{"id":304895335,"uuid":"1019777835","full_name":"dpipstudio/botwave","owner":"dpipstudio","description":"BotWave - Your Raspberry Pi FM Network","archived":false,"fork":false,"pushed_at":"2026-01-27T16:08:27.000Z","size":2333,"stargazers_count":113,"open_issues_count":0,"forks_count":5,"subscribers_count":3,"default_branch":"main","last_synced_at":"2026-01-28T01:21:54.342Z","etag":null,"topics":["botwave","fm","good-first-contribution","good-first-issue","network","piwave","python","radio","raspberry-pi","rds"],"latest_commit_sha":null,"homepage":"https://botwave.dpip.lol","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dpipstudio.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":["dpipstudio","douxxtech"]}},"created_at":"2025-07-14T21:24:03.000Z","updated_at":"2026-01-27T16:13:55.000Z","dependencies_parsed_at":"2025-07-17T05:05:46.960Z","dependency_job_id":"062c176e-e747-43aa-bb66-5e0356ca6945","html_url":"https://github.com/dpipstudio/botwave","commit_stats":null,"previous_names":["douxxtech/botwave","dpipstudio/botwave"],"tags_count":8,"template":false,"template_full_name":null,"purl":"pkg:github/dpipstudio/botwave","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dpipstudio%2Fbotwave","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dpipstudio%2Fbotwave/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dpipstudio%2Fbotwave/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dpipstudio%2Fbotwave/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dpipstudio","download_url":"https://codeload.github.com/dpipstudio/botwave/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dpipstudio%2Fbotwave/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28963246,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-01T00:42:38.011Z","status":"ssl_error","status_checked_at":"2026-02-01T00:42:35.920Z","response_time":128,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["botwave","fm","good-first-contribution","good-first-issue","network","piwave","python","radio","raspberry-pi","rds"],"created_at":"2025-12-26T02:17:57.712Z","updated_at":"2026-02-01T01:07:04.007Z","avatar_url":"https://github.com/dpipstudio.png","language":"Python","funding_links":["https://github.com/sponsors/dpipstudio","https://github.com/sponsors/douxxtech"],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\r\n\r\n\u003cimg src=\"https://togp.xyz/?repo=botwave\u0026owner=dpipstudio\u0026cache=false\u0026svg=https://raw.githubusercontent.com/dpipstudio/botwave/refs/heads/main/assets/readme_assets/togp_logo.svg\u0026failurl=https://images.dpip.lol/bw-logo-big.png\" alt=\"BotWave\"/\u003e\r\n\r\n\u003ch1\u003eBotWave - Your Raspberry Pi FM Network\u003c/h1\u003e\r\n\u003ch4\u003e \u003ca href=\"https://botwave.dpip.lol\"\u003eWebsite\u003c/a\u003e | \u003ca href=\"#installation\"\u003eInstall\u003c/a\u003e | \u003ca href=\"#mentions\"\u003eMentions\u003c/a\u003e | \u003ca href=\"https://github.com/dpipstudio/botwave/wiki\"\u003eWiki\u003c/a\u003e\u003c/h4\u003e\r\n\r\n\r\n\u003c/div\u003e\r\n\r\nBotWave lets you broadcast audio over FM radio using Raspberry Pi devices. It supports server-client management, remote control, automated actions, live streaming, and more. That makes it ideal for learning, experimentation, and creative projects.\r\n\r\n\u003cdetails\u003e\r\n\u003csummary\u003e\u003cstrong\u003eTable of Contents\u003c/strong\u003e\u003c/summary\u003e\r\n\u003chr\u003e\r\n\u003cul\u003e\r\n\u003cli\u003e\u003ca href=\"#features\"\u003eFeatures\u003c/a\u003e\u003c/li\u003e\r\n\r\n\u003cli\u003e\r\n\u003ca href=\"#requirements\"\u003eRequirements\u003c/a\u003e\r\n\u003cul\u003e\r\n\u003cli\u003e\u003ca href=\"#server\"\u003eServer\u003c/a\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003ca href=\"#client\"\u003eClient\u003c/a\u003e\u003c/li\u003e\r\n\u003c/ul\u003e\r\n\u003c/li\u003e\r\n\r\n\u003cli\u003e\r\n\u003ca href=\"#get-started\"\u003eGet Started\u003c/a\u003e\r\n\u003cul\u003e\r\n\u003cli\u003e\u003ca href=\"#installation\"\u003eInstallation\u003c/a\u003e\u003c/li\u003e\r\n\r\n\u003cli\u003e\r\n\u003ca href=\"#using-the-client-server\"\u003eUsing The Client-Server\u003c/a\u003e\r\n\u003cul\u003e\r\n\u003cli\u003e\u003ca href=\"#1-connect-the-client-and-the-server-together\"\u003eConnect the client and the server together\u003c/a\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003ca href=\"#2-understanding-the-server-command-line-interface\"\u003eUnderstanding the server command line interface\u003c/a\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003ca href=\"#3-uploading-files-to-the-client\"\u003eUploading files to the client\u003c/a\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003ca href=\"#4-starting-a-broadcast\"\u003eStarting a broadcast\u003c/a\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003ca href=\"#5-stopping-a-broadcast\"\u003eStopping a broadcast\u003c/a\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003ca href=\"#6-exiting-properly\"\u003eExiting properly\u003c/a\u003e\u003c/li\u003e\r\n\u003c/ul\u003e\r\n\u003c/li\u003e\r\n\r\n\u003cli\u003e\r\n\u003ca href=\"#using-the-local-client\"\u003eUsing The Local Client\u003c/a\u003e\r\n\u003cul\u003e\r\n\u003cli\u003e\u003ca href=\"#1-starting-the-local-client\"\u003eStarting the local client\u003c/a\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003ca href=\"#2-understanding-the-local-client-command-line-interface\"\u003eUnderstanding the local client command line interface\u003c/a\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003ca href=\"#3-uploading-files-to-the-local-client\"\u003eUploading files to the local client\u003c/a\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003ca href=\"#4-starting-a-broadcast-1\"\u003eStarting a broadcast\u003c/a\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003ca href=\"#5-stopping-a-broadcast-1\"\u003eStopping a broadcast\u003c/a\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003ca href=\"#6-exiting-properly-1\"\u003eExiting properly\u003c/a\u003e\u003c/li\u003e\r\n\u003c/ul\u003e\r\n\u003c/li\u003e\r\n\r\n\u003c/ul\u003e\r\n\u003c/li\u003e\r\n\r\n\u003cli\u003e\u003ca href=\"#remote-management\"\u003eRemote Management\u003c/a\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003ca href=\"#advanced-usage\"\u003eAdvanced Usage\u003c/a\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003ca href=\"#updating-botwave\"\u003eUpdating BotWave\u003c/a\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003ca href=\"#uninstallation\"\u003eUninstallation\u003c/a\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003ca href=\"#botwave-server-for-cloud-instances\"\u003eBotWave Server For Cloud Instances\u003c/a\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003ca href=\"#get-help\"\u003eGet Help\u003c/a\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003ca href=\"#mentions\"\u003eMentions\u003c/a\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003ca href=\"#license\"\u003eLicense\u003c/a\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003ca href=\"#credits\"\u003eCredits\u003c/a\u003e\u003c/li\u003e\r\n\u003c/ul\u003e\r\n\u003chr\u003e\r\n\u003c/details\u003e\r\n\r\n\r\n## Features\r\n\r\n- **Server-Client Architecture**: Manage multiple Raspberry Pi clients from a central server.\r\n- **Standalone Client**: Run a client without a central server for single-device broadcasting.\r\n- **Audio Broadcasting**: Broadcast audio files over FM radio.\r\n- **File Upload**: Upload audio files to clients for broadcasting.\r\n- **Remote Management**: Start, stop, and manage broadcasts remotely.\r\n- **Authentication**: Client-server authentication with passkeys.\r\n- **Protocol Versioning**: Ensure compatibility between server and clients.\r\n- **Live Broadcasting**: Stream live output from any application in real time.\r\n- **Queue System**: Manage playlists and multiple audio files at once.\r\n- **Task Automation**: Run commands automatically on events and start on system boot.\r\n\r\n## Requirements\r\n\u003e All requirements can be installed automatically via the installer, see below.\r\n\r\n### Server\r\n- Python \u003e= 3.9\r\n\r\n### Client\r\n- Raspberry Pi\r\n- Root access\r\n- Python \u003e= 3.9\r\n- [bw_custom](https://github.com/dpipstudio/bw_custom)\r\n- (Wire or antenna)\r\n\r\n\r\n## Get Started\r\n\r\n\u003e [!NOTE]\r\n\u003e If you want a more detailed guide, you might want to check [`/wiki/Setup`](https://github.com/dpipstudio/botwave/wiki/Setup)\r\n\r\n\u003e [!WARNING]\r\n\u003e - **BotWave broadcasts FM signals**, which may be regulated in your area.\r\n\u003e - **Check local laws** before use, unauthorized broadcasts may incur fines.\r\n\u003e - **Use a band-pass filter** to minimize interference.\r\n\u003e - **The authors are not responsible** for legal issues or hardware damage.\r\n\u003e - **See FAQ** for more information: [`/wiki/FAQ`](https://github.com/dpipstudio/botwave/wiki/FAQ)\r\n\r\n### Installation\r\nFor debian-like operating systems (Debian, Ubuntu, Raspberry Pi OS, Zorin OS, etc), we provide an install script.\r\n```sh\r\ncurl -sSL https://botwave.dpip.lol/install | sudo bash\r\n```\r\n\r\nIf you wish to review the script before running it, run the following commands:\r\n\r\n```sh\r\ncurl -sSL https://botwave.dpip.lol/install -o bw_install.sh\r\ncat bw_install.sh\r\nsudo bash bw_install.sh\r\n```\r\n\u003e `sudo` is required to access system-wide access. We use it to install BotWave into `/opt/BotWave` and binary symlinks into `/usr/local/bin`.  \r\n\u003e If you're working on an OS that isn't debian-like, you can either try to tweak our install script, or you can open an issue to get help.\r\n\r\n\u003cdetails\u003e\r\n\u003csummary\u003e\u003ccode\u003eInstaller options\u003c/code\u003e\u003c/summary\u003e\r\n\u003chr\u003e\r\n\u003cpre\u003e\r\nUsage: curl -sSL https://botwave.dpip.lol/install | sudo bash [-s -- [MODE] [OPTIONS]]\r\n\r\nModes:\r\n  client              Install client components\r\n  server              Install server components\r\n  both                Install both client and server components\r\n\r\nOptions:\r\n  -l, --latest        Install from the latest commit (even if unreleased)\r\n  -t, --to \u0026lt;version\u0026gt;  Install a specific release version\r\n  --[no-]alsa         Setup ALSA loopback card\r\n  -h, --help          Show this help message\r\n\u003c/pre\u003e\r\n\u003cp\u003eAdding \u003ccode\u003e -s \u0026lt;server, client or both\u0026gt;\u003c/code\u003e at the end of the command skips the interactive menu and goes straight to installation.\u003c/p\u003e\r\n\u003cp\u003eUse \u003ccode\u003e -s -- \u0026lt;server, client or both\u0026gt; \u0026lt;options\u0026gt;\u003c/code\u003e to add options flags.\u003c/p\u003e\r\n\u003cp\u003eNote that all this is optional and not needed for basic installation.\u003c/p\u003e\r\n\u003chr\u003e\r\n\u003c/details\u003e\r\n\r\n\u003e [!TIP]\r\n\u003e If you plan to only use one raspberry pi (not a network of them), we offer a standalone client, that allows you to use BotWave without a server. If you wish to use the \"local client\", go to [`Using The Local Client`](#using-the-local-client).\r\n\r\n### Using The Client-Server\r\nIn those examples, it is assumed that you have one machine with the `server` component installed, and one Raspberry Pi with the `client` component installed. It is also assumed that both are on the same network. \r\n\r\n#### 1. Connect the client and the server together\r\nStart by starting the `server`\r\n```sh\r\nbw-server\r\n```\r\n\r\n\u003cdetails\u003e\r\n\u003csummary\u003e\u003ccode\u003eServer options\u003c/code\u003e\u003c/summary\u003e\r\n\u003chr\u003e\r\n\u003cpre\u003e\r\nUsage: bw-server [OPTIONS]\r\n\r\nbw-server [-h] [--host HOST] [--port PORT] [--fport FPORT] [--pk PK]\r\n                 [--handlers-dir HANDLERS_DIR] [--start-asap] [--ws WS]\r\n                 [--daemon]\r\n\r\noptions:\r\n  -h, --help            show this help message and exit\r\n  --host HOST           Server host\r\n  --port PORT           Server port\r\n  --fport FPORT         File transfer (HTTP) port\r\n  --pk PK               Passkey for authentication\r\n  --handlers-dir HANDLERS_DIR\r\n                        Directory to retrieve s_ handlers from\r\n  --start-asap          Start broadcasts immediately (may cause client\r\n                        desync)\r\n  --ws WS               WebSocket port for remote shell access\r\n  --daemon              Run in non-interactive daemon mode\r\n\u003c/pre\u003e\r\n\u003chr\u003e\r\n\u003c/details\u003e\r\n\r\nOnce you got your server running, run the `client` specifying the server IP:\r\n\u003e If you don't know your server IP, run `\u003c hostname -I` in the BotWave shell input.\r\n\r\n```sh\r\nsudo bw-client 192.168.1.10 # assuming that the server ip is the following\r\n```\r\n\r\n\u003e `sudo` is used to access the Raspberry Pi hardware and filesystem.\r\n\r\n\u003cdetails\u003e\r\n\u003csummary\u003e\u003ccode\u003eClient options\u003c/code\u003e\u003c/summary\u003e\r\n\u003chr\u003e\r\n\u003cpre\u003e\r\nUsage: sudo bw-client [OPTIONS]\r\n\r\nsudo bw-client [-h] [--port PORT] [--fhost FHOST] [--fport FPORT]\r\n                 [--upload-dir UPLOAD_DIR] [--pk PK] [--skip-checks]\r\n                 [server_host]\r\n\r\npositional arguments:\r\n  server_host           Server hostname/IP\r\n\r\noptions:\r\n  -h, --help            show this help message and exit\r\n  --port PORT           Server port\r\n  --fhost FHOST         File transfer server hostname/IP (defaults to\r\n                        server_host)\r\n  --fport FPORT         File transfer (HTTP) port\r\n  --upload-dir UPLOAD_DIR\r\n                        Uploads directory\r\n  --pk PK               Passkey for authentication\r\n  --skip-checks         Skip update and requirements checks\r\n\u003c/pre\u003e\r\n\u003chr\u003e\r\n\u003c/details\u003e\r\n\r\n\u003cdetails\u003e\r\n\u003csummary\u003e\u003ccode\u003eHardware installation for clients\u003c/code\u003e\u003c/summary\u003e\r\n\u003chr\u003e\r\n\u003cp\u003eTo use BotWave Client for broadcasting, you need to set up the hardware correctly. This involves eventually connecting an antenna or a cable to the Raspberry Pi's GPIO 4 (pin 7).\u003c/p\u003e\r\n\u003cdiv align=\"center\"\u003e\r\n\u003cimg src=\"/assets/readme_assets/gpio.png\" alt=\"BotWave\" width=\"300\"/\u003e\r\n\u003cimg src=\"/assets/readme_assets/example_gpio.jpg\" alt=\"BotWave\" width=\"300\"\"/\u003e\r\n\u003c/div\u003e\r\n\u003chr\u003e\r\n\u003c/details\u003e\r\n\r\nIf everything went well, you should see a message telling that `\u003cpi hostname\u003e_\u003cpi ip\u003e` successfully connected.\r\n\r\n#### 2. Understanding the server command line interface\r\nThe `server` has a CLI to manage it. Write `help` for a list of all commands available.  \r\nWhen performing an action on `clients`, you will need to specify the target(s). Those can be:\r\n- The `client` ID, eg: `raspberry_192.168.1.11`\r\n- The `client` hostname, eg: `raspberry`\r\n- Multiple clients, eg: `raspberry,raspberry2`\r\n- Every connected client: `all`\r\n\r\n\r\n#### 3. Uploading files to the client\r\nBotWave needs each Pi of the network to locally have the `wave` (`.wav`) file, this is mainly to improve bandwidth usage. To upload a file, you have two options:\r\n\r\n**1. Upload a file stored on the server machine:** \r\n```sh\r\nbotwave\u003e upload all /home/server/Downloads/ss.wav # a single file\r\n\r\nbotwave\u003e upload all /home/server/Downloads/bw_files/ # every .wav file in the given folder\r\n```\r\n\r\n**2. Upload a file stored on an external server:**\r\n```sh\r\nbotwave\u003e dl all https://cdn.douxx.tech/files/ss.wav # download the file from cdn.douxx.tech\r\n```\r\n\r\n#### 4. Starting a broadcast\r\n```sh\r\nbotwave\u003e start all ss.wav 88 # this broadcasts the file ss.wav on 88MHz\r\n```\r\n\r\n#### 5. Stopping a broadcast\r\n```sh\r\nbotwave\u003e stop all\r\n```\r\n\r\n#### 6. Exiting properly\r\n```sh\r\nbotwave\u003e exit # this kicks (stops) all clients and cleans up the server properly\r\n```\r\n\r\n### Using The Local Client\r\nThe `local client` is a standalone tool that doesn't require a server. You can run it and directly access the CLI interface. This part assumes that you have a Raspberry Pi with the `client` installed.\r\n\r\n#### 1. Starting the local client\r\nTo start the local client, run the following command:\r\n```sh\r\nsudo bw-local\r\n```\r\n\r\n\u003cdetails\u003e\r\n\u003csummary\u003e\u003ccode\u003eLocal client options\u003c/code\u003e\u003c/summary\u003e\r\n\u003chr\u003e\r\n\u003cpre\u003e\r\nUsage: sudo bw-local [OPTIONS]\r\n\r\nsudo bw-local [-h] [--upload-dir UPLOAD_DIR] [--handlers-dir HANDLERS_DIR]\r\n                [--skip-checks] [--daemon] [--ws WS] [--pk PK]\r\n\r\noptions:\r\n  -h, --help            show this help message and exit\r\n  --upload-dir UPLOAD_DIR\r\n                        Directory to store uploaded files\r\n  --handlers-dir HANDLERS_DIR\r\n                        Directory to retrieve l_ handlers from\r\n  --skip-checks         Skip system requirements checks\r\n  --daemon              Run in daemon mode (non-interactive)\r\n  --ws WS               WebSocket port for remote control\r\n  --pk PK               Optional passkey for WebSocket authentication\r\n\u003c/pre\u003e\r\n\u003chr\u003e\r\n\u003c/details\u003e\r\n\r\n\u003cdetails\u003e\r\n\u003csummary\u003e\u003ccode\u003eHardware installation for clients\u003c/code\u003e\u003c/summary\u003e\r\n\u003chr\u003e\r\n\u003cp\u003eTo use BotWave Client for broadcasting, you need to set up the hardware correctly. This involves eventually connecting an antenna or a cable to the Raspberry Pi's GPIO 4 (pin 7).\u003c/p\u003e\r\n\u003cdiv align=\"center\"\u003e\r\n\u003cimg src=\"/assets/readme_assets/gpio.png\" alt=\"BotWave\" width=\"300\"/\u003e\r\n\u003cimg src=\"/assets/readme_assets/example_gpio.jpg\" alt=\"BotWave\" width=\"300\"\"/\u003e\r\n\u003c/div\u003e\r\n\u003chr\u003e\r\n\u003c/details\u003e\r\n\r\n#### 2. Understanding the local client command line interface\r\nThe `local client` has a CLI to manage it. Write `help` for a list of all commands available.  \r\n\r\n#### 3. Uploading files to the local client\r\nThe local client requires `wave` (`.wav`) files to play. To upload a file, you have two options:\r\n\r\n**1. Upload a file stored on the local machine:** \r\n```sh\r\nbotwave\u003e upload /home/server/Downloads/ss.wav # a single file\r\n\r\nbotwave\u003e upload  /home/server/Downloads/bw_files/ # every .wav file in the given folder\r\n```\r\n\r\n**2. Upload a file stored on an external server:**\r\n```sh\r\nbotwave\u003e dl https://cdn.douxx.tech/files/ss.wav # download the file from cdn.douxx.tech\r\n```\r\n\r\n#### 4. Starting a broadcast\r\n```sh\r\nbotwave\u003e start ss.wav 88 # This starts broadcasting ss.wav on 88MHz\r\n```\r\n\r\n#### 5. Stopping a broadcast\r\n```sh\r\nbotwave\u003e stop\r\n```\r\n\r\n#### 6. Exiting properly\r\n```sh\r\nbotwave\u003e exit # this cleans up and exits\r\n```\r\n\r\n\r\n## Remote Management\r\nBotWave allows you to manage remotely your `server` or `local client`. To do so, we recommend using a tool like [`BWSC`](https://github.com/douxxtech/bwsc).\r\n\r\n#### 1. Install BWSC\r\n```sh\r\nnpm i -g bwsc # this assumes you have npm and nodejs installed\r\n```\r\n\r\n#### 1. Setup the server or the local client\r\nTo allow you to connect remotely, you have to add the `--ws [PORT]` flag on the start command of the `server` or the `local client`. It is also recommended to add the `--pk [passkey]` flag to reject unauthorized connections.\r\n\r\n```sh\r\nbw-server --ws 9939 --pk 1234 # for the server component\r\n\r\nbw-local --ws 9939 --pk 1234 # for the local client component\r\n```\r\n\r\n\u003e note: if you add a passkey, you'll also have to provide it to the client: `sudo bw-client \u003cserver ip\u003e --pk \u003cpasskey\u003e`.\r\n\r\n#### 2. Connect to the server/local client remotely\r\n```sh\r\nbwsc 192.168.1.10 1234 # assuming the server to be 192.168.1.10\r\n```\r\n\r\n#### 3. Manage the server/local client remotely\r\nYou will now have access to the `server`/`local client` CLI.  \r\nPlease note that the `\u003c` and `exit` commands won't be available.  \r\nYou will also receive the server logs in real time.\r\n\r\n```sh\r\nbotwave\u003e help # server / lc will send the help back to you\r\n```\r\n\r\n## Advanced Usage\r\nFor other / more detailed actions please check the following resources:\r\n- **Server help**: [`/server/server.md`](/server/server.md)\r\n- **Client help**: [`/client/client.md`](/client/client.md)\r\n- **Client help**: [`/local/local.md`](/local/local.md)\r\n- **AutoRun help**: [`/autorun/autorun.md`](/autorun/autorun.md)\r\n- **Automated actions help**: [`/misc_doc/handlers.md`](/misc_doc/handlers.md)\r\n- **Remote management protocol**: [`/misc_doc/websocket.md`](/misc_doc/websocket.md)\r\n\r\n### Updating BotWave\r\nFor debian-like systems, we recommend using our automatic uninstallation scripts, for other operating systems, you're on your own.\r\n\r\n```bash\r\nsudo bw-update\r\n```\r\n\r\n### Uninstallation\r\nFor debian-like systems, we recommend using our automatic uninstallation scripts, for other operating systems, you're on your own.\r\n\r\n```bash\r\ncurl -sSL https://botwave.dpip.lol/uninstall | sudo bash\r\n```\r\n\r\n### BotWave Server For Cloud Instances\r\nYou can directly try BotWave `server` on Cloud Instances like Google Shell or GitHub Codespaces.  \r\n[![Run in Cloud Shell](https://gstatic.com/cloudssh/images/open-btn.svg)](https://shell.cloud.google.com/cloudshell/open?cloudshell_git_repo=https://github.com/dpipstudio/botwave\u0026cloudshell_tutorial=misc_doc/google-shell.md\u0026show=terminal)  \r\n[![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/dpipstudio/botwave)\r\n\r\n\r\n### Get Help\r\nGot a question or an issue ? Feel free to ask for help !  \r\n- Open an [issue](https://github.com/dpipstudio/botwave/issues/new)\r\n- Join the [discord](https://discord.gg/r5ragNsQxp)\r\n\r\n\r\n## Mentions\r\n**BotWave mentions**: Here are some posts that talk about BotWave. Thanks to their creators !\r\n\u003cdiv align=\"center\"\u003e \u003c!-- centering a div ?? --\u003e\r\n\u003ca href=\"https://tom-doerr.github.io/repo_posts/\" target=\"_blank\"\u003e\u003cimg src=\"assets/readme_assets/badge_repository_showcase.svg\" alt=\"tom-doerr\"/\u003e\u003c/a\u003e\r\n\u003ca href=\"https://peppe8o.com/?s=botwave\" target=\"_blank\"\u003e\u003cimg src=\"assets/readme_assets/badge_peppe8o.svg\" alt=\"peppe8o\"/\u003e\u003c/a\u003e\r\n\u003ca href=\"https://hn.algolia.com/?dateRange=all\u0026page=0\u0026prefix=true\u0026query=botwave%20radio\u0026sort=byDate\u0026type=all\" target=\"_blank\"\u003e\u003cimg src=\"assets/readme_assets/badge_hacker_news.svg\" alt=\"show hn\"/\u003e\u003c/a\u003e\r\n\u003ca href=\"https://korben.info/botwave-raspberry-pi-emetteur-fm-radio.html\" target=\"_blank\"\u003e\u003cimg src=\"assets/readme_assets/badge_le_site_de_korben.svg\" alt=\"le site de korben\"/\u003e\u003c/a\u003e\r\n\u003ca href=\"https://www.cyberplanete.net/raspberry-pi-radio-botwave/\" target=\"_blank\"\u003e\u003cimg src=\"assets/readme_assets/badge_cyberplanete.svg\" alt=\"cyberplanete\"/\u003e\u003c/a\u003e\r\n\u003c/div\u003e\r\n\r\n## Supports\r\n**BotWave is supported by donations** from the following people and projects.\r\nYour contributions help with development, hosting, and hardware costs 🙏\r\n\u003cdiv align=\"center\"\u003e \u003c!-- centering a div ?? --\u003e\r\n\u003ca href=\"https://vocal.wtf\" target=\"_blank\"\u003e\u003cimg src=\"assets/readme_assets/badge_vocal.svg\" alt=\"peppe8o\"/\u003e\u003c/a\u003e\r\n\u003c/div\u003e\r\n\r\n## License\r\nBotWave is licensed under [GPLv3.0](LICENSE).\r\n\r\n## Credits\r\n\r\n![a DPIP Studio Project](https://madeby.dpip.lol)\r\n![Made by Douxx](https://madeby.douxx.tech)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdpipstudio%2Fbotwave","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdpipstudio%2Fbotwave","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdpipstudio%2Fbotwave/lists"}