Identity (TypeID)
How Dispatch uses prefix-qualified, globally unique identifiers for every entity.
Every entity in Dispatch 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:
job_01h455vb4pex5vsknk084sn02qThe job prefix identifies this as a job. 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/dispatch/id"
jobID := id.New(id.PrefixJob) // job_01h455vb...
workflowID := id.New(id.PrefixWorkflow) // wf_01h455vb...
runID := id.New(id.PrefixRun) // wfrun_01h455vb...
cronID := id.New(id.PrefixCron) // cron_01h455vb...Convenience constructors: id.NewJobID(), id.NewWorkflowID(), id.NewRunID(), id.NewCheckpointID(), id.NewCronID(), id.NewDLQID(), id.NewEventID(), id.NewWorkerID().
Parsing IDs
parsed, err := id.Parse("job_01h455vb4pex5vsknk084sn02q")
parsed, err := id.ParseWithPrefix("job_01h455vb...", id.PrefixJob) // validates prefix
parsed, err := id.ParseJobID("job_01h455vb...") // convenienceNil ID
var empty id.ID
empty.IsNil() // true
empty.String() // ""
id.Nil.IsNil() // trueDatabase 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
| Constant | Prefix | Entity |
|---|---|---|
id.PrefixJob | job | Job |
id.PrefixWorkflow | wf | Workflow |
id.PrefixRun | wfrun | Workflow run |
id.PrefixCheckpoint | ckpt | Checkpoint |
id.PrefixCron | cron | Cron schedule |
id.PrefixDLQ | dlq | Dead letter queue entry |
id.PrefixEvent | evt | Event |
id.PrefixWorker | wkr | Worker |