DEV Community

Cover image for Swift Could've Been a Great Server-Side Language
Shayan
Shayan

Posted on

4 2 2 2 2

Swift Could've Been a Great Server-Side Language

There was a moment when Swift on the server didn't seem like a crazy idea.

Apple had just open-sourced the language. Vapor was gaining traction. IBM threw its weight behind Kitura. And for the first time, it felt like a modern, statically-typed language with real potential could challenge the likes of Node, Go, and even Java.

It had all the right ingredients.

Swift was fast. It was expressive. It had a type system that didn't fight you. It felt functional in all the right places, but still readable. You could write backend logic that felt clean and safe without constantly fighting the compiler.

And more importantly it was fun.

Enums, Pattern Matching, and the Little Things

Swift wasn't fun just because of one killer feature. It was fun because of dozens of tiny decisions that made the language feel like it had taste.

Here's a small example that still feels elegant years later:

enum Result<T> {
    case success(T)
    case failure(String)
}

func handle(result: Result<Int>) -> String {
    switch result {
    case .success(let value):
        return "Success: \(value)"
    case .failure(let error):
        return "Error: \(error)"
    }
}
Enter fullscreen mode Exit fullscreen mode

There's no ceremony. Just logic that reads the way you'd explain it out loud.

Swift didn't invent enums or pattern matching. But it implemented them in a way that made them feel first-class, ergonomic, and natural to reach for not like a feature you had to dig through the docs to understand.

And this same clarity carried through everything else: optionals, string interpolation, protocols, value types, error handling. It was all just... nice.

Vapor, Kitura, and the Almost-Moment

When server-side Swift frameworks started showing up, they brought real hope.

Vapor felt like Swift's answer to Express but typed, async, and fast.
Kitura had corporate backing from IBM and ambitions for enterprise use.
Perfect never quite found its groove, but it was there too, experimenting and pushing the boundaries.

Spinning up an HTTP route in Vapor looked like this:

import Vapor

let app = try await Application.make(.detect())

app.get("hello") { req in
    "Hello, world!"
}

try await app.execute()
Enter fullscreen mode Exit fullscreen mode

And it worked. It worked really well.

For anyone coming from iOS, it was like unlocking a secret door. Suddenly, you didn't need to learn an entirely new language just to build an API. You could reuse your mental model your same data types, patterns, and tooling on both the client and the server.

It made everything feel closer. Simpler.

But It Didn't Stick

For a while, it looked like Swift might carve out a niche. But the energy didn't last.

Kitura was sunset by IBM.
Perfect faded into obscurity.
Vapor pressed on but without critical mass.

And under the surface, there were cracks.

The tooling on Linux was never great. Package resolution was slow. Even building and running projects felt brittle compared to the rock-solid Go compiler or the JavaScript dev loop.

More importantly, server ecosystems live and die by the libraries they offer. And while Swift had a vibrant community on the Apple side, the backend world never got enough attention.

It's hard to build a backend ecosystem without battle-tested ORMs, queues, mailers, cloud integrations, and all the boring glue you take for granted in more mature stacks.

In the end, Swift just couldn't compete with the momentum of Node, Python, or Go languages that had already earned their place in backend land.

I Still Miss It

Swift was the first language that made me feel like programming could be beautiful.

It wasn't just the features it was the way they worked together.
The smooth syntax.
The focus on safety, without making things painful.
The feeling that someone cared about the developer experience.

But what really stuck with me was the idea behind server-side Swift: that iOS developers could use the same language, the same types, and even the same patterns across client and server. It was one of the first setups where full-stack really meant something where you didn't need to reinvent everything when switching sides of the stack.

That idea never quite materialized in the Swift ecosystem but I find myself chasing it even now.

Today, I'm building UserJot, a feedback and roadmap tool for SaaS products. And while it's built entirely in TypeScript, that same dream lives on. I use the same language for both the client and the server in a monorepo. This makes it easy to switch between the two, and to share code between them.

UserJot Feedback Dashboard

It's not Swift. But it scratches the same itch.

I still bring Swift habits with me like protocol-oriented programming, or structuring code in a way that emphasizes clarity over cleverness. But I miss Swift's polish. I miss the way it made simple things feel elegant. And I miss how fun it was to write code that didn't just work, but felt right.

Swift Deserved Better on the Server

Swift had everything going for it: a thoughtful language design, modern syntax, strong typing, and real performance. For a brief time, it looked like it could become something big outside the Apple ecosystem.

It didn't happen. And maybe it never will.

But if you've never written a few hundred lines of Swift especially server-side Swift you might be surprised at how good it feels. Not clever. Not magical. Just clean, quiet, and genuinely fun to use.

And that's worth remembering.

In case you're building something yourself, I'm working on UserJot, a simple feedback and roadmap tool I built for my own products. I'd love if you gave it a try and let me know what you think.

UserJot Public Feedback Dashboard

Tiugo image

Modular, Fast, and Built for Developers

CKEditor 5 gives you full control over your editing experience. A modular architecture means you get high performance, fewer re-renders and a setup that scales with your needs.

Start now

Top comments (5)

Collapse
 
michael_liang_0208 profile image
Michael Liang

Great post. Also UserJot is great platform to use in teams.

Collapse
 
shayy profile image
Shayan

Thank you :)

Collapse
 
dotallio profile image
Dotallio

I really get missing that feeling of elegance and flow - I'm always chasing that same blend of type safety and clarity in my stack, even though I use TypeScript now too. Do you ever think Swift could see a server-side comeback, or is that chapter closed for good?

Collapse
 
deividas_strole profile image
Deividas Strole

Swift could’ve been a strong server-side language due to its safety, speed, and clean syntax. Its open-source nature and cross-platform support made it ideal for unifying iOS and backend development. However, limited adoption and ecosystem support held it back.

Tiugo image

Fast, Lean, and Fully Extensible

CKEditor 5 is built for developers who value flexibility and speed. Pick the features that matter, drop the ones that don’t and enjoy a high-performance WYSIWYG that fits into your workflow

Start now