eproxus/kraft
56.9
Weak · 17 September 2026
2.1k
lines of production code
Erlang
primary language
1
measurement over time
What this system is
Kraft is a web framework for Erlang/OTP that facilitates the development of HTTP and WebSocket-based applications. It provides built-in support for real-time communication, RESTful APIs, and template rendering with caching capabilities. The system includes example applications demonstrating blog, chat, and API patterns, along with tooling for static analysis and modern CSS styling.
Features
Add Kraft REST API example with client-side templating
The examples/rest directory now provides a complete REST API demonstration using the Kraft framework. It includes an Erlang application that serves a static frontend and an API endpoint returning JSON data. The frontend leverages htmx (v1.4.1) for asynchronous requests and integrates Mustache (v4.2.0) via the htmx client-side-templates extension to render the API response directly in the browser.
examples/rest · high confidence
Add Kraft WebSocket example application
The examples/ws directory now includes a complete demonstration application for Kraft's WebSocket capabilities. It provides three distinct endpoints: a raw text handler at /raw/ws, a JSON handler at /json/ws, and a JSON-RPC handler at /jsonrpc/ws, each with corresponding static HTML pages for browser-based testing. The example also configures automatic ping intervals for the JSON-RPC connection and demonstrates error handling and asynchronous responses within the JSON-RPC protocol.
examples/ws · high confidence
Add Kraft blog example application
A new example application demonstrating a blog built with Kraft has been added to the examples directory. It includes the necessary source files for the application supervision tree, ETS-based data storage for posts and pages, and controller modules for the index, post, and page routes. The example also provides a README with instructions for setting up Tailwind CSS styles and a rebar.config to manage dependencies.
examples/blog · high confidence
Add Kraft chat example with WebSocket support
A new chat example application is added to the examples/chat directory, demonstrating real-time communication using Kraft's WebSocket capabilities. The example includes an Elixir/Erlang backend (chat, chat\_room, chat\_sup modules) that manages a shared process group for broadcasting messages, and a frontend using Mustache templates and the htmx library (version 1.4.1) to handle WebSocket connections and UI updates without page reloads.
examples/chat · high confidence
Add Kraft examples index application
A new example application has been added to serve as a central index for the Kraft framework. It runs on port 8090 and provides a static HTML page listing links to other example applications (Blog, Web Socket, Chat, REST API, TODO) as well as dedicated routes to demonstrate error handling, including a 404, a 500 error with a generated stack trace, and a missing template scenario.
examples/index · high confidence
Add blog example with dark mode support
Introduces a new blog example application in the examples/blog/priv/web directory, featuring a default theme built with Tailwind CSS v4.1.4. The implementation includes static assets and Mustache templates for the home page, individual posts, and static pages, all styled to support both light and dark color schemes via CSS media queries.
examples/blog/priv/web · high confidence
Added example configuration with info-level logging
An example configuration file has been added to the project, setting the kernel logger level to 'info'. This provides users with a reference configuration that enables more detailed logging output by default.
config · high confidence
Introduces configurable template and render caching with ETS backend
The framework now supports caching for templates and rendered content to improve performance. A new \kraft\_cache\ behavior defines the interface, implemented by \kraft\_cache\_ets\ which uses Erlang ETS tables. The cache is configured via the \kraft\ application environment (e.g., \cache =\> \#{template =\> {kraft\_cache\_ets, \#{memory =\> infinity, age =\> {minute, 5}}}}\), allowing users to set memory limits, item age, and cleanup intervals. The \kraft\_dev\ module integrates with this cache during development to handle template reloading and removal, ensuring the cache stays in sync with file changes.
src · high confidence
Behavioural changes
Blog example uses Tailwind CSS v4 with on-demand build
The blog example now styles its UI using Tailwind CSS v4. The styles are defined in a single CSS file that imports the Tailwind framework and specifies the source directory, and the build process is configured to generate styles on demand via a Makefile symlink.
examples/blog/priv/styles · high confidence
Enforce code analysis and formatting on commit
A new pre-commit hook has been added to the repository that automatically runs \rebar3 analyze\ and \rebar3 fmt --check\ before allowing a commit. This ensures that all code changes meet the project's static analysis standards and formatting guidelines, preventing unanalyzed or improperly formatted code from being committed.
.githooks · high confidence
Migrate to Tailwind CSS v4 build system
The styles build process has been updated to use Tailwind CSS v4, replacing the previous v3 configuration. The explicit \tailwind.config.js\ file has been removed in favor of the new \@import "tailwindcss"\ directive in \kraft.css\, and a new Makefile has been introduced to manage the CSS compilation and watch tasks.
priv/styles · high confidence
Redesigned error pages with dark mode support and improved stack trace readability
The web application's error handling UI has been completely overhauled to provide a modern, responsive experience with full dark mode support. The previous static 404 and 500 templates have been replaced with a unified layout system that dynamically renders error details, including a new, highly readable stack trace view in the footer that formats module, function, and file paths with clickable links. The design now adapts to the user's system preferences, switching between light and dark color schemes for backgrounds, text, and borders. Additionally, the CSS asset path has been updated to reflect the new Tailwind v4.1.4 build, ensuring consistent styling across all error states.
priv/web · high confidence
Todo example now uses Tailwind CSS and htmx for the UI
The todo example has been updated to use a modern frontend stack. It now includes Tailwind CSS (v3.4.3) with the DaisyUI and Typography plugins for styling, replacing previous approaches. Additionally, htmx (v1.9.12) is bundled as a static asset to enable asynchronous, partial page updates without writing custom JavaScript. A Makefile and configuration files have been added to build the CSS from source templates.
examples/todo · high confidence
Upgrade to Erlang 27 and OTP 27 requirement
Kraft now requires Erlang/OTP 27.0 or later, making it incompatible with earlier OTP versions. This change accompanies an upgrade to Cowboy 2.17.0 and the replacement of the jsx library with the built-in OTP JSON module for JSON handling.
(repo-wide) · high confidence
Dependencies
Upgrade Tailwind CSS and update styling dependencies
The project's styling tooling has been upgraded from Tailwind CSS 2.1.2 to 3.3.1. This change replaces the previous dependency set (which included autoprefixer, postcss, and postcss-import) with a modern configuration that includes the @tailwindcss/forms and @tailwindcss/typography plugins, as well as the daisyui component library. Users will benefit from the latest Tailwind features and pre-built UI components while the underlying build process is streamlined.
(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 57.
Lenses
- Code Health 98
- Architecture 99
- Maturity 50
- Readiness 50
- Security 93
- Accessibility 52
Changes since last survey
- 178 commits — 161 feature/other, 17 fixes
By area
- (root) — 43 commits
- .github/workflows — 19 commits
- src/kraft.erl — 19 commits
- examples/blog — 17 commits
- priv/web — 12 commits
- priv/styles — 9 commits
- examples/chat — 7 commits
- examples/ws — 7 commits
- src/kraft_conn.erl — 6 commits
- src/kraft_instance.erl — 6 commits
- examples/index — 5 commits
- src/kraft.app.src — 4 commits
- src/kraft_handler.erl — 4 commits
- src/kraft_dev.erl — 3 commits
- examples/rest — 2 commits
- src/kraft_controller.erl — 2 commits
- src/kraft_file.erl — 2 commits
- src/kraft_template.erl — 2 commits
- src/kraft_ws_jsonrpc.erl — 2 commits
- examples/todo — 1 commit
Notable commits
- fix: Fix Dialyzer warnings
- fix: Fix broken routes for multiple apps (fix #1)
- fix: Fix chat example not serving static files
- fix: Fix crash when producing missing_template error
- fix: Fix dispatch overwrite
- fix: Fix missing Kraft dependency in example
- fix: Fix response headers
- fix: Fix response type specification
- fix: Fix stack trace alignment
- fix: Fix type specs for kraft_ws_jsonrpc behavior
- fix: Fix xref warnings
- fix: Implement automatic web socket ping (fix #3)
- fix: build(version): change vsn from fixed to semver
- fix: ci(renovate): Fix Renovate errors
- fix: ci(renovate): Fix regex matching
- fix: fix(kraft_rest): correctly generate 4XX responses
- fix: fix(license): Use correct license identifier
- change: Add Erlang 23 to CI
- change: Add Erlang 26 to CI test matrix
- change: Add GitHub Actions continuous integration
- …and 158 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
eproxus/kraft 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 17 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 12dcfe904527db0e258f0ba54bb9224cd277f9fd — the exact code this score is about.
- Scored under rubric-2026.09.13 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-d1ef6c0bd534.