Wavy is a lightweight commandβline interface for WhatsApp messaging powered by the whatsmeow library. It lets you authenticate with a QR code, send messages to individuals or groups, verify phone numbers, and browse your group list, all from your terminal.
Key features Β· Screenshot Β· Installation Β· Usage Β· Data Storage Β· Viewing WhatsApp Contact Data Β· Maintenance Β· Testing Β· Git Hooks Β· Releases Β· License
- π QR code authentication Pair your account by scanning a QR code that opens in your image viewer
- π¬ Send messages to contacts Deliver plain text or formatted messages to any registered WhatsApp number
- π₯ Send messages to groups Post updates in your WhatsApp groups by using their group IDs
- β Verify registration status Check if a phone number is registered on WhatsApp before sending a message
- π List your groups Retrieve all your group chats and their IDs to target them easily
The easiest way to install Wavy is to download a pre-compiled binary from the GitHub Releases page:
- Go to the Releases page
- Download the appropriate binary for your operating system and architecture:
- Linux:
wavy-linux-amd64orwavy-linux-arm64 - macOS:
wavy-darwin-amd64orwavy-darwin-arm64 - Windows:
wavy-windows-amd64.exe
- Linux:
- Make the downloaded file executable (Linux/macOS):
chmod +x wavy-linux-amd64 # Or for macOS: # chmod +x wavy-darwin-amd64
- Move the binary to a directory in your PATH (optional, for easier access):
# Linux/macOS: sudo mv wavy-linux-amd64 /usr/local/bin/wavy # For macOS with Apple Silicon: # sudo mv wavy-darwin-arm64 /usr/local/bin/wavy
This project uses Mage for its build system.
-
Install Mage (if not already installed):
go install github.com/magefile/mage@latest
-
Build the tool:
mage build
This will create
bin/wavyexecutable. -
Install the tool system-wide (optional):
mage install
This will:
- Copy the binary to
/usr/local/bin/wavy - Create the required config directories at
~/.config/wavy/and~/.local/share/wavy/
- Copy the binary to
WhatsApp connection setup
-
Open your terminal and run:
wavy setup
-
A QR code will be generated and displayed in your image viewer.
-
On your phone, open WhatsApp and navigate to Settings > Linked Devices > Link a Device
-
Scan the QR code on your computer screen.
-
Once pairing is successful, WhatsApp will confirm the new device is connected. You're now authenticated and ready to send messages.
-
In your terminal, press Ctrl+C to exit the setup script.
wavy check +1234567890Or using flags:
wavy check --phone +1234567890wavy groupsThis will show all groups you're a member of, including their group IDs which you need for sending messages to groups.
wavy send +1234567890 "Hello from Wavy CLI"Or using flags:
wavy send --to +1234567890 --msg "Hello from Wavy CLI"wavy send [email protected] "Hello group from Wavy CLI"You must use the exact group ID from the wavy groups command.
--debug- Enable verbose debug output--wait N- Wait N seconds for message confirmation (default: 5)
Example:
wavy send --to +1234567890 --msg "Hello with debug" --debug --wait 10All wavy data is stored according to the XDG Base Directory Specification:
- Configuration:
~/.config/wavy/ - Data (including WhatsApp session):
~/.local/share/wavy/
The WhatsApp session data is stored in a SQLite database at ~/.local/share/wavy/client.db. You can inspect this database to view your contacts and other information:
# For Debian/Ubuntu
sudo apt install sqlite3
# For Fedora
sudo dnf install sqlite
# For macOS
brew install sqlite-
Open the database:
sqlite3 ~/.local/share/wavy/client.db
-
View available tables:
.tables
-
View your contacts:
SELECT * FROM whatsmeow_contacts;
-
View specific contact information:
SELECT jid, name, first_name, push_name FROM whatsmeow_contacts;
-
Count your contacts:
SELECT COUNT(*) FROM whatsmeow_contacts;
-
Find a specific contact by name:
SELECT * FROM whatsmeow_contacts WHERE name LIKE '%John%';
-
Exit SQLite:
.exit
You can also query the database directly from the command line:
sqlite3 ~/.local/share/wavy/client.db "SELECT jid, name FROM whatsmeow_contacts"Additional Mage commands available:
mage clean- Remove build artifactsmage uninstall- Completely remove wavy from your systemmage test- Run testsmage check- Run linters and static analysis
This project includes unit tests to verify functionality. You can run tests using Mage:
Run all tests:
mage testFor more detailed test results:
mage testVerboseGenerate coverage report (HTML format):
mage testCoverageThis creates a coverage report at coverage/coverage.html that you can open in a browser.
This project uses Lefthook to enforce code quality checks before commits and pushes.
-
Install Lefthook:
go install github.com/evilmartians/lefthook@latest
-
Install the Git hooks:
lefthook install
- Runs
go vet,gofmt, andgo teston commit - Runs
go teston push
The full configuration is available in the lefthook.yml file at the project root.
You can also run the hooks manually:
lefthook run pre-commit
lefthook run pre-pushRun formatting, static analysis, tests and build in one command:
mage allWavy is available as pre-compiled binaries for various operating systems and architectures. You can download the latest version from the Releases page.
The following platforms are supported:
- Linux: amd64 and arm64 architectures
- macOS (Darwin): amd64 (Intel) and arm64 (Apple Silicon) architectures
- Windows: amd64 architecture
You can check which version of Wavy you're running with:
wavy versionIf you're a contributor interested in the release process for this project, please see the Release Process documentation for details on how we version and build releases.
Licensed under the MIT License. See the LICENSE file for details.

