Skip to content
CAI
Software that uses CAICheck a score

elixir-desktop/desktop-example-app

58.6

Adequate · 18 September 2026

1.8k

lines of production code

Elixir

with Kotlin, C++

1

measurement over time

CAI band scale
CAI lens gauges

What this system is

This system is a cross-platform desktop and mobile application for managing todo lists, built with Elixir and Phoenix LiveView. It provides persistent data storage via SQLite and features a modern, component-driven UI with internationalization support. The application is packaged for Linux desktop and Android devices, utilizing native bridges to embed the Elixir runtime within platform-specific containers.

Features

Added Dockerfiles and build scripts for Linux desktop and Android packaging

New build infrastructure has been added to the \scripts\ directory to support packaging the application for Linux desktop and Android platforms. This includes \Dockerfile\ variants for standard Linux, Chromium Embedded Framework (CEF) integration, and Raspbian, which configure the necessary build environment (wxWidgets, Erlang/Elixir via ASDF, CMake) and execute the Elixir release and installer tasks. Additionally, \build\_android.sh\ provides a unified entry point to compile the Android APK/AAB using Gradle, embedding the Elixir runtime, while \build\_sample.sh\ facilitates running the CEF-based webview sample locally within a Docker container.

scripts · high confidence

Added German localization for the application

The application now includes German translations for user-facing strings. This change adds a new German PO file (de/LC\_MESSAGES/default.po) containing translations for menu items (such as 'File', 'Help', 'Quit'), window titles ('My Todo List'), and action labels ('Open', 'Show Notification'). A corresponding POT template file (default.pot) has also been added to support future extraction and translation updates.

priv/gettext · high confidence

Android app wrapper for embedding the Elixir Desktop runtime

This change introduces the \rel/android/\ directory, which contains an Android Studio project that wraps the parent Elixir Desktop application to run on Android devices. The implementation includes a Kotlin \Bridge\ class and native C++ code to initialize the Erlang VM, extract the pre-built Elixir release from assets, and display the app in a WebView. It also adds the necessary Gradle build configuration, Android manifest, and build scripts to package the application into an APK.

(repo-wide) · high confidence

Behavioural changes

Migrate to Ecto for data persistence and adopt HEEx templates

The TodoApp now uses Ecto with a SQLite3 adapter to manage todo items and a separate log for completed tasks, replacing the previous data handling approach. This change introduces a persistent storage layer where todos are stored in a 'todos' table and completion events are recorded in a 'completed\_tasks\_log' table. Additionally, the UI templates have been migrated from EEx to HEEx syntax, and the menu system has been refactored into dedicated modules (Menu and MenuBar) that handle user interactions like toggling tasks, quitting, and opening browsers, while also displaying dynamic icons based on task status.

_lib/todo\app · high confidence

Migrate to Phoenix LiveView 1.x and Desktop integration

The web layer has been upgraded to support Phoenix LiveView 1.x, introducing several structural and behavioral changes. Authentication is no longer handled by the custom \TodoWeb.Auth\ module; instead, it now uses \Desktop.Auth\ (when not in code-reloading mode), and the custom session supervision tree (\TodoWeb.Sup\) has been removed in favor of standard endpoint initialization. The application now includes a new \TodoWeb.Telemetry\ module for monitoring Phoenix, database, and VM metrics. Additionally, the router and endpoint have been updated to use the new \TodoWeb.Layouts\ module for root layouts, and the endpoint now serves static assets via \TodoWeb.static\_paths()\ with gzip compression enabled based on the code-reloading state.

_lib/todo\web · high confidence

Migrated asset pipeline from Webpack to esbuild and updated UI styling

The asset build system has switched from Webpack to esbuild, removing the Webpack configuration and Babel preset while relying on esbuild for module bundling. The UI has been redesigned with improved readability and mobile support, including a new header layout, styled action buttons, and a dedicated log-view section. Additionally, the NProgress loading indicator has been removed, and the JavaScript initialization now includes explicit error handling for missing CSRF tokens to prevent silent failures.

assets · high confidence

Migrated to Phoenix 1.7+ config style and updated asset tooling

The application configuration has been migrated from the legacy \Mix.Config\ syntax to the modern \import Config\ style, affecting all environment files. The application name has been renamed from \:todo\ to \:todo\_app\, requiring updates to the endpoint, pubsub server, and Ecto repository configurations. Asset compilation has shifted from Webpack to \esbuild\ and \dart\_sass\, with specific versions and arguments defined in the main config. Additionally, the HTTP adapter for the endpoint has been updated to \Bandit.PhoenixAdapter\, and the logger level in development and production has been set to \:notice\.

config · high confidence

Migrated to Phoenix LiveView 1.0 and Desktop integration

The application has been upgraded to Phoenix LiveView 1.0, replacing the previous view-based architecture with a component-driven approach using \Phoenix.Component\ and HEEx templates. The legacy \wx\-based native UI and custom \Model.Todos\ supervisor have been removed in favor of the \Desktop\ library for window management and \Ecto\ for database persistence. This change introduces a new application boot process that initializes the SQLite database, configures the \Desktop.Window\ with a taskbar icon, and serves the LiveView interface via the Phoenix Endpoint.

lib · high confidence

Refactored error handling and added default page controller

The application's error handling has been restructured to use dedicated modules for HTML and JSON responses, replacing the previous generic \TodoWeb.Error\ controller. \ErrorHTML\ now renders plain text status messages for HTML requests, while \ErrorJSON\ returns structured JSON error details. Additionally, a new \PageController\ with a \home\ action has been introduced to serve the main todo interface, and the old error controller that returned 401 Unauthorized responses has been removed.

_lib/todo\web/controllers · high confidence

Removal of legacy Phoenix layout templates

The application has removed the traditional EEx and LiveView EEx layout templates (\app.html.eex\, \live.html.leex\, and \root.html.leex\) from the \lib/todo\_web/templates/layout\ directory. This change eliminates the previous server-rendered HTML structure, including flash message handling and static asset linking, indicating a shift away from the standard Phoenix HTML rendering pipeline, likely in favor of a different rendering strategy or a more minimal client-side approach.

_lib/todo\web/templates · high confidence

Todo list UI modernized with completed tasks log and desktop notifications

The Todo Live View has been significantly updated to improve usability and provide new features. The interface now supports viewing a log of completed tasks, accessible via a new button that switches the view between the active todo list and a grouped history of completed items. Additionally, adding a new todo item now triggers a desktop notification via the Desktop library, and the UI has been refactored to use HEEx templates with Gettext for internationalization, replacing the previous ERB-style templates and direct model calls with the new TodoApp domain layer.

_lib/todo\web/live · high confidence

Updated to Phoenix 1.7 and LiveView 0.18

The application has been upgraded to Phoenix 1.7 and LiveView 0.18, which includes a switch to the esbuild and dart\_scss asset pipelines. This change is accompanied by updates to the runtime environment, including specific tool versions (Erlang 28.4.3, Elixir 1.19.5, Nodejs 22.19.0) and adjustments to the startup scripts to handle asset deployment and platform-specific workarounds.

(repo-wide) · high confidence

Dependencies

Major dependency upgrades and Android build configuration

The project has upgraded core Elixir dependencies, including Phoenix to 1.8, Phoenix LiveView to 1.1, and Ecto to 3.13, while switching the web server from Plug/Cowboy to Bandit. It also introduces Ecto SQLite3 for database access and adds Igniter for code generation. On the mobile side, a new Android build configuration was added using Gradle 9.1.1, Kotlin 2.2.21, and Android SDK 36, with Compose UI dependencies pinned to version 1.9.0. The frontend asset tooling was reset, removing the previous Babel/Webpack setup in favor of the new Elixir-based asset pipeline (esbuild/dart\_sass).

(dependencies) · high confidence

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

How this codebase got here

Baseline

  • First survey — no prior run to compare against. CAI 59.

Lenses

  • Code Health 100
  • Architecture 96
  • Maturity 59
  • Readiness 48
  • Security 60

Changes since last survey

  • 63 commits — 57 feature/other, 6 fixes

By area

  • (root) — 41 commits
  • lib/todo_app — 6 commits
  • config/config.exs — 3 commits
  • lib/todo_web — 3 commits
  • .github/workflows — 2 commits
  • assets/css — 2 commits
  • assets/static — 1 commit
  • lib/todo_web.ex — 1 commit
  • lib/ui — 1 commit
  • lib/ui.ex — 1 commit
  • nodeploy/logo.svg — 1 commit
  • rel/android — 1 commit

Notable commits

  • fix: Fixed dependency versions
  • fix: Fixed desktop icon bug
  • fix: Fixed wrong include
  • fix: Fixed ~E warning
  • fix: MacOS fixes
  • fix: Updated desktop version, using github to fix dependency issue
  • change: Add an Application set-up section (#4)
  • change: Add done icon
  • change: Added CI
  • change: Added LICENSE.md
  • change: Added mix lint alias
  • change: Added android shot
  • change: Added explicit wx override for mobile
  • change: Added gettext translation
  • change: Added iOS port rebinding
  • change: Added log
  • change: Added screenshots
  • change: Added vector logo
  • change: Adding installer binaries to CI (#20)
  • change: Allow running in edge by changing run script. (#7)
  • …and 43 more

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

elixir-desktop/desktop-example-app was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.

About this page

  • The score is its most recent published measurement, taken on 18 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit 617959518653597e5dc27200a96c0b6567fc3f88 — the exact code this score is about.
  • Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-5d04157a340d.