/ CHANGELOG

Changelog

Latest releases, completed work, and improvements shipped to Elmo.

Releases

June 12, 2026

What's Changed

  • Added new citation source categories and a Google Shopping breakdown to the citations dashboard. by @jrhizor
  • Local-mode deployments now support multiple brands. The brand switcher shows a "Create new brand" option that provisions a new org + admin membership for the user. by @jrhizor
  • Added the Google Shopping breakdown to a prompt's Citations tab on the prompt details page. by @jrhizor
  • Added a sort control to the Visibility page. by @jrhizor
  • Added a Query Fan-Out section showing the searches AI engines run for your prompts, with a prompt-to-query diff, the words engines add or drop, and the searches you're missing. by @jrhizor
  • Breaking: /api/v1 DELETE endpoints now return the deleted resource directly instead of a { message, data } wrapper (the deleted prompt includes a deletedRunsCount field), PATCH endpoints reject an empty body with a 400, an unparseable website on /tools/analyze is now a 400 instead of a 500, and 500 responses no longer echo internal error messages. by @jrhizor

June 7, 2026

What's Changed

  • Fixes bug where in some cases BrightData processing could get stuck. by @jrhizor

June 7, 2026

What's Changed

Web app

New

  • Share of Voice and Opportunities pages.

Fixes

  • "Current visibility" now shows the latest point of the carried-forward trend (the value the line ends on) instead of the whole-window average, so the headline number matches the chart beside it.
  • Fixed the sidebar showing only "Overview" after the onboarding wizard finishes in local mode (previously required a page refresh).
  • Fixed the visibility page failing to load for brands with many active prompts.

CLI (@elmohq/cli)

  • --dir is now a global option. It applies to init, compose, and edit, and shows up in elmo --help as well as each subcommand's help.
  • elmo -h now makes clear what elmo edit lets you change and which targets it accepts.
  • Generated docker-compose.yml image tags are now pinned to the CLI's version (e.g. elmohq/elmo-web:0.2.10) instead of latest, so stacks stay on the version they were initialized with until you upgrade.
  • Removed elmo status — use elmo compose ps instead.

May 12, 2026

What's Changed

  • Default the CLI config directory to ~/.elmo. by @jrhizor
  • Prompt for the web app port in elmo init (defaults to 1515). by @jrhizor
  • Recommended elmo init setup no longer adds direct-API query targets — only scraping tracks ChatGPT and Google AI Mode. by @jrhizor
  • Add elmo edit, drop elmo telemetry and the ~/.elmo/config.json file. elmo edit env|compose opens the file in $VISUAL / $EDITOR (fallback nano) — toggle DISABLE_TELEMETRY there instead of via the removed elmo telemetry subcommand. Telemetry state and the deployment ID now live entirely in .env; elmo init stamps the CLI version and timestamp into the .env and elmo.yaml headers, and re-running it preserves the existing DEPLOYMENT_ID. by @jrhizor
  • Remove elmo start, elmo stop, elmo logs, and elmo build aliases — use elmo compose <args> directly (e.g. elmo compose up -d, elmo compose down, elmo compose logs -f, elmo compose build). by @jrhizor
  • Fix the dashboard briefly showing "No Data Yet" with "none are currently enabled" right after the onboarding wizard finishes in local mode. by @jrhizor
  • Bulk-select prompts in the editor (settings and onboarding) to enable or disable many at once. by @jrhizor
  • Log start/done (with duration and result counts) for analyzeBrand, so the onboarding analyze step is visible in the web server logs. by @jrhizor

May 11, 2026

What's Changed

  • Clean up wording in elmo init. by @jrhizor
  • Accept bare domains (e.g. example.com) in the brand website field and normalize the stored value to the origin (https://example.com/products is saved as https://example.com/). by @jrhizor
  • Show the signup screen instead of login on a fresh local deployment. by @jrhizor
  • Attach a boss.on("error") handler so transient pg-boss connection blips no longer crash the worker. by @jrhizor

May 10, 2026

What's Changed

  • Publish elmohq/elmo-db-migrate images instead of always attempting to build as part of the CLI. by @jrhizor

May 10, 2026

What's Changed

  • Standardize Docker image naming between the CLI and release process on elmohq/elmo-web and elmohq/elmo-worker. by @jrhizor
  • Fix OG image generation: og:image is now an absolute URL and renders the current page's title/description. Adds og:url, og:site_name, og:locale, and og:logo to the document head. by @jrhizor

May 6, 2026

What's Changed

  • Admin /api/v1/brands endpoints (POST, GET, PATCH) now accept and return a single domains list instead of website + additionalDomains. This future-proofs against a future db model change. by @jrhizor

May 6, 2026

What's Changed

  • elmo init adds a recommended setup path — pick a scraper (BrightData or Olostep), pick a direct LLM API (OpenRouter, Anthropic, OpenAI, or Mistral), four prompts total. The custom path now requires at least one direct LLM API so onboarding analysis works out of the box. by @jrhizor
  • Add telemetry opt-out prompt during elmo init and new elmo telemetry status|enable|disable subcommand. See Telemetry for what's collected. by @jrhizor
  • Add Mistral as a direct API provider. Set MISTRAL_API_KEY and target via mistral:mistral-api:<model>[:online]. by @jrhizor
  • License Elmo under the MIT License. Add Code of Conduct, Contributing guide, Security policy, and a lightweight CLA process. by @jrhizor
  • BrightData: prefer answer_text_markdown over answer_text when extracting response text, so prompt responses render with markdown formatting in the UI. by @jrhizor

April 24, 2026

What's Changed

  • Fix local-mode registration end-to-end and lock down the auth surface. The first /auth/register submission in local mode now atomically creates the default org + admin membership, so register → brand onboarding works in one pass; any subsequent signup is rejected. Demo mode narrows writable /api/auth/** endpoints to a whitelist of just sign-in and sign-out. Drops the unused DEFAULT_ORG_ID and DEFAULT_ORG_NAME env vars. by @jrhizor
  • Redesign the Visibility and Citations filter bar (model / tags / lookback dropdowns + search), wire model filters to brand.enabledModels, and move the visibility-bar rollup into a single SQL query — cuts load time from ~10s to under 1s on large brands. Also fixes the "unbranded" tag filter and a search clear-X flicker. by @jrhizor

April 23, 2026

What's Changed

  • Make default brand cadence configurable via DEFAULT_DELAY_HOURS env var. brand.delayOverrideHours still takes precedence. The default changed from the hard-coded 72h to 24h. by @jrhizor
  • Restyle the demo login and add a preview to Storybook. by @jrhizor
  • Ensure icons/favicons are comprehensive for non-whitelabel deployments. by @jrhizor
  • Replace the page-top demo-mode banner with a compact "Demo" pill next to the sidebar logo (with a tooltip explaining the read-only behavior), and move version / elmohq.com / GitHub links into the sidebar footer for every deployment mode except whitelabel. Also reads the better-auth user.image field so avatars actually render. by @jrhizor

April 22, 2026

What's Changed

  • CLI: mask the external DATABASE_URL prompt and note that it must be an IPv4-compatible direct connection or pooler. by @jrhizor
  • Demo mode: visitors can now actually sign in — better-auth endpoints are exempt from the read-only write-block, and the login form pre-fills the seeded demo credentials. by @jrhizor
  • Demo deployments (READ_ONLY=true) now enable supportsMultiOrg, so the /app brand switcher renders when the demo user is seeded into multiple organizations. Pure local deployments continue to auto-redirect to the default org. by @jrhizor
  • Fix missing stylesheet and favicon in Docker builds caused by @tailwindcss/vite emitting different CSS hashes in the client and SSR passes. by @jrhizor
  • Worker dispatch now reads SCRAPE_TARGETS end-to-end via the provider registry. Deployments that configure non-default providers no longer hit AI_LoadAPIKeyError for providers they never set up, the worker fails fast at startup on misconfigured SCRAPE_TARGETS, and brand.enabledModels filters per brand. by @jrhizor

v0.2.1

GitHub

April 21, 2026

What's Changed

  • CLI elmo init now walks through each provider one at a time. by @jrhizor

Closed Issues

June 2026

May 2026

April 2026