---
title: "Bunbun"
subtitle: "Cross-browser search commands"
path: "bunbun"
date: 2020-01-01
lang: "rust"
tags: []
---

[Bunbun][1] is a search delegation service and my first project in Rust. It's a
implementation of [bunny1][bunny1] that offers a simple config file as well as
an extensible plugin system.

An interesting note about the project is that [I've submitted a patch][hotwatch]
to an library to fix a bug where the file descriptor for watching the config
file would get stale.

For me, it solves a lot of problems I have, particularly in the sense that it
lets me write shortcuts that I know will always work, instead of relying on
browsers to remember for me.

Yes, existing solutions exist, such as DuckDuckGo's [bang!][ddg-bangs] as well
as FireFox's shortcuts, but I believe this has a niche particularly for
self-hosted or enterprise environments. As it allows for plugins to run, it can
offer a uniform experience for employees or users to access common resources.

Honestly, this idea didn't sell me at first, but after using a similar variant
at my past work, I was completely dependent on it in only 12 weeks.

I've been living on this project for months now, so I can guarantee that it
works. From a privacy and security perspective, I find it to be satisfactory for
my needs:
1. It only logs to `stdout` with the option to completely disable logging.
2. It's built in Rust without any `unsafe` usage, which guarantees that my code
should be sound.
3. It uses `actix`, a well respected HTTP server library that is relatively
receptive of security concerns.
4. Its plugin system is as private and secure as the host it's running on, and
fails safe on improperly defined inputs.
5. It has meaningful tests!

_Caveat emptor_[^1], of course. You should audit the code yourself, but I'm
happy with the work I've made (and always receptive of feedback).

[1]: https://github.com/edward-shen/bunbun
[bunny1]: http://www.bunny1.org/
[hotwatch]: https://github.com/francesca64/hotwatch/pull/4
[ddg-bangs]: https://duckduckgo.com/bang

[^1]: https://en.wikipedia.org/wiki/Caveat_emptor