Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
028c1e0
website: start fleshing out pricing page.
thruflo Sep 24, 2025
a3c0703
about: we are a Delaware corp now.
thruflo Sep 24, 2025
f1fd269
pricing: wire up links.
thruflo Sep 24, 2025
269a8c5
pricing: sort out the icon.
thruflo Sep 24, 2025
192cfea
pricing: add enterprise and open source sections.
thruflo Sep 24, 2025
453858c
pricing: dump wip.
thruflo Sep 29, 2025
1dfaaa4
pricing: wip re-organising the pricing page.
thruflo Oct 7, 2025
9836d1d
pricing: visual and responsive pass on new pricing page.
thruflo Oct 8, 2025
91be4d1
pricing: fewer words on mobile.
thruflo Oct 8, 2025
9991117
pricing: mobile tweaks.
thruflo Oct 8, 2025
5038465
pricing: hyperlink to details.
thruflo Oct 14, 2025
ee9e619
feat(website): new pricing page.
thruflo Mar 6, 2026
e1f3b00
Fill in pricing plan card content for PAYG, Pro, and Scale tiers
claude Mar 23, 2026
e7672dc
Increase base write rate from $1 to $3 per 1M operations
claude Mar 23, 2026
0fde46b
Split write pricing into per-service rates: Durable Streams vs Postgr…
claude Mar 23, 2026
580cf3b
Add max shapes limit per plan tier
claude Mar 23, 2026
d84b70b
Change Scale plan shapes limit to unlimited
claude Mar 23, 2026
183f763
Remove waived usage and payment method notes from PAYG plan
claude Mar 23, 2026
ed0de07
Remove concurrent readers per stream from all plans
claude Mar 23, 2026
de48a14
Group Postgres Sync write rate and shapes limit together in PAYG plan
claude Mar 23, 2026
e7b4a87
Remove stream TTL and rename Postgres subqueries to early access to f…
claude Mar 23, 2026
7b9903f
Organize plan features in consistent order, add unlimited streams, mo…
claude Mar 23, 2026
866cfb5
Rename Unlimited streams to Unlimited Durable Streams
claude Mar 23, 2026
56d1793
Separate pricing from features, bold unlimiteds, consistent Includes …
claude Mar 23, 2026
d6ef2ac
Add base usage costs to Pro and Scale pricing sections
claude Mar 23, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
58 changes: 7 additions & 51 deletions website/.vitepress/config.mts
Original file line number Diff line number Diff line change
Expand Up @@ -160,14 +160,13 @@ export default defineConfig({
},
logo: '/img/brand/logo.svg',
nav: [
{ text: 'Sync', link: '/sync', activeMatch: '/sync' },
{ text: 'Products', link: '/products', activeMatch: '/products' },
{ text: 'Cloud', link: '/cloud', activeMatch: '/cloud' },
{ text: 'Docs', link: '/docs/intro', activeMatch: '/docs/' },
{ text: 'Demos', link: '/demos', activeMatch: '/demos' },
{ text: 'Blog', link: '/blog', activeMatch: '/blog' },
{ text: 'About', link: '/about/community', activeMatch: '/about/' },
{ component: 'NavSignupButton' },
{ text: 'Product', link: '/product/electric', activeMatch: '/product/' },
{ text: 'Pricing', link: '/pricing', activeMatch: '/pricing' },
{ text: 'Docs', link: '/docs/intro', activeMatch: '/docs/'},
{ text: 'Demos', link: '/demos', activeMatch: '/demos'},
{ text: 'Blog', link: '/blog', activeMatch: '/blog'},
{ text: 'About', link: '/about/community', activeMatch: '/about/'},
{ component: 'NavSignupButton' }
],
search: {
provider: 'local',
Expand Down Expand Up @@ -196,49 +195,6 @@ export default defineConfig({
],
},
],
'/use-cases': [
{
text: 'Use cases',
items: [
{
text: 'Replace data fetching with data sync',
link: '/use-cases/data-sync',
},
{
text: 'Build resilient software that works offline',
link: '/use-cases/local-first-software',
},
// {
// text: 'Provision data into dev and test environments',
// link: '/use-cases/dev-and-test'
// },
//{
// text: 'Add multi-user collaboration to your apps',
// link: '/use-cases/multi-user'
//},
{
text: 'Automate cache invalidation',
link: '/use-cases/cache-invalidation',
},
//{
// text: 'Hydrating edge workers',
// link: '/use-cases/edge-workers'
//},
//{
// text: 'Partial replicas for distributed cloud services',
// link: '/use-cases/cloud-services'
//},
{
text: 'Retrieve data for local AI',
link: '/use-cases/local-ai',
},
{
text: 'Reduce your cloud costs',
link: '/use-cases/cloud-costs',
},
],
},
],
'/docs': [
{
text: 'Docs',
Expand Down
3 changes: 2 additions & 1 deletion website/.vitepress/theme/Layout.vue
Original file line number Diff line number Diff line change
Expand Up @@ -58,12 +58,13 @@ onMounted(() => {
getComputedStyle(document.documentElement).getPropertyValue('--vp-nav-height')
)
})
const shouldShowReleasebanner = frontmatter.hideReleaseBanner || !hasSidebar
</script>

<template>
<Layout :class="!hasSidebar ? 'nav-relative' : ''">
<template #layout-top>
<template v-if="!hasSidebar">
<template v-if="shouldShowReleasebanner">
<ReleaseBanner />
</template>
</template>
Expand Down
8 changes: 4 additions & 4 deletions website/.vitepress/theme/custom.css
Original file line number Diff line number Diff line change
Expand Up @@ -683,10 +683,10 @@ span.no-visual {
color: var(--vp-c-bg);
}
.VPButton.small {
border-radius: 16px;
padding: 0 16px;
line-height: 34px;
font-size: 13.5px;
border-radius: 15px;
padding: 0 15px;
line-height: 30px;
font-size: 13px;
}
.VPButton.vspace {
margin-top: 6px;
Expand Down
15 changes: 10 additions & 5 deletions website/about/contact.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,25 +2,30 @@
title: Contact
description: >-
Get in touch with us by email or say hello on our community Discord.
image: /img/about/vizinada.jpg
image: /img/about/golden-gate-bridge.jpg
outline: deep
---

<figure class="page-image">
<a href="/img/about/vizinada.lg.jpg" class="no-visual">
<img src="/img/about/vizinada.jpg" />
<a href="/img/about/golden-gate-bridge.lg.jpg" class="no-visual">
<img src="/img/about/golden-gate-bridge.jpg" />
</a>
</figure>

# Contact us

ElectricSQL is a [UK registered company](https://find-and-update.company-information.service.gov.uk/company/13573370) headquartered in [Istria](https://www.istra.hr/en/explore-istria).
ElectricSQL is a US Delaware corp headquartered in the San Francisco Bay Area.
<span class="no-wrap">Our team</span> works across US and European timezones.

Get in touch by email on [info@electric-sql.com](mailto:info@electric-sql.com) or join our [community Discord](https://discord.electric-sql.com).

## Sales

Contact [sales@electric-sql.com](mailto:sales@electric-sql.com).

## Press

For media enquiries, please contact us on [press@electric-sql.com](mailto:press@electric-sql.com).
Contact [press@electric-sql.com](mailto:press@electric-sql.com).

## Logos

Expand Down
18 changes: 15 additions & 3 deletions website/cloud/usage.md
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ Once connected you should see your source details akin to the screenshot below.

<img alt="Source details in cloud dashboard" src="/static/img/docs/cloud/source-details.png" />

It shouldn't take long before the source `state` becomes `active` and you're ready to make your first API request.
When the source `state` is `active`, you're ready to make your first API request.

### Making API Requests

Expand Down Expand Up @@ -170,6 +170,18 @@ export async function GET(req: Request) {

### Pricing

Electric Cloud is currently free in public BETA. We'll be launching low-cost, usage-based pricing soon (by the end of Q3 2025).
Electric Cloud has a generous free tier and paid plans with usage limits and other features. See the [Pricing page](/pricing) for more details.

Electric Cloud will always provide a generous free tier, so many apps will roll over with zero cost. If your plan is to use Electric in a larger app (more than 1,000 monthly active users) please reach out to make sure we can fully support you and to get a sense of what the future pricing will be like.
### Support

Let us know if you have any questions. We'll be very happy to help. You can ask questions on [Discord](https://discord.electric-sql.com) or email us directly at [sales@electric-sql.com](mailto:sales@electric-sql.com).

<div class="actions cta-actions page-footer-actions left">
<div class="action cloud-cta">
<VPButton
href="/product/cloud/sign-up"
text="Sign-up for Cloud"
theme="brand"
/>
</div>
</div>
15 changes: 15 additions & 0 deletions website/data/plans/accelerate.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
name: 'Accelerate'
order: 40
type: service

who: 'Lorem ipsum dolor sit amet'
featuresTitle: 'Direct access'
features:
- 'Lorem ipsum'
- 'Lorem ipsum'
- 'Lorem ipsum'

ctaText: 'Contact sales'
ctaHref: '/about/contact#sales'
ctaTheme: 'alt'
priceColor: 'ddn'
29 changes: 29 additions & 0 deletions website/data/plans/enterprise.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
name: 'Enterprise'
order: 50
type: enterprise

who: 'Lorem ipsum dolor sit amet'
featuresTitle: 'Bespoke solutions'
features:
- 'Lorem ipsum'
- 'Lorem ipsum'
- 'Lorem ipsum'

limits:
maxDatabases: 'Unlimited'
streamTTL: 'Unlimited'

maxShapes: 'Unlimited'
maxUsersPerWorkspace: 'Unlimited'

featureGates:
postgresSubqueries: true

commitment: 'Custom'
support: 'Custom'

ctaText: 'Contact sales'
ctaTextSmall: 'Contact'
ctaHref: '/about/contact#sales'
ctaTheme: 'alt'
priceColor: 'ddn'
38 changes: 38 additions & 0 deletions website/data/plans/payg.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
name: 'Pay as you go'
order: 10
type: tier

monthlyFee: 0
discountPercent: 0
priceQualifier: '/ month'

limits:
maxDatabases: 10
streamTTL: 'Up to 7 days'
maxShapes: 10000
maxUsersPerWorkspace: 50

featureGates:
postgresSubqueries: false

commitment: 'None'
support: 'Community (Discord)'

who: 'Developers getting started or projects with low usage'
pricingTitle: 'Usage-based pricing'
pricing:
- '$1 per 1M writes (Durable Streams)'
- '$3 per 1M writes (Postgres Sync)'
- '$0.10 per GB-month storage'

featuresTitle: 'Includes'
features:
- 'Up to 10 databases'
- '**Unlimited** Durable Streams'
- 'Up to 10K shapes'
- 'Community support (Discord)'

ctaText: 'Sign up now'
ctaTextSmall: 'Sign up'
ctaHref: 'https://dashboard.electric-sql.cloud'
ctaTheme: 'brand'
41 changes: 41 additions & 0 deletions website/data/plans/pro.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
name: 'Pro'
order: 20
type: tier

monthlyFee: 249
discountPercent: 10
priceQualifier: '/ month'

limits:
maxDatabases: 50
streamTTL: 'User-defined'
maxShapes: 100000
maxUsersPerWorkspace: 50

featureGates:
postgresSubqueries: true

commitment: '6 months'
support: 'Priority email'

who: 'Growing teams that need higher limits and priority support'
pricingTitle: 'Usage-based pricing'
pricing:
- '$1 per 1M writes (Durable Streams)'
- '$3 per 1M writes (Postgres Sync)'
- '$0.10 per GB-month storage'
- '10% discount on metered usage'

featuresTitle: 'Includes'
features:
- 'Up to 50 databases'
- '**Unlimited** Durable Streams'
- 'Up to 100K shapes'
- '6-month commitment, auto-renew'
- 'Early access to features'
- 'Priority email support'

ctaText: 'Sign up now'
ctaTextSmall: 'Sign up'
ctaHref: 'https://dashboard.electric-sql.cloud?plan=pro'
ctaTheme: 'brand'
41 changes: 41 additions & 0 deletions website/data/plans/scale.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
name: 'Scale'
order: 30
type: tier

monthlyFee: 1999
discountPercent: 20
priceQualifier: '/ month'

limits:
maxDatabases: 'Unlimited'
streamTTL: 'User-defined'
maxShapes: 'Unlimited'
maxUsersPerWorkspace: 50

featureGates:
postgresSubqueries: true

commitment: '12 months'
support: 'Direct access to founders'

who: 'High-traffic products that need maximum capacity and hands-on support'
pricingTitle: 'Usage-based pricing'
pricing:
- '$1 per 1M writes (Durable Streams)'
- '$3 per 1M writes (Postgres Sync)'
- '$0.10 per GB-month storage'
- '20% discount on metered usage'

featuresTitle: 'Includes'
features:
- '**Unlimited** databases'
- '**Unlimited** Durable Streams'
- '**Unlimited** shapes'
- '12-month commitment, auto-renew'
- 'Early access to features'
- 'Direct access to founders'

ctaText: 'Sign up now'
ctaTextSmall: 'Sign up'
ctaHref: 'https://dashboard.electric-sql.cloud?plan=scale'
ctaTheme: 'brand'
52 changes: 52 additions & 0 deletions website/data/pricing.data.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
import fs from 'node:fs'
import path from 'node:path'
import { parse } from 'yaml'

export default {
watch: [`./plans/*.yaml`, `./pricing.yaml`],

load(files) {
// Separate global config from plan files
const configFile = files.find(
(f) => f.endsWith(`pricing.yaml`) && !f.includes(`plans/`)
)
const planFiles = files.filter((f) => f !== configFile)

const config = parse(fs.readFileSync(configFile, `utf-8`))

const plans = planFiles
.map((file) => {
const slug = path.basename(file, `.yaml`)
const data = parse(fs.readFileSync(file, `utf-8`))

// Derive effective rates for tier plans (per-service write rates)
if (data.type === `tier` && data.discountPercent !== undefined) {
const discount = data.discountPercent / 100
data.effectiveDurableStreamsWriteRate = +(
config.baseRates.durableStreamsWritesPerMillion *
(1 - discount)
).toFixed(4)
data.effectivePostgresSyncWriteRate = +(
config.baseRates.postgresSyncWritesPerMillion *
(1 - discount)
).toFixed(4)
data.effectiveRetentionRate = +(
config.baseRates.retentionPerGBMonth *
(1 - discount)
).toFixed(4)
}

return { slug, ...data }
})
.sort((a, b) => (a.order || 999) - (b.order || 999))

const tiers = plans.filter((p) => p.type === `tier`)
const services = plans.filter((p) => p.type === `service`)
const enterprise = plans.filter((p) => p.type === `enterprise`)
const comparisonPlans = plans.filter(
(p) => p.type === `tier` || p.type === `enterprise`
)

return { config, plans, tiers, services, enterprise, comparisonPlans }
},
}
Loading
Loading