./fringe

Our first software release is a tool called “fringe” for self-hosting git repos over tor hidden services. We can use fringe to publish our software projects (including fringe itself) as well as explore how we want to evolve a set of practices for some kind of “anarchist software development” not mediated by platforms, administrators, or accounts (to varying degrees).

One of our design goals with fringe is to have a lightweight daemon to run on the computers we already have with varying levels of connectivity. We will explore how to create arrangements for mirroring across similarly unreliable devices to increase availability overall, when that is a desirable property.

With fringe, you are anonymous by default, as much as we can manage. git demands a “name” and “email” by default and will not let you commit anything until you have provided something. When you create a fringe repo with fringe init or clone an existing repo with fringe clone, a project-local email and name are generated from random characters. You can fringe rotate to generate a new random email and name.

git will also leak your time zone by default which can be very revealing in some cases. Even without a time zone, dates and times can be revealing in other ways. fringe installs a hacky post-commit hook to set the date on every commit to 00:00 on January 1, 1970 for both the AuthorDate and the CommitDate. If you fringe log (alias for git log --format=fuller) you can see all the commit headers to make sure you didn't miss something.

To get started, you will need:

Once you have the installation requirements, run this command to download the software:

torsocks git clone -o ewaste git://ewastevhn3dool3z7jilzvujshallrmitd6jcnr4jwgy6hriumkbzjad.onion/fringe

The -o ewaste is our way of de-emphasizing the origins of the software and its role as the “authoritative” version. Our future work will expand on this idea further.

The file cmd.js is self-contained so you can copy or symlink into your $PATH.

ln -s $PWD/fringe/cmd.js ~/.local/bin/fringe

Once you have the command, you can fringe init from the cloned git directory to initialize commit anonymization and the config for proxying through tor.

Then run fringe daemon in a terminal tab, screen, tmux, init script, or whatever and leave it running. Check out the readme in the git repo for fringe that you cloned earlier and type fringe to see a list of basic usage info.


If you didn't skim through the readme, here's a quick synopsis for how to share a local git repo with fringe so that anyone with tor can clone it.

First, get a list of your local hidden service addresses by running fringe onions. fringe will automatically create a hidden service address the first time it is set up.

Next, cd to a repo you want to share or create a new repo with fringe init then add some commits. If you choose an existing repo not created with fringe, be aware that the commits will contain the name, email, date, and timezone info that git saves by default.

Once you have selected a local repo to share and navigated to its directory, run fringe share ONION REPO_NAME with an ONION address from fringe onions and a REPO_NAME that you want to share this repo under (as git://ONION/REPO_NAME).

Once you have run fringe share ..., you can list all the repos you're sharing with fringe repos.

If you want someone else to be able to clone your repo, they can either run:

fringe clone git://ONION/REPO_NAME

if they have fringe or else they can run:

torsocks git clone git://ONION/REPO_NAME 

if they only have git and torsocks.


We invite you to take, steal, modify, take credit for, and generally make the software your own.


http://ewastevhn3dool3z7jilzvujshallrmitd6jcnr4jwgy6hriumkbzjad.onion/fringe