CrossMacro: The Hidden Automation Tool Killing Repetitive Tasks
What if you could reclaim 10+ hours every week by simply pressing F8?
Let me paint you a painfully familiar picture. It's 2 AM. Your eyes are burning. You've been copy-pasting the same data format for three hours, clicking through identical UI sequences, typing the same email templates for the hundredth time. Your wrist hurts. Your sanity is fraying. And somewhere in the back of your mind, you know there's a better way—but every "automation solution" you've tried either costs a fortune, works on only one operating system, or requires learning a programming language you don't have time for.
Here's the brutal truth: most developers and power users are bleeding productivity every single day because they haven't discovered the right automation tool for their workflow. They're either trapped in expensive SaaS subscriptions, wrestling with brittle browser extensions, or writing fragile Python↗ Bright Coding Blog scripts that break with every UI update.
But what if I told you there's an open-source powerhouse that records and replays your exact mouse and keyboard actions across Linux, Windows, and macOS—with zero coding required? A tool so polished it feels like commercial software, yet it's completely free and community-driven?
Meet CrossMacro. This isn't another half-baked AutoHotkey clone or a Linux-only hack. This is a legitimate, cross-platform macro automation platform with a visual editor, text expansion, scheduled tasks, and even a full CLI for headless workflows. And it's about to change how you think about repetitive computer work forever.
What is CrossMacro?
CrossMacro is an open-source, cross-platform mouse and keyboard macro recorder and player created by developer Alper Han. Built with modern frameworks and designed for real-world power users, it solves the fundamental problem that has plagued automation enthusiasts for decades: true cross-platform compatibility without sacrificing capability.
Unlike legacy tools that lock you into a single ecosystem, CrossMacro runs natively on Linux (both Wayland and X11), Windows, and macOS—with feature parity across all three. No virtual machines. No compatibility layers. Just native performance wherever you work.
The project has gained serious traction in the developer community, amassing thousands of GitHub downloads and earning distribution through Flathub, the Microsoft Store, winget, and even nixpkgs. The repository maintains active CI/CD pipelines, a growing Discord community, and consistent release cadence that signals long-term commitment.
What makes CrossMacro genuinely special isn't just its platform coverage—it's the thoughtful architecture underneath. On Linux, it supports both a daemon-backed mode (where a system service handles privileged input operations) and direct device mode (for portable scenarios like AppImage). This dual-mode design means it works seamlessly in enterprise locked-down environments AND on your personal Arch rice machine. The Windows build offers Store, winget, and portable options. macOS users get a clean DMG with proper Accessibility permissions handling.
The project is licensed under GPL-3.0-only, ensuring it stays free and open for community contributions. With theme support spanning Classic, Latte, Mocha, Dracula, Nord, Everforest, Gruvbox, Solarized, and Crimson, it even respects your aesthetic preferences.
Key Features That Separate CrossMacro from the Pack
CrossMacro isn't a simple "record and replay" toy. It's a comprehensive automation platform with depth that becomes apparent the moment you dig past the surface.
Precision Recording and Playback The core engine captures both mouse events (clicks and movement) and keyboard events with millisecond accuracy. Playback offers granular speed control from 0.1x to 10.0x, pause/resume functionality, and loop modes with configurable repeat counts and delays. Need to run that data entry sequence 500 times with a 2-second gap? Trivial.
Visual Macro Editor Raw recordings rarely perfect. CrossMacro's built-in editor provides undo/redo, coordinate capture, and action reordering—so you can fine-tune automation sequences without re-recording from scratch. This is where it transcends basic macro tools and enters professional territory.
Text Expansion Engine
Beyond macros, CrossMacro functions as a text expander. Type :mail and watch it instantly become email@example.com. For developers, support staff, and anyone who types repetitive text, this alone justifies installation.
Shortcut-Bound Execution Bind macros to keyboard keys, mouse buttons, or key combinations. Choose between toggle mode (press once to start, again to stop) or run-while-held (macro runs only while you're pressing). Add repeat counts and delays for sophisticated trigger behaviors.
Scheduled Task Execution Automation shouldn't require you to be present. CrossMacro's scheduler lets you run macros at specific times or intervals—perfect for overnight data processing, periodic system maintenance, or timed testing procedures.
CLI and Headless Workflows
Here's where developers get excited. CrossMacro exposes complete functionality through a command-line interface, enabling CI/CD integration, remote server automation, and scripting scenarios where a GUI is impossible. The --headless flag runs without any graphical interface.
Global Hotkeys Default bindings of F8 (record), F9 (playback), and F10 (pause/resume) work system-wide. Customize these to match your muscle memory.
System Tray Integration
Optional tray controls keep CrossMacro accessible without taskbar clutter. Combine with --start-minimized for seamless autostart behavior.
Real-World Use Cases Where CrossMacro Shines
1. Cross-Platform Development Testing
You're building a web application that must behave identically across platforms. Instead of manually clicking through test flows on Linux, Windows, and macOS machines, record once, replay everywhere. CrossMacro's .macro files are portable across operating systems—record your login flow on Ubuntu, email the file to your Windows VM, and execute identically.
2. Legacy Data Migration
That enterprise database migration with no API access? The one requiring 10,000 identical form submissions through an ancient web interface? CrossMacro doesn't care that there's no modern integration path. Record the sequence once, tune delays for network latency, and let it run overnight. The loop controls and playback speed mean you can find the maximum reliable pace without human fatigue errors.
3. Content Creation and Streaming
Streamers and YouTubers repeatedly perform complex OBS scene transitions, audio adjustments, and chat interactions. Bind scene-switching macros to mouse buttons, create text expansion shortcuts for common chat responses, and schedule promotional messages. The run-while-held mode means macros activate only during intentional button presses—no accidental mid-stream chaos.
4. Accessibility and Ergonomic Relief
Repetitive strain injuries destroy careers. For users with limited mobility or chronic pain, CrossMacro transforms physically demanding workflows into single-button operations. A graphic designer with carpal tunnel can bind their most common Photoshop actions to foot pedals or specialized buttons, reducing thousands of daily clicks to manageable triggers.
5. QA and Regression Testing
Small teams without dedicated QA automation infrastructure can build lightweight regression suites using CrossMacro's CLI. Integrate crossmacro play commands into shell scripts, capture JSON output with --json, and fail builds when UI flows break. It's not Selenium, but it works on desktop applications Selenium can't touch.
Step-by-Step Installation & Setup Guide
CrossMacro's installation philosophy is simple: meet users where they are. Whether you want a one-click Store install or a bleeding-edge Nix flake, there's a path for you.
Linux Installation
Flatpak (Recommended for most users):
# One command, sandboxed, automatic updates
flatpak install flathub io.github.alper_han.crossmacro
Debian/Ubuntu (.deb):
# Download from GitHub Releases, then:
sudo apt install ./crossmacro*.deb
# Add yourself to the crossmacro group for daemon access
sudo usermod -aG crossmacro $USER
# REBOOT or re-login required for group change
Fedora/RHEL (.rpm):
sudo dnf install ./crossmacro*.rpm
sudo usermod -aG crossmacro $USER
Arch Linux (AUR):
yay -S crossmacro
# or
paru -S crossmacro
AppImage (Portable):
# One-time permission setup required
echo 'KERNEL=="uinput", GROUP="input", MODE="0660", OPTIONS+="static_node=uinput"' | sudo tee /etc/udev/rules.d/99-crossmacro.rules
sudo udevadm control --reload-rules && sudo udevadm trigger
sudo usermod -aG input $USER
# Reboot, then:
chmod +x CrossMacro-*.AppImage
./CrossMacro-*.AppImage
Nix/NixOS:
# Run without installing
nix run github:alper-han/CrossMacro
# Or install via nixpkgs
nix profile install nixpkgs#crossmacro
For NixOS module (daemon-backed mode with proper service setup):
{
inputs.crossmacro.url = "github:alper-han/CrossMacro";
outputs = { nixpkgs, crossmacro, ... }: {
nixosConfigurations.myhost = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
modules = [
crossmacro.nixosModules.default
({ ... }: {
programs.crossmacro = {
enable = true;
users = [ "yourusername" ];
};
})
];
};
};
}
Windows Installation
Microsoft Store (Easiest): Visit the Store page or search "CrossMacro" in the Store app.
winget (Power users):
winget install AlperHan.CrossMacro
# Update later with:
winget upgrade -e --id AlperHan.CrossMacro
Portable EXE: Download from GitHub Releases—no installation, runs from USB drives.
macOS Installation
# 1. Download .dmg from GitHub Releases
# 2. Drag CrossMacro to Applications
# 3. Launch and grant Accessibility permissions when prompted
# If Gatekeeper blocks first launch:
xattr -cr /Applications/CrossMacro.app
Post-Install: Verify Daemon Status (Linux)
# Check if daemon is running (for packaged installs)
systemctl status crossmacro.service
# Start/enable if needed
sudo systemctl enable --now crossmacro.service
REAL Code Examples from CrossMacro
Let's examine actual functionality from the repository, with detailed explanations of how to leverage CrossMacro's power.
Example 1: Basic CLI Playback with Speed Control
# Play a saved macro at 1.25x speed, repeating 3 times
crossmacro play ./demo.macro --speed 1.25 --repeat 3
Before: You have a recorded macro file demo.macro that performs a sequence of clicks and keystrokes—perhaps a login flow or data entry pattern. By default, playback runs at recorded speed once.
Explanation: The --speed 1.25 accelerates playback by 25%, useful when you know the target application can handle faster interaction. The --repeat 3 executes the entire sequence three times consecutively. This is ideal for batch operations where you need multiple identical executions without manual retriggering.
After: Combine with shell scripting for powerful automation: for f in *.macro; do crossmacro play "$f" --speed 2.0; done processes all macro files at double speed.
Example 2: Programmatic Run Steps with Variables and Logic
# Set a variable, then loop that many times
crossmacro run --step "set n=3" --step "repeat $n {" --step "click left" --step "delay random 20 50" --step "}"
Before: You need a macro that clicks three times with randomized delays between clicks—mimicking human behavior for testing or avoiding anti-automation detection.
Explanation: This demonstrates CrossMacro's embedded scripting language. set n=3 creates variable n with value 3. repeat $n { opens a loop block. click left performs a left mouse click. delay random 20 50 pauses between 20-50 milliseconds (unpredictable, human-like). } closes the loop. The --step flags chain multiple commands; for complex scripts, use --file instead.
After: Variables enable dynamic behavior impossible with simple recorders. You can read values from environment variables, compute iteration counts based on file listings, or create adaptive workflows.
Example 3: Conditional Logic and Flow Control
# Count from 0 to 10, skip 3, break at 8
crossmacro run --step "set i=0" --step "while $i < 10 {" --step "click left" --step "inc i" --step "}"
# More complex: for loop with continue/break
crossmacro run --step "for i from 0 to 10 {" --step "if $i == 3 {" --step "continue" --step "}" --step "if $i == 8 {" --step "break" --step "}" --step "click left" --step "}"
Before: Simple recorders force linear execution. Real automation needs decisions: skip weekends in a date picker, stop when a success indicator appears, retry on failure.
Explanation: The first snippet shows a while loop with manual increment. The second demonstrates for loop syntax with continue (skip to next iteration when i equals 3) and break (exit loop when i reaches 8). This means 7 clicks total—iterations 0,1,2,4,5,6,7. The if statements use == for equality comparison; other operators include <, >, <=, >=, !=.
After: These control structures transform CrossMacro from a dumb recorder into a programmable automation engine. Build adaptive tests that respond to application state, create robust retry logic, or implement early termination conditions.
Example 4: Headless Recording and System Integration
# Record for exactly 10 seconds, save to file
crossmacro record --output ./recorded.macro --duration 10
# Start minimized to tray for autostart
crossmacro --start-minimized
# Validate macro integrity
crossmacro macro validate ./demo.macro
# Get diagnostic information in JSON
crossmacro doctor --json
Before: You need unattended recording, startup automation, or programmatic verification that macro files aren't corrupted.
Explanation: record --duration 10 captures precisely 10 seconds of input—perfect for timed demonstrations or standardized test recordings. --start-minimized enables clean autostart integration; combine with your desktop environment's startup applications. macro validate checks file structure without executing, essential for CI pipelines. doctor --json outputs system compatibility information in machine-readable format for troubleshooting remote deployments.
After: These commands enable full automation pipelines: schedule crossmacro record via cron for user behavior capture, validate macros before deployment, and diagnose permission issues across heterogeneous environments.
Example 5: Settings Manipulation and Scheduled Tasks
# Inspect current configuration
crossmacro settings get
# Read specific setting
crossmacro settings get playback.speed
# Modify playback speed globally
crossmacro settings set playback.speed 1.25
# List all scheduled tasks
crossmacro schedule list
# Execute specific scheduled task by GUID
crossmacro schedule run <task-guid>
# List all shortcuts
crossmacro shortcut list
# Trigger shortcut programmatically
crossmacro shortcut run <shortcut-guid>
Before: You need to script configuration changes, audit current settings, or trigger automation from external systems.
Explanation: The settings commands expose CrossMacro's configuration as a key-value store with hierarchical dot-notation paths. This enables infrastructure-as-code approaches: version-control your crossmacro settings get output, apply changes via scripts, and ensure consistent environments. The schedule and shortcut commands provide stable identifiers (GUIDs) for reliable programmatic access—no brittle name matching.
After: Integrate with Ansible, Chef, or custom deployment tools. Trigger CrossMacro from webhooks, database events, or monitoring alerts using these CLI primitives.
Advanced Usage & Best Practices
Optimize Playback Speed Experimentally
Start at 1.0x and increment by 0.25x until the target application drops inputs. Most web applications handle 2.0-3.0x; native desktop apps often sustain 5.0x+. Use --dry-run to validate timing without side effects.
Leverage Relative Coordinates for Resilient Macros When absolute positioning fails (window moved, different screen resolution), enable Force Relative Coordinates in settings. Record with the target window at a consistent position, and playback becomes resolution-independent.
Combine Text Expansion with Macros
Text expansion shortcuts like :addr for your address complement macro sequences perfectly. Use expansion for static text, macros for dynamic sequences—don't record typing that could be expanded.
Secure Your Macro Files
.macro files contain literal input events. If you record passwords or sensitive operations, encrypt these files and restrict permissions. Never commit unencrypted macros containing credentials to version control.
Debug with Verbose Logging When playback behaves unexpectedly, enable debug logging. On Linux daemon installs:
sudo systemctl kill -s USR1 crossmacro.service
journalctl -u crossmacro.service -f
Toggle back with another USR1 signal.
Handle Wayland Quirks Proactively On GNOME Wayland, install the shell extension for absolute positioning when prompted. For smoothest relative playback, disable pointer acceleration and use a flat pointer profile in compositor settings.
Comparison with Alternatives
| Feature | CrossMacro | AutoHotkey | xdotool | SikuliX | Pulover's Macro Creator |
|---|---|---|---|---|---|
| Linux Support | ✅ Native (Wayland+X11) | ❌ Windows only | ✅ X11 only | ✅ | ❌ Windows only |
| Windows Support | ✅ Native | ✅ Native | ❌ | ✅ | ✅ |
| macOS Support | ✅ Native | ❌ | ❌ | ✅ | ❌ |
| GUI Editor | ✅ Built-in | ❌ Basic | ❌ | ✅ | ✅ |
| Text Expansion | ✅ Built-in | ⚠️ Scriptable | ❌ | ❌ | ❌ |
| Scheduled Tasks | ✅ Built-in | ⚠️ External | ⚠️ Cron | ❌ | ❌ |
| CLI/Headless | ✅ Full support | ⚠️ Partial | ✅ | ❌ | ❌ |
| Open Source | ✅ GPL-3.0 | ❌ | ✅ | ✅ | ❌ |
| Modern UI | ✅ Qt-based, themes | ❌ Dated | ❌ CLI | ⚠️ Java Swing | ⚠️ Dated |
| Daemon Architecture | ✅ Linux security model | N/A | ❌ | ❌ | ❌ |
The verdict? CrossMacro is the only open-source tool offering genuine cross-platform support with modern UI, built-in text expansion, scheduling, and comprehensive CLI. AutoHotkey remains Windows-only with a steeper learning curve. xdotool lacks Wayland support and modern features. SikuliX requires Java and image recognition that breaks with UI changes. Pulover's Macro Creator is abandoned Windows-only freeware.
FAQ
Is CrossMacro free for commercial use? Yes. Licensed under GPL-3.0-only, CrossMacro is free for personal and commercial use. Contributions back to the project are encouraged but not legally required for usage.
Does CrossMacro work on Wayland? Absolutely. CrossMacro explicitly supports both Wayland and X11 on Linux, with dedicated backends for major compositors including Hyprland, KDE Plasma, GNOME (via shell extension), and Wayfire. Automatic fallback to relative positioning ensures functionality even on unsupported compositors.
Can I run macros without the GUI?
Yes. The crossmacro CLI supports complete headless operation via --headless flag. Record, play, validate, and manage schedules entirely from terminal or scripts.
Is my data safe? Does CrossMacro phone home? CrossMacro is fully open-source. Audit the code at the GitHub repository. No telemetry, no cloud dependency, no account required. Macro files stay local.
Why does Linux need a daemon or special permissions? Linux input devices require elevated privileges for security reasons. The daemon-backed model follows principle of least privilege: a dedicated service user holds device access, while your user communicates via socket. This is architecturally superior to running the entire application as root.
Can macros be edited after recording?
Yes. The built-in macro editor supports undo/redo, individual action deletion, coordinate capture, and action reordering. For programmatic editing, the CLI run command accepts discrete steps.
How do I get help or report bugs? Join the Discord community, open issues on GitHub, or start discussions for questions and ideas.
Conclusion
CrossMacro represents something rare in open-source tooling: genuine innovation at the intersection of accessibility and power. It doesn't force you to choose between "easy for beginners" and "powerful for experts." The GUI gets you started in seconds. The CLI and scripting language scale to complex automation infrastructure.
After testing across Linux (Wayland), Windows 11, and macOS Ventura, I'm convinced this is the most complete cross-platform macro solution available today—commercial or otherwise. The daemon architecture on Linux shows security-conscious design. The text expansion eliminates the need for a separate tool. The scheduling and CLI enable integration scenarios I previously needed multiple tools to achieve.
If you're still performing repetitive clicks and keystrokes manually in 2024, you're choosing to waste time. CrossMacro is free, open-source, actively maintained, and waiting to reclaim your hours.
Download CrossMacro now from GitHub—available via Flathub, Microsoft Store, winget, AUR, nixpkgs, or direct download. Star the repository, join the Discord, and stop doing work that machines should handle.
Your wrists will thank you. Your sanity will thank you. And you'll finally have time for the interesting problems worth solving.