A beautiful terminal-based interface for managing your MoneyBird time entries with style.
- π₯οΈ Terminal-based UI built with Ratatui
- π Blazingly fast, written in Rust
- π Browse and navigate time entries by week
- π Automatically refreshes data
- π§© Connects directly to MoneyBird's API
- π Plugin system for integrating with external tools
- π Proper error handling with helpful messages
- π Secure configuration for your API credentials
- π Automatic detection of system theme (light/dark mode)
- π Multilingual support with easy language switching
cargo install motPre-built binaries and packages are available on the GitHub releases page for multiple platforms and architectures:
- Linux: x86_64, ARM (32/64-bit), RISC-V, PowerPC, s390x, and MUSL variants
- Windows: 32-bit and 64-bit zip archives
- macOS: Intel and Apple Silicon (ARM64) builds
- FreeBSD: x86_64 builds
- Debian/Ubuntu: Native
.debpackages - Red Hat/Fedora/SUSE: RPM packages
- Arch Linux: AUR package
- macOS: Homebrew formula and DMG disk image
- Nix: Package for NixOS and Nix package manager
Each release includes SHA256 checksums for verifying file integrity.
# Linux x86_64 example
curl -L https://github.com/Tuurlijk/mot/releases/download/[version]/mot-linux-x86_64.tar.gz | tar xz
./mot
# Or install using your system's package manager
# Debian/Ubuntu
sudo dpkg -i mot_[version]_amd64.deb
# Homebrew (macOS)
brew install motReplace [version] with the desired release version (e.g., v1.4.56).
On first run, MOT will create a default configuration file at:
- Linux/macOS:
~/.config/mot/config.toml - Windows:
%APPDATA%\mot\config.toml
You'll need to edit this file to add your MoneyBird API token:
access_token = "your_moneybird_api_token"
api_url = "https://moneybird.com/api/v2"
administration_id = "your_administration_id" # Optional
week_starts_on = "monday" # Options: monday, tuesday, wednesday, thursday, friday, saturday, sunday
language = "en" # Options: en, nl (Optional, defaults to system language)MOT includes a plugin system that allows integrating time entries from external sources. Plugins use a simple JSON-RPC protocol over stdin/stdout, making them easy to implement in any language.
- Press
pin the main view to see loaded plugins. - In the plugin view, use
Spaceto toggle a plugin's activation status (requires restart to take effect) andCtrl+Dto debug the selected plugin. - Time entries from enabled and initialized plugins appear alongside regular MoneyBird entries in the main view.
- Plugin entries can be imported into MoneyBird by selecting them and pressing
i.
The application automatically detects the standard configuration directory for your system:
- Linux: Uses
$XDG_CONFIG_HOME/mot/pluginsor defaults to$HOME/.config/mot/plugins/ - macOS: Uses
~/Library/Application Support/mot/plugins/ - Windows: Uses
%APPDATA%\mot\plugins\
Each plugin should be in its own subdirectory with the required files:
manifest.toml- Plugin metadata.config.toml- Plugin configuration (including anenabled = true/falsekey).- Executable - The plugin binary or script.
The repository includes example plugins in various languages:
# Install the hello example plugin (Bash)
examples/plugins/install-hello-plugin.sh
# Install the Python example plugin
examples/plugins/install-python-plugin.shFor detailed plugin development information, see docs/Plugins.md.
Besides the examples included in the repository, here's a known community plugin:
- mot-plugin-gitlab: Fetches time tracking logs directly from GitLab activity and commit messages.
MOT provides full internationalization support for all user-facing text:
-
Supported Languages:
- English (en)
- Dutch (nl)
-
Setting the Language:
- Via command line:
mot -l nlormot --language nl - Via configuration file: Add
language = "nl"to your config.toml
- Via command line:
You can also override the language for a single session by using the command line flag, which takes precedence over the configuration file setting.
Simply run mot to start the application. Use the following keyboard shortcuts:
β/h: Previous weekβΆ/l: Next weekt: Go to current weekr: Refresh time entriesβ²/k: Move selection upβΌ/j: Move selection downp: View pluginsq: Quit the applicationF12: Toggle log panel visibility
c: Create a new time entrye/Enter/Space: Edit selected time entryd/Delete: Delete selected time entry (with confirmation)x: Export current view to CSV (with confirmation)i: Import selected plugin time entry into MoneyBird
f//: Enter search/filter mode- Type to filter entries
Esc: Exit search modeCtrl+U: Clear search input
Tab: Move to next fieldShift+Tab: Move to previous fieldCtrl+S: Save changes (create or update entry)Esc: Cancel editing / Hide autocomplete dropdown- (Project/Contact Fields)
- Type to search
Enter: Select highlighted autocomplete item / Move to next field if no dropdownβ/β: Navigate autocomplete dropdownCtrl+U: Clear autocomplete input
- (Description Field)
Enter: Move to next fieldShift+Enter: Insert newline
- (Date/Time Fields)
Enter: Move to next field
β/k: Select previous pluginβ/j: Select next pluginSpace: Toggle activation status of selected plugin (requires restart)Ctrl+D: Debug selected plugin (show response / initialization info)p/Esc: Return to main viewq: Quit the application
β/k: Select previous userβ/j: Select next userEnter: Confirm selected user and save to config
Enter/y: Confirm action / Dismiss info/error modalEsc/n: Cancel action / Dismiss modal- Any other key: Dismiss info/error modal
- Add screenshot before release
- Add vhs gif recording with dummy data
- Filter view by client and project
- Export filtered CSV for a given week number
- Internal logging + logging pane
- CRUD operations for time entries
- Plugin system for external time entries
- Import plugin time entries into MoneyBird
- Toggle plugin activation
- Plugin debugging tools
- Pull time logs from gitlab using dialogue (Example plugin idea)
- Contact browser
- CRUD operations for contacts
- Project browser
- CRUD operations for projects
- Add ci workflows
- Localization (English and Dutch)
- Additional language support (contributions welcome!)
- Show daily total hours in column per client in time entry view
- When a time entry from a plugin is selected, mark moneybird entries for that client and day so they stand out
- Loading indicator when fetching plugin time entries
- Export as pdf: https://crates.io/crates/markdown2pdf
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin amazing-feature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
- MoneyBird for providing the API
- Ratatui for the amazing TUI framework
- Dennis Ameling for the original MoneyBird OpenAPI specification, which was trimmed using apisnip for this project.
- All contributors who have helped shape this project
