It requires Swift 6.4 or newer, on macOS 15, iOS 18, tvOS 18, watchOS 11, visionOS 2, or Linux, and takes its matrix views and low-precision scalars from NumKong. It exposes dense indexes; sequence, matrix and geospatial indexes follow as the C library ships them.
Topics
| Installation | The package compiles the Swift surface only, and depends on NumKong as a source package. |
|---|---|
| Quickstart | Every verb is a batch over a RowsView: a base pointer, a row count, the values per row, the byte pitch between consecutive rows, and the scalar kind they hold. |
| Executors38 | An index says where its payload lives; an Executor says who walks it. |
| Keys8 | A key is sixteen opaque bytes, rendered as a lowercase dashed UUID. |
| Inputs and Outputs92 | Every output whose length only the call knows, such as matches, rows, products, monoliths and cursor or stream batches, lands in an Arena you pass, and the verb answers a view over it without copying. |
| Metrics52 | A DenseIndex holds equidimensional vectors under keys, and its verbs below take every receiver above. |
| Residency6 | Where the payload lives is the constructor's name, as in the C lifecycle verbs, so a residency an index lacks has no constructor to call. |
| Serialization53 | Checkpoints ride the SafeGraphs interchange format, and the path extension picks the layout: a .safegraphs monolith, or a .safegraphs.json manifest beside its shards. |
| Filtered Search2 | The predicate runs on the executor's threads, so it must be @Sendable and safe for concurrent use; an error it throws rejects that key. |
| Refinement23 | refine re-selects the neighbors of every stored entry against the finished graph and returns a DenseRefineReport: the entries re-selected and changed, the islands found and reconnected, and the closing audit. |
| Linear Algebra35 | Three verbs, multiply, maxsim and attend, treat the index as a sparse operand rather than as a kNN store, each folding its arithmetic into the graph walk instead of materializing a match list. |
| Retrieval and Streaming42 | get lands every vector stored under a key in its arena, one row per entry sharing the key, converted to the scalar kind as: names. |
| Introspection52 | health audits how much of the graph a search reaches from its landmarks; entries it misses stay unfound until a refine re-links them. |
| Errors27 | USearchError is the only error the SDK throws, and every method says so with throws(USearchError), so a catch reads error.status with no cast. |
| Platform Notes |