Fluid Nexus
mobile messaging without the mobile phone network

Fluid Nexus Manual

1   Meta

1.1   Authors

  • Nicholas Knouf <nknouf [[at]] zeitkunst {{dot}} org>

1.2   Suggestions, Errata, and Translations

All are welcome. Please contact the author.

2   Introduction

In the second decade of the twenty-first century, networks continue to be defined by their stable topology represented in an image or graph. Peer-to-peer technologies promised new arrangements absent centralized control, but they still rely on stationary devices. Mobile phones remain wedded to conventional network providers.

Instead, the combination of peer-to-peer with mobility enables a new concept of an information transfer infrastructure that relies on fluid, temporary, ad-hoc networks. People and devices are at once implicated as mobile nodes in this network (known in computer science as a sneakernet).

Fluid Nexus is a demonstration of how one might design software to bypass Internet intermediaries' control over the identification and circulation of messages. It is a piece of interrogative software art, of a piece with other attempts to rework network topology such as the Eternal Network used by mail artists or projects such as Dead Swap or netless. We draw partial inspiration from the potential activist re-purposing of digital technologies without being subsumed by the same goals.

In the event that information needs to reach a broad audience, we've added another feature called the Nexus. The Nexus is a space on this site for "public" messages to be automatically uploaded by any Fluid Nexus user. The Nexus includes text, audio, images, and video capabilities. The sender has control whether the message will become public or not.

While Fluid Nexus is designed for non-Internet-based communications, we have also developed the Nexus, a space on this site for "public" messages to be automatically uploaded by any Fluid Nexus user. The Nexus includes text, audio, images, and video capabilities, and the original sender has control whether the message will become public or not. The Nexus extends the reach of the Fluid Nexus non-network beyond those using the software on their phone or laptop/desktop.

For more information on Fluid Nexus, see the paper "Transnetworks and the Fluid Nexus Project", forthcoming in Fall 2011 in the proceedings of dis/connecting/media 2009.

3   Terminology & Icons

In this manual Android refers to the Android application, while Desktop refers to the application for Windows and Linux PCs.

The following icons are used throughout the manual and in the applications themselves:

Outgoing messages Outgoing messages
Messages that you've created and that will be passed to other devices running Fluid Nexus
High priority messages High priority messages
Messages that have been marked as high priority.
Public messages created by you Public messages created by you
Messages that you have marked as public and will be pushed by yourself or someone else to the Nexus
Public messages created by someone else Public messages created by someone else
Messages that someone else has marked as public and will be pushed by yourself or someone else to the Nexus
Other messages Other messages
Messages that you've received from other users of Fluid Nexus
Blacklisted messages Blacklisted messages
Messages that you've blacklisted (removed from view)
Attachment Message attachment
Indicates that the given message has an attachment of some sort (audio, image, video)

4   Security

4.1   Identifying Information

Messages are stored on Android in an encrypted SQLCipher database; received attachments are currently stored unencrypted. On Linux and Windows you will need to use local forms of encryption such as by using ecryptfs home directories or LUKS encrypted devices on Linux or TrueCrypt volumes on Windows.

While we do not save any identifying information, it is possible that you may inadvertently identify yourself through something you write or share using Fluid Nexus. Please take this into account when using the software. On Android, we suggest the use of ObscuraCam to anonymize any photos that you decide to share.

4.2   Data Sharing

4.2.1   Bluetooth

On Android, devices must be paired before any data sharing can occur. Because of this need for pairing it is less likely that those unknown to you will be able to access Fluid Nexus messages when you are using the Bluetooth_ network modality alone; however, it is still possible that someone can sniff your Bluetooth traffic and thus see what messages are being sent.

On the Desktop in our testing we have not needed to pair devices ahead of time to share data amongst Linux and Windows clients. Reports from other uses would be welcome.

4.2.2   Zeroconf

On Android and the Desktop, devices will share messages with any other device running Fluid Nexus. This means that others, whom you do not know, will be able to receive Fluid Nexus message (but Fluid Nexus Messages alone) from your device. This is by design, as Fluid Nexus is a broadcast flooding protocol, meant to spread messages as far and as wide as possible.

5   Using Fluid Nexus

The main interface provides a list of all of the messages that have been created or received, sorted from newest to oldest.

android main interface

Main interface of the Android application.

desktop main interface

Main interface of the Desktop application.

Due to the small screen size on Android, you must tap on a message to view it in its entirety:

android view message

Viewing a message (Android)

If there is an attachment, a button will appear that will allow you to open it.

android view message attachment

Viewing a message with an attachment (Android)

On the desktop version, all of the message is displayed in the main window. If there is an attachment, an icon will be displayed with a blue clickable link to open it.

desktop main interface

Attachments can be opened on the desktop by clicking the blue underlined link.

You can further sort messages by their message type via the application menu (Android) or the "View" menu/toolbar buttons (Desktop). This allows you to view all messages (the default), messages to be sent to the Nexus, only those you have created and are thus "outgoing", and blacklisted messages.

android menu

Android menu

desktop view message types

Options for viewing different message types on the desktop version. On the toolbar, from left to right the options are: all, nexus messages, outgoing messages, and blacklisted messages.

5.1   Creating a new message

New messages can be created by selecting the "New Message" menu item on Android or by clicking the "New Message" button on the Desktop toolbar (also available under the "File" menu). This will open up a new message window.

android new message

Android new message window

Desktop new message window

Desktop new message window

Fill out the desired title and message. Messages can be marked as potentially being sent to the Nexus by checking "Public (push to Nexus?)". Attachments can be added as well. In the Desktop application simply press "Choose File..." to open up a file dialog and select the desired attachment. On Android, select the type of attachment (audio, image, video) and then tap "Add Attachment..." to open up the native file choosing application.

You can also set the "priority" of the message. Currently there are two options: "Normal" and "High".

android new message attachment type

Selecting an attachment type on Android

Once complete, you can remove an attachment if desired by tapping "Remove Attachment..." on Android or clicking "Remove File" on the Desktop.

android new message complete

Completed new message window on Android

desktop new message complete

Completed new message window on the Desktop

To save, simply tap the "Back" button on Android, where you will be presented a confirmation dialog, or click "Save" on the Desktop.

android new message save

Save new message dialog on Android

5.2   Editing Messages

Messages you create can be edited or deleted, while messages you receive can be deleted or blacklisted. On Android, to edit or delete a message you have created, long tap the desired message in the main window to open up a context menu.

android outgoing context menu

Android outgoing context menu

On the Desktop, click the Edit message edit message icon or the Delete message delete message icon to do the same.

For messages you have received you either blacklist or delete the message; long tap on Android the desired message to bring up the menu.

android other context menu

Android received message context menu

On the Desktop, click the Blacklist message blacklist message icon or the Delete message delete message icon to do the same.

Once a message is on the blacklist you can only view it by selecting the "Blacklist" view. Once there you can remove it by, on Android, long tapping on the desired message and selecting "Unblacklist Message".

android blacklist context menu

Android blacklisted message context menu

desktop blacklist

Desktop blacklist view

On the desktop, click the Unblacklist message unblacklist message icon.

5.3   Preferences

Both the Android and the Desktop applications have preferences that allow you to control how the applications behave.

5.3.1   General

On both Android and the Desktop is an option whether or not to pass along messages you have blacklisted. If checked, blacklisted messages will be sent.

On Android you additionally have an option to vibrate when new messages arrive.

5.3.2   Network

The "Network" section provides checkboxes to enable or disable particular network modalities. Fluid Nexus is opportunistic and tries to use whatever modality is available to spread messages. Multiple modalities can run in parallel without problems. At the moment we have implemented three modalities:

  • Bluetooth: connects to nearby devices running Fluid Nexus. On Android, attempts to connect to paired Bluetooth devices only.
  • Zeroconf: uses the zeroconf protocol to discover nearby devices running Fluid Nexus and therefore transfer data over wireless or wired networks. This can occur even if you do not have an Internet connection, as data passes only "link-local", meaning behind a single router.
  • Nexus: tries to connect to the Internet to push messages marked as public to the Nexus.
android preferences

Android preferences screen

desktop preferences

Desktop preferences screen

Ad-Hoc Wifi is still under development.

5.3.3   Bluetooth

For the Android version you have the additional option to only connect to previously paired or "bonded" devices. This will skip the device discovery step. While saving battery life, connecting to bonded devices also adds a small layer of security by only sharing data between devices that you already know about.

5.3.4   Scan Frequency

For each of the network modalities (with the exception of "Nexus") you also have the possibility of setting the "Scan Frequency"; this is the amount of time between successive scans for nearby devices. Lower values mean more frequent scans. On Android, low values for the Bluetooth Scan Frequency will severely impact battery life.

android bluetooth scan frequency

Android bluetooth scan frequency

desktop bluetooth scan frequency

Desktop bluetooth scan frequency

5.3.5   Nexus

Finally, the "Nexus" section allows you to set your key and secret for posting to the Nexus. To set this up, first register for an account at http://fluidnexus.net (by either creating a new account there or by logging in using your Google Account). Then, on your user page click "Request a key and secret". Enter these 20-digit numbers into the corresponding boxes in your Android or Desktop application.

android nexus preferences

Android Nexus Preferences

android nexus preferences key

Entering a Nexus key on Android

desktop nexus preferences

Desktop Nexus Preferences

Then, request authorization from within the application. On Android, open the menu and select "Request Nexus Authorization"; on the Desktop click the "Request Nexus Authorization" button.

android menu extension

Android menu showing "Request Nexus Authorization" option

You will be forwarded to the Fluid Nexus website; you must be logged in in order to proceed. Once you have granted authorization to the application (Android or Desktop) to post to the Nexus, you need to setup the Token and Token Secret. On Android, these are filled in automatically for you; on the Desktop, you need to copy and paste these values from the website into the corresponding boxes.

6   Technical Information

6.1   Protocol Buffer implementation

Fluid Nexus uses protocol buffers to share data. The following documents our message format:

message FluidNexusHashes {
    repeated string message_hash = 1;
}

message FluidNexusMessage {
    optional string message_title = 1;
    optional string message_content = 2;
    optional float message_timestamp = 3;
    optional float message_received_timestamp = 10;
    optional string message_hash = 4;
    optional string message_source = 5;
    optional bool message_mine = 6;
    optional bool message_public = 16;
    optional int32 message_ttl = 17 [default = 0];

    enum MessageType {
        TEXT = 0;
        AUDIO = 1;
        IMAGE = 2;
        VIDEO = 3;
    }

    enum MessagePriority {
        NORMAL = 0;
        HIGH = 1;
    }

    optional MessageType message_type = 7;
    optional MessagePriority message_priority = 18;
    optional bytes message_attachment = 8;
    optional string message_attachment_original_filename = 9;
}

message FluidNexusMessages {
    repeated FluidNexusMessage message = 1;
}

Note that no directly identifying information is either sent in the message nor saved in the database. The only way identifying information might be saved is via anything placed in the message itself. Also note that there are no limitations on the length of the message.

The application uses a SHA256 hash of the message title and message content to determine whether or not the message needs to be exchanged. These hashes are first exchanged between devices to determine what needs to be sent. Thus Fluid Nexus uses a type of distributed hash table with the goal of replicating the entire table amongst all devices.

6.2   Network Modalities

Fluid Nexus currently works using Bluetooth and Zeroconf service discovery, with Ad-Hoc Wifi to be developed. Android requires Bluetooth devices to be paired before any data sharing can occur. On the Desktop, sharing between discoverable Linux devices does not require pairing beforehand. (Windows is to be determined.) Zeroconf does not require any pairing and thus messages will be shared between any device running Fluid Nexus and discoverable using Zeroconf service discovery.