A modern rust clone of bunny1.
Enter gh facebook/react in your browser's address bar to open the React repository on GitHub.
Or run the CLI:
$ bunnylol gh facebook/reactInstall from crates.io:
# Install both CLI and server (3.9MB)
$ cargo install bunnylol
# Install just the CLI (1.4MB - recommended for terminal use only)
$ cargo install bunnylol --features cli --no-default-features
# Install just the server (3.6MB - recommended for web server deployments)
$ cargo install bunnylol --features server --no-default-featuresOr build from source:
# Clone the repository
$ git clone https://github.com/facebook/bunnylol.rs.git
$ cd bunnylol.rs
# Install both CLI and server
$ cargo install --path .
# Install just the CLI
$ cargo install --path . --features cli --no-default-features
# Install just the server
$ cargo install --path . --features server --no-default-featuresUse bunnylol to open URLs directly from your terminal!
# Open GitHub
$ bunnylol gh
# Open Instagram Reels
$ bunnylol ig reels
# Open a specific GitHub repository
$ bunnylol gh facebook/react
# Preview URL without opening browser (dry-run)
$ bunnylol --dry-run gh facebook/react
# Output: https://github.com/facebook/react
# List all available commands with a beautiful table
$ bunnylol list| CLI Command | What it does |
|---|---|
bunnylol gh |
Open GitHub homepage |
bunnylol gh facebook/react |
Open facebook/react repository |
bunnylol ig reels |
Open Instagram Reels |
bunnylol tw @facebook |
Open Twitter profile |
bunnylol r r/rust |
Open r/rust subreddit |
bunnylol --dry-run meta ai |
Print Meta AI URL without opening |
bunnylol --help |
Show help information |
bunnylol --version |
Show version information |
bunnylol list |
Display all commands in a formatted table |
For even faster access, add an alias to your shell configuration:
# Add to ~/.bashrc or ~/.zshrc
alias b="bunnylol"
# Then use it like this:
$ b ig reels
$ b gh facebook/react
$ b listThe bunnylol CLI supports optional configuration via a TOML file following the XDG Base Directory Specification.
Bunnylol uses different config file locations depending on how it's run:
For CLI and manual server usage (bunnylol serve):
- Linux/macOS:
~/.config/bunnylol/config.toml(or$XDG_CONFIG_HOME/bunnylol/config.tomlif set) - Windows:
%APPDATA%\bunnylol\config.toml
For system service (sudo bunnylol service install):
- Linux:
/etc/bunnylol/config.toml
The config file is automatically created with sensible defaults when you first run bunnylol.
The CLI works perfectly fine without any configuration file. However, you can customize the following features:
Specify which browser to open URLs in:
# ~/.config/bunnylol/config.toml
browser = "firefox" # or "chrome", "chromium", "safari", etc.If not specified, the system default browser is used.
Create your own personalized shortcuts:
[aliases]
work = "gh mycompany"
blog = "gh username/blog"
dotfiles = "gh username/dotfiles"Then use them like any built-in command:
$ bunnylol work
# Opens: https://github.com/mycompany
$ bunnylol blog
# Opens: https://github.com/username/blogOverride Google as the fallback search engine:
default_search = "ddg" # Options: "google" (default), "ddg", "bing"When a command isn't recognized, it will search using your configured engine instead of Google.
Track your recently used commands (enabled by default):
[history]
enabled = true
max_entries = 1000History is stored at:
- Linux/macOS:
~/.local/share/bunnylol/history(or$XDG_DATA_HOME/bunnylol/historyif set) - Windows:
%APPDATA%\bunnylol\history
Here's a full example with all available options:
# ~/.config/bunnylol/config.toml
# Browser to open URLs in (optional)
browser = "firefox"
# Custom command aliases (optional)
[aliases]
work = "gh mycompany"
blog = "gh username/blog"
dotfiles = "gh username/dotfiles"
notes = "gh username/notes"
# Default search engine when command not recognized (optional)
# Options: "google" (default), "ddg", "bing"
default_search = "ddg"
# Command history settings (optional)
[history]
enabled = true
max_entries = 1000
# Server configuration (for bunnylol serve) (optional)
[server]
port = 8000
address = "127.0.0.1" # Use "0.0.0.0" for network access
log_level = "normal" # Options: "normal", "debug", "critical", "off"
server_display_url = "https://bunny.example.com" # Public URL shown on bindings pageThe CLI uses platform-appropriate directories for configuration and data:
| Platform | Type | Path |
|---|---|---|
| Linux/macOS | User Config | ~/.config/bunnylol/config.toml(or $XDG_CONFIG_HOME/bunnylol/config.toml) |
| Linux | System Config | /etc/bunnylol/config.toml(when running as system service) |
| Linux/macOS | Data | ~/.local/share/bunnylol/(or $XDG_DATA_HOME/bunnylol/) |
| Windows | Config | %APPDATA%\bunnylol\config.toml |
| Windows | Data | %APPDATA%\bunnylol\ |
After installing bunnylol, start the server:
$ bunnylol serveOr use Docker:
$ git clone https://github.com/facebook/bunnylol.rs.git
$ cd bunnylol.rs
$ docker compose up -dOr build from source:
$ git clone https://github.com/facebook/bunnylol.rs.git
$ cd bunnylol.rs
$ cargo run -- serveFor production use on Linux, install bunnylol as a systemd service that starts automatically on boot:
# Install bunnylol first
$ cargo install bunnylol
# Install as system service (requires sudo, Linux only)
# Default: localhost only (127.0.0.1)
$ sudo bunnylol service install
# For network access (production servers)
$ sudo bunnylol service install --network
# The installer will:
# - Create /etc/systemd/system/bunnylol.service
# - Create /etc/bunnylol/config.toml with server settings
# - Enable autostart on boot
# - Start the service immediately
# Manage the service
$ sudo bunnylol service status
$ sudo bunnylol service logs -f
$ sudo bunnylol service restart
# Uninstall
$ sudo bunnylol service uninstallNetwork Access:
- Without
--network(default): Binds to127.0.0.1(localhost only, secure default) - With
--network: Binds to0.0.0.0(accessible from network, for production servers)
The service installer works on:
- Linux:
systemd(Ubuntu 16.04+, Debian 8+, CentOS 7+, etc.)
macOS and Windows: Use Docker instead (see above) or run bunnylol serve directly.
For more details, see the Deployment Guide.
Open your web browser and navigate to http://localhost:8000/?cmd=fb to get redirected to Facebook.
Open http://localhost:8000/?cmd=gh facebook/bunnylol.rs to be redirected to this repo.
You can set your default search engine to http://localhost:8000/?cmd=%s and use bunnylol.rs for everything. For this to work, you will need to have the server deployed and running locally or on a server.
Note: For best results, deploy bunnylol on a networked server accessible from all your devices, rather than just running it locally.
Note: iOS Safari does not support custom search engines, so you'll need to use Firefox (or another browser that does) instead.
- Install Firefox and set it as the default browser
- Change your default search engine in Firefox for iOS
π Click to view all available commands (46 commands, 82+ bindings)
| Command | Aliases | Description | Example |
|---|---|---|---|
gh |
β | Navigate to GitHub repositories | gh facebook/react |
gitlab |
gl |
Navigate to GitLab projects or search GitLab | gitlab gitlab-org/gitlab |
cargo |
crates |
Navigate to crates.io or search for Rust crates | cargo serde |
npm |
npmjs |
Navigate to npmjs.com or search for npm packages | npm react |
pypi |
pip |
Navigate to pypi.org or search for Python packages | pypi requests |
rubygems |
gem, gems |
Navigate to rubygems.org or search for Ruby gems | gem rails |
go |
golang, gopkg |
Navigate to pkg.go.dev or search for Go packages | go http |
nuget |
β | Navigate to nuget.org or search for .NET packages | nuget newtonsoft |
packagist |
composer |
Navigate to packagist.org or search for PHP packages | packagist symfony |
brew |
homebrew |
Navigate to formulae.brew.sh or search for Homebrew packages | brew wget |
choco |
chocolatey |
Navigate to community.chocolatey.org or search for Windows packages | choco git |
dockerhub |
docker |
Navigate to Docker Hub or search for container images | docker nginx |
| Command | Aliases | Description | Example |
|---|---|---|---|
rust |
β | Navigate to Rust documentation or search Rust std docs | rust HashMap |
python |
pydocs, py |
Navigate to Python documentation or search for Python resources | python list |
node |
nodejs |
Navigate to Node.js API documentation or specific module docs | node fs |
godocs |
β | Navigate to Go language documentation | godocs |
hack |
β | Navigate to Hack documentation or search Hack docs | hack async |
mdn |
β | Navigate to MDN Web Docs or search for web development resources | mdn flexbox |
stackoverflow |
so |
Navigate to Stack Overflow or search for programming questions | so rust ownership |
| Command | Aliases | Description | Example |
|---|---|---|---|
ig |
instagram |
Navigate to Instagram profiles, search, or access Reels/Messages | ig @instagram |
tw |
β | Navigate to Twitter profiles or search Twitter | tw @MetaOpenSource |
threads |
β | Navigate to Threads profiles or search Threads | threads @zuck |
fb |
β | Navigate to Facebook pages or search Facebook | fb Meta |
li |
linkedin |
Navigate to LinkedIn or search | li software engineer |
reddit |
r |
Navigate to Reddit or search subreddits | r r/rust |
yt |
youtube |
Navigate to YouTube or search for videos (supports: studio, subs) |
yt rust programming |
wa |
whatsapp |
Navigate to WhatsApp | wa |
| Command | Aliases | Description | Example |
|---|---|---|---|
g |
(default) | Search Google (default fallback for any unrecognized command) | g rust programming |
gmail |
mail |
Navigate to Gmail | mail |
docs |
gdoc |
Navigate to Google Docs | docs |
gsheets |
β | Navigate to Google Sheets | gsheets |
gslides |
β | Navigate to Google Slides | gslides |
gchat |
β | Navigate to Google Chat | gchat |
gmaps |
maps |
Navigate to Google Maps or search for a location | gmaps san francisco |
| Command | Aliases | Description | Example |
|---|---|---|---|
meta |
metaai |
Navigate to Meta, Meta AI, Meta Accounts Center, or Meta Pay | meta accounts |
claude |
β | Navigate to Claude AI (supports: billing, cost, artifacts, chats, projects) |
claude projects |
chatgpt |
β | Navigate to ChatGPT | chatgpt |
| Command | Aliases | Description | Example |
|---|---|---|---|
az |
amzn, azn, amazon |
Navigate to Amazon or search for products | az headphones |
rei |
β | Navigate to REI or search for outdoor gear | rei hiking boots |
schwab |
β | Charles Schwab shortcuts (billpay, orders, trade, transfer, security, contact) |
schwab trade |
stock |
stocks, finance, $<ticker> |
Look up stock prices on Yahoo Finance | stock META or $META |
| Command | Aliases | Description | Example |
|---|---|---|---|
1password |
1p, onepassword |
1Password home page | 1p |
soundcloud |
sc |
Navigate to SoundCloud (supports: likes) |
sc edm |
wiki |
wikipedia |
Search on Wikipedia | wiki rust programming |
ddg |
duckduckgo |
Search DuckDuckGo | ddg rust programming |
| Command | Aliases | Description | Example |
|---|---|---|---|
bindings |
commmands, list, bunny, cmd, cmds, help |
View all Bunnylol command bindings in a web portal | bindings |
- Stock tickers: Prefix with
$β$AAPLredirects to Yahoo Finance - Twitter profiles: Prefix with
@βtw @username - Instagram profiles: Prefix with
@βig @username - Threads profiles: Prefix with
@βthreads @username - Subreddits: Use
r/prefix βr r/rust - Default fallback: Any unrecognized command searches Google
- Rust
- Rocket - Web framework
- Leptos - Frontend framework for the bindings page
- clap - CLI argument parser
- tabled - Beautiful terminal tables
See the Installation section to install bunnylol from crates.io.
To build from source or contribute to the project, see Manual Setup below.
Make sure you have Rust installed.
$ git clone https://github.com/facebook/bunnylol.rs.git
$ cd bunnylol.rs
# Run the web server
$ cargo run -- serve
# OR run the CLI (in a separate terminal)
$ cargo run -- gh facebook/react
# OR install globally for easier access
$ cargo install --path .Bunnylol is designed to be easy to deploy anywhere using Docker.
# run on default port 8000
$ docker compose up -d
# run on custom port 9000
$BUNNYLOL_PORT=9000Β·docker compose upThe application will be running at http://localhost:8000 by default.
Docker makes it easy to deploy anywhere:
- Any cloud provider (AWS, GCP, Azure, DigitalOcean, Hetzner, etc.)
- VPS / home servers
For detailed deployment instructions, reverse proxy setup, and troubleshooting, see the Deployment Guide.
Contributions are what make the open source community such an amazing place to be learn, inspire, and create. Any contributions you make are greatly appreciated. See CONTRIBUTING for more information.
Distributed under the MIT License. See LICENSE for more information.
