DEV Community

Cover image for πŸŒ™ Why I Built MidKnight
Ez Eldeen Mushtaha - @ezmu
Ez Eldeen Mushtaha - @ezmu

Posted on

πŸŒ™ Why I Built MidKnight

πŸ’­ Before We Start

This isn't a technical article. It's not an explanation of algorithms, nor a showcase of my programming abilities. This is a conversation between two people who are suffering from the same thing.

I'm not here to tell you I'm smarter than you, or that my language is better than yours, or that my framework surpasses yours. I'm here because I'm tired, and I think you're tired too.


😩 The Confession

You know what really bothers me?

That I have a machine capable of doing the impossibleβ€”theoretically.

Yet, when I want to run a simple web applicationβ€”something that does what websites did twenty years agoβ€”the machine stops. It breathes heavily. It complains.

Why?

Because I told it to pass through seven layers of software before reaching anything useful. Because I loaded it with two frameworks, four databases, twelve libraries, twenty-seven extensions, and fifty-three configuration files.

Because the industry convinced us this is evolution. That bloat is maturity. That adding another layer is the solution.

And we all bought it.


πŸ”„ The Shift

At some point, I got tired. Not of programmingβ€”I'll never stop programming. But of the feeling that I'm doing extra work, using extra resources, adding extra complexity, just to achieve what my programming ancestors did with less than a tenth of what I have.

Because I've lived through the evolution of software, development environments, and hardware over 20 years. I've seen everything with my own eyes. I can't claim ignorance.

So, I started asking a different question.

Not: "What's the best library for this?"

But: "Do I need a library at all?"

Not: "What's the fastest framework?"

But: "Do I need a framework?"

And the answer, most of the time, was no.


πŸ—οΈ What I Learned

That the biggest obstacle to efficient software isn't the processor, memory, or disk.

It's the complexity we add ourselves.

Every library we add is a potential point of failure. Every framework we adopt is an extra layer between us and the machine. Every dependency we add is something else that can conflict, break, or slow performance.

And we've reached a point where solving the problem is more complex than the problem itself.


⚑ What I Did

I decided to build something different.

Not better. Not stronger. Just different.

Something that depends on nothing. Something that asks no one for permission. Something that stands at the gate, deciding whether a request is worth waking your entire application for, and if not, handles it itself.

80 kilobytes of compiled C code. No dependency hell, no node_modules, no composer.lock.

Something that protects your app from attacks, caches what's static, and searches through dataβ€”all without asking you to install two frameworks, a database, and a monitoring tool.


😌 What I Felt

When I saw it work for the first time, I didn't feel pride. I felt relief.

Relief that there's another way. That we're not forced to continue in this spiral of bloat. That the machine I bought twelve years ago is still capable of amazing things, if I stop telling it that it's helpless.


πŸ“Š The Real Numbers

Because I know some people need numbers:

Metric Value
Requests per second 6,892
Success rate 100%
Data transfer 321 MB/s
Binary size 80 KB
Dependencies 0
Device age 12 years

These numbers aren't for boasting. They're just to confirm what we all feel: that hardware isn't the problem.


πŸ—£οΈ Why I'm Telling You This

I'm not here to convince you to use what I built.

I'm here to say: You're not crazy.

If you feel things have become more complex than they should be, you're right.

If you feel you spend more time managing dependencies, resolving conflicts, and updating packages than writing actual code, you're not alone.

If you've added Redis, added Elasticsearch, used a CDN, implemented multiple caching mechanisms, changed databases, and your system still crashes at the first 100 concurrent requestsβ€”know that the problem isn't in your tools.

The problem is in the structure itself.

You're building on a shaky foundation, then you're surprised when the building collapses.

You've done what you had to do. You followed best practices. You used the recommended tools. But from the start, the structure was wrong.

And your systems still crash.


πŸ’‘ The Philosophy

What We Do Differently:

Aspect Traditional MidKnight
Dependencies Hundreds of packages 0 dependencies
Size Megabytes 80 kilobytes
Language Interpreted/Managed C (Compiled)
Model Request β†’ App β†’ Database Request β†’ Smart Proxy β†’ (Cache or App)
Memory Repeated copying Zero-Copy
Concurrency Separate processes Lightweight threads

What We Don't Do:

  • ❌ We don't depend on Node.js, Python, or PHP
  • ❌ We don't depend on Nginx, Apache, or Varnish
  • ❌ We don't depend on Redis, Memcached, or Elasticsearch
  • ❌ We don't use Java, Go, or Rust

(we work in front of them)

We build from scratch. No middlemen. No dependencies.

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                         COMPLETE DATA FLOW                                 β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                             β”‚
β”‚  Client Request                                                             β”‚
β”‚       ↓                                                                     β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚  β”‚                     MIDKNIGHT GATEKEEPER                           β”‚   β”‚
β”‚  β”‚  1. πŸ›‘οΈ DDoS Check                                         β”‚   β”‚
β”‚  β”‚  2. πŸ’Ύ Cache Lookup                                 β”‚   β”‚
β”‚  β”‚  3. 🧠 Logic Engine                                      β”‚   β”‚
β”‚  β”‚  4. πŸ” Full-Text Search  if needed                        β”‚   β”‚
β”‚  β”‚  5. πŸ”— Graph Query  if needed                             β”‚   β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β”‚       ↓                                                                     β”‚
β”‚       β”œβ”€β”€ πŸ’Ύ CACHE HIT β†’ Response (0.1ms)                                  β”‚
β”‚       β”‚                                                                     β”‚
β”‚       └── πŸ“¦ CACHE MISS β†’ Backend (50-200ms)                               β”‚
β”‚                              ↓                                              β”‚
β”‚                      β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                               β”‚
β”‚                      β”‚   YOUR APPLICATION   β”‚                               β”‚
β”‚                      β”‚   (Laravel, etc)     β”‚                               β”‚
β”‚                      β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                               β”‚
β”‚                              ↓                                              β”‚
β”‚                         πŸ“¦ Response                                         β”‚
β”‚                              ↓                                              β”‚
β”‚                      πŸ’Ύ Store in Cache                                      β”‚
β”‚                              ↓                                              β”‚
β”‚                      ⚑ Response (0.1ms next time)                          β”‚
β”‚                                                                             β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
Enter fullscreen mode Exit fullscreen mode

πŸŒ™ MidKnight

The knight that stands at the gate. Not just a tool that stores data, but a guardian that protects your application, quietly, efficiently, without noise. It watches every request before it touches your app, doesn't allow attacks to pass, and doesn't allow repeated requests to wake your app unnecessarily.

MidKnight is not just a server. It's a statement.

A statement that software can be fast without being bloated, powerful without being complex, efficient without being fragile.


πŸ“¬ If You're Interested

LinkedIn: Wael


Note: MidKnight is currently in Beta. We're working on stabilizing the final features and improving performance. The licensing model and official release details will be announced soon. Stay tuned for updates.

My LinkedIn: EZ-Eldeen

#MidKnight #Software #Simplicity #Performance #Development

Top comments (0)