Elephant ๐
December 1, 2025 ยท View on GitHub
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.
Overview
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.
Features
Current Providers
-
Desktop Applications
- Auto-detection of
uwsmorapp2unit - Application launch history
- Desktop entry parsing
- Auto-detection of
-
Files
- File preview (text/image)
- File operations: open, copy path, copy content
- Directory navigation
-
Bluetooth
- basic bluetooth management
- connect/disconnect
- trust/untrust
- pair/remove
-
Clipboard
- Text and image clipboard history
- Clipboard content management
- post-edit text content
-
Runner
- Command execution from explicit lists
$PATHscanning for executables
-
Symbols/Emojis
- Multi-locale emoji and symbol support
- Unicode character database
-
Calculator/Unit Conversion
- Mathematical calculations with history
- Unit conversion using
qalc
-
Custom Menus
- User-defined menu creation
- Custom action definitions
-
Provider List
- Dynamic listing of all loaded providers and menus
-
Websearch
- ... define custom search engines
-
Archlinux Packages
- list all packages: official and AUR
- list all explicitly installed packages
i: - remove / install packages (pacman, yay/paru)
-
Todo List
- add items, mark as active/done, clear done items
- create items with due times
- notifications
-
Bookmarks
- add and remove 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
- access your 1Password vaults
Installation
Installing on Arch
yay -S elephant
# Providers, f.e.
yay -S elephant-desktopapplications
Building from Source
# 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/
Usage
Important
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.
Starting the Service
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
Command Line Interface
Elephant includes a built-in client for testing and basic operations:
Querying Data
# Query provider (providers;query;limit;exactsearch)
elephant query "files;documents;10;false"
Activating Items
# activate item (provider;identifier;action;query;arguments)
elephant activate "files;<identifier>;open;;"
Other Commands
# 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
Configuration
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.
API & Integration
Communication Protocol
Elephant uses Unix domain sockets for IPC and Protocol Buffers for message serialization. The main message types are:
- Query Messages: Request data from providers
- Activation Messages: Execute actions
- Menu Messages: Request custom menu data
- Subscribe Messages: Listen for real-time updates
Building Client Applications
To integrate with Elephant, your application needs to:
- Connect to the Unix socket (typically at
/tmp/elephant.sock) - Send Protocol Buffer messages
- Handle responses and updates
See the pkg/pb/ directory for Protocol Buffer definitions.
Development
Project Structure
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
Creating Custom Providers
Providers are Go plugins that implement the provider interface. See existing providers in internal/providers/ for examples.
Building from Source
# 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 ./...
Development Environment
A Nix flake is provided for reproducible development:
nix develop
Contributing
- Fork the repository
- Create a feature branch
- Make your changes
- Submit a pull request
Please ensure your code follows Go best practices and includes appropriate documentation.
License
This project is licensed under the GNU General Public License v3.0. See LICENSE for details.
Support
- ๐ฌ Discord Community
- ๐ Issue Tracker