From 57bc4356ab6bc6d1e0701ff6ae0c52a42f4ef5db Mon Sep 17 00:00:00 2001 From: funkpower Date: Mon, 21 Sep 2026 08:15:26 -0400 Subject: [PATCH] publish as catena-corpus on PyPI and npm MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Both registries already have a `catena`: an HPE blockchain client on PyPI, and a JavaScript OOP wrapper at 2.2.0 on npm. Neither is going anywhere, so the distributions take a name that is free on both. The Python import is unaffected — a distribution name and a module name are independent there, so `pip install catena-corpus` still gives `import catena`, and nothing in the examples or the bindings changes. On npm the package name is the import specifier, so that one does change: `import { chunkMarkdown } from "catena-corpus"`. The crates keep their own names. `catena` is free on crates.io. --- README.md | 4 ++-- crates/bindings/README.md | 8 ++++---- crates/bindings/npm/README.md | 6 +++--- crates/bindings/npm/package.json.in | 2 +- crates/bindings/pyproject.toml | 2 +- examples/README.md | 4 ++-- examples/typescript/package.json | 2 +- examples/typescript/src/episode-to-chapters.ts | 2 +- examples/typescript/src/search-and-rerank.ts | 2 +- 9 files changed, 16 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index 09ed412..48359d7 100644 --- a/README.md +++ b/README.md @@ -77,8 +77,8 @@ callable in process from three languages: | | Install | Import | |---|---|---| -| **Python** | `pip install catena` | `import catena` | -| **JavaScript** | `npm install catena` | `import { chunkMarkdown } from "catena"` | +| **Python** | `pip install catena-corpus` | `import catena` | +| **JavaScript** | `npm install catena-corpus` | `import { chunkMarkdown } from "catena-corpus"` | | **C** | build the `capi` feature | `#include ` | ```python diff --git a/crates/bindings/README.md b/crates/bindings/README.md index d75de60..a7c57b7 100644 --- a/crates/bindings/README.md +++ b/crates/bindings/README.md @@ -25,7 +25,7 @@ call the same Rust and hand back the same records. ## Python ```sh -pip install catena +pip install catena-corpus ``` ```python @@ -100,11 +100,11 @@ server, and none of that is cheaper in process. ## JavaScript ```sh -npm install catena +npm install catena-corpus ``` ```js -import { chunkMarkdown, scrub, countTokens, fuseHits } from "catena"; +import { chunkMarkdown, scrub, countTokens, fuseHits } from "catena-corpus"; const chunks = chunkMarkdown(markdown, 512, 64); chunks[0].page; // 41 @@ -125,7 +125,7 @@ Two builds, because the loaders differ — node reads the `.wasm` off disk at import, the web build takes a URL a bundler rewrites: ```js -import { chunkMarkdown } from "catena"; // resolves per environment +import { chunkMarkdown } from "catena-corpus"; // resolves per environment import { chunkMarkdown } from "catena/node"; // or pick one import { chunkMarkdown } from "catena/web"; ``` diff --git a/crates/bindings/npm/README.md b/crates/bindings/npm/README.md index b067f64..08dd3d0 100644 --- a/crates/bindings/npm/README.md +++ b/crates/bindings/npm/README.md @@ -4,11 +4,11 @@ Turn a pile of files into a searchable corpus: chunking, scrubbing, subtitles and rank fusion, as WebAssembly. ```sh -npm install catena +npm install catena-corpus ``` ```js -import { chunkMarkdown, scrub, countTokens, fuseHits } from "catena"; +import { chunkMarkdown, scrub, countTokens, fuseHits } from "catena-corpus"; const chunks = chunkMarkdown(markdown, 512, 64); chunks[0].page; // 41 @@ -60,7 +60,7 @@ at compile time. Those stay command-line tools. ## Node and the web ```js -import { chunkMarkdown } from "catena"; // resolves per environment +import { chunkMarkdown } from "catena-corpus"; // resolves per environment import { chunkMarkdown } from "catena/node"; // or pick one import { chunkMarkdown } from "catena/web"; ``` diff --git a/crates/bindings/npm/package.json.in b/crates/bindings/npm/package.json.in index aacb404..5b08da5 100644 --- a/crates/bindings/npm/package.json.in +++ b/crates/bindings/npm/package.json.in @@ -1,5 +1,5 @@ { - "name": "catena", + "name": "catena-corpus", "version": "@VERSION@", "description": "Turn a pile of files into a searchable corpus: chunking, scrubbing, subtitles and rank fusion, as WebAssembly", "license": "MPL-2.0", diff --git a/crates/bindings/pyproject.toml b/crates/bindings/pyproject.toml index 1109047..1ae34b4 100644 --- a/crates/bindings/pyproject.toml +++ b/crates/bindings/pyproject.toml @@ -3,7 +3,7 @@ requires = ["maturin>=1.9,<2.0"] build-backend = "maturin" [project] -name = "catena" +name = "catena-corpus" description = "The catena libraries behind one surface, for calling in process rather than as a subprocess" readme = "README.md" license = "MPL-2.0" diff --git a/examples/README.md b/examples/README.md index 24e7388..2f6c825 100644 --- a/examples/README.md +++ b/examples/README.md @@ -75,12 +75,12 @@ convert, then loop, and what is left is the part that is actually about your schema. ```sh -pip install catena +pip install catena-corpus python examples/python/book_to_citations.py ``` ```sh -pip install catena psycopg +pip install catena-corpus psycopg DATABASE_URL=postgresql://user@host/db \ python examples/python/search_and_rerank.py "why did the empire decline" ``` diff --git a/examples/typescript/package.json b/examples/typescript/package.json index b5e8fbc..1c5b516 100644 --- a/examples/typescript/package.json +++ b/examples/typescript/package.json @@ -7,7 +7,7 @@ "search": "node --experimental-strip-types src/search-and-rerank.ts" }, "dependencies": { - "catena": "file:../../crates/bindings/npm/dist" + "catena-corpus": "file:../../crates/bindings/npm/dist" }, "devDependencies": { "@types/node": "^22" diff --git a/examples/typescript/src/episode-to-chapters.ts b/examples/typescript/src/episode-to-chapters.ts index 1088b04..91dd403 100644 --- a/examples/typescript/src/episode-to-chapters.ts +++ b/examples/typescript/src/episode-to-chapters.ts @@ -11,7 +11,7 @@ // broadcast — a work of the US government, so public domain. import { readFileSync } from "node:fs"; -import { parseSubtitles, segmentCues, packCues, countTokens } from "catena"; +import { parseSubtitles, segmentCues, packCues, countTokens } from "catena-corpus"; const SAMPLE = `WEBVTT diff --git a/examples/typescript/src/search-and-rerank.ts b/examples/typescript/src/search-and-rerank.ts index ced2643..2b61088 100644 --- a/examples/typescript/src/search-and-rerank.ts +++ b/examples/typescript/src/search-and-rerank.ts @@ -12,7 +12,7 @@ // vector database and whatever else. What they came from does not matter // here; only where each of them placed does. -import { fuseHits, type Hit } from "catena"; +import { fuseHits, type Hit } from "catena-corpus"; // `payload` is whatever you want carried alongside — rrf hands it back // untouched, so a hit can arrive here with the row it came from attached.