Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
7c42c1a
WIP
techiejd Jan 29, 2026
bfbe191
fix: ignore node_modules everywhere
techiejd Feb 1, 2026
5e28697
Adds split_db_adapter to CI run
techiejd Feb 4, 2026
3b0fef6
feat(cf-adapter): add Cloudflare Vectorize adapter (#28)
dejan-velimirovic-calendly Feb 6, 2026
edfdd25
Preparing for automated pubishes. This one beta will be done by hand …
techiejd Feb 6, 2026
ce35542
Bumps version since we added deleteEmbeddings. Also runs tsc so that …
techiejd Feb 7, 2026
c1db547
Adds the type check to ci
techiejd Feb 7, 2026
d79cc0f
fixes type check
techiejd Feb 7, 2026
4a0ee51
removes silly double checking on split_db_adapter for push
techiejd Feb 7, 2026
d737cbe
Adds root pnpm workspace
techiejd Feb 7, 2026
79f686e
feat(cf-adapter): update query parameters and method for deleting emb…
dejan-velimirovic-calendly Feb 8, 2026
b1fc554
Bumps version to release
techiejd Feb 10, 2026
2a141dc
Better typings (#34)
techiejd Feb 14, 2026
227947a
Adds better id tracking for deletion and does only one search instead…
techiejd Feb 17, 2026
2751d10
Deduplicate shared logic across plugin and adapter packages (#36)
techiejd Feb 18, 2026
f83a8c9
Removes dead code (#37)
techiejd Feb 18, 2026
11280c7
Bumps version for rollout
techiejd Feb 18, 2026
303c939
Merge main (#40)
techiejd Feb 20, 2026
c959bcf
Merge main into split_db_adapter (beta.5) (#42)
techiejd Feb 26, 2026
53d289c
chore: update beta version
techiejd Feb 26, 2026
793a378
docs: add design for adapter-owns-storage refactor
techiejd Mar 6, 2026
d78e2b8
docs: add implementation plan for adapter-owns-storage refactor
techiejd Mar 6, 2026
a351fc2
refactor: update DbAdapter type — storeChunk, deleteChunks, hasEmbedd…
techiejd Mar 6, 2026
6b93466
refactor: update mock adapter to new DbAdapter interface
techiejd Mar 6, 2026
f2fea72
refactor: vectorize task uses adapter.storeChunk and adapter.deleteCh…
techiejd Mar 6, 2026
55a9d0b
refactor: deleteDocumentEmbeddings delegates to adapter.deleteChunks
techiejd Mar 6, 2026
a994ae4
refactor: bulk embed uses adapter.storeChunk, deleteChunks, hasEmbedd…
techiejd Mar 6, 2026
8ccfdb1
refactor: PG adapter implements storeChunk, deleteChunks, hasEmbeddin…
techiejd Mar 6, 2026
5523b7b
refactor: CF adapter implements storeChunk with metadata, deleteChunk…
techiejd Mar 6, 2026
6715886
feat: CF search uses native Vectorize filtering + metadata
techiejd Mar 6, 2026
499f27a
docs: update CF README with metadata filtering limitations
techiejd Mar 6, 2026
997ad0a
chore: remove unused _cfVectorizeAdapter flag
techiejd Mar 6, 2026
63b28c1
chore: bump version to 0.6.0-beta.7, update changelog
techiejd Mar 6, 2026
57d485e
chore: bump version to 0.7.0-beta.1
techiejd Mar 6, 2026
c8b2e2a
merge: resolve conflicts with main, bump adapter versions to 0.7.0-be…
techiejd Mar 6, 2026
a530cea
test: add comprehensive WHERE clause tests for PG and CF adapters
techiejd Mar 7, 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
2 changes: 1 addition & 1 deletion .changeset/config.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
],
"commit": false,
"fixed": [
["payloadcms-vectorize", "@payloadcms-vectorize/pg"]
["payloadcms-vectorize", "@payloadcms-vectorize/pg", "@payloadcms-vectorize/cf"]
],
"access": "public",
"baseBranch": "main",
Expand Down
11 changes: 11 additions & 0 deletions .claude/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"permissions": {
"allow": [
"WebFetch(domain:developers.cloudflare.com)"
],
"additionalDirectories": [
"/Users/juandominguez/development/payloadcms-vectorize/adapters/cf",
"/Users/juandominguez/development/payloadcms-vectorize/docs"
]
}
}
43 changes: 41 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ on:
push:
branches: [main, develop]
pull_request:
branches: [main]
branches: [main, split_db_adapter]

jobs:
typecheck:
Expand Down Expand Up @@ -119,6 +119,44 @@ jobs:
IVFFLATLISTS: 1
TEST_ENV: 1

test_adapters_cf:
runs-on: ubuntu-latest

services:
postgres:
image: pgvector/pgvector:pg15
env:
POSTGRES_PASSWORD: password
POSTGRES_DB: payload_test
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
ports:
- 5433:5432

steps:
- uses: actions/checkout@v4

- name: Install pnpm
uses: pnpm/action-setup@v4

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'pnpm'

- name: Install dependencies
run: pnpm install

- name: Run cf adapter tests
run: pnpm test:adapters:cf
env:
PAYLOAD_SECRET: test-secret-key
TEST_ENV: 1

test_e2e:
runs-on: ubuntu-latest

Expand Down Expand Up @@ -170,14 +208,15 @@ jobs:

test:
runs-on: ubuntu-latest
needs: [typecheck, test_int, test_adapters_pg, test_e2e]
needs: [typecheck, test_int, test_adapters_pg, test_adapters_cf, test_e2e]
if: always()
steps:
- name: Check required jobs
run: |
if [ "${{ needs.typecheck.result }}" != "success" ] || \
[ "${{ needs.test_int.result }}" != "success" ] || \
[ "${{ needs.test_adapters_pg.result }}" != "success" ] || \
[ "${{ needs.test_adapters_cf.result }}" != "success" ] || \
[ "${{ needs.test_e2e.result }}" != "success" ]; then
echo "One or more required jobs failed"
exit 1
Expand Down
6 changes: 3 additions & 3 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ node_modules/
/build
/dist
/adapters/pg/dist
/adapters/cf/dist

# misc
.DS_Store
Expand Down Expand Up @@ -53,6 +54,5 @@ yarn-error.log*
# Secrets
*/secret

# Agent
.cursor/
.claude/
# Cursor
.cursor/
33 changes: 24 additions & 9 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,33 @@

All notable changes to this project will be documented in this file.

## 0.7.0
## 0.7.0-beta.1 - 2026-03-06

### Breaking Changes

- **Database Adapter Architecture**: The plugin now uses a pluggable database adapter system. You must install a database adapter package (e.g., `@payloadcms-vectorize/pg`) separately from the core plugin.
- **`dbAdapter` option required**: The `payloadcmsVectorize()` plugin now requires a `dbAdapter` option pointing to your adapter's implementation.
- **`similarity` renamed to `score`**: The `VectorSearchResult.similarity` field has been renamed to `score` to be more generic across different distance metrics.
- **`DbAdapter` interface redesigned**: `storeEmbedding` and `deleteEmbeddings` replaced with `storeChunk`, `deleteChunks`, and `hasEmbeddingVersion`. Adapters now own all chunk storage, deletion, and version checking — the core plugin no longer calls `payload.create()` or `payload.delete()` directly for embeddings.
- **New `StoreChunkData` type**: Adapters receive a single data object containing `sourceCollection`, `docId`, `chunkIndex`, `chunkText`, `embeddingVersion`, `embedding`, and `extensionFields`.

### Added
### Improved

- **`@payloadcms-vectorize/pg` package**: PostgreSQL adapter for pgvector, extracted from the core plugin.
- **`DbAdapter` interface**: New interface for implementing custom database adapters. See `adapters/README.md`.
- **`deleteEmbeddings` on `DbAdapter`**: Adapters can now delete vectors when a document is deleted or re-indexed.
- **CF adapter: native Vectorize metadata filtering**: Search now uses Cloudflare Vectorize's native `filter` parameter (applied before topK) for `equals`, `not_equals`, `in`, `notIn`, `greater_than`, `greater_than_equal`, `less_than`, `less_than_equal`. Operators `like`, `contains`, `exists`, and `or` clauses are post-filtered.
- **CF adapter: deterministic vector IDs**: Vectors are now stored with deterministic IDs (`poolName:collection:docId:chunkIndex`), enabling reliable upserts and deletions.
- **CF adapter: metadata on vectors**: All chunk metadata (including extension fields) is stored directly on Vectorize vectors, enabling filtered search without a separate metadata collection.

### Migration

Custom `DbAdapter` implementations must update to the new interface:

```typescript
// Before
storeEmbedding(payload, poolName, collection, docId, embeddingId, embedding)
deleteEmbeddings(payload, poolName, collection, docId)

// After
storeChunk(payload, poolName, data: StoreChunkData)
deleteChunks(payload, poolName, sourceCollection, docId)
hasEmbeddingVersion(payload, poolName, sourceCollection, docId, embeddingVersion)
```

## 0.6.0-beta.5 - 2026-02-25

Expand All @@ -36,8 +50,9 @@ All notable changes to this project will be documented in this file.
### Added

- **`@payloadcms-vectorize/pg` package**: PostgreSQL adapter for pgvector, extracted from the core plugin.
- **`@payloadcms-vectorize/cf` package**: Cloudflare Vectorize adapter for edge-native vector search.
- **`DbAdapter` interface**: New interface for implementing custom database adapters. See `adapters/README.md`.
- **`deleteEmbeddings` on `DbAdapter`**: Adapters can now delete vectors when a document is deleted or re-indexed.
- **`deleteEmbeddings` on `DbAdapter`**: Adapters can now delete vectors when a document is deleted or re-indexed. Implemented in both the `pg` and `cf` adapters.
- **Adapter documentation**: Added `adapters/README.md` explaining how to create custom adapters.

### Migration
Expand Down
Loading