How to Add Emails to Your Replit App (The Easy Way)
Add welcome emails, notifications, and email blasts to your Replit app. No code changes, no API keys. Just connect your database and describe what you want.
Your Replit app is live and users are signing up. Now they need a welcome email, a password reset, maybe an order confirmation.Here’s the good part. When you deploy a Replit app, its production database runs on Neon with a real Postgres connection string, so Dreamlit can connect to it directly. No migration, no code changes, no API keys. This guide walks you through it, whether you use Replit’s production database or an external provider like Supabase. Once connected, Dreamlit securely reacts to database changes and handles notifications end-to-end:
Member joins → welcome email
Form submitted → confirmation sent
Milestone reached → celebration email
Describe the email you want, and the AI builds the workflow.
When you deploy a Replit app, Replit gives it a production database hosted on Neon with a standard Postgres connection string. That’s the database Dreamlit connects to. It holds your live users and events, which is exactly what your emails should react to.To connect, grab your production connection string (see the steps below). No migration and no rebuild required.
Replit’s development database, the one you use while building in the workspace, runs on Replit’s own infrastructure and isn’t reachable from outside your app. That’s fine. Dreamlit connects to your production database, where your live data lives. If you haven’t deployed your app yet, publish it first to create the production database, or connect an external database like Supabase.
Not sure which is which? Check your DATABASE_URL. A value containing helium/heliumdb is your internal development database. Your production connection string points to neon.tech and is the one to give Dreamlit.
If you’ve explicitly prompted Replit to connect your app to Supabase, Neon, Railway, or another external PostgreSQL database, connect that one. Skip ahead to Connect Dreamlit to your database.
In your Replit project, open the Database tool and select your production database. Copy its connection string (it points to neon.tech). If you haven’t deployed your app yet, publish it first to create the production database. See Replit’s production databases docs for details.
3
Connect in Dreamlit
Click Connect Postgres and paste your connection string. Follow the guided setup to grant Dreamlit the minimal permissions it needs.
Keep your connection string private. It grants full database access. Never share it publicly or commit it to version control.
Here’s the key insight: Dreamlit securely connects to your database and reacts to changes, not your code. When a new row appears in your users table, Dreamlit sends the email automatically.If your Replit app already creates user records on signup, you’re done. No code changes needed.If you need to add a table for Dreamlit to use as a trigger, prompt your AI assistant:
“When a user signs up, add a row to the user_signups table with their email and name”
Or for something like order confirmations:
“When a user completes checkout, insert a row into the orders table with the order details”
Dreamlit triggers emails based on database changes. When building in Replit, focus on getting data into your database. Dreamlit handles the rest.Good prompts:
You want…
Prompt with…
Welcome emails
”Store new signups in a user_signups table”
Order confirmations
”Insert order details into orders when checkout completes”
Comment notifications
”Save comments to a comments table with the post_id and author”
Activity alerts
”Log user actions to an activity table”
You don’t need to prompt about emails at all. Just make sure the data lands in your database, and Dreamlit takes it from there.
Any workflow that triggers on a database change. Check out our use cases for example prompts across welcome emails, order confirmations, reminders, internal alerts, and more.
By default, emails send from Dreamlit’s domain. To send from your own domain (like hello@yourapp.com), set up a custom email domain in minutes.
1
Add your domain
Go to Settings → Email Domains and click Add domain. Enter your domain (we recommend a subdomain like mail.yourapp.com).
2
Verify automatically
Dreamlit can automatically configure your DNS records for you. Just click Verify with your DNS provider, sign in to your provider, and authorize the changes.
Automatic DNS setup, no manual records needed
If your DNS provider isn’t supported for automatic setup, you can add the records manually. Dreamlit shows you exactly what to add.
3
Start sending
Once verified, select your domain when creating email workflows. Your emails will now come from your own brand.
Your production database. When you deploy a Replit app, its production database runs on Neon with a standard Postgres connection string, so Dreamlit connects to it directly. That database holds your live users and events, which is what your emails should react to. No migration needed.
My DATABASE_URL contains helium/heliumdb. What do I do?
That’s your Replit development database, which runs on Replit’s own infrastructure and isn’t reachable from outside your app. Connect your production database instead. Open the Database tool, select the production database, and copy its connection string (it points to neon.tech). If you haven’t deployed yet, publish your app first to create it.
No. If your app is deployed, its Neon-backed production database connects to Dreamlit as-is. Migrating to Supabase or another provider is optional, and worth it only if you want that provider’s other features.
Usually no. If you’re already using Replit’s production database or Supabase, Dreamlit reacts to your existing database changes, so if your app already writes the data you need, you’re all set. You’d only update your database calls if you decide to add a new external database like Supabase.
Yes. Dreamlit supports Slack alongside email. Just describe what you want: “Notify our team on Slack when a new order comes in.” Learn more about Slack →
Use the preview feature to send test emails to yourself with real data from your database. Your workflow won’t email actual users until you publish it.
What if I’m already using Resend, SendGrid, or another email provider?
Dreamlit works alongside traditional email providers. Since Dreamlit takes a fundamentally different approach (database-driven, AI-generated workflows), you don’t need to migrate off your existing setup. Try Dreamlit for your next workflow and keep using your current provider for everything else.
You don’t need this to use Dreamlit; your deployed app’s production database already works. But if you’d rather run on Supabase, for its auth and dashboard, here’s how to add it:
1
Create a Supabase project
Go to supabase.com and create a free project. Note your project URL and API keys.
2
Add environment variables to Replit
In your Replit project, go to Secrets (the lock icon) and add:
SUPABASE_URL: Your Supabase project URL
SUPABASE_ANON_KEY: Your Supabase anon/public key
DATABASE_URL: Your Supabase connection string (found in Project Settings → Database)
3
Update your app to use Supabase
Replace your database calls with Supabase. If you’re using AI to build your app, prompt it:
“Replace the Replit database with Supabase. Use the SUPABASE_URL and SUPABASE_ANON_KEY environment variables.”
Or if you prefer direct Postgres:
“Connect to Postgres using the DATABASE_URL environment variable instead of the Replit database.”
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Dreamlit AI","colors":{"primary":"#211F26","light":"#FFFFFF","dark":"#211F26"},"logo":{"light":"https://mintcdn.com/notikaai/5oYlSr6CYnDtP1nH/logo/logo.svg?fit=max\u0026auto=format\u0026n=5oYlSr6CYnDtP1nH\u0026q=85\u0026s=6a42bf3e0ba53bffd9f71388b245160d","dark":"https://mintcdn.com/notikaai/5oYlSr6CYnDtP1nH/logo/logowhite.svg?fit=max\u0026auto=format\u0026n=5oYlSr6CYnDtP1nH\u0026q=85\u0026s=4ad6a9428edeca551e0861c8feeb4d5c"},"favicon":"https://mintcdn.com/notikaai/5oYlSr6CYnDtP1nH/favicon.svg?fit=max\u0026auto=format\u0026n=5oYlSr6CYnDtP1nH\u0026q=85\u0026s=900c3dce9e6121983352a882067426f0","navbar":{"links":[{"href":"mailto:support@dreamlit.ai","label":"Support"}],"primary":{"type":"button","label":"Dashboard","href":"https://app.dreamlit.ai"}},"footer":{"socials":{"linkedin":"https://www.linkedin.com/company/dreamlit-ai"}},"seo":{"indexing":"all"},"integrations":{"ga4":{"measurementId":"G-HEMM1933Q9"},"posthog":{"apiKey":"phc_1AsHWVve9XKNlHmx3SMiEwnIy0fxwNbRYnR8lEHoEaz"}},"contextual":{"options":["copy","view","chatgpt","claude","perplexity",{"title":"llms.txt","description":"Short LLM-readable index for Dreamlit docs and product pages.","href":"/llms.txt"},{"title":"llms-full.txt","description":"Full LLM-readable canonical URL inventory.","href":"/llms-full.txt"}],"display":"header"},"styling":{"latex":true},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"notikaai","hasAudioNarration":false,"actualSubdomain":"notikaai","customDomains":["dreamlit.ai"],"gitSource":{"type":"github","owner":"dreamlit-ai","repo":"webapp","deployBranch":"prod","contentDirectory":"apps/docs","isPrivate":true,"mountPath":"","label":""},"feedback":{"thumbs":true,"issues":true,"edits":true},"entitlements":{},"buildId":"6af21f1772ceb183dca289bf","clientVersion":"0.0.4102","searchFilterCounts":[{"language":"default","tag":"Dreamlit Engine (Legacy)","count":59},{"language":"default","tag":"MCP","count":15},{"language":"default","tag":"Quick Start","count":14},{"language":"default","tag":"Learning Center","count":11},{"language":"default","tag":"Configuration","count":8},{"language":"default","tag":"Dreamlit","count":8},{"language":"default","tag":"Resources","count":8},{"language":"default","tag":"Guides","count":7},{"language":"default","tag":"Step types","count":7},{"language":"default","tag":"Get Started","count":5}]},"assistantConfig":{},"basePath":"/docs","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-rbac-roles","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"guides/replit-email","slug":"/guides/replit-email","pageMetadata":{"title":"How to Add Emails to Your Replit App (The Easy Way)","sidebarTitle":"Replit Apps","description":"Add welcome emails, notifications, and email blasts to your Replit app. No code changes, no API keys. Just connect your database and describe what you want.","icon":"laptop-code","href":"/guides/replit-email"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Add welcome emails, notifications, and email blasts to your Replit app. No code changes, no API keys. Just connect your database and describe what you want.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,blockquote:`blockquote`,code:`code`,hr:`hr`,li:`li`,ol:`ol`,p:`p`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{Card,CardGroup,Frame,Heading,Note,OptimizedImage,Step,Steps,Tab,Table,Tabs,Tip,Warning}=_components;if(!Card)_missingMdxReference(`Card`,true);if(!CardGroup)_missingMdxReference(`CardGroup`,true);if(!Frame)_missingMdxReference(`Frame`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Note)_missingMdxReference(`Note`,true);if(!OptimizedImage)_missingMdxReference(`OptimizedImage`,true);if(!Step)_missingMdxReference(`Step`,true);if(!Steps)_missingMdxReference(`Steps`,true);if(!Tab)_missingMdxReference(`Tab`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Tabs)_missingMdxReference(`Tabs`,true);if(!Tip)_missingMdxReference(`Tip`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(Heading,{level:`2`,id:`how-do-i-add-email-to-my-replit-app`,children:`How do I add email to my Replit app?`}),`\n`,_jsxs(_components.p,{children:[`Your `,_jsx(_components.a,{href:`https://replit.com`,children:`Replit`}),` app is live and users are signing up. Now they need a welcome email, a password reset, maybe an order confirmation.`]}),`\n`,_jsx(_components.p,{children:`Here’s the good part. When you deploy a Replit app, its production database runs on Neon with a real Postgres connection string, so Dreamlit can connect to it directly. No migration, no code changes, no API keys. This guide walks you through it, whether you use Replit’s production database or an external provider like Supabase. Once connected, Dreamlit securely reacts to database changes and handles notifications end-to-end:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Member joins → welcome email`}),`\n`,_jsx(_components.li,{children:`Form submitted → confirmation sent`}),`\n`,_jsx(_components.li,{children:`Milestone reached → celebration email`}),`\n`]}),`\n`,_jsx(_components.p,{children:`Describe the email you want, and the AI builds the workflow.`}),`\n`,_jsx(`p`,{align:`center`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/notikaai/gtrrDIJuwtzRoBsV/images/replit-dreamlit.png?fit=max\u0026auto=format\u0026n=gtrrDIJuwtzRoBsV\u0026q=85\u0026s=6fa5ff03f121ca76988fe7b9677e6942`,alt:`Replit + Dreamlit`,style:{borderRadius:`12px`,maxHeight:`300px`},\"data-og-width\":`762`,width:`762`,\"data-og-height\":`501`,height:`501`,\"data-path\":`images/replit-dreamlit.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/notikaai/gtrrDIJuwtzRoBsV/images/replit-dreamlit.png?w=280\u0026fit=max\u0026auto=format\u0026n=gtrrDIJuwtzRoBsV\u0026q=85\u0026s=7cd3eb58a73e02a044ada821000759c1 280w, https://mintcdn.com/notikaai/gtrrDIJuwtzRoBsV/images/replit-dreamlit.png?w=560\u0026fit=max\u0026auto=format\u0026n=gtrrDIJuwtzRoBsV\u0026q=85\u0026s=22ad75494bc119f91613bef24527f746 560w, https://mintcdn.com/notikaai/gtrrDIJuwtzRoBsV/images/replit-dreamlit.png?w=840\u0026fit=max\u0026auto=format\u0026n=gtrrDIJuwtzRoBsV\u0026q=85\u0026s=9086f801f5cef9d3842f5374c42d3bf0 840w, https://mintcdn.com/notikaai/gtrrDIJuwtzRoBsV/images/replit-dreamlit.png?w=1100\u0026fit=max\u0026auto=format\u0026n=gtrrDIJuwtzRoBsV\u0026q=85\u0026s=dd8ba84465f3a768e0203f5cfb547f37 1100w, https://mintcdn.com/notikaai/gtrrDIJuwtzRoBsV/images/replit-dreamlit.png?w=1650\u0026fit=max\u0026auto=format\u0026n=gtrrDIJuwtzRoBsV\u0026q=85\u0026s=dcf767707bbba808c79bb23e7861863e 1650w, https://mintcdn.com/notikaai/gtrrDIJuwtzRoBsV/images/replit-dreamlit.png?w=2500\u0026fit=max\u0026auto=format\u0026n=gtrrDIJuwtzRoBsV\u0026q=85\u0026s=7e7d270a7cad2feff4e1decbd8becc37 2500w`})}),`\n`,_jsx(Heading,{level:`2`,id:`who-is-this-guide-for`,children:`Who is this guide for?`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Replit developers`}),` shipping apps that need transactional email`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Builders whose Replit app is deployed`}),` with a Neon-backed production database`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Builders on Replit + Supabase`}),` who want professional notifications in minutes`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`why-use-dreamlit-instead-of-building-email-in-replit`,children:`Why use Dreamlit instead of building email in Replit?`}),`\n`,_jsx(_components.p,{children:`You could ask Replit’s AI to wire up an email provider. It’ll generate the integration code. But then:`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsx(_components.li,{children:`How do you preview that email with real user data before it goes out?`}),`\n`,_jsx(_components.li,{children:`How do you track who opened it? Who clicked?`}),`\n`,_jsx(_components.li,{children:`What happens when emails bounce?`}),`\n`,_jsx(_components.li,{children:`Are you setting up DKIM and SPF records for deliverability?`}),`\n`,_jsx(_components.li,{children:`What about retry logic when the provider has an outage?`}),`\n`,_jsx(_components.li,{children:`What about scheduled emails? Recurring digests? Drip sequences?`}),`\n`,_jsx(_components.li,{children:`After you’ve built a few workflows, how do you see how they’re all performing in one place?`}),`\n`,_jsx(_components.li,{children:`How do you iterate on email copy without redeploying?`}),`\n`]}),`\n`,_jsx(_components.p,{children:`Or just use Dreamlit and skip all of that. We handle it end-to-end.`}),`\n`,_jsx(Heading,{level:`2`,id:`what-do-i-need-before-starting`,children:`What do I need before starting?`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`A Replit app with `,_jsx(_components.strong,{children:`one of the following`}),`:`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`A `,_jsx(_components.strong,{children:`deployed Replit app`}),`, which comes with a Neon-backed production database you can connect (`,_jsx(_components.a,{href:`#using-the-built-in-replit-database`,children:`see below`}),` for details)`]}),`\n`,_jsxs(_components.li,{children:[`An external database like `,_jsx(_components.strong,{children:`Supabase`}),` or `,_jsx(_components.strong,{children:`Neon`}),` that you’ve explicitly connected (you would have prompted Replit to use one)`]}),`\n`]}),`\n`]}),`\n`,_jsx(_components.li,{children:`5 minutes`}),`\n`]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`which-database-does-dreamlit-connect-to`,children:`Which database does Dreamlit connect to?`}),`\n`,_jsx(_components.p,{children:`Dreamlit needs direct database access to set up triggers and react to changes. Here’s how to find the right connection for your project.`}),`\n`,_jsx(Heading,{level:`3`,id:`using-the-built-in-replit-database`,children:`Using the built-in Replit database`}),`\n`,_jsxs(_components.p,{children:[`When you deploy a Replit app, Replit gives it a `,_jsxs(_components.strong,{children:[`production database hosted on `,_jsx(_components.a,{href:`https://neon.tech`,children:`Neon`})]}),` with a standard Postgres connection string. That’s the database Dreamlit connects to. It holds your live users and events, which is exactly what your emails should react to.`]}),`\n`,_jsxs(_components.p,{children:[`To connect, grab your `,_jsx(_components.strong,{children:`production`}),` connection string (see `,_jsx(_components.a,{href:`#how-do-i-connect-dreamlit-to-my-database`,children:`the steps below`}),`). No migration and no rebuild required.`]}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[`Replit’s `,_jsx(_components.strong,{children:`development`}),` database, the one you use while building in the workspace, runs on Replit’s own infrastructure and isn’t reachable from outside your app. That’s fine. Dreamlit connects to your `,_jsx(_components.strong,{children:`production`}),` database, where your live data lives. If you haven’t deployed your app yet, publish it first to create the production database, or connect an external database like Supabase.`]})}),`\n`,_jsx(Tip,{children:_jsxs(_components.p,{children:[`Not sure which is which? Check your `,_jsx(_components.code,{children:`DATABASE_URL`}),`. A value containing `,_jsx(_components.code,{children:`helium/heliumdb`}),` is your internal development database. Your production connection string points to `,_jsx(_components.code,{children:`neon.tech`}),` and is the one to give Dreamlit.`]})}),`\n`,_jsx(Heading,{level:`3`,id:`using-supabase-or-another-external-database`,children:`Using Supabase or another external database`}),`\n`,_jsxs(_components.p,{children:[`If you’ve explicitly prompted Replit to connect your app to `,_jsx(_components.strong,{children:`Supabase`}),`, `,_jsx(_components.strong,{children:`Neon`}),`, `,_jsx(_components.strong,{children:`Railway`}),`, or another external PostgreSQL database, connect that one. Skip ahead to `,_jsx(_components.a,{href:`#how-do-i-connect-dreamlit-to-my-database`,children:`Connect Dreamlit to your database`}),`.`]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`how-do-i-connect-dreamlit-to-my-database`,children:`How do I connect Dreamlit to my database?`}),`\n`,_jsxs(Tabs,{children:[_jsxs(Tab,{title:`Replit Production Database (Neon)`,id:`replit-production-database-neon`,children:[_jsx(_components.p,{children:`Your deployed Replit app has a Neon-hosted production database you can connect directly:`}),_jsxs(Steps,{children:[_jsx(Step,{title:`Create a Dreamlit account`,children:_jsxs(_components.p,{children:[`Go to `,_jsx(_components.a,{href:`https://app.dreamlit.ai`,children:`app.dreamlit.ai`}),` and sign up.`]})}),_jsx(Step,{title:`Get your production connection string`,children:_jsxs(_components.p,{children:[`In your Replit project, open the `,_jsx(_components.strong,{children:`Database`}),` tool and select your `,_jsx(_components.strong,{children:`production`}),` database. Copy its connection string (it points to `,_jsx(_components.code,{children:`neon.tech`}),`). If you haven’t deployed your app yet, publish it first to create the production database. See Replit’s `,_jsx(_components.a,{href:`https://docs.replit.com/cloud-services/storage-and-databases/production-databases`,children:`production databases docs`}),` for details.`]})}),_jsx(Step,{title:`Connect in Dreamlit`,children:_jsxs(_components.p,{children:[`Click `,_jsx(_components.strong,{children:`Connect Postgres`}),` and paste your connection string. Follow the guided setup to grant Dreamlit the minimal permissions it needs.`]})})]}),_jsx(Warning,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Keep your connection string private.`}),` It grants full database access. Never share it publicly or commit it to version control.`]})}),_jsxs(_components.p,{children:[`For detailed setup instructions, see `,_jsx(_components.a,{href:`/configuration/data-sources/postgres#commands-to-run-to-set-up-your-dreamlit_app-database-user`,children:`commands to set up your database user`}),`.`]})]}),_jsxs(Tab,{title:`Supabase`,id:`supabase`,children:[_jsx(_components.p,{children:`If your Replit app uses Supabase, connecting is two clicks:`}),_jsxs(Steps,{children:[_jsx(Step,{title:`Create a Dreamlit account`,children:_jsxs(_components.p,{children:[`Go to `,_jsx(_components.a,{href:`https://app.dreamlit.ai`,children:`app.dreamlit.ai`}),` and sign up.`]})}),_jsxs(Step,{title:`Connect via OAuth`,children:[_jsxs(_components.p,{children:[`Click `,_jsx(_components.strong,{children:`Connect Supabase`}),` and authorize the connection. Dreamlit securely connects to your Supabase project.`]}),_jsx(Frame,{children:_jsx(OptimizedImage,{src:`https://mintcdn.com/notikaai/adckcWobFeOatSLI/images/supabaseconnect.gif?s=fae094684d1c16f9d6ba024157359ea0`,alt:`Connecting Supabase via OAuth`,\"data-og-width\":`1408`,width:`1408`,\"data-og-height\":`1080`,height:`1080`,\"data-path\":`images/supabaseconnect.gif`,\"data-optimize\":`true`,\"data-opv\":`3`})})]})]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`That’s it. 2 clicks and you’re connected.`})}),_jsx(Tip,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Need auth emails?`}),` (password reset, magic links, email verification) Check out our `,_jsx(_components.a,{href:`/guides/supabase-auth-emails`,children:`Supabase Auth Emails guide`}),` for one-click setup.`]})})]}),_jsxs(Tab,{title:`Other Postgres`,id:`other-postgres`,children:[_jsxs(Steps,{children:[_jsx(Step,{title:`Create a Dreamlit account`,children:_jsxs(_components.p,{children:[`Go to `,_jsx(_components.a,{href:`https://app.dreamlit.ai`,children:`app.dreamlit.ai`}),` and sign up.`]})}),_jsx(Step,{title:`Get your connection string`,children:_jsx(_components.p,{children:`Copy your Postgres connection string from your database provider (Neon, Railway, Render, etc.).`})}),_jsx(Step,{title:`Connect in Dreamlit`,children:_jsxs(_components.p,{children:[`Click `,_jsx(_components.strong,{children:`Connect Postgres`}),` and paste your connection string. Follow the guided setup to grant Dreamlit the minimal permissions it needs.`]})})]}),_jsxs(_components.p,{children:[`For detailed setup instructions, see `,_jsx(_components.a,{href:`/configuration/data-sources/postgres#commands-to-run-to-set-up-your-dreamlit_app-database-user`,children:`commands to set up your database user`}),`.`]})]})]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`how-do-i-create-my-first-email-workflow`,children:`How do I create my first email workflow?`}),`\n`,_jsx(_components.p,{children:`Here’s an example: setting up a welcome email that sends when someone signs up.`}),`\n`,_jsx(Heading,{level:`3`,id:`step-1-create-the-workflow-in-dreamlit`,children:`Step 1: Create the workflow in Dreamlit`}),`\n`,_jsxs(_components.p,{children:[`Click `,_jsx(_components.strong,{children:`Create Workflow`}),` and describe what you want:`]}),`\n`,_jsxs(_components.blockquote,{children:[`\n`,_jsx(_components.p,{children:`“Send a welcome email when a new user signs up”`}),`\n`]}),`\n`,_jsx(_components.p,{children:`The AI generates everything: the database trigger, email template, and copy.`}),`\n`,_jsx(Frame,{caption:`The AI generates your workflow automatically`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/notikaai/ND5vtH9yB3HGk0VQ/images/new-workflow.gif?s=cf7aaa6638f6349bb3e9cf79f7512383`,alt:`AI generating a welcome email workflow`,\"data-og-width\":`1784`,width:`1784`,\"data-og-height\":`720`,height:`720`,\"data-path\":`images/new-workflow.gif`,\"data-optimize\":`true`,\"data-opv\":`3`})}),`\n`,_jsx(Heading,{level:`3`,id:`step-2-update-your-replit-app-if-needed`,children:`Step 2: Update your Replit app (if needed)`}),`\n`,_jsxs(_components.p,{children:[`Here’s the key insight: `,_jsx(_components.strong,{children:`Dreamlit securely connects to your database and reacts to changes, not your code.`}),` When a new row appears in your `,_jsx(_components.code,{children:`users`}),` table, Dreamlit sends the email automatically.`]}),`\n`,_jsx(_components.p,{children:`If your Replit app already creates user records on signup, you’re done. No code changes needed.`}),`\n`,_jsx(_components.p,{children:`If you need to add a table for Dreamlit to use as a trigger, prompt your AI assistant:`}),`\n`,_jsxs(_components.blockquote,{children:[`\n`,_jsxs(_components.p,{children:[`“When a user signs up, add a row to the `,_jsx(_components.code,{children:`user_signups`}),` table with their email and name”`]}),`\n`]}),`\n`,_jsx(_components.p,{children:`Or for something like order confirmations:`}),`\n`,_jsxs(_components.blockquote,{children:[`\n`,_jsxs(_components.p,{children:[`“When a user completes checkout, insert a row into the `,_jsx(_components.code,{children:`orders`}),` table with the order details”`]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`step-3-preview-and-publish`,children:`Step 3: Preview and publish`}),`\n`,_jsxs(_components.p,{children:[`Preview your email with real data from your database, then click `,_jsx(_components.strong,{children:`Publish`}),`.`]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`how-does-replit-work-with-dreamlit`,children:`How does Replit work with Dreamlit?`}),`\n`,_jsx(_components.p,{children:`Dreamlit triggers emails based on database changes. When building in Replit, focus on getting data into your database. Dreamlit handles the rest.`}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Good prompts:`})}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`You want…`}),_jsx(_components.th,{children:`Prompt with…`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Welcome emails`}),_jsxs(_components.td,{children:[`”Store new signups in a `,_jsx(_components.code,{children:`user_signups`}),` table”`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Order confirmations`}),_jsxs(_components.td,{children:[`”Insert order details into `,_jsx(_components.code,{children:`orders`}),` when checkout completes”`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Comment notifications`}),_jsxs(_components.td,{children:[`”Save comments to a `,_jsx(_components.code,{children:`comments`}),` table with the post_id and author”`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Activity alerts`}),_jsxs(_components.td,{children:[`”Log user actions to an `,_jsx(_components.code,{children:`activity`}),` table”`]})]})]})]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`You don’t need to prompt about emails at all.`}),` Just make sure the data lands in your database, and Dreamlit takes it from there.`]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`what-other-workflows-can-i-build`,children:`What other workflows can I build?`}),`\n`,_jsxs(_components.p,{children:[`Any workflow that triggers on a database change. Check out our `,_jsx(_components.a,{href:`/getting-started/use-cases`,children:`use cases`}),` for example prompts across welcome emails, order confirmations, reminders, internal alerts, and more.`]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`how-do-i-send-from-my-own-domain`,children:`How do I send from my own domain?`}),`\n`,_jsxs(_components.p,{children:[`By default, emails send from Dreamlit’s domain. To send from your own domain (like `,_jsx(_components.code,{children:`hello@yourapp.com`}),`), set up a custom email domain in minutes.`]}),`\n`,_jsxs(Steps,{children:[_jsx(Step,{title:`Add your domain`,children:_jsxs(_components.p,{children:[`Go to `,_jsx(_components.strong,{children:`Settings → Email Domains`}),` and click `,_jsx(_components.strong,{children:`Add domain`}),`. Enter your domain (we recommend a subdomain like `,_jsx(_components.code,{children:`mail.yourapp.com`}),`).`]})}),_jsxs(Step,{title:`Verify automatically`,children:[_jsxs(_components.p,{children:[`Dreamlit can automatically configure your DNS records for you. Just click `,_jsx(_components.strong,{children:`Verify with your DNS provider`}),`, sign in to your provider, and authorize the changes.`]}),_jsx(Frame,{caption:`Automatic DNS setup, no manual records needed`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/notikaai/ND5vtH9yB3HGk0VQ/images/auto-dns.gif?s=ce1cca7fadcd17e41cb37a8fdce2753d`,alt:`Automated DNS verification flow`,\"data-og-width\":`1024`,width:`1024`,\"data-og-height\":`720`,height:`720`,\"data-path\":`images/auto-dns.gif`,\"data-optimize\":`true`,\"data-opv\":`3`})}),_jsx(Tip,{children:_jsx(_components.p,{children:`If your DNS provider isn’t supported for automatic setup, you can add the records manually. Dreamlit shows you exactly what to add.`})})]}),_jsx(Step,{title:`Start sending`,children:_jsx(_components.p,{children:`Once verified, select your domain when creating email workflows. Your emails will now come from your own brand.`})})]}),`\n`,_jsxs(_components.p,{children:[`This improves deliverability and looks more professional to your users. `,_jsx(_components.a,{href:`/configuration/email/custom-domain`,children:`Full domain setup guide →`})]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`faq`,children:`FAQ`}),`\n`,_jsx(Heading,{level:`3`,id:`which-replit-database-does-dreamlit-connect-to`,children:`Which Replit database does Dreamlit connect to?`}),`\n`,_jsxs(_components.p,{children:[`Your `,_jsx(_components.strong,{children:`production`}),` database. When you deploy a Replit app, its production database runs on `,_jsx(_components.a,{href:`https://docs.replit.com/cloud-services/storage-and-databases/production-databases`,children:`Neon`}),` with a standard Postgres connection string, so Dreamlit connects to it directly. That database holds your live users and events, which is what your emails should react to. No migration needed.`]}),`\n`,_jsxs(Heading,{level:`3`,id:`my-database_url-contains-helium/heliumdb-what-do-i-do`,children:[`My DATABASE_URL contains `,_jsx(_components.code,{children:`helium/heliumdb`}),`. What do I do?`]}),`\n`,_jsxs(_components.p,{children:[`That’s your Replit `,_jsx(_components.strong,{children:`development`}),` database, which runs on Replit’s own infrastructure and isn’t reachable from outside your app. Connect your `,_jsx(_components.strong,{children:`production`}),` database instead. Open the `,_jsx(_components.strong,{children:`Database`}),` tool, select the production database, and copy its connection string (it points to `,_jsx(_components.code,{children:`neon.tech`}),`). If you haven’t deployed yet, publish your app first to create it.`]}),`\n`,_jsx(Heading,{level:`3`,id:`do-i-have-to-migrate-off-replit’s-database`,children:`Do I have to migrate off Replit’s database?`}),`\n`,_jsx(_components.p,{children:`No. If your app is deployed, its Neon-backed production database connects to Dreamlit as-is. Migrating to Supabase or another provider is optional, and worth it only if you want that provider’s other features.`}),`\n`,_jsx(Heading,{level:`3`,id:`why-aren’t-my-emails-sending`,children:`Why aren’t my emails sending?`}),`\n`,_jsx(_components.p,{children:`A few things to check:`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Is your workflow published?`}),` Saved workflows don’t run until you click Publish.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Is the trigger table correct?`}),` Make sure it matches where your Replit app actually writes data.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Is data being written?`}),` Check your database to confirm rows are being created.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Try the preview.`}),` Use the preview to test with sample data and verify the workflow runs.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`do-i-need-to-change-my-replit-app-code`,children:`Do I need to change my Replit app code?`}),`\n`,_jsx(_components.p,{children:`Usually no. If you’re already using Replit’s production database or Supabase, Dreamlit reacts to your existing database changes, so if your app already writes the data you need, you’re all set. You’d only update your database calls if you decide to add a new external database like Supabase.`}),`\n`,_jsx(Heading,{level:`3`,id:`will-my-emails-keep-working-after-i-redeploy`,children:`Will my emails keep working after I redeploy?`}),`\n`,_jsx(_components.p,{children:`Yes. Dreamlit connects to your database, not your Replit deployment. Deploy as often as you like. Your email workflows keep running.`}),`\n`,_jsx(Heading,{level:`3`,id:`can-i-send-slack-notifications-too`,children:`Can I send Slack notifications too?`}),`\n`,_jsxs(_components.p,{children:[`Yes. Dreamlit supports Slack alongside email. Just describe what you want: “Notify our team on Slack when a new order comes in.” `,_jsx(_components.a,{href:`/configuration/slack`,children:`Learn more about Slack →`})]}),`\n`,_jsx(Heading,{level:`3`,id:`how-do-i-test-without-emailing-real-users`,children:`How do I test without emailing real users?`}),`\n`,_jsx(_components.p,{children:`Use the preview feature to send test emails to yourself with real data from your database. Your workflow won’t email actual users until you publish it.`}),`\n`,_jsx(Heading,{level:`3`,id:`what-if-i’m-already-using-resend-sendgrid-or-another-email-provider`,children:`What if I’m already using Resend, SendGrid, or another email provider?`}),`\n`,_jsx(_components.p,{children:`Dreamlit works alongside traditional email providers. Since Dreamlit takes a fundamentally different approach (database-driven, AI-generated workflows), you don’t need to migrate off your existing setup. Try Dreamlit for your next workflow and keep using your current provider for everything else.`}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`next-steps`,children:`Next steps`}),`\n`,_jsxs(CardGroup,{cols:2,children:[_jsx(Card,{title:`Supabase Auth emails`,icon:`shield-keyhole`,href:`/guides/supabase-auth-emails`,children:_jsx(_components.p,{children:`Set up password reset, magic links, and more`})}),_jsx(Card,{title:`Email domain setup`,icon:`at`,href:`/configuration/email/custom-domain`,children:_jsx(_components.p,{children:`Send from your own domain`})}),_jsx(Card,{title:`Use cases`,icon:`lightbulb`,href:`/getting-started/use-cases`,children:_jsx(_components.p,{children:`More workflow examples`})}),_jsx(Card,{title:`Get support`,icon:`headset`,href:`/resources/getting-support`,children:_jsx(_components.p,{children:`We’re here to help`})})]}),`\n`,_jsx(Heading,{level:`2`,id:`references`,children:`References`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`https://docs.replit.com/cloud-services/storage-and-databases/sql-database`,children:`Replit SQL database docs`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`https://docs.replit.com/cloud-services/storage-and-databases/production-databases`,children:`Replit production databases`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`/configuration/data-sources/supabase`,children:`Dreamlit Supabase integration`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`/configuration/data-sources/postgres`,children:`Dreamlit Postgres setup guide`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`https://supabase.com/docs/guides/auth/auth-smtp`,children:`Supabase Auth SMTP docs`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`/getting-started/use-cases`,children:`Dreamlit use cases`})}),`\n`]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(_components.p,{children:`Last validated: 2026-07-03`}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`appendix-adding-supabase-to-your-replit-app`,children:`Appendix: Adding Supabase to your Replit app`}),`\n`,_jsx(_components.p,{children:`You don’t need this to use Dreamlit; your deployed app’s production database already works. But if you’d rather run on Supabase, for its auth and dashboard, here’s how to add it:`}),`\n`,_jsxs(Steps,{children:[_jsx(Step,{title:`Create a Supabase project`,children:_jsxs(_components.p,{children:[`Go to `,_jsx(_components.a,{href:`https://supabase.com`,children:`supabase.com`}),` and create a free project. Note your project URL and API keys.`]})}),_jsxs(Step,{title:`Add environment variables to Replit`,children:[_jsxs(_components.p,{children:[`In your Replit project, go to `,_jsx(_components.strong,{children:`Secrets`}),` (the lock icon) and add:`]}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`SUPABASE_URL`}),`: Your Supabase project URL`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`SUPABASE_ANON_KEY`}),`: Your Supabase anon/public key`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`DATABASE_URL`}),`: Your Supabase connection string (found in Project Settings → Database)`]}),`\n`]})]}),_jsxs(Step,{title:`Update your app to use Supabase`,children:[_jsx(_components.p,{children:`Replace your database calls with Supabase. If you’re using AI to build your app, prompt it:`}),_jsxs(_components.blockquote,{children:[`\n`,_jsx(_components.p,{children:`“Replace the Replit database with Supabase. Use the SUPABASE_URL and SUPABASE_ANON_KEY environment variables.”`}),`\n`]}),_jsx(_components.p,{children:`Or if you prefer direct Postgres:`}),_jsxs(_components.blockquote,{children:[`\n`,_jsx(_components.p,{children:`“Connect to Postgres using the DATABASE_URL environment variable instead of the Replit database.”`}),`\n`]})]})]}),`\n`,_jsxs(_components.p,{children:[`Once your app uses Supabase, return to `,_jsx(_components.a,{href:`#how-do-i-connect-dreamlit-to-my-database`,children:`Connect Dreamlit to your database`}),` to finish setup.`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"How to Add Emails to Your Replit App (The Easy Way)","sidebarTitle":"Replit Apps","description":"Add welcome emails, notifications, and email blasts to your Replit app. No code changes, no API keys. Just connect your database and describe what you want.","icon":"laptop-code","href":"/guides/replit-email"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"How do I add email to my Replit app?","slug":"how-do-i-add-email-to-my-replit-app","depth":2,"children":[]},{"title":"Who is this guide for?","slug":"who-is-this-guide-for","depth":2,"children":[]},{"title":"Why use Dreamlit instead of building email in Replit?","slug":"why-use-dreamlit-instead-of-building-email-in-replit","depth":2,"children":[]},{"title":"What do I need before starting?","slug":"what-do-i-need-before-starting","depth":2,"children":[]},{"title":"Which database does Dreamlit connect to?","slug":"which-database-does-dreamlit-connect-to","depth":2,"children":[{"title":"Using the built-in Replit database","slug":"using-the-built-in-replit-database","depth":3,"children":[]},{"title":"Using Supabase or another external database","slug":"using-supabase-or-another-external-database","depth":3,"children":[]}]},{"title":"How do I connect Dreamlit to my database?","slug":"how-do-i-connect-dreamlit-to-my-database","depth":2,"children":[]},{"title":"How do I create my first email workflow?","slug":"how-do-i-create-my-first-email-workflow","depth":2,"children":[{"title":"Step 1: Create the workflow in Dreamlit","slug":"step-1-create-the-workflow-in-dreamlit","depth":3,"children":[]},{"title":"Step 2: Update your Replit app (if needed)","slug":"step-2-update-your-replit-app-if-needed","depth":3,"children":[]},{"title":"Step 3: Preview and publish","slug":"step-3-preview-and-publish","depth":3,"children":[]}]},{"title":"How does Replit work with Dreamlit?","slug":"how-does-replit-work-with-dreamlit","depth":2,"children":[]},{"title":"What other workflows can I build?","slug":"what-other-workflows-can-i-build","depth":2,"children":[]},{"title":"How do I send from my own domain?","slug":"how-do-i-send-from-my-own-domain","depth":2,"children":[]},{"title":"FAQ","slug":"faq","depth":2,"children":[{"title":"Which Replit database does Dreamlit connect to?","slug":"which-replit-database-does-dreamlit-connect-to","depth":3,"children":[]},{"title":"My DATABASE_URL contains helium/heliumdb. What do I do?","slug":"my-database_url-contains-helium/heliumdb-what-do-i-do","depth":3,"children":[]},{"title":"Do I have to migrate off Replit’s database?","slug":"do-i-have-to-migrate-off-replit’s-database","depth":3,"children":[]},{"title":"Why aren’t my emails sending?","slug":"why-aren’t-my-emails-sending","depth":3,"children":[]},{"title":"Do I need to change my Replit app code?","slug":"do-i-need-to-change-my-replit-app-code","depth":3,"children":[]},{"title":"Will my emails keep working after I redeploy?","slug":"will-my-emails-keep-working-after-i-redeploy","depth":3,"children":[]},{"title":"Can I send Slack notifications too?","slug":"can-i-send-slack-notifications-too","depth":3,"children":[]},{"title":"How do I test without emailing real users?","slug":"how-do-i-test-without-emailing-real-users","depth":3,"children":[]},{"title":"What if I’m already using Resend, SendGrid, or another email provider?","slug":"what-if-i’m-already-using-resend-sendgrid-or-another-email-provider","depth":3,"children":[]}]},{"title":"Next steps","slug":"next-steps","depth":2,"children":[]},{"title":"References","slug":"references","depth":2,"children":[]},{"title":"Appendix: Adding Supabase to your Replit app","slug":"appendix-adding-supabase-to-your-replit-app","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"notikaai","siteName":"Dreamlit AI","title":"How to Add Emails to Your Replit App (The Easy Way) - Dreamlit AI","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-08-18T04:42:54.054Z","originalFileLocation":"guides/replit-email.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Add welcome emails, notifications, and email blasts to your Replit app. No code changes, no API keys. Just connect your database and describe what you want.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Dreamlit AI\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/notikaai/HoOX77VHSfRwGtal/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/docs/mintlify-assets/_mintlify/favicons/notikaai/HoOX77VHSfRwGtal/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/notikaai/HoOX77VHSfRwGtal/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/notikaai/HoOX77VHSfRwGtal/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/notikaai/HoOX77VHSfRwGtal/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/notikaai/HoOX77VHSfRwGtal/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/notikaai/HoOX77VHSfRwGtal/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/notikaai/HoOX77VHSfRwGtal/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/notikaai/HoOX77VHSfRwGtal/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"How to Add Emails to Your Replit App (The Easy Way) - Dreamlit AI\">\u003cmeta data-mint-head property=\"og:description\" content=\"Add welcome emails, notifications, and email blasts to your Replit app. No code changes, no API keys. Just connect your database and describe what you want.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Dreamlit AI\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://dreamlit.ai/docs/guides/replit-email\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://notikaai.mintlify.site/docs/_mintlify/api/og/v2?division=Guides\u0026amp;title=How+to+Add+Emails+to+Your+Replit+App+%28The+Easy+Way%29\u0026amp;description=Add+welcome+emails%2C+notifications%2C+and+email+blasts+to+your+Replit+app.+No+code+changes%2C+no+API+keys.+Just+connect+your+database+and+describe+what+you+want.\u0026amp;theme=cd9765a2269f5674b365d03b\u0026amp;signature=d74aea259cd79364190d9ec1046069911a4dd69969c0738086cd0530615c0a48\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"How to Add Emails to Your Replit App (The Easy Way) - Dreamlit AI\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Add welcome emails, notifications, and email blasts to your Replit app. No code changes, no API keys. Just connect your database and describe what you want.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://notikaai.mintlify.site/docs/_mintlify/api/og/v2?division=Guides\u0026amp;title=How+to+Add+Emails+to+Your+Replit+App+%28The+Easy+Way%29\u0026amp;description=Add+welcome+emails%2C+notifications%2C+and+email+blasts+to+your+Replit+app.+No+code+changes%2C+no+API+keys.+Just+connect+your+database+and+describe+what+you+want.\u0026amp;theme=cd9765a2269f5674b365d03b\u0026amp;signature=d74aea259cd79364190d9ec1046069911a4dd69969c0738086cd0530615c0a48\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/docs/mintlify-assets/_mintlify/favicons/notikaai/HoOX77VHSfRwGtal/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Dreamlit AI\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#211F26\">\u003clink data-mint-head rel=\"canonical\" href=\"https://dreamlit.ai/docs/guides/replit-email\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/docs/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/docs/guides/replit-email.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://dreamlit.ai/#organization\",\"name\":\"Dreamlit AI\",\"url\":\"https://dreamlit.ai\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/notikaai/5oYlSr6CYnDtP1nH/logo/logo.svg?fit=max\u0026auto=format\u0026n=5oYlSr6CYnDtP1nH\u0026q=85\u0026s=6a42bf3e0ba53bffd9f71388b245160d\"}},{\"@type\":\"WebSite\",\"@id\":\"https://dreamlit.ai/docs#website\",\"name\":\"Dreamlit AI\",\"url\":\"https://dreamlit.ai/docs\",\"publisher\":{\"@id\":\"https://dreamlit.ai/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://dreamlit.ai/docs/guides/replit-email#webpage\",\"url\":\"https://dreamlit.ai/docs/guides/replit-email\",\"name\":\"How to Add Emails to Your Replit App (The Easy Way)\",\"description\":\"Add welcome emails, notifications, and email blasts to your Replit app. No code changes, no API keys. Just connect your database and describe what you want.\",\"dateModified\":\"2026-08-18T04:42:54.054Z\",\"isPartOf\":{\"@id\":\"https://dreamlit.ai/docs#website\"},\"breadcrumb\":{\"@id\":\"https://dreamlit.ai/docs/guides/replit-email#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://dreamlit.ai/docs/guides/replit-email#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Guides\",\"item\":\"https://dreamlit.ai/docs/guides/supabase-auth-emails\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How to Add Emails to Your Replit App (The Easy Way)\",\"item\":\"https://dreamlit.ai/docs/guides/replit-email\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://dreamlit.ai/docs/guides/replit-email#article\",\"headline\":\"How to Add Emails to Your Replit App (The Easy Way)\",\"name\":\"How to Add Emails to Your Replit App (The Easy Way)\",\"description\":\"Add welcome emails, notifications, and email blasts to your Replit app. No code changes, no API keys. Just connect your database and describe what you want.\",\"url\":\"https://dreamlit.ai/docs/guides/replit-email\",\"mainEntityOfPage\":{\"@id\":\"https://dreamlit.ai/docs/guides/replit-email#webpage\"},\"dateModified\":\"2026-08-18T04:42:54.054Z\",\"publisher\":{\"@id\":\"https://dreamlit.ai/#organization\"},\"isPartOf\":{\"@id\":\"https://dreamlit.ai/docs#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Dreamlit AI\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"Dreamlit AI\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/docs/guides/replit-email.md","siteName":"Dreamlit AI","nav":{"global":null,"tabs":[{"tab":"Dreamlit","icon":"rocket","pages":[{"title":"Dreamlit","href":"/introduction"}]},{"tab":"Dreamlit Engine (Legacy)","icon":"gears","groups":[{"group":"Get Started","pages":[{"title":"Dreamlit Engine","icon":"book-open","href":"/getting-started/introduction"},{"title":"Use cases","icon":"lightbulb","href":"/getting-started/use-cases"},{"title":"How it works","icon":"gears","href":"/getting-started/how-it-works"},{"title":"FAQ","icon":"circle-question","href":"/getting-started/faq"},{"title":"Quickstart","icon":"rocket","href":"/getting-started/quickstart"}]},{"group":"Dreamlit for...","pages":[{"title":"For vibe coders","href":"/getting-started/for-vibe-coders"},{"title":"For developers","href":"/getting-started/for-developers"},{"title":"For product teams","href":"/getting-started/for-product-teams"}]},{"group":"Guides","pages":[{"title":"How to Set Up Supabase Auth Emails with Dreamlit","sidebarTitle":"Supabase Auth Emails","icon":"bolt","href":"/guides/supabase-auth-emails"},{"title":"How to Add Emails to Your Lovable App (The Easy Way)","sidebarTitle":"Lovable Apps","icon":"heart","href":"/guides/lovable-email"},{"title":"Bolt.new Email: Send Notifications Without the Infrastructure","sidebarTitle":"Bolt.new Apps","icon":"bold","href":"/guides/bolt-email"},{"title":"Cursor Email: Send Notifications Without Breaking Your Flow","sidebarTitle":"Cursor Apps","description":"Add email to your Cursor app in minutes. Describe what you want in plain English, and Dreamlit builds the workflow.","icon":"code","href":"/guides/cursor-email"},{"title":"How to Add Emails to Your Replit App (The Easy Way)","sidebarTitle":"Replit Apps","icon":"laptop-code","href":"/guides/replit-email"},{"title":"v0 Email: Send Notifications by Describing What You Want","sidebarTitle":"v0 Apps","description":"Add email to your v0 app in minutes. Describe what you want in plain English, and Dreamlit builds the workflow.","icon":"sparkles","href":"/guides/v0-email"},{"title":"Figma Make Email: Design-to-App Meets AI-Powered Notifications","sidebarTitle":"Figma Make Apps","icon":"figma","href":"/guides/figma-make-email"}]},{"group":"Configuration","pages":[{"group":"Data Sources","pages":[{"title":"Supabase","href":"/configuration/data-sources/supabase"},{"title":"PostgreSQL","href":"/configuration/data-sources/postgres"},{"title":"Shopify","href":"/configuration/data-sources/shopify"}]},{"group":"Email","pages":[{"title":"Overview","href":"/configuration/email/index"},{"title":"Custom domain","sidebarTitle":"Custom domain","href":"/configuration/email/custom-domain"},{"title":"Brand styles","sidebarTitle":"Brand styles","href":"/configuration/email/brand-styles"},{"title":"Managing unsubscribed contacts","href":"/configuration/email/managing-unsubscribed-contacts"}]},{"title":"Slack","href":"/configuration/slack"}]},{"group":"Workflow","pages":[{"title":"Basics","href":"/workflow/basics"},{"title":"Preview","href":"/workflow/test-interface"},{"title":"Publishing workflows","href":"/workflow/publishing-workflows"},{"title":"Inspecting inflight workflows","href":"/workflow/inspecting-inflight-workflows"},{"title":"Broadcast","href":"/workflow/broadcast"}]},{"group":"Step types","pages":[{"title":"Database trigger","href":"/steps/database-trigger"},{"title":"Repeating trigger","href":"/steps/repeating-trigger"},{"title":"Supabase Auth trigger","href":"/steps/supabase-auth-trigger"},{"title":"Wait","href":"/steps/wait"},{"title":"Query","href":"/steps/query"},{"title":"Send email","href":"/steps/send-email"},{"title":"Send Slack","href":"/steps/send-slack"}]},{"group":"Troubleshooting","pages":[{"title":"Fix Supabase RLS Access for Dreamlit","sidebarTitle":"Supabase RLS","href":"/troubleshooting/fix-supabase-rls-access"}]},{"group":"MCP","pages":[{"title":"MCP server for AI agents","sidebarTitle":"Overview","href":"/resources/mcp-server"},{"group":"Quick Start","expanded":false,"pages":[{"title":"Dreamlit MCP for Claude Code","sidebarTitle":"Claude Code","href":"/resources/mcp-server/claude-code"},{"title":"Dreamlit MCP for Claude Desktop","sidebarTitle":"Claude Desktop","href":"/resources/mcp-server/claude-desktop"},{"title":"Dreamlit MCP for Codex","sidebarTitle":"Codex","href":"/resources/mcp-server/codex"},{"title":"Dreamlit MCP for Cursor","sidebarTitle":"Cursor","href":"/resources/mcp-server/cursor"},{"title":"Dreamlit MCP for OpenClaw","sidebarTitle":"OpenClaw","href":"/resources/mcp-server/openclaw"},{"title":"Dreamlit MCP for Hermes Agent","sidebarTitle":"Hermes","href":"/resources/mcp-server/hermes"},{"title":"Dreamlit MCP for Gemini CLI","sidebarTitle":"Gemini CLI","href":"/resources/mcp-server/gemini-cli"},{"title":"Dreamlit MCP for VS Code","sidebarTitle":"VS Code","href":"/resources/mcp-server/vs-code"},{"title":"Dreamlit MCP for Windsurf","sidebarTitle":"Windsurf","href":"/resources/mcp-server/windsurf"},{"title":"Dreamlit MCP for Zed","sidebarTitle":"Zed","href":"/resources/mcp-server/zed"},{"title":"Dreamlit MCP for Lovable","sidebarTitle":"Lovable","href":"/resources/mcp-server/lovable"},{"title":"Dreamlit MCP for Bolt","sidebarTitle":"Bolt","href":"/resources/mcp-server/bolt"},{"title":"Dreamlit MCP for Replit","sidebarTitle":"Replit","href":"/resources/mcp-server/replit"},{"title":"Dreamlit MCP for v0","sidebarTitle":"v0","href":"/resources/mcp-server/v0"}]}]},{"group":"Resources","pages":[{"title":"Deliverability","href":"/resources/deliverability"},{"title":"Security","href":"/resources/security"},{"title":"Contact us","href":"/resources/getting-support"},{"title":"Media resources","href":"/resources/media"},{"title":"Pricing","href":"/resources/pricing"},{"title":"System status","url":"https://status.dreamlit.ai","href":"/resources/system-status"},{"title":"Privacy policy","url":"https://dreamlit.ai/privacy-policy","href":"/resources/privacy-policy"},{"title":"Terms of service","url":"https://www.dreamlit.ai/terms-of-service","href":"/resources/terms-of-service"}]}]},{"tab":"Learning Center","icon":"graduation-cap","pages":[{"title":"Learning Center","href":"/learn/overview"}]}]},"basePath":"","title":"How to Add Emails to Your Replit App (The Easy Way) - Dreamlit AI","buildId":"dpl_2AK98Hxhwu4fUXpx9atbv41cC328","deploymentId":"dpl_2AK98Hxhwu4fUXpx9atbv41cC328","dynamics":["a74be98ba7","07c022d89b"],"chunks":["zoom-image-lightbox-T84NdC3b.js","lightbox-handle-r17bVUz3.js","Frame-Buk2KjK6.js","DynamicMarkdown-DYYZTGpa.js"]}