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
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.