Weave

Identity (TypeID)

How Weave uses prefix-qualified, globally unique identifiers for every entity.

Every entity in Weave has a TypeID. TypeIDs are globally unique, sortable, URL-safe identifiers built on UUIDv7 with a human-readable prefix that tells you what kind of entity you're looking at.

A TypeID looks like this:

doc_01h455vb4pex5vsknk084sn02q

The doc prefix identifies this as a document. The suffix is a base32-encoded UUIDv7 that encodes creation time, so IDs sort chronologically.

The id package

The id package wraps the TypeID Go library (v2) with a single ID struct. All entity types share the same struct -- the prefix distinguishes them.

Creating IDs

import "github.com/xraph/weave/id"

documentID   := id.New(id.PrefixDocument)    // doc_01h455vb...
collectionID := id.New(id.PrefixCollection)  // col_01h455vb...
chunkID      := id.New(id.PrefixChunk)       // chk_01h455vb...

Convenience constructors: id.NewDocumentID(), id.NewCollectionID(), id.NewChunkID(), id.NewPipelineID(), id.NewIngestJobID().

Parsing IDs

parsed, err := id.Parse("doc_01h455vb4pex5vsknk084sn02q")
parsed, err := id.ParseWithPrefix("doc_01h455vb...", id.PrefixDocument)  // validates prefix
parsed, err := id.ParseDocumentID("doc_01h455vb...")                     // convenience

Nil ID

var empty id.ID
empty.IsNil()  // true
empty.String() // ""
id.Nil.IsNil() // true

Database storage

id.ID implements Scanner and driver.Valuer. Stores as a string, returns NULL for nil IDs.

JSON serialization

id.ID implements TextMarshaler and TextUnmarshaler. Nil IDs serialize as empty strings.

Prefix reference

ConstantPrefixEntity
id.PrefixDocumentdocDocument
id.PrefixCollectioncolCollection
id.PrefixChunkchkChunk
id.PrefixPipelinepipePipeline
id.PrefixIngestJobingjobIngest job

On this page