Date: 4. 4. 04
Expires: when 1.0 is ready
1995 - 2011
C. von Loesch

Uniforms for PSYC


Status of this Memo

This document describes portions of version 0.99 of the PSYC Protocol for SYnchronous Conferencing. You may consider it an Internet-Draft and as such subject to all provisions of Section 10 of RFC2026 except that the right to produce derivative works is not granted. In all matters of intellectual property rights and procedures, the intention is to benefit the Internet community and the public at large, while respecting the design decision to keep the original author of the protocol in charge. We don't like the bloat effects other efforts are experiencing. Only if you have developed an application in accordance to this specification you may call it PSYC-compliant to the version mentioned above.


We introduce a new URI scheme psyc:, which is used to identify or locate a person, group, place or a service and specify its ability to communicate using the Protocol for SYnchronous Conferencing PSYC.

People register at their favourite PSYC server and can, from then on, be referenced there, even when they are not online. Places (chat rooms) are essentially permanent and have a stable address over time.

This enables for PSYC identificators to be advertised on the Web, in E-Mail and in the UseNet, making a directory service to find people or meet new people, intrinsic to the protocol, unnecessary. You can create one easily with any web-based database, for instance.


One of several brilliant concepts introduced by Tim Berners-Lee when he hacked up the World Wide Web was the concept of the Uniform Resource Locator (URL). One string giving the web browser all the hints it needed to fetch the resource. This was fundamental for building a world-wide hypertext.

Soon after, the idea came up of having location-independent identifiers for the resources. One uniform string was supposed to tell the browser all it needed to know, and it would find the nearest place where to fetch the resource. Since the early nineties a group of researchers and enthusiasts got together at WWW conferences and the W3C to define such a syntax for Uniform Resource Identifiers (URI), but they just couldn't find solutions and agreement. So the URI was boiled down to just a more generic variation of the good old URI.

The fact that HTTP uses the acronym URI for URLs and even the specification of the URI which resides at contains the word URL shows how blurry the distinction has become.

In the meantime the purists got together again and tried to define the Uniform Resource Name (URN) as being what URI was originally meant to be. They are still doing so.

As you can see we have given it much thought, because PSYC uses the concept of Indentification versus Location at the foundation of its protocol. Also since PSYC uniforms identify or locate people, the 'R' in the URL URI and URN acronyms has become inappropriate.

So we decided to introduce the new acronyms UNL and UNI. And since the world has seen enough acronyms, we decided to avoid using them, and rather to speak about identities and locations, pointed to by uniforms.

So whenever you see us mention a uniform just think of it as a slightly enhanced form of a URI.

The Uniform Network Location

First off, a UNL is the acronym for Uniform Network Location, which is semantically identical to the URL, except that "resource" isn't very applicable to human beings.

The Uniform Network Identification (UNI) is a UNL with the additional feature of being a permanent address for mobile entities like humans. A UNI will relay or delegate communication to a current user's location as long as the user is online, and also serve as guarantee of authenticity.

Syntax of psyc: Uniforms

A PSYC uniform looks like this:

psyc:[//{hostname} [: [{port}][{transport}] ] /[{object-name}] [ #{channel-name} ]

(without whitespace obviously).

A default port number will have to be decided upon. Current best practice is to allocate port number 4404.

Transport is a single letter indicating which underlying network protocol to use. 'c' stands for circuit, like TCP on the Internet. 'd' stands for datagram, that is UDP in the Internet context, or CP MSG on the Bitnet. 'm' could be defined to indicate usage of Multicast IP, but the use of this isn't defined yet. 's' stands for secure. It's a variant of circuit with TLS encryption activated. Other schemes like "http" necessitated a second scheme called "https" for the same purpose. The default meaning, when no transport is given, is that the addressed entity supports both TCP and UDP, if it is on the Internet. Encryption may become available upon negotiation.

The object-name is one of the following:

  • @{group} is a programmable group channel. This actually points to the channel's control program, which can give information about the channel and is the authority for letting you enter the group. The address of the control program also serves as identification of the group and is needed as such by the routing infrastructure of PSYC.

  • ~{nickname} is a freely chosen name to identify the person who uses it. One nickname cannot be registered on one PSYC server twice, but you may pick any server, where the nickname has not yet been registered. The identity of a person is also used to define the group of friends or generally his social network around him, so in a way every person is also a group.

  • ${service} identifies gateways or other kinds of automated services.

  • {future extensions} in the PSYC server which should not require changes in the user interface programs.

Leaving the object-name out means you are referencing the PSYC server itself for information and registration purposes.

So a typical UNI in a WWW page would be psyc:// and one in a .signature psyc://

Channels are subsets of the groups defined by an identification. Entering only certain channels of a group allows you to filter the way you are part of it. For instance a newscasting group may define a #sports and a #politics channel, whereas entering the group itself would bring you all news unfiltered. Analogously, a person can put the people it knows into channels like #friends and #family, and send differing messages to them. A client program needs to consider all channels essentially a variant of the same entity, this is why this is a quite compliant use of the '#' sign according to current URI specifications.


Should there be ways to suggest the method to be called, and even routes for the packets to take (intermediary proxies) ? Maybe like this: psyc:// No I no longer think that's a good idea.

It is being argued that the @ and ~ should not be special characters, that in fact there is no need to distinguish a person's from a group's UNI, since clicking on it will make the receiving server react appropriately (with a group-entry confirmation, or a conversation initiation).