๐ Neonize Dart
WhatsApp Automation Made Simple for Dart & Flutter
A powerful Dart wrapper for Neonize - enabling seamless WhatsApp automation in your Dart and Flutter applications
โ ๏ธ DEVELOPMENT STATUS - NOT READY FOR PRODUCTION
๐ง WORK IN PROGRESS ๐ง
This project is currently under active development and is NOT ready for production use.
Getting Started โข Features โข Examples โข Documentation โข Contributing

โจ What is Neonize Dart?
Neonize Dart is a comprehensive Dart wrapper around the powerful Neonize shared library, bringing WhatsApp automation capabilities directly to your Dart and Flutter projects.
๐ฏ Why Choose Neonize Dart?
- ๐ฅ High Performance - Built on top of the battle-tested Neonize library
- ๐ฑ Cross-Platform - Works seamlessly on Android, iOS, Windows, macOS, and Linux
- ๐ก๏ธ Type Safe - Full Dart type safety with comprehensive error handling
- โก Real-time - Handle messages, media, and events in real-time
- ๐ง Easy Integration - Simple API design for quick implementation
- ๐ Well Documented - Comprehensive documentation and examples
๐ Features
Core Messaging
- โ Send and receive text messages
- โ Handle media files (images, videos, documents, audio)
- โ Group management and operations
- โ Real-time message events
- โ Message receipts and status tracking
Advanced Capabilities
- ๐ End-to-end encryption support
- ๐ฏ Contact and user information retrieval
- ๐ Call event handling
- ๐ Presence and typing indicators
- ๐ฐ Newsletter support
- ๐ซ Blocklist management
Developer Experience
- ๐ Event-driven architecture
- ๐ Built-in logging and debugging
- ๐๏ธ SQLite and PostgreSQL database support
- ๐งช Comprehensive test coverage
๐ Getting Started
Prerequisites
- Dart SDK 3.0 or higher
- Flutter 3.0+ (for Flutter projects)
Installation
โ ๏ธ Since this project is still unstable, please follow these manual installation steps:
-
Clone this repository
git clone https://github.com/krypton-byte/neonize-dart.git cd neonize-dart
-
Download the Neonize shared library
- Go to Neonize Releases
- Download the appropriate shared library for your platform:
- Linux:
.so
file - macOS:
.dylib
file - Windows:
.dll
file
- Linux:
-
Set environment variable
# Set NEONIZE_PATH to point to your shared library location export NEONIZE_PATH=/path/to/your/neonize-library.so # For Windows (PowerShell) $env:NEONIZE_PATH="C:\path\to\your\neonize-library.dll" # For Windows (Command Prompt) set NEONIZE_PATH=C:\path\to\your\neonize-library.dll
-
Install dependencies
dart pub get
-
Run the example
# You can run the example directly from the bin folder dart run bin/main.dart
Alternative Installation (When Stable)
Once the project becomes stable, you'll be able to add it directly to your pubspec.yaml
:
dependencies:
neonize: ^1.0.0 # Replace with actual version
Quick Start
import 'package:neonize/neonize.dart';
void main() {
// Initialize the client
final client = NewAClient(
name: 'my-whatsapp-bot',
config: Config(
tempPath: '/tmp',
databasePath: './whatsapp.db',
),
);
// Handle incoming messages
client.on<Message>((message) {
print('๐จ Received: ${message.message}');
// Auto-reply example
if (message.message?.conversation?.toLowerCase() == 'hello') {
client.sendMessage(
message.info!.messageSource!.chat!,
text: '๐ Hello there! How can I help you?'
);
}
});
// Handle QR code for authentication
client.qr((qrData) {
print('๐ฑ Scan this QR code with WhatsApp:');
qrTerminal(qrData, 2, size: 10);
});
// Handle connection events
client.on<Connected>((event) {
print('๐ Connected to WhatsApp!');
});
// Start the client
client.connect();
}
๐ก Examples
๐ฑ Basic Client Setup
import 'package:neonize/neonize.dart';
import 'dart:io';
void main() {
// Initialize the WhatsApp client
final client = NewAClient(
name: 'my-whatsapp-bot',
config: Config(
tempPath: '/tmp',
databasePath: './neonize.db',
),
);
// Setup QR code authentication
client.qr((qrData) {
print('๐ฑ Scan this QR code with WhatsApp:');
qrTerminal(qrData, 2, size: 10);
});
// Handle successful connection
client.on<Connected>((event) {
print('๐ Successfully connected to WhatsApp!');
});
// Start the client
client.connect();
}
๐ฌ Sending Messages
// Send simple text message
client.sendMessage(
buildJID('1234567890'),
text: 'Hello from Neonize Dart! ๐'
);
// Send image with caption
final imageFile = File('/path/to/your/image.jpg');
final imageBytes = imageFile.readAsBytesSync();
final imageMessage = client.buildImageMessage(
imageBytes,
'Check out this amazing image! ๐ธ',
'image/jpeg',
Uint8List(0), // thumbnail (optional)
);
client.sendMessage(
buildJID('1234567890'),
message: imageMessage,
);
// Send document file
final document = File('/path/to/document.pdf');
final documentBytes = document.readAsBytesSync();
final documentMessage = client.buildDocumentMessage(
documentBytes,
'document.pdf',
'Here is the document you requested',
'application/pdf',
);
client.sendMessage(
buildJID('1234567890'),
message: documentMessage,
);
๐ญ Message Event Handling
// Handle incoming text messages
client.on<Message>((message) {
final messageText = message.message?.conversation;
final senderJID = message.info?.messageSource?.sender;
final chatJID = message.info?.messageSource?.chat;
print('๐จ Received from $senderJID: $messageText');
// Auto-reply functionality
if (messageText?.toLowerCase() == 'hello') {
client.sendMessage(chatJID, text: 'Hello there! ๐');
} else if (messageText?.toLowerCase() == 'help') {
const helpText = '''
๐ค *Bot Commands:*
โข hello - Get a greeting
โข help - Show this help message
โข time - Get current time
โข joke - Get a random joke
''';
client.sendMessage(chatJID, text: helpText);
}
});
// Handle message receipts (delivery status)
client.on<Receipt>((receipt) {
print('๐ง Message ${receipt.type}: ${receipt.messageIds}');
});
// Handle typing indicators
client.on<ChatPresence>((chatPresence) {
final chat = chatPresence.messageSource?.chat;
final participant = chatPresence.messageSource?.sender;
print('๐ฌ $participant is typing in $chat');
});
๐ฅ Group Management
// Create a new group
final participants = [
buildJID('1234567890'),
buildJID('0987654321'),
];
final groupInfo = client.createGroup(
'My Awesome Group ๐',
participants,
);
print('๐ Group created: ${groupInfo.jid}');
// Get group information
final groupInfo = client.getGroupInfo(...);
print('๐ Group Name: ${groupInfo.groupName}');
print('๐ Description: ${groupInfo.groupDesc}');
print('๐ฅ Participants: ${groupInfo.participants?.length ?? 0}');
// Add participants to group
client.updateGroupParticipants(
jidGroup,
[userJid],
ParticipantAction.add,
);
// Remove participants from group
client.updateGroupParticipants(
jidGroup,
[userJid],
ParticipantAction.remove,
);
// Update group name
client.updateGroupName(
jidGroup,
'New Group Name ๐ฏ',
);
// Update group description
client.updateGroupDescription(
jidGroup,
'This is our updated group description',
);
๐ Contact & Profile Management
// Get user profile information
final profile = client.getProfilePicture(
jidUser,
true, // get full resolution
);
print('๐ค Profile picture URL: ${profile.url}');
print('๐ Profile ID: ${profile.id}');
// Update your own status
client.setPresence(Presence.available);
print('โ
Status updated to available');
// Get contact information
final isRegistered = client.isOnWhatsApp(['1234567890']);
if (isRegistered.isNotEmpty && isRegistered.first.isIn) {
print('โ
User is registered on WhatsApp');
print('๐ฑ JID: ${isRegistered.first.jid}');
} else {
print('โ User is not on WhatsApp');
}
// Check if multiple contacts are on WhatsApp
final contacts = ['1234567890', '0987654321', '1122334455'];
final registeredContacts = client.isOnWhatsApp(contacts);
for (final contact in registeredContacts) {
if (contact.isIn) {
print('โ
${contact.jid} is on WhatsApp');
} else {
print('โ ${contact.query} is not on WhatsApp');
}
}
๐๏ธ Project Structure
neonize-dart/
โโโ bin
โ โโโ main.dart
โ โโโ qr_test.dart
โโโ CHANGELOG.md
โโโ lib
โ โโโ neonize.dart
โ โโโ src
โ โโโ client.dart
โ โโโ config.dart
โ โโโ enum.dart
โ โโโ error.dart
โ โโโ event
โ โ โโโ event.dart
โ โ โโโ type.dart
โ โโโ ffi
โ โ โโโ bindings.dart
โ โ โโโ structs.dart
โ โ โโโ utils.dart
โ โโโ helpers
โ โ โโโ helpers.dart
โ โ โโโ image.dart
โ โโโ logging.dart
โ โโโ qr.dart
โโโ LICENSE
โโโ Makefile
โโโ neonize.db
โโโ neonize-linux-amd64.so
โโโ pubspec.lock
โโโ pubspec.yaml
โโโ README.md
โโโ scripts
โโโ test
โ โโโ neonize_test.dart
๐ Documentation
Core Classes
NewAClient
- Main WhatsApp clientConfig
- Client configuration- Event Types - Available event types
- Protocol Buffers - Message definitions
Event System
The event system in Neonize Dart is built around strongly-typed events:
// Type-safe event handling
client.on<Message>((msg) => handleMessage(msg));
client.on<Receipt>((receipt) => handleReceipt(receipt));
client.on<Presence>((presence) => handlePresence(presence));
Database Support
Neonize Dart supports multiple database backends:
// SQLite (default)
Config(databasePath: './app.db')
// PostgreSQL
Config(databasePath: 'postgres://user:pass@localhost/dbname')
๐ค Contributing
We welcome contributions! Here's how you can help:
- Fork the repository
- Create a feature branch:
git checkout -b feature/amazing-feature
- Commit your changes:
git commit -m 'Add amazing feature'
- Push to the branch:
git push origin feature/amazing-feature
- Open a Pull Request
Development Setup
# Clone the repository
git clone https://github.com/krypton-byte/neonize-dart.git
cd neonize-dart
# Get dependencies
dart pub get
# Run tests
dart test
# Run the example
dart run bin/main.dart
๐ License
This project is licensed under the Apache License 2.0 - see the LICENSE file for details.
๐ Acknowledgments
- Neonize - The powerful Python library this project wraps
- Whatsmeow - The Go library that powers Neonize
- Dart & Flutter Community - For the amazing ecosystem
๐ Support
- ๐ง Issues: GitHub Issues
- ๐ฌ Discussions: GitHub Discussions
- ๐ Documentation: Full Documentation
Made with โค๏ธ for the Dart & Flutter community
If this project helped you, please consider giving it a โญ on GitHub!
Libraries
- neonize
- ๐ Neonize Dart - WhatsApp Multi-Device API