Uniforms are a superset of URIs, they are byte strings with this general syntax:

 uniform       = scheme ":" opaque-string
 scheme        = 1*<prinable ascii chars except ":">
 opaque-string = 0*VCHAR

To address entities in the PSYC network a new (URI) scheme has been defined: 'psyc' (see below).

PSYC nodes (especially servers) MAY allow routing of packets based on just the scheme name part of the uniform. This allows gateways to use alternate addressing schemes. (For example IRC_URI).

See also Spec:Routing about this.


This ABNF is a bit informational and not completely formal, the general syntax for a URI should be taken from RFC 2396.

 uniform     = "psyc://" hostname [ ":" port [ transport ] ] [ "/" [ object-name ["#" channel ] ]
 hostname    = <hostname, see also 'host' definition in RFC 2396 section 3.2.2.>
 port        = <a port number (should be negative for non connectable ports!)>
 transport   = "c" | "d" | "s"
 object-name = [ type ] name
 type        = "@" | "~" | "$"
 name        = <see 'opaque_part' in RFC 2396 section 3. (any printable characters except "#")>
 channel     = <see 'opaque_part' in RFC 2396 section 3.>


Port numbers are typically used when connecting to a client process in a peer to peer manner. Servers would use DNS SRV instead, if for some reason they cannot use the canonical port number.


The 'transport' part of the uniform defines what kind of transport is used. The absence of the transport denominator character implies a recommendation to pick an option at discretion of the caller.

  • "c" - a TCP circuit
  • "d" - a UDP port
  • "s" - a TLS circuit

See also Circuit.



About the semantics of the channel part of a uniform, see Spec:Entity.