# Keila

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

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.

Alternative to: Mailchimp, Kit

- Capabilities: adaptable, operable
- Vertical: content-publishing
- Shape: business-app
- Form factor: web-app
- Execution model: deterministic
- Provenance: human-written (recorded, never ranked)
- Repo: https://github.com/pentacent/keila (AGPL-3.0), 2203 stars, last commit 2026-09-02
- Last activity: 2026-09-02
- Page: apps/pentacent--keila.html
- JSON: apps/pentacent--keila.json

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

## Editions

- Self-hosted: Free, open source
  - source: https://github.com/pentacent/keila
  - container: docker compose -f ops/docker-compose.yml up -d
- Keila Cloud XS: €8 per month, closed source
  - hosted: https://www.keila.io/pricing
- Keila Cloud S to XXL: €16 per month, closed source
  - hosted: https://www.keila.io/pricing

## Adaptable: make it yours

Effort: config-only (8 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'll need: email delivery provider (SMTP inbox, AWS SES, Sendgrid, Mailgun, or Postmark)

## Operable: what an agent can drive

Operability: official. Interface: api at https://www.keila.io/docs/api (published by the builder, both).

### Reach (partial coverage)

- Create, schedule, and deliver newsletter campaigns: reachable. keila.io/docs/api: Campaigns create, update, schedule, deliver
- Manage contacts and custom data: reachable. API Contacts CRUD with custom data fields
- Segment the audience: reachable. API Segments
- Build sign-up forms: reachable. API Forms create and submissions
- Manage email templates: reachable. API Templates
- Send transactional messages: reachable. API Transactional Messages send and render
- Configure senders (SMTP, SES, Sendgrid, Mailgun, Postmark): not reachable. API Senders is read access; sender setup is in the UI
- Read campaign open and click statistics: undetermined. not listed among API resources on the docs page
- Double opt-in flows: undetermined. form setting; API exposure not stated

## Code stack

- Languages: Elixir, JavaScript
- Frameworks: Phoenix, Phoenix LiveView
- Package manager: mix
- Database: PostgreSQL
- Hosting target: Docker (pentacent/keila), docker-compose

## Evidence and confidence

- formFactor: README: web app deployed from the official Docker image (confidence 0.95)
- executionModel: no model at runtime (confidence 0.95)
- operability: keila.io/docs/api (Builder domain): Bearer API key, JSON API for campaigns, contacts, forms, segments, senders, templates, transactional messages; works on self-hosted (confidence 0.9)
- effort: ops/docker-compose.yml names SECRET_KEY_BASE, DB_URL, URL_HOST, MAILER_SMTP_* (confidence 0.9)
- editions: keila.io/pricing: XS EUR 8 to XXL EUR 256 per month; self-hosting free under AGPL (confidence 0.85)
- active: pushedAt 2026-09-02; 74 open issues
- provenance: pentacent-built since 2020; no vibe-coded claim (confidence 0.85)
- reach:  (confidence 0.8)

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

- https://github.com/pentacent/keila (sourcing:content-publishing:github)
- https://www.keila.io/docs/api (analysis:content-publishing)
- https://www.keila.io/pricing (analysis:content-publishing)
