facebook/bunnylol.rs

bunnylol is a tool for writing smart bookmarks. Use in your browser, or on the command-line

Rust

151

168 commits

updated Oct 10, 2026

See the code

README

bunnylol.rs — Smart browser bookmarks with Rust

Crates.io Downloads Contributors Stargazers License

A modern rust clone of bunny1.

Demo

Enter gh facebook/react in your browser's address bar to open the React repository on GitHub.

bunnylol.rs demo

Or run the CLI:

$ bunnylol gh facebook/react

Installation

Install 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-features

Or 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-features

CLI Quickstart

Use bunnylol to open URLs directly from your terminal!

Basic Usage

# 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

Quick Examples

CLI CommandWhat it does
bunnylol ghOpen GitHub homepage
bunnylol gh facebook/reactOpen facebook/react repository
bunnylol ig reelsOpen Instagram Reels
bunnylol tw @facebookOpen Twitter profile
bunnylol r r/rustOpen r/rust subreddit
bunnylol --dry-run meta aiPrint Meta AI URL without opening
bunnylol --helpShow help information
bunnylol --versionShow version information
bunnylol listDisplay 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 list

CLI Configuration

The bunnylol CLI supports optional configuration via a TOML file following the XDG Base Directory Specification.

Configuration File Location

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.toml if 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.

Configuration Features

The CLI works perfectly fine without any configuration file. However, you can customize the following features:

1. Default Browser Selection

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.

2. User-Defined Bindings

Create your own personalized shortcuts without recompiling bunnylol:

[user_bindings]
# URL binding: open a fixed URL or substitute URL-encoded args into {}
cal = { url = "https://calendar.google.com/calendar/u/1/r" }
jira = { url = "https://corp.atlassian.net/browse/{}", description = "Jira ticket" }

# Command binding: rewrite to another bunnylol command
work = { command = "gh mycompany", description = "Work GitHub" }
blog = { command = "gh username/blog" }

# Built-ins win by default. Use override = true only when you want to shadow one.
gh = { command = "gh mycompany/main-repo", override = true }

Then use them like any built-in command:

$ bunnylol cal
# Opens: https://calendar.google.com/calendar/u/1/r

$ bunnylol jira PROJ-123
# Opens: https://corp.atlassian.net/browse/PROJ-123

$ bunnylol work
# Opens: https://github.com/mycompany

$ bunnylol blog
# Opens: https://github.com/username/blog

Legacy [aliases] entries are still read for compatibility, but they are deprecated. When bunnylol loads a config with [aliases], it migrates those entries into [user_bindings] and removes the old [aliases] section. Comments outside [aliases] are preserved.

3. Custom Default Search Engine

Override 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.

4. Command History Tracking

Track your recently used commands (enabled by default):

[history]
enabled = true
max_entries = 1000

History is stored at:

  • Linux/macOS: ~/.local/share/bunnylol/history (or $XDG_DATA_HOME/bunnylol/history if set)
  • Windows: %APPDATA%\bunnylol\history

Complete Configuration Example

Here's a full example with all available options:

# ~/.config/bunnylol/config.toml

# Browser to open URLs in (optional)
browser = "firefox"

# User-defined bindings (optional)
[user_bindings]
cal = { url = "https://calendar.google.com/calendar/u/1/r" }
jira = { url = "https://corp.atlassian.net/browse/{}", description = "Jira ticket" }
work = { command = "gh mycompany", description = "Work GitHub" }
blog = { command = "gh username/blog" }
gh = { command = "gh mycompany/main-repo", override = true }

# Default search engine when command not recognized (optional)
# Options: "google" (default), "ddg", "bing"
default_search = "ddg"

# Stock website provider (optional)
# Options: "yahoo" (default), "finviz", "tradingview", "google", "investing"
stock_provider = "finviz"

# 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 page

Platform-Specific Directory Structure

The CLI uses platform-appropriate directories for configuration and data:

PlatformTypePath
Linux/macOSUser Config~/.config/bunnylol/config.toml
(or $XDG_CONFIG_HOME/bunnylol/config.toml)
LinuxSystem Config/etc/bunnylol/config.toml
(when running as system service)
Linux/macOSData~/.local/share/bunnylol/
(or $XDG_DATA_HOME/bunnylol/)
WindowsConfig%APPDATA%\bunnylol\config.toml
WindowsData%APPDATA%\bunnylol\

Quickstart - Web Server

After installing bunnylol, start the server:

$ bunnylol serve

Or use Docker:

$ git clone https://github.com/facebook/bunnylol.rs.git
$ cd bunnylol.rs
$ docker compose up -d

Or build from source:

$ git clone https://github.com/facebook/bunnylol.rs.git
$ cd bunnylol.rs
$ cargo run -- serve

Installing as a System Service

For 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 uninstall

Network Access:

  • Without --network (default): Binds to 127.0.0.1 (localhost only, secure default)
  • With --network: Binds to 0.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.

Setting bunnylol to be your default search engine

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.

Desktop Browsers

Mobile Browsers

Note: iOS Safari does not support custom search engines, so you'll need to use Firefox (or another browser that does) instead.

iOS (Firefox)

  1. Install Firefox and set it as the default browser
  2. Change your default search engine in Firefox for iOS

Android (Firefox)

Command Reference

📚 Click to view all available commands (46 commands, 82+ bindings)

Development & Package Managers

CommandAliasesDescriptionExample
gh—Navigate to GitHub repositoriesgh facebook/react
gitlabglNavigate to GitLab projects or search GitLabgitlab gitlab-org/gitlab
cargocratesNavigate to crates.io or search for Rust cratescargo serde
npmnpmjsNavigate to npmjs.com or search for npm packagesnpm react
pypipipNavigate to pypi.org or search for Python packagespypi requests
rubygemsgem, gemsNavigate to rubygems.org or search for Ruby gemsgem rails
gogolang, gopkgNavigate to pkg.go.dev or search for Go packagesgo http
nuget—Navigate to nuget.org or search for .NET packagesnuget newtonsoft
packagistcomposerNavigate to packagist.org or search for PHP packagespackagist symfony
brewhomebrewNavigate to formulae.brew.sh or search for Homebrew packagesbrew wget
chocochocolateyNavigate to community.chocolatey.org or search for Windows packageschoco git
dockerhubdockerNavigate to Docker Hub or search for container imagesdocker nginx

Programming Documentation

CommandAliasesDescriptionExample
rust—Navigate to Rust documentation or search Rust std docsrust HashMap
pythonpydocs, pyNavigate to Python documentation or search for Python resourcespython list
nodenodejsNavigate to Node.js API documentation or specific module docsnode fs
godocs—Navigate to Go language documentationgodocs
hack—Navigate to Hack documentation or search Hack docshack async
mdn—Navigate to MDN Web Docs or search for web development resourcesmdn flexbox
stackoverflowsoNavigate to Stack Overflow or search for programming questionsso rust ownership

Social Media

CommandAliasesDescriptionExample
iginstagramNavigate to Instagram profiles, search, or access Reels/Messagesig @instagram
tw—Navigate to Twitter profiles or search Twittertw @MetaOpenSource
threads—Navigate to Threads profiles or search Threadsthreads @zuck
fb—Navigate to Facebook pages or search Facebookfb Meta
lilinkedinNavigate to LinkedIn or searchli software engineer
redditrNavigate to Reddit or search subredditsr r/rust
ytyoutubeNavigate to YouTube or search for videos (supports: studio, subs)yt rust programming
wawhatsappNavigate to WhatsAppwa

Google Services

CommandAliasesDescriptionExample
g(default)Search Google (default fallback for any unrecognized command)g rust programming
gmailmailNavigate to Gmailmail
docsgdocNavigate to Google Docsdocs
gsheets—Navigate to Google Sheetsgsheets
gslides—Navigate to Google Slidesgslides
gchat—Navigate to Google Chatgchat
gmapsmapsNavigate to Google Maps or search for a locationgmaps san francisco

Meta / AI Services

CommandAliasesDescriptionExample
metametaaiNavigate to Meta, Meta AI, Meta Accounts Center, or Meta Paymeta accounts
claude—Navigate to Claude AI (supports: billing, cost, artifacts, chats, projects)claude projects
chatgpt—Navigate to ChatGPTchatgpt

Shopping & Finance

CommandAliasesDescriptionExample
azamzn, azn, amazonNavigate to Amazon or search for productsaz headphones
rei—Navigate to REI or search for outdoor gearrei hiking boots
schwab—Charles Schwab shortcuts (billpay, orders, trade, transfer, security, contact)schwab trade
stockstocks, finance, $<ticker>Look up stock prices (Yahoo Finance, Finviz, TradingView, Google Finance, Investing.com)stock META or stock finviz AAPL or $META

Other Services

CommandAliasesDescriptionExample
1password1p, onepassword1Password home page1p
soundcloudscNavigate to SoundCloud (supports: likes)sc edm
wikiwikipediaSearch on Wikipediawiki rust programming
ddgduckduckgoSearch DuckDuckGoddg rust programming

Bunnylol Development Tools

CommandAliasesDescriptionExample
bindingscommmands, list, bunny, cmd, cmds, helpView all Bunnylol command bindings in a web portalbindings

Special Syntax

  • Stock tickers: Prefix with $ → $AAPL
  • 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

Built With

  • Rust
  • Rocket - Web framework
  • Leptos - Frontend framework for the bindings page
  • clap - CLI argument parser
  • tabled - Beautiful terminal tables

Getting Started

See the Installation section to install bunnylol from crates.io.

To build from source or contribute to the project, see Manual Setup below.

Manual Setup

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 .

Deployment with Docker

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 up

The application will be running at http://localhost:8000 by default.

Where to Deploy

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.

Contributing

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.

License

Distributed under the MIT License. See LICENSE for more information.

Acknowledgments

bookmarks
browser
bunnylol
rust

facebook/bunnylol.rs

bunnylol is a tool for writing smart bookmarks. Use in your browser, or on the command-line

Rust

151

168 commits

updated Oct 10, 2026

See the code

README

bunnylol.rs — Smart browser bookmarks with Rust

Crates.io Downloads Contributors Stargazers License

A modern rust clone of bunny1.

Demo

Enter gh facebook/react in your browser's address bar to open the React repository on GitHub.

bunnylol.rs demo

Or run the CLI:

$ bunnylol gh facebook/react

Installation

Install 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-features

Or 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-features

CLI Quickstart

Use bunnylol to open URLs directly from your terminal!

Basic Usage

# 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

Quick Examples

CLI CommandWhat it does
bunnylol ghOpen GitHub homepage
bunnylol gh facebook/reactOpen facebook/react repository
bunnylol ig reelsOpen Instagram Reels
bunnylol tw @facebookOpen Twitter profile
bunnylol r r/rustOpen r/rust subreddit
bunnylol --dry-run meta aiPrint Meta AI URL without opening
bunnylol --helpShow help information
bunnylol --versionShow version information
bunnylol listDisplay 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 list

CLI Configuration

The bunnylol CLI supports optional configuration via a TOML file following the XDG Base Directory Specification.

Configuration File Location

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.toml if 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.

Configuration Features

The CLI works perfectly fine without any configuration file. However, you can customize the following features:

1. Default Browser Selection

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.

2. User-Defined Bindings

Create your own personalized shortcuts without recompiling bunnylol:

[user_bindings]
# URL binding: open a fixed URL or substitute URL-encoded args into {}
cal = { url = "https://calendar.google.com/calendar/u/1/r" }
jira = { url = "https://corp.atlassian.net/browse/{}", description = "Jira ticket" }

# Command binding: rewrite to another bunnylol command
work = { command = "gh mycompany", description = "Work GitHub" }
blog = { command = "gh username/blog" }

# Built-ins win by default. Use override = true only when you want to shadow one.
gh = { command = "gh mycompany/main-repo", override = true }

Then use them like any built-in command:

$ bunnylol cal
# Opens: https://calendar.google.com/calendar/u/1/r

$ bunnylol jira PROJ-123
# Opens: https://corp.atlassian.net/browse/PROJ-123

$ bunnylol work
# Opens: https://github.com/mycompany

$ bunnylol blog
# Opens: https://github.com/username/blog

Legacy [aliases] entries are still read for compatibility, but they are deprecated. When bunnylol loads a config with [aliases], it migrates those entries into [user_bindings] and removes the old [aliases] section. Comments outside [aliases] are preserved.

3. Custom Default Search Engine

Override 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.

4. Command History Tracking

Track your recently used commands (enabled by default):

[history]
enabled = true
max_entries = 1000

History is stored at:

  • Linux/macOS: ~/.local/share/bunnylol/history (or $XDG_DATA_HOME/bunnylol/history if set)
  • Windows: %APPDATA%\bunnylol\history

Complete Configuration Example

Here's a full example with all available options:

# ~/.config/bunnylol/config.toml

# Browser to open URLs in (optional)
browser = "firefox"

# User-defined bindings (optional)
[user_bindings]
cal = { url = "https://calendar.google.com/calendar/u/1/r" }
jira = { url = "https://corp.atlassian.net/browse/{}", description = "Jira ticket" }
work = { command = "gh mycompany", description = "Work GitHub" }
blog = { command = "gh username/blog" }
gh = { command = "gh mycompany/main-repo", override = true }

# Default search engine when command not recognized (optional)
# Options: "google" (default), "ddg", "bing"
default_search = "ddg"

# Stock website provider (optional)
# Options: "yahoo" (default), "finviz", "tradingview", "google", "investing"
stock_provider = "finviz"

# 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 page

Platform-Specific Directory Structure

The CLI uses platform-appropriate directories for configuration and data:

PlatformTypePath
Linux/macOSUser Config~/.config/bunnylol/config.toml
(or $XDG_CONFIG_HOME/bunnylol/config.toml)
LinuxSystem Config/etc/bunnylol/config.toml
(when running as system service)
Linux/macOSData~/.local/share/bunnylol/
(or $XDG_DATA_HOME/bunnylol/)
WindowsConfig%APPDATA%\bunnylol\config.toml
WindowsData%APPDATA%\bunnylol\

Quickstart - Web Server

After installing bunnylol, start the server:

$ bunnylol serve

Or use Docker:

$ git clone https://github.com/facebook/bunnylol.rs.git
$ cd bunnylol.rs
$ docker compose up -d

Or build from source:

$ git clone https://github.com/facebook/bunnylol.rs.git
$ cd bunnylol.rs
$ cargo run -- serve

Installing as a System Service

For 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 uninstall

Network Access:

  • Without --network (default): Binds to 127.0.0.1 (localhost only, secure default)
  • With --network: Binds to 0.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.

Setting bunnylol to be your default search engine

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.

Desktop Browsers

Mobile Browsers

Note: iOS Safari does not support custom search engines, so you'll need to use Firefox (or another browser that does) instead.

iOS (Firefox)

  1. Install Firefox and set it as the default browser
  2. Change your default search engine in Firefox for iOS

Android (Firefox)

Command Reference

📚 Click to view all available commands (46 commands, 82+ bindings)

Development & Package Managers

CommandAliasesDescriptionExample
gh—Navigate to GitHub repositoriesgh facebook/react
gitlabglNavigate to GitLab projects or search GitLabgitlab gitlab-org/gitlab
cargocratesNavigate to crates.io or search for Rust cratescargo serde
npmnpmjsNavigate to npmjs.com or search for npm packagesnpm react
pypipipNavigate to pypi.org or search for Python packagespypi requests
rubygemsgem, gemsNavigate to rubygems.org or search for Ruby gemsgem rails
gogolang, gopkgNavigate to pkg.go.dev or search for Go packagesgo http
nuget—Navigate to nuget.org or search for .NET packagesnuget newtonsoft
packagistcomposerNavigate to packagist.org or search for PHP packagespackagist symfony
brewhomebrewNavigate to formulae.brew.sh or search for Homebrew packagesbrew wget
chocochocolateyNavigate to community.chocolatey.org or search for Windows packageschoco git
dockerhubdockerNavigate to Docker Hub or search for container imagesdocker nginx

Programming Documentation

CommandAliasesDescriptionExample
rust—Navigate to Rust documentation or search Rust std docsrust HashMap
pythonpydocs, pyNavigate to Python documentation or search for Python resourcespython list
nodenodejsNavigate to Node.js API documentation or specific module docsnode fs
godocs—Navigate to Go language documentationgodocs
hack—Navigate to Hack documentation or search Hack docshack async
mdn—Navigate to MDN Web Docs or search for web development resourcesmdn flexbox
stackoverflowsoNavigate to Stack Overflow or search for programming questionsso rust ownership

Social Media

CommandAliasesDescriptionExample
iginstagramNavigate to Instagram profiles, search, or access Reels/Messagesig @instagram
tw—Navigate to Twitter profiles or search Twittertw @MetaOpenSource
threads—Navigate to Threads profiles or search Threadsthreads @zuck
fb—Navigate to Facebook pages or search Facebookfb Meta
lilinkedinNavigate to LinkedIn or searchli software engineer
redditrNavigate to Reddit or search subredditsr r/rust
ytyoutubeNavigate to YouTube or search for videos (supports: studio, subs)yt rust programming
wawhatsappNavigate to WhatsAppwa

Google Services

CommandAliasesDescriptionExample
g(default)Search Google (default fallback for any unrecognized command)g rust programming
gmailmailNavigate to Gmailmail
docsgdocNavigate to Google Docsdocs
gsheets—Navigate to Google Sheetsgsheets
gslides—Navigate to Google Slidesgslides
gchat—Navigate to Google Chatgchat
gmapsmapsNavigate to Google Maps or search for a locationgmaps san francisco

Meta / AI Services

CommandAliasesDescriptionExample
metametaaiNavigate to Meta, Meta AI, Meta Accounts Center, or Meta Paymeta accounts
claude—Navigate to Claude AI (supports: billing, cost, artifacts, chats, projects)claude projects
chatgpt—Navigate to ChatGPTchatgpt

Shopping & Finance

CommandAliasesDescriptionExample
azamzn, azn, amazonNavigate to Amazon or search for productsaz headphones
rei—Navigate to REI or search for outdoor gearrei hiking boots
schwab—Charles Schwab shortcuts (billpay, orders, trade, transfer, security, contact)schwab trade
stockstocks, finance, $<ticker>Look up stock prices (Yahoo Finance, Finviz, TradingView, Google Finance, Investing.com)stock META or stock finviz AAPL or $META

Other Services

CommandAliasesDescriptionExample
1password1p, onepassword1Password home page1p
soundcloudscNavigate to SoundCloud (supports: likes)sc edm
wikiwikipediaSearch on Wikipediawiki rust programming
ddgduckduckgoSearch DuckDuckGoddg rust programming

Bunnylol Development Tools

CommandAliasesDescriptionExample
bindingscommmands, list, bunny, cmd, cmds, helpView all Bunnylol command bindings in a web portalbindings

Special Syntax

  • Stock tickers: Prefix with $ → $AAPL
  • 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

Built With

  • Rust
  • Rocket - Web framework
  • Leptos - Frontend framework for the bindings page
  • clap - CLI argument parser
  • tabled - Beautiful terminal tables

Getting Started

See the Installation section to install bunnylol from crates.io.

To build from source or contribute to the project, see Manual Setup below.

Manual Setup

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 .

Deployment with Docker

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 up

The application will be running at http://localhost:8000 by default.

Where to Deploy

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.

Contributing

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.

License

Distributed under the MIT License. See LICENSE for more information.

Acknowledgments

bookmarks
browser
bunnylol
rust

Significant stargazers

Abhi

352 followers · starred Feb 2026

Zhengxu Chen

49 followers · starred Jan 2026

Fangyi Zhou

216 followers · starred Feb 2026

Andrew Qu

511 followers · starred Jul 2026