cap: Documentation
Browse Sign In

Libraries

Language implementations, shared semantics, and usage patterns

Implementations

All implementations follow identical semantics for canonicalization, matching, dispatch, and specificity.

Language URN Library Cap Library
Rust tagged-urn-rs capdag (reference implementation)
Go tagged-urn-go capdag-go
Python tagged-urn-py capdag-py
JavaScript tagged-urn-js capdag-js
Swift / Objective-C tagged-urn-objc capdag-objc

Rust is the reference implementation. All other implementations are tested against the same specification and test vectors.

Shared Semantics

Every implementation guarantees:

  • Canonicalization — Tags stored in BTreeMap (or equivalent sorted structure) for alphabetical ordering. Direction tags (in, out) normalized to media: when missing or *.
  • Matching — Full ?/!/* wildcard truth table for generic Tagged URNs. Simpler tag-presence matching for Cap non-direction tags (no ?/! semantics).
  • Dispatch — Three-axis mixed variance: contravariant input, covariant output, invariant cap-tags. See Dispatch.
  • Specificity — Tag-count scoring for Cap URNs (0 or 1 per tag). Graded scoring (0–3) for generic Tagged URNs.
  • Conformanceconforms_to is asymmetric. is_dispatchable uses it with direction-aware variance.

Rust Example

use capdag::CapUrn;

// Direction tags default to media: when omitted
let provider = CapUrn::from_string("cap:op=extract")?;

let request = CapUrn::from_string(
    "cap:in=\"media:pdf;bytes\";op=extract;out=\"media:text;utf8\""
)?;

// Use is_dispatchable for routing (NOT accepts)
assert!(provider.is_dispatchable(&request));

Go Example

import "capdag-go/urn"

provider, _ := urn.NewCapUrn("cap:op=extract")
request, _ := urn.NewCapUrn(`cap:in="media:pdf;bytes";op=extract;out="media:text;utf8"`)

// Dispatch check
if provider.IsDispatchable(request) {
    // route to provider
}

Python Example

from capdag.urn import CapUrn

provider = CapUrn.from_string("cap:op=extract")
request = CapUrn.from_string('cap:in="media:pdf;bytes";op=extract;out="media:text;utf8"')

if provider.is_dispatchable(request):
    # route to provider
    pass

Semantics Boundaries

  • Generic Tagged URN ?/!/* truth table applies to TaggedUrn APIs.
  • Cap direction semantics and Cap non-direction tag matching follow CapUrn::is_dispatchable behavior.
  • Tie-break logic varies by subsystem — do not assume a single global policy. See Ranking for details.