A decade of code, zero forced migrations

Most platforms upgrade by breaking things. Old versions are deprecated. APIs are removed. Users are told to migrate — or lose access. It happens everywhere. WordPress plugins break on updates. Python 2 code stopped working when Python 3 shipped. iOS apps need constant rewrites to stay in the App Store. Wapka took a different path. Code written in 2013 still runs today. Unchanged. Alongside code written this year. How is that possible — and why does it matter? ...

May 6, 2026 · 3 min · 487 words · Jonayed Hossan Gazi

How Wapka's request router handles three eras simultaneously

A web request arrives at Wapka. It could be a WAP tag page from 2013, a visual builder page from 2020, or a Lua API endpoint from this year. The router needs to figure out which one — fast — and dispatch it to the right handler. Here is how that works. The dispatch chain Every incoming HTTP request passes through a priority-ordered dispatch: Step 1: Route matching The router checks the URL against registered routes. Lua scripts register routes via the framework (app:get, app:post). The REST API registers endpoints. Legacy WAP pages are mapped in the database. The router resolves the match and hands off to the correct handler. ...

May 6, 2026 · 2 min · 384 words · Jonayed Hossan Gazi

Real-time chat and WebSockets on shared hosting

Real-time features used to require dedicated servers. WebSockets need persistent connections. Persistent connections need resources. Most shared hosting platforms avoid real-time entirely. Wapka supports WebSockets on shared infrastructure. Here is how. The architecture The WebSocket layer runs alongside the HTTP server, sharing the same infrastructure. When a user connects to a chatroom or enables notifications, the platform establishes a persistent connection. Messages route through the same sandboxed environment that handles HTTP requests. ...

May 6, 2026 · 1 min · 190 words · Jonayed Hossan Gazi

Why Wapka runs on Lua — the architectural decision behind it

Every platform makes a bet on its technology stack. Wapka’s bet was Lua. Here’s why it wasn’t just a good choice — it was the only choice that made the entire platform economically possible. The problem: multi-tenant code execution Wapka lets users write server-side scripts. That means arbitrary code from thousands of users runs on shared infrastructure. In most languages — Node.js, Python, PHP — running untrusted user code safely at scale requires containerization. Docker. MicroVMs. gVisor. These add memory overhead, startup latency, and cost. ...

May 6, 2026 · 3 min · 472 words · Jonayed Hossan Gazi

Why Wapka's compute costs are near zero

The numbers tell the story. A Node.js process consumes roughly 30 megabytes of memory. A Python process: 20 megabytes. A Lua state inside LuaSandbox: 1 to 5 kilobytes. That three-order-of-magnitude difference is why Wapka can offer server-side scripting for free. The runtime economics When you let thousands of users run server-side code on shared infrastructure, the cost of each execution matters exponentially. At scale, memory and CPU are the dominant factors. ...

May 6, 2026 · 2 min · 311 words · Jonayed Hossan Gazi