Repository navigation
v0.20.1
MillionSend v0.20.1 stops the API's memory from growing with each MCP request and turns Postgres JIT off in the compose files. In the console, changing a team's warm-up trust now asks to confirm first. No database migrations. (#175, #174)
API and MCP
- The API's memory no longer grows with each MCP request. Every MCP request rebuilt some tool inputs from the REST API's OpenAPI schemas, and the OpenAPI library (zod-to-openapi) keeps each schema built that way for the life of the process, so an API that served MCP grew until it restarted. Those inputs are now built once and reused. The tools and their inputs are unchanged. (#175)
Postgres
- JIT is off in both compose files.
deploy/docker-compose.ymlanddocker-compose.ymlnow start Postgres with-c jit=off. On MillionSend's short queries, JIT compiling costs more CPU than it saves, and each connection that compiles once keeps LLVM loaded for as long as it lives. The Helm chart's README listsjit = offwith the other Postgres settings. (#175)
Console
- Changing a team's warm-up trust asks to confirm first. On a team's Trust & safety page, the Domain warm-up card's Trust, Remove trust, Trust team and Remove team trust each open a dialog instead of acting on one click. Trust says how many emails the daily limit is holding, that they start going out right away, and that new mail sends at full volume from then on. Remove trust says new mail goes back under the daily limit for new domains, or that the team's own trust still covers the domain; Remove team trust says how many domains stay trusted on their own. A change that fails now shows an error and keeps the dialog open; it used to fail silently. (#174)
Upgrading a self-hosted instance
- No database migrations and no new environment variables.
docker compose pullanddocker compose up -dbring the memory fix. On Kubernetes, upgrade with--version 0.20.1. - Turn Postgres JIT off.
docker compose pullupdates the images, not the compose file. Pick one:- Download the standalone compose file again:
curl -O https://raw.githubusercontent.com/MillionSend/millionsend/main/deploy/docker-compose.yml. If you edited your copy, add"-c", "jit=off"to the end of thepostgresservice'scommandinstead. The nextdocker compose up -drecreates the postgres container, which restarts the database briefly. - Or, with no restart:
docker compose exec postgres psql -U millionsend -c "ALTER SYSTEM SET jit = off" -c "SELECT pg_reload_conf()". Connections that already compiled something keep that memory until they close, so restarting MillionSend's containers frees it sooner. - From a clone,
git pullbrings the same change to the rootdocker-compose.yml. With the Helm chart or any Postgres you run yourself, setjit = offin its configuration.
- Download the standalone compose file again:
- Rolling back to v0.20.0 needs no extra step. JIT off works with any version.
- Rolling back further, to v0.19.0: remove
?sslmode=requirefromDATABASE_URLfirst if you added it for v0.20.0. v0.19.0's queue verifies the server certificate underrequireand does not start against a certificate it cannot verify.