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.
cmd.js is self-contained so you can copy or symlink into your
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.
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.
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
Once you have run
fringe share ..., you can list all the repos you're sharing with
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.