523bcad60260f82c37955ba1a904d055105d9cec
Custom CSV columns with values like "true"/"false" were stored as strings, which made `ContactService.getAvailableFields()` report them as string fields and lost the boolean toggle in the dashboard's segment-filter UI. Only the reserved `subscribed` column was coerced. Mirror the truthy keyword set already used for `subscribed` (`true`/`1`/`yes`) and add its symmetric falsy counterpart (`false`/`0`/`no`) for custom columns. Values outside that keyword set are returned unchanged so names, IDs, or arbitrary strings are not corrupted into `false`. Coercion runs over `Object.entries(customData)` right before the `upsert()` call; no other code path needs to change because `ContactService.upsert()` already accepts `Record<string, unknown>` and `mergeContactData()` accepts mixed JSON primitives. Post-import inference via `jsonb_typeof()` then classifies the stored JSON boolean as type `boolean` automatically. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Plunk
The Open-Source Email Platform
Introduction
Transactional emails, marketing campaigns, and workflow automation — in one platform. Self-hostable, $0.001 per email, no contact limits.
An open-source, self-hosted alternative to tools SendGrid, Resend or Mailgun.
Features
- Transactional Emails: Send emails straight from your API with template support and variable substitution
- SMTP: Use Plunk as an SMTP relay to send emails from any existing tool or framework
- Campaigns: Send newsletters and product updates to large audiences
- Workflows: Create advanced automations with triggers, delays, and conditional logic
- Segments: Organize contacts with dynamic filtering and target the right audience
- Contact Management: Manage contacts with custom fields and full activity history
- Analytics: Track opens, clicks, bounces, and engagement metrics in real-time
- Custom Domains: Verify and send from your own domains with DKIM/SPF support
- Inbound Emails: Receive and process incoming emails with custom routing rules
Sponsors
Plunk is made possible by the support of our sponsors. If you self-host Plunk, consider supporting via GitHub Sponsors.
Self-hosting Plunk
The easiest way to self-host Plunk is by using the plunk Docker image.
You can pull the latest image from Github.
A complete guide on how to deploy Plunk can be found in the documentation.
Community
- Documentation: docs.useplunk.com
- Discord: useplunk.com/discord
Contributing
You are welcome to contribute to Plunk. You can find a guide on how to contribute in CONTRIBUTING.md.
License
AGPL-3.0 License - see LICENSE for details.
Languages
TypeScript
94.1%
MDX
4.7%
Shell
0.4%
Dockerfile
0.4%
CSS
0.2%
Other
0.2%