Development Timeline β
Current Status (2026) β
All products are under active development. Here's what's being worked on. But let me be honest with you β some of this is aspirational, some is practical, and some might never see the light of day.
Nothing Browser β
β Currently Available β
- Core browser with DevTools baked in
- Network/WebSocket/Cookie/Storage capture
- One-click export (Python, cURL, JavaScript)
- YouTube tab (via NewPipe Extractor)
- Plugin system with community registry
- Session management
- Auto-update system
- Fingerprint spoofing
π¨ In Development β
- Windows native support
- Response body search
- Identity reset UI
- Built-in captcha solver
- Script marketplace
- Headless mode
- Multi-tab session profiles
Nothing Private Browser β
β Currently Available β
- Zero telemetry
- Zero session persistence
- Fingerprint spoofing
- WebRTC leak protection
- UA-CH spoofing
π¨ In Development β
- Ad blocker (network-level, filter-list based)
- Tor routing
- ProtonVPN support
Piggy (Scraper Library) β
β Currently Available β
- Navigation & interactions
- Session persistence
- Network capture
- Multi-site parallel
- Human mode
- exposeFunction (RPC)
- intercept.respond
- intercept.modifyResponse
- Built-in API server
π¨ In Development β
- Global expose
- WebSocket client API
- Real-time streaming
- Enhanced TypeScript types
π³ The Three Pillars β Projects I Want to Make β
All these things I'm planning to make β or will make β are projects I want to build to prove that if you do one thing well, everything is great.
1. nothing-stream β Streaming Engine β
A completely separate library. Not part of Piggy. Pure data streaming.
import { saltyaom } from "nothing-engine";
// Core memory allocation
await saltyaom.allocateSpace();
// Open internal port highway
await saltyaom.allocatedSpace.routeToHttp(3000);
// Initiate raw, headless socket hook
await saltyaom.startStream();
// Register namespace stream
await saltyaom.register("siteUrl", "https://web.whatsapp.com");
// Read mutating HTML chunks as they tick past
saltyaom.capturedHtml.find(item => {
capturedHtml.provideUsWith(text);
});What it does: Raw packet streaming. No DOM snapshots. No page loads. Just data as it arrives.
The honest truth: This is genuinely almost impossible to make. Streaming HTML and giving a JS script that will be funky and very, very hard. But with code and some waits, everything will be fine.
Where the idea came from: I got this idea because I always wanted to run a WhatsApp bot in a tiny Pterodactyl server. And I saw yt-dlp.exe streams YouTube. So a YouTube scraper was my insight. Funny, huh?
The catch: It's not designed for UI. At all. This will absolutely fail Cloudflare tests.
| Tool | Cloudflare Detection |
|---|---|
| Puppeteer | π‘ A bulb saying "I'm a bot" |
| nothing-stream | π’ "What are this? That guide ships to harbour, yah. And it says 'hey Cloudflare, I'm a bot, block me.'" |
This is for sites like WhatsApp. Maybe your own. Or torrent sites. Sites that don't have heavy anti-bot.
2. nothing-render β UI Drawer β
A UI drawer that hooks into the streaming engine.
The honest truth: This will take ages to make. Why, you might ask?
Well, because I have zero idea how to make a streaming engine possible, let alone create an engine to render it. Call me cynical, but that's the reality.
The reality: The streaming engine's nature is not to accept any UI rendering engine. Hooking up the rendering engine will be a very, very good game of "please for fucks sake work."
If we ever make it, here's how hard it will be:
- You will have to learn C++
- Then write code to create the hook between the two
- There will be docs to write it β but I won't write it in full
- Then you write code to translate the streams to drawings
- And write code to tell the engine: "Hey bro, hold up"
This is not plug-and-play. This is duct tape and prayers.
Call me cynical, but... naaaaa. I'm not doing it.
3. nothing-whatsapp β WhatsApp Library β
Exact replica of whatsapp-web.js API β but runs on nothing-browser (Piggy binary), NOT the streaming engine.
whatsapp-web.js currently:
const { Client } = require('whatsapp-web.js');
const qrcode = require('qrcode-terminal');
const client = new Client();
client.on('qr', (qr) => {
qrcode.generate(qr, { small: true });
});
client.on('ready', () => {
console.log('Client is ready!');
});
client.on('message', (msg) => {
if (msg.body == '!ping') {
msg.reply('pong');
}
});
client.initialize();nothing-whatsapp will be:
import { client, qrcode } from "nothing-whatsapp";
const client = new Client();
client.on("qr", (qr) => {
qrcode.generate(qr, { small: true });
});
client.on("ready", () => {
console.log("Client is ready!");
});
client.on("message", (msg) => {
if (msg.body === "!ping") {
msg.reply("pong");
}
});
client.initialize();
// Extra: API route for QR
const waApi = await route("/whatsapp/requestqr");
waApi.on("qr", (qr) => {
// Send QR to client
});
// We will try to make it so that you wrap the API code in a function like:
await new function(requestqr) = the qr code here;
// Then map the function to the new API routeWhat's different:
- We'll pack
qrcode-terminaldirectly into the library - No external QR dependency
- Same API, different engine
Why not on streaming engine? Streaming engine is pure data. WhatsApp needs occasional UI (QR codes, login screens). Can't run on stream alone.
The PR I will open: I will open a PR to the official whatsapp-web.js repo. Pedro Lopez might shut it down. But well, prayer is just that β he thinks about it.
Because it will be way, way better than Puppeteer. And it will mean he will just take care of updating WhatsApp HTML updates β not browser stuff. See the split of work?
What this means:
- Same developer experience β zero learning curve
- 30MB RAM instead of 500MB
- 50+ sessions on the same hardware
4. nth β The Nothing Runtime β
One job. Run JS. Fast.
And because I hate Bun. Sorry Jarred Sumner. You are just a joke.
nth index.jsIt doesn't bundle axios. It doesn't have opinions about your project structure. It doesn't try to be a package manager, a bundler, a test runner, or a deployment tool. It runs JS. That's it.
How it works:
When you run nth init default, nth will create an nth.json file. Inside, you'll find about 30 lines of JSON. These are the extra plugins that nth will depend on:
{
"packageManager": "npm" | "pnpm",
"userun": false,
"autocomplete": true,
"testing": "vitest",
"http": true
}| Setting | What it does |
|---|---|
packageManager | Choose between npm or pnpm |
userun | If false, you don't need to type nth run index.js β just nth index.js |
autocomplete | Tab completion. Type nth pigg and press enter β the script will start piggy.js |
testing | Vitest integration |
http | Server-side logic (might just be Elysia baked in β who knows?) |
Important: Your file name must be unique, or it will crash horribly with an error: "Can't start β found duplicate files."
The philosophy: This runtime will be absolutely pluggable β just not overdone. You can't add marked capabilities. Nope. nth will make sure your CPU is utilized for that specific task.
The Stack β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β nothing-whatsapp β
β (WhatsApp API wrapper) β
β Exact replica of whatsapp-web.js API β
β Runs on nothing-browser β
β NOT on streaming engine β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β nothing-render β
β (UI drawer) β
β Hooks into streaming engine (if it works) β
β Will be a nightmare to integrate β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β nothing-stream β
β (Streaming engine) β
β Raw packet ingestion, DOM chunks as they stream β
β NOT designed for UI β pure data β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β nothing-browser β
β (C++ QtWebEngine core) β
β Piggy's binary β socket communication β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββπͺΆ Minified Binary (XXX-mini) β
Tiny footprint for simple, unprotected targets.
A stripped-down Chromium binary in the 50β70 MB range (no promises), built specifically for sites that don't need heavy evasion. No bells, no whistles β just a lean browser you can ship anywhere. It will be patched like the main binary, but global-scale anti-bot evasion is not its goal. If your target doesn't fight back, this is your binary.
πͺ Windows 8 Support β
Because Node runs on it, and a scraper server is a scraper server.
A Piggy build targeting Windows 8 compatibility. Realistically this is useful as a headless server environment rather than a daily driver. Node.js support is the key enabler here β if the runtime runs, Piggy can run.
And I am making this because I'm building a system where the host machine is Windows 8. So yeah. I need this.
The Language Problem (for nth) β
This is where it gets honest. nth wants to be written in the fastest language on the planet, and that's a harder question than it sounds:
- Assembly β theoretically the ceiling. Practically a nightmare. Bugs don't just crash your program; they corrupt memory and take everything else down with them. Not impossible, just painful in ways that age you.
- C++ β the proven choice. Fast, battle-tested, and also boring in a way that makes it hard to stay interested long enough to finish.
- Rust β the obvious modern answer. Bun moved from Zig to Rust, which is precisely why it's less appealing. Following Bun's footsteps defeats the point.
- Zig β interesting, but Bun abandoned it, which at minimum raises questions.
- Something else entirely β the search continues.
The language decision is genuinely open. Speed is non-negotiable. The rest is still being figured out.
This will take a while. That's fine. The idea is right.
Nothing Ecosystem Β· Ernest Tech House Β· Kenya Β· 2026