A fast, local-first "redirection engine" for !bang users with a few extra features ^-^
1# Unduck 2 3![dark and light modes of the app](.github/images/both.webp) 4 5> [!IMPORTANT] 6> This is a fork of [t3dotgg/unduck](https://github.com/t3dotgg/unduck). Check out Theo's hosted version at [unduck.link](https://unduck.link) for the original experience. 7 8## Quick Start 9 10Add this URL as a custom search engine to your browser to use DuckDuckGo's bangs, but faster: 11``` 12https://s.dunkirk.sh?q=%s 13``` 14 15## How is it that much faster? 16 17DuckDuckGo does their redirects server side. Their DNS is...not always great. Result is that it often takes ages. 18 19I solved this by doing all of the work client side. Once you've went to https://s.dunkirk.sh once, the JS is all cache'd and will never need to be downloaded again. Your device does the redirects, not me or any other server. 20 21## How is this different from Theo's version again? 22 23This is primarily my personal fork to experiment with PWAs but I do have a few ideas that I would love to add to this. 24 25- [x] Bangs 26- [x] Dark Mode 27- [x] Settings (for things like disabling search history and changing default bang) 28- [x] Search counter 29- [x] [OpenSearch](https://developer.mozilla.org/en-US/docs/Web/XML/Guides/OpenSearch) support 30- [x] Search History (clearable, all local, and disabled by default ofc) 31- [x] Fancy sounds (disabled if you have `prefers-reduced-motion` set; sounds only account for 201.3 KB of the 707 KB total size) 32- [x] Cute little text animations 33- [ ] ~Search suggestions~ (as far as I can tell this essentially impossible to do natively with either firefox or chrome; please correct me if I'm wrong though. In this case I would very much love to be wrong) 34 35and then some more really ambitious stuff like: 36 37> [!NOTE] 38> Umm yeah, I know I might not get to all of that and yes this is essentially me finally discovering PWAs and wanting to smash everything into one lol. 39 40- [ ] Omptimistic UI chat wrapper (basically [t3.chat](https://t3.chat) but entirely on your own machine and completely free and unlimited and oss) 41- [ ] Meta search engine as the default bang (so you can search Google, Bing, Yahoo, etc. all at once) this one is inspired by [mat-1/metasearch2](https://github.com/mat-1/metasearch2) but without the middleman server. 42 43## Fancy smancy technical graphs 😮 44 45The total size of the app is 707 KB (one time download) 46 47### Resource Breakdown 48 49```mermaid 50graph TD 51 subgraph Resources by Size 52 A[index-DDeT9iuD.js<br/>contains all the ddg bangs<br/>445 KB] 53 B[Font File<br/>48.9 KB] 54 subgraph Audio Files 55 C[Audio Files<br/>195.3 KB Total] 56 end 57 subgraph Small Assets 58 D[SVGs & CSS<br/>~10 KB] 59 end 60 end 61``` 62 63### Network Performance 64 65```mermaid 66gantt 67 title Network Waterfall Chart 68 dateFormat HH:mm:ss.SSS 69 axisFormat %L 70 71 section Initial HTML 72 GET / (3.1 KB) :done, h1, 07:13:59.714, 114ms 73 74 section JavaScript 75 beacon.min.js :done, b1, 07:13:59.900, 0ms 76 index-DDeT9iuD.js (445 KB) :done, j1, 07:13:59.901, 32ms 77 registerSW.js (2.2 KB) :done, j2, 07:13:59.914, 69ms 78 beacon.min.js (2nd) :done, b2, 07:14:00.035, 0ms 79 80 section Styles 81 CSS Font (2.1 KB) :done, c1, 07:13:59.900, 110ms 82 Main CSS (3.6 KB) :done, c2, 07:13:59.902, 32ms 83 Font File (48.9 KB) :done, f1, 07:14:00.051, 165ms 84 85 section Assets 86 gear.svg (2.4 KB) :done, s1, 07:14:00.105, 30ms 87 clipboard.svg (2.3 KB) :done, s2, 07:14:00.106, 29ms 88 search.svg (2.3 KB) :done, s3, 07:14:00.220, 30ms 89 90 section Audio 91 heavier-tick.mp3 (22.4 KB) :done, a1, 07:14:00.107, 30ms 92 toggle-off.mp3 (34.3 KB) :done, a2, 07:14:00.109, 30ms 93 toggle-on.mp3 (34.3 KB) :done, a3, 07:14:00.110, 42ms 94 click.mp3 (35.7 KB) :done, a4, 07:14:00.111, 38ms 95 double.mp3 (34.3 KB) :done, a5, 07:14:00.113, 41ms 96 foot-switch.mp3 (34.3 KB):done, a6, 07:14:00.113, 36ms 97``` 98 99## Screenshots 100 101<details> 102 <summary>Spoiler Alert: There is both a light and a dark mode 🤯</summary> 103 104### Light Mode 105 106![Light Mode](.github/images/light.webp) 107![Light Mode with Search History](.github/images/light-history.webp) 108 109### Dark Mode 💪 110 111![Dark Mode](.github/images/dark.webp) 112![Dark Mode with Search History](.github/images/dark-history.webp) 113 114</details> 115 116<p align="center"> 117 <img src="https://raw.githubusercontent.com/taciturnaxolotl/carriage/master/.github/images/line-break.svg" /> 118</p> 119 120<p align="center"> 121 <i><code>&copy 2025-present <a href="https://github.com/taciturnaxolotl">Kieran Klukas</a> forked from <a href="https://github.com/t3dotgg/unduck">t3dotgg/unduck</a></code></i> 122</p> 123 124<p align="center"> 125 <a href="https://github.com/taciturnaxolotl/unduck/blob/master/LICENSE.md"><img src="https://img.shields.io/static/v1.svg?style=for-the-badge&label=License&message=MIT&logoColor=d9e0ee&colorA=363a4f&colorB=b7bdf8"/></a> 126</p>