What happened?
Kagi Translate is unable to proxy and translate external webpages while connected to a library Wi-Fi network. The browser console indicates that the Service Worker failed to install and multiple DNS-over-HTTPS (DoH) requests to providers like Cloudflare, Google, and Quad9 were blocked by Cross-Origin Resource Sharing (CORS) errors or network restrictions.
Steps to replicate:
- Connect to a restricted public network (e.g., Library Wi-Fi with a firewall).
- Navigate to
https://translate.kagi.com.
- Attempt to translate an external URL.
- Observe the page failing to load or the translation engine hanging.
- Check the browser console for "Cross-Origin Request Blocked" and "Failed to resolve via DoH" errors.
Issue Explanation:
Kagi Translate appears to rely on client-side DNS resolution via DoH (cloudflare-dns.com, dns.google) to handle proxying. On this specific network, these requests are being intercepted or blocked, preventing the application from resolving the necessary kagiproxy.com domains. Additionally, the Service Worker—which is crucial for intercepting network requests for translation—is failing to install, likely due to the same network security policies or a script error (BUw5u1T5.js). Unlike Google Translate, which handles most of the proxying server-side, Kagi's implementation seems more dependent on the client's ability to reach these DNS endpoints.

Console LOG
nK4o-GOe.js:1
A preload for 'https://translate.kagi.com/api/signing-module?sk=[REDACTED]' is found, but is not used because the request credentials mode does not match. Consider taking a look at crossorigin attribute.
window.fetch @ nK4o-GOe.js:1
cloudflare-dns.com/dns-query?name=rentry-co-adblock.kagiproxy.com&type=A:1
Failed to load resource: net::ERR_CONNECTION_RESET
BUw5u1T5.js:1
DoH provider https://cloudflare-dns.com/dns-query failed: TypeError: Failed to fetch
at window.fetch (nK4o-GOe.js:1:1900)
at ht (0.CyOHywmi.js:1:8762)
at Bt (16.BPMs-U8L.js:2:18195)
at Xe (16.BPMs-U8L.js:4:68)
at 16.BPMs-U8L.js:2:21835
at hs (c93-5jR5.js:1:22389)
at 16.BPMs-U8L.js:2:21475
at Vt (c93-5jR5.js:1:20348)
at me (c93-5jR5.js:1:21297)
at st (c93-5jR5.js:1:7841)
console.warn @ BUw5u1T5.js:1
BUw5u1T5.js:1
Service worker registration failed: TypeError: Failed to register a ServiceWorker for scope ('https://translate.kagi.com/') with script ('https://translate.kagi.com/service-worker.js'): A bad HTTP response code (404) was received when fetching the script.
console.error @ BUw5u1T5.js:1
dns.google/resolve?name=rentry-co-adblock.kagiproxy.com&type=A:1
Failed to load resource: net::ERR_CONNECTION_RESET
BUw5u1T5.js:1
DoH provider https://dns.google/resolve failed: TypeError: Failed to fetch
at window.fetch (nK4o-GOe.js:1:1900)
at ht (0.CyOHywmi.js:1:8762)
at Bt (16.BPMs-U8L.js:2:18195)
at async Xe (16.BPMs-U8L.js:4:62)
console.warn @ BUw5u1T5.js:1
(index):2762
crbug/1173575, non-JS module files deprecated.
(anonymous) @ (index):2762
dns.quad9.net/dns-query?name=rentry-co-adblock.kagiproxy.com&type=A:1
Failed to load resource: net::ERR_CONNECTION_RESET
BUw5u1T5.js:1
DoH provider https://dns.quad9.net/dns-query failed: TypeError: Failed to fetch
at window.fetch (nK4o-GOe.js:1:1900)
at ht (0.CyOHywmi.js:1:8762)
at Bt (16.BPMs-U8L.js:2:18195)
at async Xe (16.BPMs-U8L.js:4:62)
console.warn @ BUw5u1T5.js:1
BUw5u1T5.js:1
Failed to resolve rentry-co-adblock.kagiproxy.com via DoH
console.error @ BUw5u1T5.js:1
rentry-co-adblock.kagiproxy.com/:1
Failed to load resource: net::ERR_CONNECTION_RESET
BUw5u1T5.js:1
❌ Browser DNS Resolution Failed: Likely DNS or network issue
console.error @ BUw5u1T5.js:1
cloudflare-dns.com/dns-query?name=kagiproxy.com&type=A:1
Failed to load resource: net::ERR_CONNECTION_RESET
BUw5u1T5.js:1
DoH provider https://cloudflare-dns.com/dns-query failed: TypeError: Failed to fetch
at window.fetch (nK4o-GOe.js:1:1900)
at ht (0.CyOHywmi.js:1:8762)
at Bt (16.BPMs-U8L.js:2:18195)
at Xe (16.BPMs-U8L.js:5:70)
console.warn @ BUw5u1T5.js:1
dns.google/resolve?name=kagiproxy.com&type=A:1
Failed to load resource: net::ERR_CONNECTION_RESET
BUw5u1T5.js:1
DoH provider https://dns.google/resolve failed: TypeError: Failed to fetch
at window.fetch (nK4o-GOe.js:1:1900)
at ht (0.CyOHywmi.js:1:8762)
at Bt (16.BPMs-U8L.js:2:18195)
at async Xe (16.BPMs-U8L.js:5:64)
console.warn @ BUw5u1T5.js:1
dns.quad9.net/dns-query?name=kagiproxy.com&type=A:1
Failed to load resource: net::ERR_CONNECTION_RESET
BUw5u1T5.js:1
DoH provider https://dns.quad9.net/dns-query failed: TypeError: Failed to fetch
at window.fetch (nK4o-GOe.js:1:1900)
at ht (0.CyOHywmi.js:1:8762)
at Bt (16.BPMs-U8L.js:2:18195)
at async Xe (16.BPMs-U8L.js:5:64)
console.warn @ BUw5u1T5.js:1
Bt @ 16.BPMs-U8L.js:2
BUw5u1T5.js:1
Failed to resolve kagiproxy.com via DoH
console.error @ BUw5u1T5.js:1
Bt @ 16.BPMs-U8L.js:2
nK4o-GOe.js:1
HEAD https://kagiproxy.com/ net::ERR_CONNECTION_RESET
window.fetch @ nK4o-GOe.js:1
ht @ 0.CyOHywmi.js:1
Xe @ 16.BPMs-U8L.js:5
BUw5u1T5.js:1
❌ Browser CANNOT resolve kagiproxy.com - DNS blocking detected!
console.error @ BUw5u1T5.js:1
Xe @ 16.BPMs-U8L.js:5
The resource <URL> was preloaded using link preload but not used within a few seconds from the window's load event. Please make sure it has an appropriate `as` value and it is preloaded intentionally.
The resource <URL> was preloaded using link preload but not used within a few seconds from the window's load event. Please make sure it has an appropriate `as` value and it is preloaded intentionally.
The resource <URL> was preloaded using link preload but not used within a few seconds from the window's load event. Please make sure it has an appropriate `as` value and it is preloaded intentionally.
The resource <URL> was preloaded using link preload but not used within a few seconds from the window's load event. Please make sure it has an appropriate `as` value and it is preloaded intentionally.
The resource <URL> was preloaded using link preload but not used within a few seconds from the window's load event. Please make sure it has an appropriate `as` value and it is preloaded intentionally.
The resource <URL> was preloaded using link preload but not used within a few seconds from the window's load event. Please make sure it has an appropriate `as` value and it is preloaded intentionally.
The resource <URL> was preloaded using link preload but not used within a few seconds from the window's load event. Please make sure it has an appropriate `as` value and it is preloaded intentionally.
The resource <URL> was preloaded using link preload but not used within a few seconds from the window's load event. Please make sure it has an appropriate `as` value and it is preloaded intentionally.
The resource <URL> was preloaded using link preload but not used within a few seconds from the window's load event. Please make sure it has an appropriate `as` value and it is preloaded intentionally.
I expected Kagi Translate to successfully bypass local network restrictions to fetch and translate the external webpage, similar to how Google Translate functions in the same environment. The service should ideally have a fallback mechanism if DoH providers are unreachable or if the Service Worker fails to initialize.