Elephant - cuz it's phat - is a powerful data provider service and backend for building custom application launchers and desktop utilities. It provides various data sources and actions through a plugin-based architecture, communicating via Unix sockets and Protocol Buffers.
Elephant acts as a unified backend service that aggregates data from various sources (desktop applications, files, clipboard history, etc.) and provides a consistent interface for frontend applications like custom launchers, productivity tools, or desktop widgets.
uwsm or app2unitDesktop entry parsing
Files
Directory navigation
Bluetooth
pair/remove
Clipboard
post-edit text content
Runner
$PATH scanning for executables
Symbols/Emojis
Unicode character database
Calculator/Unit Conversion
Unit conversion using qalc
Custom Menus
Custom action definitions
Provider List
Dynamic listing of all loaded providers and menus
Websearch
... define custom search engines
Archlinux Packages
i:remove / install packages (pacman, yay/paru)
Todo List
notifications
Bookmarks
configure and assign categories, f.e. "work" or "personal"
Unicodes
find unicode symbols
Windows
find and focus windows
Snippets
find and paste text snippets
Niri Sessions
define sets of apps to open and run them
1Password
yay -S elephant
# Providers, f.e.
yay -S elephant-desktopapplications
# Clone the repository
git clone https://github.com/abenz1267/elephant
cd elephant
# Build and install the main binary
cd cmd/elephant
go install elephant.go
# Create configuration directories
mkdir -p ~/.config/elephant/providers
# Build and install a provider (example: desktop applications)
cd ../../internal/providers/desktopapplications
go build -buildmode=plugin
cp desktopapplications.so ~/.config/elephant/providers/
It is utterly important that elephant runs in the appropriate environment. Starting a system-level systemd service f.e. will lead to missing environment variables. It needs to run with the users environment.
On a systemd based system, you can use elephant service enable/disable to manage a service.
The service file will be placed in ~/.config/systemd/user/elephant.service.
Feel free to create your own service file/adjust the one created.
# Start elephant with default configuration
elephant
# Start with debug logging
elephant --debug
# Use custom configuration directory
elephant --config /path/to/config
Elephant includes a built-in client for testing and basic operations:
# Query provider (providers;query;limit;exactsearch)
elephant query "files;documents;10;false"
# activate item (provider;identifier;action;query;arguments)
elephant activate "files;<identifier>;open;;"
# List all installed providers
elephant listproviders
# Open a custom menu, requires a subscribed frontend.
elephant menu "screenshots"
# Show version
elephant version
# Generate configuration documentation
elephant generatedoc
# Systemd service management
elephant service enable/disable
Elephant uses a configuration directory structure:
~/.config/elephant/
├── elephant.toml # Main configuration
├── .env # Environment variables
└── <provider>.toml # Provider config
Markdown documentation for configuring Elephant and its providers can be obtained using elephant generatedoc.
Markdown documentation for configuring a specific provider can be obtained using elephant generatedoc <provider>, e.g. elephant generatedoc unicode.
Elephant uses Unix domain sockets for IPC and Protocol Buffers for message serialization. The main message types are:
To integrate with Elephant, your application needs to:
/tmp/elephant.sock)See the pkg/pb/ directory for Protocol Buffer definitions.
elephant/
├── cmd/ # Main application entry point
├── internal/
│ ├── comm/ # Communication layer (Unix sockets, protobuf)
│ ├── common/ # Shared utilities and configuration
│ ├── providers/ # Data provider plugins
│ └── util/ # Helper utilities
├── pkg/pb/ # Protocol Buffer definitions
└── flake.nix # Nix development environment
Providers are Go plugins that implement the provider interface. See existing providers in internal/providers/ for examples.
# Clone repository
git clone https://github.com/abenz1267/elephant
cd elephant
# Install dependencies
go mod download
# Build main binary
go build -o elephant cmd/elephant.go
# Run tests
go test ./...
A Nix flake is provided for reproducible development:
nix develop
Please ensure your code follows Go best practices and includes appropriate documentation.
This project is licensed under the GNU General Public License v3.0. See LICENSE for details.
$ claude mcp add elephant \
-- python -m otcore.mcp_server <graph>