neru

module
v1.8.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 16, 2025 License: MIT

README ΒΆ

Neru

Master your keyboard, refine your workflow

Navigate macOS without touching your mouse - keyboard-driven productivity at its finest πŸ–±οΈβŒ¨οΈ

License Platform Go Version Latest Release

Installation β€’ Quick Start β€’ Documentation β€’ Contributing

hints-preview

grid-preview

Hints demo β€’ Grid demo


What is Neru?

Neru (η·΄γ‚‹) - a Japanese word meaning "to refine, polish, and master through practice" - is a free, open-source keyboard navigation tool for macOS. Navigate, click, and scroll anywhere on your screen without ever touching your mouse.

Grid-based navigation is the foundation of Neru. Unlike hint-based systems that rely on accessibility trees (which break in Electron apps, Chromium, Mission Control, menubar items), Neru's grid approach:

  • βœ… Works everywhere - native apps, Electron, browsers, menubar, Mission Control, Dock
  • βœ… Fast and reliable - no waiting for accessibility tree traversal
  • βœ… Simple to maintain - no complex app-specific compatibility layers
  • βœ… Always accurate - clicks exactly where you see the hint

Why Neru?

  • πŸ†“ Always free - No paywalls, no subscriptions, no "upgrade to pro"
  • 🎯 Universal compatibility - Works with native macOS apps, Electron apps, and all browsers
  • ⚑ Lightning fast - Native performance with instant response
  • πŸ› οΈ Power-user friendly - Text-based config for version control and dotfile management
  • 🀝 Community-owned - Your contributions shape the project
  • πŸ”§ Scriptable - CLI commands enable automation and integration
Free Alternative To

Neru is a capable replacement for:

  • Homerow - Modern keyboard navigation (paid)
  • Shortcat - Keyboard productivity tool (discontinued? not sure...)
  • Vimac - Vim-style navigation (unmaintained)
  • Mouseless - Grid based keyboard navigation (paid)

Features

  • 🎯 Hint labels - Click any visible element using keyboard labels (grid or vimium hints)
  • 🎬 Action mode - Choose click type: left, right, double, triple middle, drag and drop, and more
  • πŸ“œ Vim-style scrolling - Scroll anywhere with j/k, gg/G, Ctrl+D/U - works standalone or within hints/grid modes
  • 🌐 Universal support - Native apps, Electron, Chrome, Firefox, menubar, Dock, Mission Control
  • ⚑ Native performance - Built with Objective-C and Go for instant response
  • πŸ› οΈ Highly customizable - Configure everything via TOML
  • 🚫 App exclusion - Disable Neru in specific applications
  • πŸ’¬ IPC control - Control via CLI for scripting and automation
  • πŸ“¦ No GUI bloat - Configuration over UI for maintainability

Installation

brew tap y3owk1n/tap
brew install --cask y3owk1n/tap/neru
Nix

See docs/INSTALLATION.md for Nix configuration details.

From Source
git clone https://github.com/y3owk1n/neru.git
cd neru
just release # CLI only
just bundle  # App bundle

See docs/INSTALLATION.md for detailed installation instructions and troubleshooting.

Grant Permissions

After installation, grant Accessibility permissions:

  1. Open System Settings
  2. Navigate to Privacy & Security β†’ Accessibility
  3. Enable Neru

Quick Start

# Start Neru
open -a Neru  # App bundle
# or
neru launch   # CLI

# Try the default hotkeys:
# Cmd+Shift+Space - Hint mode
# Cmd+Shift+G     - Grid mode
# Cmd+Shift+S     - Scroll

Basic workflow:

For hints:

  1. Press hotkey to activate hints
  2. Type the label characters (e.g., "aa", "ab") - use delete to fix typos
  3. Element is clicked, cursor optionally restores to original position
  4. Press Esc anytime to cancel
  5. Press <Tab> to switch to between action and overlay modes

For grid:

  1. Press hotkey to activate grid mode
  2. Click the cell you want to click
  3. Refine the final selection within the selected cell
  4. Element is clicked, cursor optionally restores to original position
  5. Press Esc anytime to cancel
  6. Press <Tab> to switch to between action and overlay modes

Action mode is a special mode that allows you to perform actions on the current cursor position.


Documentation

Configuration Files

Neru uses TOML for configuration. Default locations (in order of preference):

  1. ~/.config/neru/config.toml (XDG standard - recommended for dotfiles)
  2. ~/Library/Application Support/neru/config.toml (macOS convention)
  3. Custom path: neru launch --config /path/to/config.toml

No config file? Neru uses sensible defaults.

See configs/default-config.toml for all options, or check docs/CONFIGURATION.md for examples.


Design Philosophy

Why No GUI?

Neru intentionally avoids a GUI settings panel because:

βœ… Config files are superior for power users

  • Faster to edit than clicking through settings
  • Version control friendly (git, dotfiles)
  • Easily shared and documented
  • More powerful than UI constraints allow

βœ… Reduces maintenance burden

  • No UI code to maintain
  • Focus on core functionality
  • Smaller, simpler codebase

βœ… Menubar provides essentials

  • Quick access to common actions
  • Status information
  • Enable/disable toggle

This is an intentional choice to keep Neru lean, maintainable, and focused on what matters: keyboard-driven productivity.

Grid-Based > Hint-Based

Neru uses a grid-based approach for hint placement, not accessibility tree traversal:

Grid-Based (Neru) Hint-Based (Traditional)
βœ… Works everywhere ❌ Breaks in Electron
βœ… Works in menubar ❌ No menubar support
βœ… Works in Mission Control ❌ No Mission Control
βœ… Fast (instant) ❌ Slower (tree walk)
βœ… Simple maintenance ❌ Complex app-specific fixes
βœ… Always accurate ❌ Misaligned hints
βœ… No side effects ❌ Can break tiling WMs

Grid-based navigation means Neru doesn't depend on apps exposing proper accessibility information. It works by overlaying a visual grid and clicking at exact screen coordinates - simple, reliable, universal.

Important: Neru includes optional accessibility support for Chromium and Firefox (disabled by default) that can help with hint detection. However, enabling this may cause side effects with tiling window managers (yabai, Amethyst, etc.). If you use a tiling WM, keep additional_ax_support.enable = false unless absolutely necessary.


Project Status

[!NOTE] Neru is a personal project maintained on a best-effort basis. Pull requests are more likely to be reviewed than feature requests or issues, unless I'm experiencing the same problem.

This project thrives on community contributions. I'm happy to merge PRs that align with the project's goals. Neru stays current through collective effort rather than solo maintenance.

Roadmap / Future Ideas
  • Test suites (contributions welcome!)
  • Launch agent with start-service/stop-service commands
  • Better app icon and menubar icon

Known Issues:

  • Hold/unhold actions don't work in Finder.app (help is appreciated!)

Contributing

Contributions are welcome! Here's how:

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/amazing-feature)
  3. Make your changes
  4. Test thoroughly (just test && just lint)
  5. Commit with clear messages
  6. Push and open a Pull Request

Guidelines:

  • Keep PRs focused on a single change
  • Add tests for new features
  • Update documentation
  • Follow existing code style

See docs/DEVELOPMENT.md for build instructions and architecture details.


Compatibility

Neru works with:

  • βœ… All native macOS apps (Finder, Safari, System Settings, etc.)
  • βœ… Electron apps (VS Code, Windsurf, Cursor, Slack, Spotify, Obsidian)
  • βœ… Chromium browsers (Chrome, Brave, Arc)
  • βœ… Firefox browsers (Firefox, Zen)
  • βœ… Adobe Creative Suite (Illustrator, Photoshop)
  • βœ… Menubar applications
  • βœ… Dock and Mission Control

See docs/TROUBLESHOOTING.md if you encounter issues with specific apps.


License

MIT License - see LICENSE for details.


Acknowledgments

Neru is inspired by these excellent projects:

  • Homerow - Modern keyboard navigation for macOS
  • Vimac - Vim-style keyboard navigation
  • Shortcat - Keyboard productivity tool
  • Vimium - Vim bindings for browsers
  • Vifari - Vimium/Vimari for Safari
  • Mouseless - Grid based keyboard navigation

Support

  • πŸ“– Check docs/TROUBLESHOOTING.md for common issues
  • πŸ› Open an issue for bugs (but PRs are preferred!)
  • ⭐ Star the repo if you find Neru useful!

Made with ❀️ by y3owk1n

Directories ΒΆ

Path Synopsis
cmd
neru command
Package main provides the main entry point for the Neru application.
Package main provides the main entry point for the Neru application.
internal
accessibility
Package accessibility provides accessibility functionality for the Neru application.
Package accessibility provides accessibility functionality for the Neru application.
action
Package action provides overlay functionality for action mode.
Package action provides overlay functionality for action mode.
appwatcher
Package appwatcher provides application lifecycle monitoring functionality.
Package appwatcher provides application lifecycle monitoring functionality.
bridge
Package bridge provides C bridging functionality for the Neru application.
Package bridge provides C bridging functionality for the Neru application.
cli
Package cli provides command-line interface functionality for the Neru application.
Package cli provides command-line interface functionality for the Neru application.
config
Package config provides configuration functionality for the Neru application.
Package config provides configuration functionality for the Neru application.
electron
Package electron provides Electron application support functionality.
Package electron provides Electron application support functionality.
eventtap
Package eventtap provides low-level event tapping functionality for key capture.
Package eventtap provides low-level event tapping functionality for key capture.
grid
Package grid provides grid mode functionality for the Neru application.
Package grid provides grid mode functionality for the Neru application.
hints
Package hints provides hint generation and management functionality for the Neru application.
Package hints provides hint generation and management functionality for the Neru application.
hotkeys
Package hotkeys provides hotkey management functionality.
Package hotkeys provides hotkey management functionality.
ipc
Package ipc provides inter-process communication functionality.
Package ipc provides inter-process communication functionality.
logger
Package logger provides logging functionality for the Neru application.
Package logger provides logging functionality for the Neru application.
overlay
Package overlay provides overlay functionality for the Neru application.
Package overlay provides overlay functionality for the Neru application.
scroll
Package scroll provides scrolling functionality for the Neru application.
Package scroll provides scrolling functionality for the Neru application.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL