Open source × Phoenix LiveView × Real-Time

Ship Faster. Grow
Without Limits.

Open-source foundations and premium tools for teams who build in real time. We empower small businesses to launch fast and back enterprise teams with battle-tested products and the engineering hands to scale them.

━ Our Stack
Phoenix LiveView
Elixir
Rust
TailwindCSS
Javascript
Typescript
React.js
Next.js
React Native
Product 01 · Content

Mishka CMS:
Craft Your Content Universe

A LiveView-native CMS with drag-drop authoring, a pluggable AI assistant, and a real-time publishing pipeline. Editors get a canvas; developers get an Elixir-shaped API.

elixir 1.18+ postgres · ecto json:api · openapi 2FA · captcha
● live ·
chelekom · component explorer 300+ ready
━ LIVE PREVIEW ·
rendering
━ Run this command
$ mix mishka.ui.gen.component
or generate everything at once → mix mishka.ui.gen.components --import --global
Product 02 · Components

Chelekom UI:
A CLI-Driven Component System

Fully CLI based. No npm, no runtime, no config. Generate one component or all of them with a single mix task. Chelekom writes them straight into your Phoenix or native Android & iOS app, then disappears at production.

~/my_app · zsh v0.0.0
━ GENERATE ONE COMPONENT
$ mix mishka.ui.gen.component combobox
$ mix mishka.ui.gen.component button --variant outline -c info
━ OR INSTALL ALL 74 STYLED AT ONCE
$ mix mishka.ui.gen.components --import --helpers --global --yes
✓ writing 74 styled components → lib/my_app_web/components/
✓ replacing Phoenix core_components: done in 1.4s▍
mix tasks 300+ components zero runtime deps CSS-var theming dev-only dep
01 · one-liner install
1×
mix mishka.ui.gen.components: all 74 styled in seconds.
02 · pick & choose
300+
Generate just combobox, button, modal or any of the 300+ components.
03 · customize on gen
∞
Pass --variant, --color, --size at generation time.
04 · dev-only dep
0kb
Library disappears in prod. Components live in your repo.
Product 03 · DSL Toolkit

Mishka Gervaz:
DSL all the way down.

A declarative UI library for the Ash ecosystem. Define tables, forms, and data-driven interfaces entirely through DSL: sorting, filtering, real-time, archives, events. Every adapter is overridable. AI-ready by design: it ships usage rules for coding agents.

ash native declarative real-time ai-ready
16 LOC
in the table sample
0 JS
writing required
100%
ash compatible
~/app/lib/my_app/blog
● compiled
:: gervaz/dsl.ex compile-time
Schema-first DSL
Tables, forms, filters, events: every surface declared in Elixir. Compile-time validated against your Ash resource.
column :title, sortable: true▍
↻ gervaz/realtime.ex pubsub
Real-time & URL sync
Wire pubsub and rows update live. Filters, sort and page round-trip through the URL, so shared links work.
pubsub MyApp.PubSub▍
Σ gervaz/adapter.ex extensible
Adapters & overrides
Every component is overridable: rendering, theming, behavior. Drop in your own templates without forking.
ui_adapter MyApp.UIAdapter▍
AI gervaz/ai.ex usage-rules
AI-ready rules
Ships usage-rules.md plus a rules file per DSL section, so a coding agent follows the real options.
usage-rules/table.md▍
Product 04 · Events & Hook
Mishka Installer:
Plug into anything.
Plugin-oriented architecture for Elixir, without forking your core. Turn any point in your app into a named event. Plugins (in-tree or external) hook in, run as a pipeline, and never touch the source.
otp · supervised mnesia registry priority + halt in-tree or hex
src ━━ what you write
lib/plugins/audit_login.ex define
defmodule AuditLogin do
  use MishkaInstaller.Event.Hook,
    event: "after_success_login",
    initial: %{priority: 10}
  @impl true
  def call(state) do
    Audit.log(state.user_id)
    {:reply, state}
  end
end
lib/auth.ex dispatch
# anywhere in your app
Hook.call("after_success_login", state)▍
↳ drop the plugin into your supervision tree and it self-registers
━ behaviour · 6 capabilities
01 λ Macro Behaviour use ...Event.Hook
02 → Pipeline execution Hook.call(event, state)
03 # Priority + dependency priority · depends
04 ⊘ Halt control {:reply, :halt, state}
05 ⚙ Per-plugin GenServer self-registering
06 ≡ Compiled dispatch compiled module
runtime ━━ what happens at runtime tick 00
pipeline state threaded · :halt short-circuits
:halt event after_success_login Hook.call/3 dispatch Plugin A priority: 10 Plugin B priority: 20 Plugin C priority: 30 state final
connection.log tail -f
142ms ▸ evt event :after_success_login fired
scope ▸ / 06
↳ in use for
CMS extensions Auth pipelines Domain events
Other Open-source libraries

Building blocks we share with you.

⛨
Library · validation
Guarded Struct
Tour fortress →

A macro that turns one declaration into a full sanitization + validation pipeline with rich cross-field rules and a first-class Ash extension.

⚜
Macro-driven
Auto-generates sanitization, validation, and struct definitions from a single declaration.
⛨
Nested & conditional
Nested sub-structs, conditional fields and pattern-keyed maps, all from one block.
⚔
Ash 3.x integration
Atomic mode, Ash.Expr detection, an auto-wired change and bulk batch_change support.
✦
Cross-field rules
auto / from / on / domain: rules that see further than one field.
live ledger · validations
✓ %Account{}.:role↳ validate(enum=Atom[admin::user])
✕ %Post{}.:slug↳ action: :slug
✓ %Order{}.:qty↳ validate(integer, min_len=1)
✓ %User{}.:email↳ sanitize(trim, downcase) validate(email_r)
✺
Need a custom system, or have an idea?
We build bespoke software and real-time systems, and tailor our open-source pieces to any stack. Tell us what's missing.
The humans behind the hex

A small crew building loud.

We ship Elixir-first products and take on engineering work for partners who need real-time done right.

◆ say hi · partner · hire ◆
hello@mishka.tools ↗
Registered in NL · KvK 95426736 · Amsterdam