Universal Plugin System for Taskbar/Menu Bar - Write Once, Run Everywhere
Crossbar is a revolutionary cross-platform plugin system inspired by BitBar (macOS) and Argos (Linux), bringing the power of scriptable status bar widgets to all platforms - desktop and mobile.
#!/usr/bin/env python3
# This plugin works WITHOUT MODIFICATION on:
# Linux, Windows, macOS, Android, iOS
import subprocess, json
cpu = subprocess.run(['crossbar', 'cpu'], capture_output=True, text=True)
print(json.dumps({
"icon": "โก",
"text": f"{cpu.stdout.strip()}%",
"menu": [{"text": "Details", "bash": "crossbar process list"}]
}))- ๐ True Cross-Platform: One plugin, five target platforms (Linux, macOS, Windows, Android, iOS)
- 8๏ธโฃ Multi-Language Support: Write plugins in Bash, Python, Node.js, Dart (Interpreted & Compiled), Go, Rust, or YAML
- โก Hot Reload: Automatic plugin detection and reload (<1s)
- ๐จ Adaptive Rendering: Same plugin renders as tray icon, notification, or widget
- ๐ Secure Storage: Passwords stored in system Keychain/KeyStore
- ๐ 75+ CLI Commands: Unified API for system info, network, media, clipboard, and more
| Feature | BitBar/Argos | Crossbar |
|---|---|---|
| Platforms | macOS/Linux only | Linux + Windows + macOS + Android + iOS |
| Output Formats | Text only | Text + JSON + Structured Data |
| UI Targets | Menu bar only | Tray + Notifications + Widgets + Menu bar |
| CLI API | None (scripts call system commands) | 75+ unified commands (crossbar cpu) |
| Configuration | Manual scripting | Declarative JSON with auto-generated UI |
| Mobile Support | โ None | โ Widgets + Persistent Notifications (Android) + Home/Lock Screen Widgets (iOS) |
| Controls | Read-only | Bidirectional (volume, media, system) |
| Hot Reload | Manual refresh | Automatic file watching |
- System tray integration with custom icons
- Menu bar dropdown with unlimited items
- Window management and theming
- Tray Display Mode (Settings โ System Tray):
- Unified: Single tray icon with menu for all plugins (default)
- Separate: One tray icon per plugin (Linux only, coming soon)
- Smart Collapse/Overflow: Automatic modes (coming soon)
- Home screen widgets (1x1, 2x2, 4x4 layouts)
- Persistent notifications (Android foreground service)
- Lock screen widgets (iOS)
If you plan to develop plugins or contribute to Crossbar core, we recommend setting up the full environment.
Prerequisites:
- Flutter 3.35.0+ (Install Flutter)
- Dart 3.10.0+ (comes with Flutter)
make(optional, for easier build commands)
Setup:
# Clone the repository
git clone https://github.com/verseles/crossbar.git
cd crossbar
# Install dependencies
flutter pub get
# Build and Run (Desktop)
# Using Makefile (Recommended - builds full architecture)
make linux # or make macos, make windows
# Or using Flutter directly (GUI only)
flutter run -d linuxDownload the latest release from GitHub Releases.
Linux: Extract crossbar-linux.zip and run:
./crossbar # Launch (Start in Tray)
./crossbar gui # Launch GUI (Open Window)
./crossbar --help # Show CLI commands
./crossbar cpu # Example CLI usage- Create a plugin file in
~/.crossbar/plugins/(plugins can be files in the root or inside subdirectories):
#!/bin/bash
# ~/.crossbar/plugins/hello.10s.sh
echo "๐ Hello Crossbar!"
echo "---"
echo "System: $(uname -s)"
echo "Refresh | refresh=true"- Make it executable:
chmod +x ~/.crossbar/plugins/hello.10s.sh- The plugin will auto-refresh every 10 seconds (from filename
*.10s.sh)
Crossbar supports multiple plugin types for different use cases:
| Type | Extension | Platforms | Use Case |
|---|---|---|---|
| YAML | .yaml |
All โ | Simple data display, no code needed |
| Dart Interpreted | .dart |
All โ | Logic without external packages |
| Script | .sh, .py, .js |
Desktop | Existing scripts, shell commands |
| Dart Compiled | .dart.exe |
Desktop | Full Dart with any package |
Quick Examples:
# YAML Plugin - weather.30m.yaml
name: Weather
source:
type: http
url: "https://api.example.com/weather"
output:
text: "๐ก๏ธ ${response.temp}ยฐC"// Dart Plugin - clock.1s.dart
import 'package:crossbar_bridge/crossbar_bridge.dart';
void main() {
final crossbar = CrossbarBridge();
print('โฐ ${crossbar.time()}');
}๐ Detailed Guides:
Crossbar supports two output formats:
#!/bin/bash
echo "๐ 85%" # Tray text (first line)
echo "---" # Separator
echo "Status | color=green"
echo "Details | bash='crossbar battery --json'"Attributes:
color=red|blue|#FF0000- Text colorbash='command'- Execute on clickrefresh=true- Refresh all plugins on clickhref='https://url'- Open URL on clickfont=Monaco- Custom fontsize=12- Font size
#!/usr/bin/env python3
import json
print(json.dumps({
"icon": "๐",
"text": "85%",
"tooltip": "Battery Level",
"color": "#00FF00",
"menu": [
{"text": "Show Details", "bash": "crossbar battery --json"},
{"text": "---"}, # Separator
{"text": "Settings", "href": "https://settings"}
]
}))Crossbar provides 75+ unified commands accessible via crossbar [command].
crossbar cpu # CPU usage (0-100)
crossbar memory # Memory usage (e.g., "8.2/16 GB")
crossbar battery # Battery status
crossbar disk # Disk usage
crossbar uptime # System uptime
crossbar hostname # Machine hostname
crossbar username # Current user
crossbar kernel # Kernel version
crossbar arch # Architecture (x64, arm64)
crossbar os # Operating systemcrossbar net status # "online" | "offline" | "wifi"
crossbar net ip # Local IP address
crossbar net ip --public # Public IP (via ipify.org)
crossbar net ping google.com # Ping latency
crossbar wifi status # WiFi status
crossbar wifi ssid # WiFi network name
crossbar bluetooth status # "on" | "off"
crossbar vpn status # VPN statuscrossbar screen size # Screen resolution
crossbar screen brightness # Get brightness
crossbar power sleep # Suspend system
crossbar wallpaper # Get current wallpaper pathcrossbar audio volume # Current volume (0-100)
crossbar audio volume 50 # Set volume
crossbar audio mute # Toggle mute
crossbar media playing --json # Current media info
crossbar media play # Resume playback
crossbar media pause
crossbar media next
crossbar media prevcrossbar clipboard # Get clipboard text
crossbar clipboard "text" # Copy to clipboardcrossbar file exists /path/file
crossbar file read /path/file
crossbar file size /path/file
crossbar dir list /path/dircrossbar time [12h|24h]
crossbar date
crossbar uuid # Generate UUID
crossbar random [min] [max]
crossbar hash "text"
crossbar base64 encode "text"
crossbar base64 decode "dGV4dA=="
crossbar exec "command" # Execute shell command
crossbar notify "Title" "Msg" # Send notification
crossbar open url "https://..." # Open URL
crossbar open file "/path/..." # Open fileSee full API: original_plan_specs.md
Plugins can declare their configuration needs:
// ~/.crossbar/plugins/weather.30m.py.schema.json
{
"name": "Weather Plugin",
"description": "Shows current weather",
"version": "1.0.0",
"settings": [
{
"key": "API_KEY",
"type": "password",
"label": "OpenWeather API Key",
"required": true
},
{
"key": "LOCATION",
"type": "text",
"label": "City Name",
"default": "Sรฃo Paulo"
},
{
"key": "UNITS",
"type": "select",
"label": "Temperature Units",
"options": ["metric", "imperial"],
"default": "metric"
}
]
}Crossbar automatically generates a configuration dialog with proper UI controls.
Every plugin receives these variables:
CROSSBAR_OS=linux # Platform (linux/macos/windows/android/ios)
CROSSBAR_DARK_MODE=true # System theme
CROSSBAR_VERSION=1.0.0 # Crossbar version
CROSSBAR_PLUGIN_ID=cpu.10s.sh # Plugin filename
# User configs (from .schema.json)
WEATHER_API_KEY=abc123 # Passwords from Keychain
WEATHER_LOCATION=Sรฃo Paulo
WEATHER_UNITS=metricFor comprehensive documentation, see:
- API Reference - Complete CLI command documentation (~75 commands)
- Plugin Development Guide - Step-by-step tutorial for all 6 languages
- Configuration Schema - 25+ field types and grid layout system
- Security Policy - Vulnerability reporting and security considerations
Crossbar includes 24 example plugins in 6 languages:
cpu.10s.sh- CPU usage with color codingmemory.10s.sh- RAM usage visualizationbattery.30s.sh- Battery status with icondisk.5m.sh- Disk space monitornetwork.30s.sh- Network speed (up/down)uptime.1m.sh- System uptimespotify.5s.sh- Now playing on Spotify
weather.30m.py- Weather from OpenWeatherMap APItime.1s.py- Live clockcountdown.1s.py- Event countdown timertodo.1m.py- Simple todo listbitcoin.5m.py- BTC price from CoinGeckogithub-notifications.5m.py- GitHub notificationsprocess-monitor.10s.py- Top CPU processesquotes.1h.py- Random inspirational quotes
npm-downloads.1h.js- NPM package statsip-info.1h.js- Geolocation infoworld-clock.1m.js- Multi-timezone clockspomodoro.1s.js- Pomodoro timeremoji-clock.1m.js- Time as emojis
system-info.1m.dart- Comprehensive system infogit-status.30s.dart- Current repo status
crossbar/
โโโ lib/
โ โโโ core/ # Core plugin system (Flutter)
โ โ โโโ plugin_manager.dart # Discovery & lifecycle
โ โ โโโ script_runner.dart # Execution engine
โ โ โโโ output_parser.dart # BitBar/JSON parser
โ โ โโโ api/ # CLI commands
โ โโโ models/ # Data models
โ โโโ services/ # Background services
โ โ โโโ scheduler_service.dart # Auto-refresh triggers
โ โ โโโ refresh_service.dart # Unified refresh engine
โ โ โโโ tray_service.dart # System tray
โ โ โโโ hot_reload_service.dart # File watcher
โ โ โโโ marketplace_service.dart # Plugin discovery
โ โ โโโ logger_service.dart # Rotating logs
โ โ โโโ ipc_server.dart # Inter-process communication
โ โ โโโ notification_service.dart # Cross-platform notifications
โ โ โโโ settings_service.dart # User settings management
โ โ โโโ widget_service.dart # Home screen widget updates
โ โโโ ui/ # User interface
โ โโโ l10n/ # 10 languages
โโโ packages/ # Monorepo packages
โ โโโ crossbar_core/ # Pure Dart shared APIs & models
โ โ โโโ lib/src/
โ โ โโโ core/ # Shared core utilities
โ โ โโโ models/ # Plugin, Config models
โ โ โโโ api/ # System, Network, Media APIs
โ โโโ crossbar_cli/ # Pure Dart CLI package
โ โโโ bin/crossbar.dart # CLI entry point
โ โโโ lib/src/
โ โโโ core/ # CLI-specific plugin manager
โ โโโ commands/ # 75+ CLI command handlers
โโโ plugins/ # Example plugins
โโโ test/ # 116 tests (>90% coverage)
โโโ .github/workflows/ # CI/CD pipelines
# Run all tests
flutter test
# Run with coverage
flutter test --coverage
genhtml coverage/lcov.info -o coverage/html
open coverage/html/index.html
# Analyze code
flutter analyzeCurrent stats:
- 116 tests (114 passing, 2 skipped)
-
90% code coverage
- 0 analysis errors
- Core: Plugin discovery, execution, parsing
- Services: Background tasks, system integration
- UI: Flutter Material Design 3 interface
- CLI: Dart-based command-line API
- Flutter 3.35+ - Cross-platform framework
- Dart 3.10+ - Type-safe language
- tray_manager - System tray integration
- dio - HTTP client for API calls
- flutter_local_notifications - Push notifications
- home_widget - Home screen widgets
- flutter_secure_storage - Keychain integration
- Add API method in
lib/core/api/:
// lib/core/api/system_api.dart
Future<String> getHostname() async {
final result = await Process.run('hostname', []);
return result.stdout.toString().trim();
}- Add CLI handler in
lib/cli/cli_handler.dart(in the switch statement):
case 'hostname':
print(Platform.localHostname);Note: The main executable (crossbar) automatically supports both GUI (no args) and CLI (with args) modes.
- Add tests in
test/unit/core/api/system_api_test.dart
Crossbar supports 10 languages:
- ๐บ๐ธ English (en)
- ๐ง๐ท Portuguese (pt)
- ๐ช๐ธ Spanish (es)
- ๐ฉ๐ช German (de)
- ๐ซ๐ท French (fr)
- ๐จ๐ณ Chinese (zh)
- ๐ฏ๐ต Japanese (ja)
- ๐ฐ๐ท Korean (ko)
- ๐ฎ๐น Italian (it)
- ๐ท๐บ Russian (ru)
Locale is auto-detected from system settings.
| Metric | Target | Actual |
|---|---|---|
| Boot Time (desktop) | <2s | โ ~1.5s |
| Memory (idle, 3 plugins) | <150MB | โ ~120MB |
| Plugin Execution Overhead | <50ms | โ ~30ms |
| Hot Reload | <1s | โ ~500ms |
| Binary Size (Linux) | <50MB | โ 41MB |
Contributions are welcome! Please read CONTRIBUTING.md for guidelines.
- ๐ Report bugs via GitHub Issues
- ๐ก Suggest features
- ๐ Improve documentation
- ๐ Create and share plugins
- ๐ Add translations
- ๐งช Write tests
This project is licensed under the GNU Affero General Public License v3.0 (AGPLv3).
This ensures that:
- โ You can use, modify, and distribute the software
- โ All derivatives must remain open source
- โ SaaS deployments must share source code (network copyleft)
- โ Community improvements benefit everyone
See LICENSE for full terms.
Inspired by:
Built with:
- ๐ Documentation
- ๐ Issue Tracker
- ๐ฌ Discussions
- ๐ง Email: support@crossbar.dev (coming soon)
Full roadmap: See ROADMAP.md for detailed timeline, completed features, and technical debt tracking.
Mobile Mastery & Configuration Engine
- Configuration Engine: JSON schema support, secure storage (Keychain), and UI generation.
- Mobile Widgets: Native Android (XML) and iOS (WidgetKit) home screen widgets.
- Refresh Engine: Unified behavior across UI, Tray and Background.
- Core: Plugin Manager, Script Runner, Output Parser.
- CLI: 75+ commands.
- Platforms: Linux, macOS, Windows, Android, iOS.
Advanced Desktop UI & API Completion
- Global Hotkey (Ctrl+Alt+C).
- Tray Overflow Logic (Smart Collapse).
- Window State Persistence.
- New CLI commands:
location,qr.
- ๐ Plugins remotos (execuรงรฃo server-side).
- ๐ Integraรงรฃo OpenTelemetry e Grafana.
- ๐ค Sugestรตes de plugins com IA.
- ๐ Plataforma de integraรงรฃo (webhooks, IFTTT/Zapier).
- ๐ฎ Editor visual de plugins (no-code).
- ๐ Extensรฃo de navegador e suporte a smartwatch.
Quer influenciar o roadmap? Vote em funcionalidades nas GitHub Issues ou participe das Discussions!
๐ Changelog
See CHANGELOG.md for the complete version history.
๐ Security Policy
See SECURITY.md for security policy, vulnerability reporting, and best practices.
๐ค Contributing
See CONTRIBUTING.md for contribution guidelines, development setup, and coding standards.
If you find Crossbar useful, please consider giving it a star!
Made with โค๏ธ by the Crossbar Team