A fast, local-first "redirection engine" for !bang users with a few extra features ^-^
1# Unduckified
2
3
4
5> 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.
6
7## Quick Start
8
9Add this URL as a custom search engine to your browser to use DuckDuckGo's bangs, but faster:
10```
11https://s.dunkirk.sh?q=%s
12```
13
14## How is it that much faster?
15
16DuckDuckGo does their redirects server side. Their DNS is...not always great. Result is that it often takes ages.
17
18I solved this by doing all of the work client side. Once you've went to https://s.dunkirk.sh once, the JS is all cached and will never need to be downloaded again. Your device does the redirects, not me or any other server.
19
20## How is this different from Theo's version again?
21
22This is primarily my personal fork to experiment with PWAs but I do have a few ideas that I would love to add to this.
23
24<img align="right" width="140" height="140" src="https://raw.githubusercontent.com/taciturnaxolotl/unduckified/main/public/goose.gif" alt="goose walking animation"/>
25
26- [x] Bangs
27- [x] Dark Mode
28- [x] Settings (for things like disabling search history and changing default bang)
29- [x] Search counter
30- [x] [OpenSearch](https://developer.mozilla.org/en-US/docs/Web/XML/Guides/OpenSearch) support
31- [x] Search History (clearable, all local, and disabled by default ofc)
32- [x] Fancy sounds (disabled if you have `prefers-reduced-motion` set; sounds only account for `198.5 KB` of the `717.4 KB` total size)
33- [x] Cute little text animations
34- [x] Auto updating bangs file! (I'm using a [GitHub Action](https://github.com/taciturnaxolotl/unduckified/actions/workflows/update-bangs.yaml) to update the bangs file every 24 hours)
35- [x] Hashmapped bangs for faster searching
36- [x] local font file to avoid google fonts
37- [x] redirects to the base page of a bang if there is no query (e.g. `!g` will take you to google.com and `!yt` will take you to youtube.com)
38- [x] Suffix bangs (e.g. `ghr! taciturnaxolotl/unduckified` will take you to this github repo)
39- [x] Quick settings (e.g. `!settings` or `!` will take you to the settings page)
40- [x] Custom local bangs! (thanks to [@ayoubabedrabbo@mastodon.social](https://mastodon.social/@ayoubabedrabbo/114114311682366314) for the suggestion)
41- [x] Weekly bang checks to ensure that all bangs still work and excludes those that don't
42
43I would love to add:
44- [ ] ~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)
45
46and then some more really ambitious stuff like:
47
48- [ ] Optimistic UI chat wrapper (basically [t3.chat](https://t3.chat) but entirely on your own machine and completely free and unlimited and oss)
49- [ ] 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.
50
51> 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.
52
53## Fancy smancy technical graphs 😮
54
55The total size of the app is `717.4 KB` (one time download)
56
57### Resource Breakdown
58
59```mermaid
60graph TD
61 subgraph Resources by Size
62 A[index-B8HLUc3J.js<br/>contains all the ddg bangs<br/>482.5 KB]
63 B[Font File<br/>25.1 KB]
64 subgraph Audio Files
65 C[Audio Files<br/>198.5 KB Total]
66 end
67 subgraph Small Assets
68 D[SVGs & CSS<br/>~11 KB]
69 end
70 end
71```
72
73### Network Performance
74
75```mermaid
76gantt
77 title Network Waterfall Chart
78 dateFormat HH:mm:ss.SSS
79 axisFormat %L
80
81 section Initial HTML
82 GET / (2.8 KB) :done, h1, 10:07:29.038, 208ms
83
84 section JavaScript
85 beacon.min.js :done, b1, 10:07:29.279, 0ms
86 index-B8HLUc3J.js (482.5 KB) :done, j1, 10:07:29.286, 32ms
87 registerSW.js (2.2 KB) :done, j2, 10:07:29.287, 60ms
88 beacon.min.js (2nd) :done, b2, 10:07:29.383, 0ms
89
90 section Styles
91 Main CSS (3.8 KB) :done, c2, 10:07:29.287, 60ms
92 Font File (25.1 KB) :done, f1, 10:07:29.379, 46ms
93
94 section Assets
95 gear.svg (2.5 KB) :done, s1, 10:07:29.494, 58ms
96 clipboard.svg (2.4 KB) :done, s2, 10:07:29.495, 63ms
97 search.svg (2.4 KB) :done, s3, 10:07:29.589, 32ms
98
99 section Audio
100 heavier-tick-sprite.mp3 (22.4 KB) :done, a1, 10:07:29.495, 33ms
101 toggle-off.mp3 (34.3 KB) :done, a2, 10:07:29.495, 32ms
102 toggle-on.mp3 (34.3 KB) :done, a3, 10:07:29.496, 46ms
103 click.mp3 (34.3 KB) :done, a4, 10:07:29.497, 35ms
104 double.mp3 (34.3 KB) :done, a5, 10:07:29.498, 44ms
105 foot-switch.mp3 (34.3 KB):done, a6, 10:07:29.498, 38ms
106```
107
108
109## Screenshots
110
111<details>
112 <summary>Spoiler Alert: There is both a light and a dark mode 🤯</summary>
113
114### Light Mode
115
116
117
118
119
120### Dark Mode 💪
121
122
123
124
125
126</details>
127
128<p align="center">
129 <img src="https://raw.githubusercontent.com/taciturnaxolotl/carriage/main/.github/images/line-break.svg" />
130</p>
131
132<p align="center">
133 <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>
134</p>
135
136<p align="center">
137 <a href="https://github.com/taciturnaxolotl/unduckified/blob/main/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>
138</p>