Skip to content

Conversation

balegas
Copy link
Contributor

@balegas balegas commented Aug 20, 2025

Reference page for electric-collection.

Explains how to configure electric collection and how to do mutations with the transaction Id tracking pattern either with handlers or explicit transactions.

Copy link

changeset-bot bot commented Aug 20, 2025

🦋 Changeset detected

Latest commit: f88cf4d

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 8 packages
Name Type
@tanstack/db Patch
@tanstack/electric-db-collection Patch
@tanstack/query-db-collection Patch
@tanstack/react-db Patch
@tanstack/solid-db Patch
@tanstack/svelte-db Patch
@tanstack/trailbase-db-collection Patch
@tanstack/vue-db Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

Copy link

pkg-pr-new bot commented Aug 20, 2025

More templates

@tanstack/db

npm i https://pkg.pr.new/@tanstack/db@429

@tanstack/db-ivm

npm i https://pkg.pr.new/@tanstack/db-ivm@429

@tanstack/electric-db-collection

npm i https://pkg.pr.new/@tanstack/electric-db-collection@429

@tanstack/query-db-collection

npm i https://pkg.pr.new/@tanstack/query-db-collection@429

@tanstack/react-db

npm i https://pkg.pr.new/@tanstack/react-db@429

@tanstack/solid-db

npm i https://pkg.pr.new/@tanstack/solid-db@429

@tanstack/svelte-db

npm i https://pkg.pr.new/@tanstack/svelte-db@429

@tanstack/trailbase-db-collection

npm i https://pkg.pr.new/@tanstack/trailbase-db-collection@429

@tanstack/vue-db

npm i https://pkg.pr.new/@tanstack/vue-db@429

commit: f88cf4d

@balegas balegas requested a review from KyleAMathews August 20, 2025 22:22
Copy link
Contributor

github-actions bot commented Aug 20, 2025

Size Change: 0 B

Total Size: 62.5 kB

ℹ️ View Unchanged
Filename Size
./packages/db/dist/esm/change-events.js 1.13 kB
./packages/db/dist/esm/collection.js 10.6 kB
./packages/db/dist/esm/deferred.js 230 B
./packages/db/dist/esm/errors.js 3 kB
./packages/db/dist/esm/index.js 1.52 kB
./packages/db/dist/esm/indexes/auto-index.js 745 B
./packages/db/dist/esm/indexes/base-index.js 605 B
./packages/db/dist/esm/indexes/btree-index.js 1.74 kB
./packages/db/dist/esm/indexes/lazy-index.js 1.25 kB
./packages/db/dist/esm/local-only.js 827 B
./packages/db/dist/esm/local-storage.js 2.03 kB
./packages/db/dist/esm/optimistic-action.js 294 B
./packages/db/dist/esm/proxy.js 4.19 kB
./packages/db/dist/esm/query/builder/functions.js 575 B
./packages/db/dist/esm/query/builder/index.js 3.79 kB
./packages/db/dist/esm/query/builder/ref-proxy.js 890 B
./packages/db/dist/esm/query/compiler/evaluators.js 1.48 kB
./packages/db/dist/esm/query/compiler/expressions.js 631 B
./packages/db/dist/esm/query/compiler/group-by.js 2.04 kB
./packages/db/dist/esm/query/compiler/index.js 2.14 kB
./packages/db/dist/esm/query/compiler/joins.js 2.36 kB
./packages/db/dist/esm/query/compiler/order-by.js 1.17 kB
./packages/db/dist/esm/query/compiler/select.js 655 B
./packages/db/dist/esm/query/ir.js 318 B
./packages/db/dist/esm/query/live-query-collection.js 3.65 kB
./packages/db/dist/esm/query/optimizer.js 2.44 kB
./packages/db/dist/esm/SortedMap.js 1.24 kB
./packages/db/dist/esm/transactions.js 2.29 kB
./packages/db/dist/esm/utils.js 419 B
./packages/db/dist/esm/utils/btree.js 6.02 kB
./packages/db/dist/esm/utils/comparison.js 718 B
./packages/db/dist/esm/utils/index-optimization.js 1.62 kB

compressed-size-action::db-package-size

Copy link
Contributor

github-actions bot commented Aug 20, 2025

Size Change: 0 B

Total Size: 1.16 kB

ℹ️ View Unchanged
Filename Size
./packages/react-db/dist/esm/index.js 152 B
./packages/react-db/dist/esm/useLiveQuery.js 1.01 kB

compressed-size-action::react-db-package-size

Copy link
Collaborator

@KyleAMathews KyleAMathews left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for picking this up!

const todosCollection = createCollection(
electricCollectionOptions({
shapeOptions: {
url: 'https://example.com/v1/shape',
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's used named routes and not put that table as a param

### Shape Options

- `url`: The URL to your Electric sync service
- `params`: Shape parameters including:
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same, let's not document this as the normal pattern. Show adding these in the proxy.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've added the proxy example and mention the other shape parameters there


## Persistence Handlers

You can define handlers that are called when mutations occur, for instance to persist changes to your backend. Such handlers **must return a transaction ID** (`txid`) to track when the mutation has been synchronized back from Electric:
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Txid is recommended but there are already other ways of doing this and we'll be adding more

#402

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's good to explain why this is ideal for sync matching

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've mentioned the alternative approaches and took an example.

@balegas balegas requested a review from KyleAMathews August 21, 2025 22:43
await api.todos.create(item) // API doesn't return txid

return {
matchStream: (stream) => matchStream(
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

oh the issue I linked to isn't implemented yet...

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

oh, I thought you wanted to document it already. Removed it.


// the shape parameters
originUrl.searchParams.set("table", "todos")
// originUrl.searchParams.set("where", "completed = true")
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

add comment explaining these are other ways you can modify the shape definition

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

added comment and linked to the spec. Not sure if links to external sources are permitted.

@balegas balegas requested a review from KyleAMathews August 26, 2025 07:44
@samwillis samwillis merged commit 968602e into main Aug 26, 2025
6 checks passed
@samwillis samwillis deleted the vbalegas/electric-docs branch August 26, 2025 15:18
@github-actions github-actions bot mentioned this pull request Aug 26, 2025
# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants