Полноценный таск-менеджер на Gleam: один язык для всех платформ

Полноценный таск-менеджер на Gleam: один язык для всех платформ

Май 01, 2026 gleam full-stack development type safety web architecture backend development frontend development cross-platform apps erlang lustre tauri

Создаём Task Manager на Gleam: один язык для всех платформ

Мечта о коде, который пишется один раз и запускается везде, преследует разработчиков годами. Мы пробовали Java applets, Electron, React Native и Flutter. А что, если дело не в фреймворках? Что, если ключ — правильный язык с самого начала?

Знакомьтесь с Gleam. Это статически типизированный язык, который компилируется в Erlang для бэкенда и JavaScript для фронтенда. Полная унификация стека. Сегодня разберём на примере простого task manager'а — приложения Doable. Оно покажет, как это работает на деле.

Идея: один код для всех устройств

Суть в том, что Gleam берёт один и тот же исходный код и строит из него разные runtime'ы. Никаких компромиссов с "почти кросс-платформой".

Doable — базовый CRUD: создавать, читать, обновлять, удалять задачи. Звучит просто? Зато за этим стоит полный стек:

  • JSON HTTP API на Erlang с PostgreSQL
  • Веб-фронтенд в браузере с реактивным состоянием
  • Десктоп для Windows, macOS, Linux через Tauri
  • Мобильные apps для iOS и Android, тоже на Tauri

Всё на одном языке. Одни типы. Одна логика валидации.

Архитектура: разработка и продакшн

Как работают разработчики

Нужны быстрые циклы: меняешь код — сразу видишь результат. Без перестроек и ожиданий.

Сetup для dev'а решает это:

  • PostgreSQL в Docker, отдельные БД для dev и тестов
  • Gleam API-сервер запускается локально или в Docker
  • Lustre dev-сервер с hot reload для веба, десктопа и мобилок
  • Прокси API убирает CORS-проблемы — всё через один вход
  • Интеграционные тесты бьют прямо по роутеру на тестовой БД

Такие фичи ускоряют работу. 30 секунд на чейндж — это тормоз, а не разработка.

Как бегает в продакшене

В проде всё проще: Docker-контейнеры. Caddy — единая точка входа. Проксирует на Gleam API и статический фронт.

Красиво вот что: браузер тянет фронт через file server Caddy, API — через прокси. Tauri-apps бандлят фронт локально, но дергают API через HTTP-плагин Tauri. Один код, оптимизация под платформу.

Разбор стека

Бэкенд: надёжность Erlang

API компилируется в Erlang с Wisp и Mist. Получаешь не просто фреймворк, а проверенную concurrency, fault tolerance и распределённость. Erlang — это telecom-наследие десятилетий.

PostgreSQL — классика для хранения данных. Надёжно, как часы.

Общий код: главный профит

Gleam позволяет создать shared-проект — библиотеку, которая компилится и в Erlang, и в JavaScript. Типы, валидация, сериализация — всё общее. Меняешь структуру задачи — изменения летят везде автоматически.

Никаких несоответствий типов. Никаких "у меня работает" сюрпризов. Компилятор ловит ошибки на этапе сборки.

Фронтенд: паттерны Elm

Веб на Lustre с Elm Architecture. Управление состоянием предсказуемое, тесты лёгкие. Если делал Elm — поймёшь сразу. Нет? Изучи: это стандарт для UI.

Десктоп и мобилки используют те же паттерны, просто на разных таргетах.

Почему это важно для твоего проекта

Типобезопасность на всём стеке спасает в сложных приложениях. Что меняется:

Рефакторинг без страха. Переименовал поле в схеме — обновил в shared-типах. Компилятор покажет все 47 мест.

Консистентность бесплатно. Не дублируешь валидацию на TypeScript, Swift или Kotlin. Пишешь в Gleam — компилируешь куда надо.

Онбординг быстрее. Новички учат один язык и типы, а не три экосистемы.

Операционка проще. Меньше зависимостей, стратегий деплоя и runtime-косяков.

Реальность на практике

Gleam — будущее всего веба? Нет. Экосистема меньше TypeScript или Python. Библиотек и спецов пока не густо.

Но для новых full-stack проектов с упором на типы — идеал. Убирает кучу багов на корню.

Doable простой нарочно. Доказывает: архитектура работает. В реальных apps добавишь фич, но философия та же: пиши раз, проверяй везде, деплои многими путями.

Как начать

Кривая обучения есть, но не крутая. Синтаксис — микс JavaScript, Python, Rust. Типы мощные, но не требуют гениальности с первого дня.

Стартуй с Erlang-бэкенда. Собери API. Добавь Lustre на фронт — и shared-типы сотрут классы багов. Попробуешь unified stack — старые подходы покажутся архаикой.

Может, будущее full-stack — не в инструментах по слоям, а в языке, который покрывает все слои.


Готов нырнуть в Gleam? Читай доки и подумай, как типобезопасный кросс-платформенный код поможет твоему следующему проекту.

Read in other languages:

BG EL CS UZ TR SV FI RO PT PL NB NL HU IT FR ES DE DA ZH-HANS EN