npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@vektormemory/vex

v0.3.0

Published

Cross-standard vector DB migration tool — .vmig.jsonl interchange format for agent memory.

Readme

vex — Vector Exchange

Cross-standard vector DB migration tool. Export, import, and migrate agent memory between vector stores using the open .vmig.jsonl interchange format.

npx vex export --from vektor --db slipstream-memory.db --output memories.vmig.jsonl
npx vex import --from memories.vmig.jsonl --to pinecone --api-key $KEY --index my-index --host $HOST
npx vex import --from memories.vmig.jsonl --to qdrant --collection memories
npx vex migrate --from vektor --to qdrant --db memory.db --url http://localhost:6333 --collection memories

Why

Every vector DB has a different API, a different format, and zero interop. Moving your agent memory from VEKTOR to Pinecone, or Qdrant to Weaviate, means writing a one-off script every time.

vex fixes that with a single open format and a growing connector library. Your memory is always exportable, always portable, always yours.

Connectors

| Connector | Export | Import | Status | |-----------|--------|--------|--------| | vektor | ✅ | ✅ v0.1 | Stable | | jsonl | ✅ | ✅ | Stable | | pinecone | 🔜 Phase 2 | ✅ | Tested — 4,900 vectors | | qdrant | 🔜 Phase 2 | ✅ | Tested — 3,917 vectors, auto-create | | chroma | 🔜 | 🔜 | Phase 2 | | weaviate | 🔜 | 🔜 | Phase 2 | | pgvector | 🔜 | 🔜 | Phase 2 |

Install

npm install -g vex
# or run without installing
npx vex --help

Requirements: Node.js >= 18 (native fetch required). No extra dependencies for Pinecone or Qdrant — connectors use the built-in fetch API.

Commands

Export

# Export VEKTOR memory to portable .vmig.jsonl file
vex export --from vektor --db ./slipstream-memory.db --output memories.vmig.jsonl

# Export a specific namespace only
vex export --from vektor --db ./memory.db --namespace trading --output trading.vmig.jsonl

Import

# → Pinecone
vex import --from memories.vmig.jsonl --to pinecone \
  --api-key $PINECONE_API_KEY \
  --index my-index \
  --host https://my-index-xxxx.svc.pinecone.io

# → Qdrant (auto-creates collection if missing)
vex import --from memories.vmig.jsonl --to qdrant \
  --url https://xxxx.cloud.qdrant.io:6333 \
  --collection my-collection \
  --api-key $QDRANT_API_KEY

# → Qdrant local (no auth)
vex import --from memories.vmig.jsonl --to qdrant --collection memories

Migrate (direct — no intermediate file)

# VEKTOR → Qdrant in one command
vex migrate --from vektor --to qdrant \
  --db ./memory.db \
  --url http://localhost:6333 \
  --collection memories

.vmig.jsonl Format

One JSON object per line. UTF-8. Portable across any vector store.

{
  "id": "1234",
  "text": "Pepe trending #5 on CoinGecko (+2.0% 24h)",
  "vector": [0.021, -0.043, 0.018, "...384 or 768 floats"],
  "model": "bge-small-en-v1.5",
  "dims": 384,
  "namespace": "trading",
  "score": null,
  "metadata": {
    "tags": "crypto,trending",
    "importance": 1.0,
    "agent_id": "default"
  },
  "created_at": "2025-01-15T10:23:00.000Z",
  "source_store": "vektor",
  "vex_version": "1.0.0"
}

Key decisions:

  • Metadata is flat — Pinecone compatible out of the box
  • namespace is top-level — structural routing, not descriptive metadata
  • text field always preserved — enables cross-model re-embedding in v0.2
  • score field included — useful for search-result exports
  • Sidecar .vmig.meta.json for file-level metadata (record count, SHA-256 checksum, source store)

Embedding Handling

| Scenario | Behaviour | |----------|-----------| | Same model, same dims | Vectors copied directly — no re-embedding | | Dim mismatch with target | Records skipped with warning + count in summary | | null vector | Record skipped with warning | | Different model (v0.2) | Re-embed from text field via Drift-Adapter |

Connectors auto-detect target dimension (Pinecone: queries index metadata API, Qdrant: queries collection config) and filter records accordingly. Batch retry logic (3x with backoff) built in.

Sidecar Metadata

Each export and import produces a .vmig.meta.json alongside the data file:

{
  "exported_at": "2025-01-15T10:23:00.000Z",
  "source_store": "vektor",
  "record_count": 5026,
  "checksum": "sha256:abc123...",
  "vex_version": "1.0.0"
}

After import, the sidecar is updated with imported_to and imported_at fields for full auditability.

Progress & Summary

Every import shows a live progress bar and a summary block:

[████████████████████] 100% pinecone (4900/4900)

┌─ pinecone summary ─────────────────────────
│  total records   : 4900
│  upserted        : 4900
│  skipped         : 0
│  duration        : 87.3s
└────────────────────────────────────────────

Roadmap

v0.0.1 — shipped

  • VEKTOR export
  • JSONL round-trip
  • Format spec v1.0.0

v0.1.0 — shipped

  • Pinecone import (tested: 4,900 vectors)
  • Qdrant import (tested: 3,917 vectors, auto-create collection)
  • SHA-256 checksum in sidecar meta
  • Batch retry with backoff (3x)
  • Progress bar + summary block

v0.2 — next

  • Pinecone export
  • Qdrant export
  • ChromaDB connector (import + export)
  • --namespace filter on all connectors
  • --limit flag for partial exports

v0.3 — shipped

  • Weaviate, pgvector connectors
  • Re-embedding pipeline (different model → re-embed from text field)
  • Streaming for large datasets (>100k vectors)

v0.4 (premium)

  • Pre-trained Drift-Adapter weights (vec2vec translation — no re-embedding required)
  • Multimodal support

Contributing

PRs welcome — especially new connectors.

Each connector is a single file in connectors/ implementing two functions:

{ extract(opts), load(records, opts) }

See connectors/qdrant.js as the reference implementation. The Vex core handles batching, dimension filtering, retry, progress, and sidecar generation.

License

Apache 2.0 — free to use, fork, and build on.


Built by VEKTOR — persistent semantic memory for AI agents.