Limitations β
Honest and transparent list of Nothing Browser's current limitations. Know what to expect before you start.
Browser Limitations β
Sites That Block Nothing Browser β
| Site/Service | Status | Reason |
|---|---|---|
| Google Search | β οΈ May block | Advanced fingerprinting |
| Gmail | β οΈ May block | Google account protection |
| YouTube (browser tab) | β οΈ May degrade | Uses NewPipe tab instead |
| β οΈ Often blocks | Bot detection | |
| Banking sites | β οΈ Often blocks | Security measures |
| Cloudflare protected | β Usually passes | TLS fingerprint matches Chrome |
Workaround: Use the YOUTUBE tab for YouTube content. Use headful mode for banking sites.
Chrome Extensions β
Limitation: Chrome extensions are not supported.
Reason: Qt WebEngine does not have a Chrome extension host.
Alternative: Use Piggy's plugin system for JavaScript injection.
Mobile Emulation β
Limitation: No built-in mobile device emulation.
Reason: Desktop-focused browser engine.
Workaround: Use CSS media queries and viewport settings in evaluate:
await site.evaluate(() => {
// Force mobile viewport
const meta = document.createElement('meta');
meta.name = 'viewport';
meta.content = 'width=device-width, initial-scale=1';
document.head.appendChild(meta);
});Fingerprint Limitations β
Canvas Uniqueness β
| Metric | Current | Target |
|---|---|---|
| Canvas uniqueness | 99.98% | 99.99%+ |
| Detection rate | Very low | Near zero |
The sin() PRNG is being replaced with xorshift in upcoming versions.
WebGL Limitations β
| Parameter | Status | Fix Version |
|---|---|---|
| UNMASKED_VENDOR_WEBGL | β Spoofed | Current |
| UNMASKED_RENDERER_WEBGL | β Spoofed | Current |
| WebGL extensions | β οΈ Partial | v0.2.0 |
| WebGL 2.0 params | β οΈ Partial | v0.2.0 |
Font Detection β
Limitation: System fonts are still detectable.
Reason: Qt WebEngine reports real system fonts.
Impact: Advanced fingerprinting sites may detect unique font combinations.
TLS Limitations (Qt WebEngine) β
| Gap | Severity | Fix Path | Version |
|---|---|---|---|
| X25519MLKEM768 curve | Low | Qt WebEngine version bump | v0.3.0+ |
| Encrypted Client Hello (ECH) | Low | Custom Qt build required | v0.3.0+ |
| ALPS codepoint 17613 | Low | Qt WebEngine version bump | v0.3.0+ |
Current Status: These do NOT affect detection by Cloudflare, Akamai, or DataDome for Chrome 124 impersonation.
Platform Limitations β
Windows Support β
| Feature | Status | Target |
|---|---|---|
| Basic browsing | β Working | Current |
| Network capture | β Working | Current |
| YouTube tab | β οΈ Java required | Current |
| Native build | π¨ In progress | v0.2.0 |
| Installer | π¨ In progress | v0.2.0 |
macOS Support β
| Feature | Status | Target |
|---|---|---|
| Basic browsing | β Working | Current |
| Network capture | β Working | Current |
| YouTube tab | β οΈ Java required | Current |
| Apple Silicon native | β οΈ Rosetta required | v0.2.0 |
| Notarization | π Planned | v0.3.0 |
Linux Support β
| Feature | Status |
|---|---|
| x86_64 | β Full support |
| ARM64 | β οΈ Community builds |
| Wayland | β οΈ May have issues (use X11) |
Piggy Library Limitations β
exposeFunction β
| Limitation | Description | Workaround |
|---|---|---|
| Max payload size | 10MB | Split large data |
| Call timeout | 30 seconds | Increase or batch |
| Queue size | 1000 calls | Reduce call frequency |
| Latency | ~150-300ms | Acceptable for scraping |
WebSocket Capture β
| Limitation | Description |
|---|---|
| Binary frames | Base64 encoded, not raw |
| Compression | Not decoded |
| Large messages | May be truncated |
Session Persistence β
| Limitation | Description |
|---|---|
| IndexedDB | Not saved |
| Cache storage | Not saved |
| Service workers | Not persisted |
YouTube Tab Limitations β
Java Requirement β
Java 17+ must be installed:
# Check Java version
java -version
# openjdk version "17.x.x" requiredIf Java is not found, the YouTube tab shows an error.
NewPipe Limitations β
| Feature | Status |
|---|---|
| Video playback | β Working |
| Audio only | β Working |
| Download | β Working |
| Comments | β Not supported |
| Playlists | β οΈ Partial |
| Subscriptions | β Not supported |
| Account login | β Not supported |
Plugin System Limitations β
| Limitation | Description |
|---|---|
| No UI components | JavaScript only |
| Limited permissions | Network, storage only |
| No background pages | Runs per page |
| No Chrome APIs | Custom Piggy API only |
Performance Limitations β
Memory Usage β
| Scenario | Memory |
|---|---|
| Idle browser | ~200-300MB |
| Single tab + capture | ~400-600MB |
| Multiple tabs (5) | ~800MB-1GB |
| Long-running session | May increase over time |
CPU Usage β
| Scenario | CPU |
|---|---|
| Idle | 0-2% |
| Navigation | 20-40% |
| Heavy scraping | 30-60% |
| Multiple tabs | 50-80% |
Known Bugs (Being Fixed) β
| Issue | Status | Fix Version |
|---|---|---|
| Memory leak in capture | π¨ In progress | v0.1.4 |
| Windows socket connection | π¨ In progress | v0.2.0 |
| Headless mode detection | π¨ In progress | v0.1.4 |
| Canvas noise pattern | π¨ In progress | v0.1.4 |
Workarounds β
Site Blocking β
// Use headful mode for blocked sites
await piggy.launch({ binary: "headful" });
// Add delays between requests
await piggy.site.wait(5000);
// Rotate user agents
const userAgents = [...];
const randomUA = userAgents[Math.floor(Math.random() * userAgents.length)];
await piggy.site.intercept.headers("*", { "User-Agent": randomUA });Memory Issues β
// Clear capture periodically
await piggy.site.capture.clear();
// Close unused tabs
await piggy.site.close();
// Restart browser for long sessions
setInterval(async () => {
await piggy.close();
await piggy.launch();
}, 3600000); // Every hourJava Not Found β
# Install Java 17
sudo apt install openjdk-17-jre # Debian/Ubuntu
brew install openjdk@17 # macOS
# Set JAVA_HOME
export JAVA_HOME=/usr/lib/jvm/java-17-openjdkWhen to Use Alternative Tools β
| Use Case | Alternative | Why |
|---|---|---|
| Cross-browser testing | Playwright | Supports Firefox, Safari |
| Mobile testing | Appium | Real device testing |
| Chrome extension testing | Puppeteer | Native Chrome support |
| Simple static scraping | Cheerio | Lighter weight |
| Python-only stack | curl_cffi | Python native |
Reporting Limitations β
Found a limitation not listed?
- Check GitHub Issues
- Open a new issue with:
- Description of the limitation
- Steps to reproduce
- Expected vs actual behavior
- System information
Future Improvements β
| Limitation | Target Version | Fix |
|---|---|---|
| Canvas uniqueness | v0.1.4 | xorshift PRNG |
| Windows native | v0.2.0 | Full Windows support |
| WebGL spoofing | v0.2.0 | Complete WebGL override |
| Captcha solver | v0.3.0 | Built-in solver |
| Memory leaks | v0.1.4 | Proper cleanup |
Summary β
Most limitations are:
- Known and documented
- Being actively worked on
- Have workarounds available
For 95% of scraping tasks, Nothing Browser works perfectly. The remaining 5% have alternatives or are being fixed.
Next Steps β
- Build from Source β Build your own version
- TLS Fingerprint Report β Technical deep dive
- Contributing β Help fix limitations
Nothing Ecosystem Β· Ernest Tech House Β· Kenya Β· 2026