mothermachine

Browse / Content publishing

Keila

Self-hosted newsletter tool with campaigns, forms, and segments behind an official JSON API.

AdaptableOperable Business appWeb app Deterministic ElixirJavaScript API License: AGPL-3.0

Keila is an Elixir newsletter platform, an open alternative to Mailchimp: campaigns with a WYSIWYG or Markdown editor, sign-up forms, contact segments, and sending through SMTP, SES, Sendgrid, Mailgun, or Postmark. It runs from the official Docker image with a handful of env vars. The Builder documents a JSON API covering campaigns, contacts, segments, forms, templates, and transactional messages, which also works on self-hosted instances.

Use it when
  • I send a monthly newsletter and want to stop paying per contact
  • I want my agent to add subscribers from other systems and schedule campaigns over an API on a box I control
Gotchas
  • AGPL-3.0
  • Elixir stack: fewer Adopters can make light edits than with a PHP or Node app
  • API key must be generated in account settings before the API answers
  • Sender configuration is not writable through the API

Last activity Sep 2, 2026. Fit: adaptable 2, operable 3.

Editions

Self-hosted · Free open source

  • Clonegit clone https://github.com/pentacent/keila
  • ImageContainer

closed source

closed source

For agents: JSON · Markdown

Adaptable: what is yours to change

Make it yours

Config only8 things to edit

Copy ops/docker-compose.yml, set SECRET_KEY_BASE, DB_URL, URL_HOST, and the MAILER_SMTP_* vars for system mail, and start it. Campaign senders are added in the UI. Anything deeper (templates beyond the built-in editor, auth providers) is Elixir in config/runtime.exs and lib/.

Env vars
SECRET_KEY_BASE DB_URL URL_HOST MAILER_SMTP_HOST MAILER_SMTP_USER MAILER_SMTP_PASSWORD
Config files
ops/docker-compose.yml config/runtime.exs
Prompt files
none
Accounts you need
email delivery provider (SMTP inbox, AWS SES, Sendgrid, Mailgun, or Postmark)

Source

Operable: what an agent can drive

Interface

OfficialAPIpublished by the builderremote or local

How an agent can drive an Operable Listing, in five levels: native (built for the agent as the primary interface), official (the Builder ships an agent interface), wrapped (a third party wraps the software's API), config (an agent can only drive it by editing files), gui (screen control only). An interface is official only when it is published by the same organization that ships the software. GUI-level Listings are allowed and sorted last.

Docs
www.keila.io/docs/api

Reach

Partial coverage. 6 of 9 jobs reachable through the stated interface.

JobThrough the interfaceEvidence
Create, schedule, and deliver newsletter campaignsReachablekeila.io/docs/api: Campaigns create, update, schedule, deliver
Manage contacts and custom dataReachableAPI Contacts CRUD with custom data fields
Segment the audienceReachableAPI Segments
Build sign-up formsReachableAPI Forms create and submissions
Manage email templatesReachableAPI Templates
Send transactional messagesReachableAPI Transactional Messages send and render
Configure senders (SMTP, SES, Sendgrid, Mailgun, Postmark)Not reachableAPI Senders is read access; sender setup is in the UI
Read campaign open and click statisticsUndeterminednot listed among API resources on the docs page
Double opt-in flowsUndeterminedform setting; API exposure not stated

Code stack

Languages
ElixirJavaScript
Frameworks
PhoenixPhoenix LiveView
Package manager
mix
Database
PostgreSQL
Hosting target
Docker (pentacent/keila)docker-compose
Built
Human-written (recorded, never ranked)

Evidence and confidence

FieldWhere it was seenConfidence
formFactorREADME: web app deployed from the official Docker image95%
executionModelno model at runtime95%
operabilitykeila.io/docs/api (Builder domain): Bearer API key, JSON API for campaigns, contacts, forms, segments, senders, templates, transactional messages; works on self-hosted90%
effortops/docker-compose.yml names SECRET_KEY_BASE, DB_URL, URL_HOST, MAILER_SMTP_*90%
editionskeila.io/pricing: XS EUR 8 to XXL EUR 256 per month; self-hosting free under AGPL85%
activepushedAt 2026-09-02; 74 open issues–
provenancepentacent-built since 2020; no vibe-coded claim85%
reach80%

Open questions

  • Does the API expose campaign statistics?
  • Full list of supported env vars from keila.io/docs/installation (only the compose sample was read)

Sources