<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/elixir-patterns-we-d-love-to-see-in-swift-nauzyiuxf" -->

---
title: Elixir Patterns We'd Love to See in Swift | daily.dev
description: Tuist's founder explains why the team chose Elixir over Swift for their server, built on Tuist's CLI and documentation tooling. The post walks through...
canonical: https://daily.dev/posts/elixir-patterns-we-d-love-to-see-in-swift-nauzyiuxf
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: Elixir Patterns We'd Love to See in Swift | daily.dev
og:description: Tuist's founder explains why the team chose Elixir over Swift for their server, built on Tuist's CLI and documentation tooling. The post walks through...
og:url: https://daily.dev/posts/elixir-patterns-we-d-love-to-see-in-swift-nauzyiuxf
og:image: https://api.daily.dev/og/posts/nAUzYIuxF.png
og:image:alt: Elixir Patterns We'd Love to See in Swift
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Elixir Patterns We'd Love to See in Swift

**[
      Tuist
    ](https://daily.dev/sources/tuist-blog)** · 17 min read · 0 upvotes · 0 comments

## Summary

Tuist's founder explains why the team chose Elixir over Swift for their server, built on Tuist's CLI and documentation tooling. The post walks through Erlang/OTP's process model, Elixir's build system and hot-reloading REPL, Phoenix LiveView's server-driven UI, and PubSub-based real-time features, then argues these patterns—supervision trees, hot-reload, server-driven UI, isolated test processes—should inspire Swift's evolution as it grows beyond Apple platforms. It closes by acknowledging trade-offs, including losing shared Swift code between CLI and server and Swift's stronger compile-time guarantees.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://tuist.dev/blog/2025/07/15/elixir>

## Questions this post answers

### What is Phoenix LiveView and how does it avoid client-side state management?

Phoenix LiveView is Elixir's web framework model where opening a page creates a server-side process bound to the connection, holding UI state that maps to HTML. When an action requires a UI change, the new state is calculated on the server and only the diff is sent to the client, eliminating the need to sync state between client and server or run a JavaScript runtime.

_Developers weighing server-driven UI approaches can follow Elixir and Swift ecosystem comparisons on daily.dev._

### Why did Tuist choose Elixir instead of Swift for their server?

Tuist chose Elixir for its server because it needed a powerful, simple solution buildable with limited resources, and Elixir's Erlang-based runtime offered strong concurrency, hot-reloading, and a mature ecosystem (like ClickHouse adapters via Plausible and OpenID Connect via Boruta). Trade-offs included losing shared code between their Swift CLI and server, and Swift's stronger compile-time type guarantees.

_Teams deciding between languages for a new server can compare real trade-offs like these on daily.dev._

### How does Elixir achieve process isolation in tests to avoid flakiness?

Every test in Elixir runs as a separate, isolated process scheduled to run in parallel, so running more CPU cores speeds up test suites. Because most tested functions are pure, there's little shared state to cause flakiness, and stateful processes or mocks can be spawned scoped to each test's process tree for complete isolation.

_Developers chasing flake-free test suites can track patterns like process isolation on daily.dev._

## Similar posts on daily.dev

- [Code BEAM America 2025 - Learning Resources / Talks - Elixir Programming Language Forum](https://daily.dev/posts/code-beam-america-2025---learning-resources-talks---elixir-programming-language-forum-bagwzmtsq) · Elixir Forum · 0 upvotes · 0 comments
- [Build an Elixir App with Cowboy](https://daily.dev/posts/build-an-elixir-app-with-cowboy-cbg2oram6) · AppSignal · 3 upvotes · 0 comments
- [How I switched from ruby to elixir and to learn it better — built a product](https://daily.dev/posts/how-i-switched-from-ruby-to-elixir-and-to-learn-it-better-built-a-product-q5nbdknzl) · ElixirStatus · 1 upvotes · 0 comments
- [Anti-Antipatterns in Elixir Library Guidelines](https://daily.dev/posts/anti-antipatterns-in-elixir-library-guidelines-bdnl8ndhb) · Beam Bloggers Webring · 0 upvotes · 0 comments

---

Tags: [#swift](https://daily.dev/tags/swift), [#elixir](https://daily.dev/tags/elixir), [#erlang](https://daily.dev/tags/erlang), [#liveview](https://daily.dev/tags/liveview)

[View this post on daily.dev](https://daily.dev/posts/elixir-patterns-we-d-love-to-see-in-swift-nauzyiuxf)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"Elixir Patterns We'd Love to See in Swift","url":"https://daily.dev/posts/elixir-patterns-we-d-love-to-see-in-swift-nauzyiuxf","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/elixir-patterns-we-d-love-to-see-in-swift-nauzyiuxf"},"datePublished":"2026-08-23T12:23:42.621Z","dateModified":"2026-08-23T12:57:43.241Z","description":"Tuist's founder explains why the team chose Elixir over Swift for their server, built on Tuist's CLI and documentation tooling. The post walks through...","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/52cdadb3ab44d1e1bebbb0b457f74090?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/52cdadb3ab44d1e1bebbb0b457f74090?_a=AQAEuop","isAccessibleForFree":true,"articleSection":"\n      Tuist\n    ","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"\n      Tuist\n    ","logo":"https://media.daily.dev/image/upload/s--3AYDH23h--/f_auto,q_auto/v1787487506/logos/tuist-blog?_a=BAMAMicg0","url":"https://daily.dev/sources/tuist-blog"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/elixir-patterns-we-d-love-to-see-in-swift-nauzyiuxf","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":0},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"swift,elixir,erlang,liveview","timeRequired":"PT17M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"\n      Tuist\n    ","item":"https://daily.dev/sources/tuist-blog"},{"@type":"ListItem","position":3,"name":"Elixir Patterns We'd Love to See in Swift"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/elixir-patterns-we-d-love-to-see-in-swift-nauzyiuxf#faq","mainEntity":[{"@type":"Question","name":"What is Phoenix LiveView and how does it avoid client-side state management?","acceptedAnswer":{"@type":"Answer","text":"Phoenix LiveView is Elixir's web framework model where opening a page creates a server-side process bound to the connection, holding UI state that maps to HTML. When an action requires a UI change, the new state is calculated on the server and only the diff is sent to the client, eliminating the need to sync state between client and server or run a JavaScript runtime. Developers weighing server-driven UI approaches can follow Elixir and Swift ecosystem comparisons on daily.dev."}},{"@type":"Question","name":"Why did Tuist choose Elixir instead of Swift for their server?","acceptedAnswer":{"@type":"Answer","text":"Tuist chose Elixir for its server because it needed a powerful, simple solution buildable with limited resources, and Elixir's Erlang-based runtime offered strong concurrency, hot-reloading, and a mature ecosystem (like ClickHouse adapters via Plausible and OpenID Connect via Boruta). Trade-offs included losing shared code between their Swift CLI and server, and Swift's stronger compile-time type guarantees. Teams deciding between languages for a new server can compare real trade-offs like these on daily.dev."}},{"@type":"Question","name":"How does Elixir achieve process isolation in tests to avoid flakiness?","acceptedAnswer":{"@type":"Answer","text":"Every test in Elixir runs as a separate, isolated process scheduled to run in parallel, so running more CPU cores speeds up test suites. Because most tested functions are pure, there's little shared state to cause flakiness, and stateful processes or mocks can be spawned scoped to each test's process tree for complete isolation. Developers chasing flake-free test suites can track patterns like process isolation on daily.dev."}}]}
```

