An experimental implementation of the original finger protocol in Scala.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.


This is an experimental implementation of the Finger protocol as it existed in 1977 in RFC 742.


Phalanges is released under the 3-clause BSD license.


Phalanges uses simple-build-tool to manage its external dependencies:

Configuring and running phalanges

First, update external dependencies and compile:

$ sbt clean update compile

Then edit and/or copy configuration files to where phalanges expects them to be:

$ sudo cp config/phalanges.conf /etc
$ sudo touch /etc/unknown.conf

User information is stored and loaded from config/user_map.json by default.

By default, phalanges runs on port 79. Because of this, you must run phalanges with sudo or as root:

$ sudo sbt run


While there are no known security issues, running experimental software that accepts external network connections is highly risky. If you would like to use phalanges on a public interface, consider running it on a high port and using NAT or a well-tested TCP proxy to expose it to the outside world.

Querying phalanges

You should now be able to use a finger client to query phalanges:

$ finger @
Login                   Name                
mcroydon                Matt Croydon        
robot                   A. Robot

$ finger mcroydon@
mcroydon                Matt Croydon        
Implement archaic protocols.

$ finger unknown@
The user unknown was not found.


Phalanges logs its actions to logs/phalanges.log by default. It also keeps track of the number of indexes and users served since last reboot. This information can be found at by default.


Phalanges uses Metrics to instrument usage. There are currently meters for index and user requests served::

4/9/11 4:33:31 PM ==============================================================
             count = 9
         mean rate = 0.30 served/s
     1-minute rate = 0.00 served/s
     5-minute rate = 0.50 served/s
    15-minute rate = 0.80 served/s

             count = 3
         mean rate = 0.10 served/s
     1-minute rate = 0.00 served/s
     5-minute rate = 0.08 served/s
    15-minute rate = 0.03 served/s

If you would like to monitor your metrics via JConsole, make sure you use sudo jconsole so that you're running JConsole as the same user as your app.


You can execute specs tests with sbt:

$ sbt clean update test

To Do

  • Make storage backend configurable and create additional storage backends.
  • Load user list from disk or datastore.
  • Figure out how to use local configs and get rid of /etc/unknown.conf.