šŸ¤– Backend Knows Your Frontend Types

Ash TypeScript generates complete clients from resources you already defined—no manual sync

Welcome to GigaElixir Gazette, your 5-minute digest of Elixir ecosystem news that actually matters šŸ‘‹.

. WEEKLY PICKS .

šŸŽØ Mishka Chelekom Hits 16K Downloads With Tailwind 4 Migration: Three months of full-time development. 21,000 lines of code changes. 90+ components migrated to Tailwind 4 and Phoenix 1.8. The breakthrough nobody's talking about? Single config file approach eliminates the per-component customization hell that fragments configuration across dozens of files in other libraries. Regenerate everything after framework upgrades by editing one file, not hunting through scattered configs wondering which version of which component needs which Tailwind class.

🚢 Global Shipping Giant Deployed Elixir Past Enterprise Gatekeepers: Maersk chose Elixir for their Energy Transition platform—net-zero emissions by 2040 isn't a side project. Erik Mejer Hansen's team moved at startup pace inside a massive enterprise, and his talk exposes exactly how they answered the objections that typically kill new technology. Hiring concerns? Security? Tooling gaps? When a company managing global supply chains bets on BEAM for mission-critical sustainability infrastructure, the "niche language" excuse dies.

🐳 Docker Layer Optimization Tutorial Exposes Build Time Waste: Most developers copy all files at once because it's simpler, then wonder why rebuilds take forever after trivial code changes. Piotr Szmielew's walkthrough proves why order matters: copy mix.exs and mix.lock separately before application code so dependency changes don't invalidate asset compilation layers. Layer-aware file copying reuses cached compilation for unchanged dependencies.

šŸ”® How Ash's Declarative DSL Actually Works Under The Hood: Understanding quote/unquote mechanics separates developers who copy DSL examples from those who build their own domain-specific languages. Kamaro Lambert's metaprogramming tutorial shows why Ash resources feel like configuration files that generate working code—they transform code into Abstract Syntax Trees during compilation, injecting imports, aliases, and functions with single declarations.

šŸ“¦ Open-Source Component Library Requests Community Support: Mishka Chelekom needs financial backing after months of unpaid development targeting 200 production-ready components. Sustainable open-source requires converting "this saved me weeks" gratitude into recurring support—GitHub sponsorships starting at coffee-per-month pricing enable maintainers to continue improving shared infrastructure rather than abandoning projects for paid work.

All of a Sudden, You're Designing an API and Building Out a Client Library

Once you go down the JavaScript frontend path, data access becomes complicated. Maybe you're displaying a map or you want to use a specific UI library, but the moment you commit to React or Vue, the translation hell begins: design REST endpoints, document them, write TypeScript interfaces, build client functions, maintain synchronization as backends evolve. Teams typically spend 2-3 weeks on initial API design and client library setup—work that one codegen command eliminates entirely.

Ash TypeScript demolishes the ritual. Define your domain models once in Elixir, mark actions as publicly accessible, run mix ash.codegen—complete TypeScript clients generate automatically with type-safe functions, filter types, and Zod validation schemas. A developer built a stock explorer using SEC data with infinite scrolling pagination and React integration. Zero REST endpoints designed, zero GraphQL resolvers written, zero client library maintenance. The entire data access layer generated from backend resource definitions that already existed for the Phoenix app.

The security model flips typical frameworks on their heads. Ash makes everything private by default—attributes and relationships require explicit public? true declarations before codegen exposes them to frontend clients. Most frameworks expose everything unless explicitly hidden, creating accidental data leaks when developers forget to lock down sensitive fields. When backend schemas change, rerun codegen and TypeScript compilation catches breaking changes immediately, not during runtime when users discover missing fields.

The breakthrough insight: API design and client library development only exist because frameworks traditionally separate backend models from frontend interfaces. When the framework understands both sides and generates the translation layer automatically, entire categories of work disappear.

Remember, for eliminating API design waste:

  1. Define domain models once – Ash resources serve both backend logic and frontend client generation

  2. Default-private prevents exposure – Explicit declarations stop accidental API leaks before they reach production

  3. Codegen catches breaking changes – Type generation identifies mismatches at compile time, not in user sessions

  4. Verify edge cases thoroughly – Young library means testing your specific scenarios before betting production on it

. TIRED OF DEVOPS HEADACHES? .

Deploy your next Elixir app hassle-free with Gigalixir and focus more on coding, less on ops.

We're specifically designed to support all the features that make Elixir special, so you can keep building amazing things without becoming a DevOps expert.

See you next week,

Michael

P.S. Forward this to a friend who loves Elixir as much as you do šŸ’œ