[{"data":1,"prerenderedAt":371},["ShallowReactive",2],{"blog-/en/why-neleto-runs-on-rust":3,"blog-related-/en/why-neleto-runs-on-rust":243},{"id":4,"title":5,"author":6,"body":7,"date":227,"description":228,"extension":229,"image":230,"meta":231,"navigation":232,"path":233,"seo":234,"stem":235,"tags":236,"__hash__":242},"blog/en/why-neleto-runs-on-rust.md","Why Neleto Runs on Rust (And the Benchmarks to Prove It)","Martin Swoboda",{"type":8,"value":9,"toc":218},"minimark",[10,14,18,23,26,29,33,41,119,122,131,135,138,145,156,162,166,169,172,175,182,185,189,192,200,203,213],[11,12,5],"h1",{"id":13},"why-neleto-runs-on-rust-and-the-benchmarks-to-prove-it",[15,16,17],"p",{},"When people ask why a small CMS startup wrote its backend in Rust, the easy answer is \"speed.\" That's true, but it's not the whole story — and it skips over the parts that actually cost us time. So here's the honest version, with real numbers instead of marketing adjectives.",[19,20,22],"h2",{"id":21},"the-decision","The decision",[15,24,25],{},"Most CMS platforms are built on PHP, Node, or Python. Those are fine choices. We use Node and TypeScript on the frontend ourselves. But for the part of Neleto that does the heavy lifting — serving content, rendering pages, handling API requests — we wanted something that was fast by default, not fast after six months of profiling and caching workarounds.",[15,27,28],{},"The pitch for Rust was simple: predictable performance, low memory use, and a compiler that refuses to let a whole category of bugs into production. The cost was equally simple: it's harder to write, slower to prototype, and the talent pool is smaller. We went in knowing both.",[19,30,32],{"id":31},"the-benchmarks","The benchmarks",[15,34,35,36,40],{},"These are from our own staging environment running on a single Hetzner CX22 instance (2 vCPU, 4 GB RAM, Germany region). Same hardware, same content, same test. We measured time-to-first-byte and requests-per-second under load using ",[37,38,39],"code",{},"wrk"," with 50 concurrent connections over 30 seconds.",[42,43,44,60],"table",{},[45,46,47],"thead",{},[48,49,50,54,57],"tr",{},[51,52,53],"th",{},"Metric",[51,55,56],{},"Neleto (Rust)",[51,58,59],{},"Typical PHP CMS*",[61,62,63,75,86,97,108],"tbody",{},[48,64,65,69,72],{},[66,67,68],"td",{},"Median TTFB (cached page)",[66,70,71],{},"11 ms",[66,73,74],{},"180–400 ms",[48,76,77,80,83],{},[66,78,79],{},"Median TTFB (uncached, DB hit)",[66,81,82],{},"34 ms",[66,84,85],{},"250–600 ms",[48,87,88,91,94],{},[66,89,90],{},"Requests/sec (single instance)",[66,92,93],{},"~9,400",[66,95,96],{},"~400–900",[48,98,99,102,105],{},[66,100,101],{},"Memory under load",[66,103,104],{},"78 MB",[66,106,107],{},"350 MB–1.2 GB",[48,109,110,113,116],{},[66,111,112],{},"Cold start",[66,114,115],{},"0.3 s",[66,117,118],{},"n/a (always-on)",[15,120,121],{},"*The PHP comparison is a stock install of a popular open-source CMS on the same hardware, no aggressive tuning. Your mileage will vary with caching plugins and CDNs — that's exactly the point. The Rust numbers are what you get before you add a CDN, not after.",[15,123,124,125,130],{},"The memory figure is the one that matters most for our economics. At 78 MB under load, we can run a lot of customer sites on one box. That's a big part of why we can ",[126,127,129],"a",{"href":128},"/pricing","charge €24/month"," and not lose money on it.",[19,132,134],{"id":133},"where-rust-actually-paid-off","Where Rust actually paid off",[15,136,137],{},"Three places, concretely:",[15,139,140,144],{},[141,142,143],"strong",{},"Page rendering."," Neleto has built-in rendering, so we're not just shipping JSON to someone else's frontend. The template engine compiles to native code, and it shows — that 11 ms cached TTFB is the difference between a site that feels instant and one that feels \"fine.\"",[15,146,147,150,151,155],{},[141,148,149],{},"Concurrency without drama."," The async runtime handles thousands of simultaneous connections without us hand-tuning worker pools. During the ",[126,152,154],{"href":153},"/blog/agentic-traffic-surpassed-humans","agentic-traffic spike we wrote about recently",", the backend didn't flinch. Bots hammering the API look the same to Rust as a traffic surge from humans.",[15,157,158,161],{},[141,159,160],{},"The compiler caught real bugs."," Hard to put a number on this, but the count of \"null reference in production at 2am\" incidents since launch is zero. Some of that is luck. A lot of it is the borrow checker yelling at us before we shipped.",[19,163,165],{"id":164},"where-it-hurt-the-honest-part","Where it hurt (the honest part)",[15,167,168],{},"Build-in-public means showing the bruises too.",[15,170,171],{},"Development was slower at the start. Features that would've taken a day in Node took two or three while we fought the borrow checker and learned the ecosystem. Our first month of real velocity didn't arrive until we'd internalized a few patterns.",[15,173,174],{},"Hiring is harder. There are fewer Rust developers than PHP or JS developers, and the good ones know their value. For a bootstrapped team, that's a real constraint we feel every time we think about growing.",[15,176,177,178,181],{},"Some libraries are still young. A few things that are one ",[37,179,180],{},"npm install"," away in the Node world required us to write more ourselves. That's time we didn't spend on customer-facing features.",[15,183,184],{},"Would we choose Rust again? Yes — but only because performance and infrastructure cost are core to our pitch. If we were building a quick MVP to test an idea, we'd have reached for something faster to prototype in. The right tool depends on what you're optimizing for, and we were optimizing for the thing customers feel on every page load and we feel on every server bill.",[19,186,188],{"id":187},"what-this-means-for-you","What this means for you",[15,190,191],{},"If you're evaluating a CMS, don't take \"fast\" on faith — from us or anyone. Run the test yourself. Drop a page into Neleto, point a load tester at it, and look at the numbers on the same hardware you'd actually deploy on. We'd rather you trust the benchmark than the brochure.",[15,193,194,195,199],{},"And if you're a founder weighing a \"boring and fast to build\" stack against a \"harder but faster to run\" one: there's no universal right answer. We picked the harder road because the speed is something our customers can measure. Make sure whatever you pick, the payoff is something ",[196,197,198],"em",{},"your"," customers can feel too.",[201,202],"hr",{},[15,204,205,208,209,212],{},[141,206,207],{},"Try it yourself:"," ",[126,210,211],{"href":128},"Spin up a free Neleto project",", publish a page, and benchmark it on your own hardware. If the numbers don't beat what you're running now, we want to hear about it.",[15,214,215],{},[141,216,217],{},"Fast websites. Easy content. AI native.",{"title":219,"searchDepth":220,"depth":220,"links":221},"",2,[222,223,224,225,226],{"id":21,"depth":220,"text":22},{"id":31,"depth":220,"text":32},{"id":133,"depth":220,"text":134},{"id":164,"depth":220,"text":165},{"id":187,"depth":220,"text":188},"2026-08-10","The honest story behind choosing Rust for a CMS backend — real single-instance benchmarks (11 ms TTFB, ~9,400 req/s, 78 MB RAM) and the parts that actually cost us: slower dev, harder hiring, younger libraries.","md","/img/blog/why-neleto-runs-on-rust.svg",{},true,"/en/why-neleto-runs-on-rust",{"title":5,"description":228},"en/why-neleto-runs-on-rust",[237,238,239,240,241],"Neleto","Rust","Performance","Benchmarks","Build in Public","LdMtLR9QBDv3IYh759jG4AV9ZDbeepjXKdTXR2LSoiY",[244,246,258,269,280,289,298,308,318,326,337,346,356,363],{"path":233,"title":5,"description":228,"date":227,"author":6,"image":230,"tags":245},[237,238,239,240,241],{"path":247,"title":248,"description":249,"date":250,"author":6,"image":251,"tags":252},"/en/page-builder-walkthrough","Building a Landing Page in Neleto: A Real Walkthrough (Mouse and Prompt)","I built the same landing page twice — once by hand in our visual builder, once by prompting Claude through our MCP server — and timed both. Here's exactly what happened, including the bits that were slower than I'd like.","2026-07-27","/img/blog/page-builder-walkthrough.svg",[237,253,254,255,256,257],"Page Builder","CMS","MCP","AI CMS","No-Code",{"path":259,"title":260,"description":261,"date":262,"author":6,"image":263,"tags":264},"/en/mcp-connectors","Connect Neleto to Anything: The Native MCP Server and Connector Ecosystem","Your CMS shouldn't be an island. Here's how Claude, Cursor, and Windsurf talk to your content directly — and where it goes next.","2026-07-20","/img/blog/mcp-connectors.svg",[255,265,266,267,268,237,254],"Connectors","AI","Claude Code","Cursor",{"path":270,"title":271,"description":272,"date":273,"author":6,"image":274,"tags":275},"/en/wordpress-migration-walkthrough","Migrating a 40-Page Site Off WordPress: An Honest, Start-to-Finish Walkthrough","The content migration took under an hour. The full cutover — domain, DNS, redirects, forms, QA — took the better part of a day. Here's every step, every gotcha, and the parts the migration guides skip.","2026-07-13","/img/blog/wordpress-migration-walkthrough.svg",[276,277,254,278,279,237],"WordPress","Migration","GDPR","EU Hosting",{"path":281,"title":282,"description":283,"date":284,"author":6,"image":285,"tags":286},"/en/html-to-editable-cms","I turned a static HTML page into an editable CMS site with one prompt","Web designers lose days rebuilding finished designs as a CMS. Here's how Neleto's native MCP server does it from a single prompt — animations, custom cursor and all.","2026-07-06","/img/blog/html-to-editable-cms.svg",[255,287,288,267,254,237],"AI Agents","Web Design",{"path":290,"title":291,"description":292,"date":293,"author":6,"image":294,"tags":295},"/en/console-launch-free-tier","Neleto Console Is Live — and the Free Tier Is Open","Sign up at console.neleto.io, get a real CMS, and pay us nothing. Here's why we built it that way.","2026-06-29","/img/blog/console-launch-free-tier.svg",[241,237,296,297,279,254],"Free Tier","Self-Serve",{"path":299,"title":300,"description":301,"date":302,"author":6,"image":303,"tags":304},"/en/mcp-server-explained","MCP Server Explained: The Deep Dive","How the Model Context Protocol enables secure, native AI agent interaction with your applications — and why native implementation matters.","2026-06-22","/img/blog/mcp-server-explained.svg",[255,305,306,287,307],"MCP Server","Model Context Protocol","AI Integration",{"path":309,"title":310,"description":311,"date":312,"author":6,"image":313,"tags":314},"/en/neleto-vs-contentful","Neleto vs Contentful: Which CMS Should You Choose in 2026?","A practical comparison for developers, agencies, and growing businesses — covering pricing, performance, AI integration, editor experience, and EU compliance.","2026-06-16","/img/blog/neleto-vs-contentful.svg",[237,315,316,317,256],"Contentful","Headless CMS","CMS Comparison",{"path":319,"title":320,"description":321,"date":322,"author":6,"image":323,"tags":324},"/en/agentic-traffic-surpassed-humans","Bots Just Out-Numbered Us: What the Agentic Web Means for Your CMS","Cloudflare says AI agents now drive the majority of web traffic — 18 months early. Here's why that changes how you publish content, and what to do about it.","2026-06-08","/img/blog/agentic-traffic-surpassed-humans.svg",[325,287,255,254,237],"Agentic Web",{"path":327,"title":328,"description":329,"date":330,"author":6,"image":331,"tags":332},"/en/glw-gmbh-case-study","Modernizing a 40-Year Family Business: GLW GmbH's New Website with Neleto","How we delivered a fast, multilingual, and CRM-integrated website for a leading German cable processing specialist — in close collaboration with agency Inhalt.","2026-06-05","/img/blog/glw-gmbh-case-study.svg",[333,334,237,335,336],"Case Study","Customer Story","CRM Integration","Custom Plugin",{"path":338,"title":339,"description":340,"date":341,"author":6,"image":342,"tags":343},"/en/eu-hosting-compliance","Why EU Hosting Compliance Matters for Your Website","Data sovereignty, GDPR, and choosing the right infrastructure in 2026","2026-06-01","/img/blog/eu-hosting-compliance.svg",[278,279,344,345,237],"Data Compliance","Privacy",{"path":347,"title":348,"description":349,"date":350,"author":6,"image":351,"tags":352},"/en/buergerstiftung-ravensburg","Bürgerstiftung Ravensburg: A Modern Website for Community Impact with Neleto","How we built a clear, fast, and emotionally engaging website for a regional community foundation using Neleto CMS — in close collaboration with agency Inhalt.","2026-05-29","/img/blog/buergerstiftung-ravensburg.svg",[333,353,354,237,355],"Nonprofit","Foundation","Website",{"path":357,"title":358,"description":359,"date":360,"author":6,"image":361,"tags":362},"/en/what-is-mcp","What is the Model Context Protocol (MCP)?","The new standard connecting AI agents to your tools and data","2026-05-25","/img/blog/what-is-mcp.svg",[255,266,306,287,254],{"path":364,"title":365,"description":366,"date":367,"author":6,"image":368,"tags":369},"/en/why-neleto-exists","Why Neleto Exists","The CMS Built for Speed, Simplicity, and the AI Era","2026-05-18","/img/blog/why-neleto-exists.svg",[254,266,370,239,237],"Web Development",1786543461049]