A fast, local-first "redirection engine" for !bang users with a few extra features ^-^
1# Unduck
2
3
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- [ ] ~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)
33
34and then some more really ambitious stuff like:
35
36> [!NOTE]
37> 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.
38
39- [ ] Omptimistic UI chat wrapper (basically [t3.chat](https://t3.chat) but entirely on your own machine and completely free and unlimited and oss)
40- [ ] 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.
41
42## Fancy smancy technical graphs 😮
43
44The total size of the app is 707 KB (one time download)
45
46### Resource Breakdown
47
48```mermaid
49graph TD
50 subgraph Resources by Size
51 A[index-DDeT9iuD.js<br/>contains all the ddg bangs<br/>445 KB]
52 B[Font File<br/>48.9 KB]
53 subgraph Audio Files
54 C[Audio Files<br/>195.3 KB Total]
55 end
56 subgraph Small Assets
57 D[SVGs & CSS<br/>~10 KB]
58 end
59 end
60```
61
62### Network Performance
63
64```mermaid
65gantt
66 title Network Waterfall Chart
67 dateFormat HH:mm:ss.SSS
68 axisFormat %L
69
70 section Initial HTML
71 GET / (3.1 KB) :done, h1, 07:13:59.714, 114ms
72
73 section JavaScript
74 beacon.min.js :done, b1, 07:13:59.900, 0ms
75 index-DDeT9iuD.js (445 KB) :done, j1, 07:13:59.901, 32ms
76 registerSW.js (2.2 KB) :done, j2, 07:13:59.914, 69ms
77 beacon.min.js (2nd) :done, b2, 07:14:00.035, 0ms
78
79 section Styles
80 CSS Font (2.1 KB) :done, c1, 07:13:59.900, 110ms
81 Main CSS (3.6 KB) :done, c2, 07:13:59.902, 32ms
82 Font File (48.9 KB) :done, f1, 07:14:00.051, 165ms
83
84 section Assets
85 gear.svg (2.4 KB) :done, s1, 07:14:00.105, 30ms
86 clipboard.svg (2.3 KB) :done, s2, 07:14:00.106, 29ms
87 search.svg (2.3 KB) :done, s3, 07:14:00.220, 30ms
88
89 section Audio
90 heavier-tick.mp3 (22.4 KB) :done, a1, 07:14:00.107, 30ms
91 toggle-off.mp3 (34.3 KB) :done, a2, 07:14:00.109, 30ms
92 toggle-on.mp3 (34.3 KB) :done, a3, 07:14:00.110, 42ms
93 click.mp3 (35.7 KB) :done, a4, 07:14:00.111, 38ms
94 double.mp3 (34.3 KB) :done, a5, 07:14:00.113, 41ms
95 foot-switch.mp3 (34.3 KB):done, a6, 07:14:00.113, 36ms
96```
97
98## Screenshots
99
100<details>
101 <summary>Spoiler Alert: There is both a light and a dark mode 🤯</summary>
102
103### Light Mode
104
105
106
107
108### Dark Mode 💪
109
110
111
112
113</details>
114
115<p align="center">
116 <img src="https://raw.githubusercontent.com/taciturnaxolotl/carriage/master/.github/images/line-break.svg" />
117</p>
118
119<p align="center">
120 <i><code>© 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>
121</p>
122
123<p align="center">
124 <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>
125</p>