Share your blocks and subscribe to others'
JavaScript HTML Shell Other
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
bin Move to Node 6. Nov 2, 2016
config Set max_allowed_packet in config. Jan 24, 2017
docs Update doc. Oct 31, 2014
externs Remove My Unblocks. Oct 7, 2014
migrations Revert "Remove profile_image_url_https" Mar 11, 2016
old-migrations Reboot migrations Nov 14, 2015
static Fix subscribe-on-signup bug. Aug 31, 2015
templates Remove beta tag. Aug 29, 2016
test new integration test: Blocking users with low followers (#231) Oct 15, 2016
util Further clarify comment. Sep 8, 2016
.gitignore nit Jan 18, 2015
.travis.yml new integration test: Blocking users with low followers (#231) Oct 15, 2016 Add Code of Conduct Apr 9, 2016
COPYING Add GPL. Aug 4, 2014
Capfile Move to Capistrano for releases. Aug 9, 2014 readme: fix sed command to edit config in-place (#227) Aug 27, 2016
Vagrantfile Use clustering for web frontend. Oct 31, 2016
actions.js Add stats ports for everything. Sep 8, 2016
blocktogether.js Add context to errors in block-all. Jan 22, 2017
jwurl.js Add jwurl.js Feb 1, 2015
package.json Use published revision of log4js. Nov 13, 2016
remove-bogus-external.js Switch to using ints for action fields. Jan 18, 2016 Remove nodemon in favor of auto-reload. Jan 16, 2016
setup.js Print stack trace for uncaught exception. Nov 26, 2016
stream.js Add stream stats. Jan 22, 2017
subscriptions.js Use lodash directly. Mar 10, 2016
twurl.js Add twurl.js May 26, 2015
unblock-all.js Fix various issues found during testing. Jul 9, 2015
update-blocks.js Abort duplicate block updates earlier. Oct 29, 2016
update-users.js Decrease frequency of stale user updates. Nov 26, 2016
util.js Add promiseMap for better memory efficiency. Oct 26, 2016
verify-credentials.js verifyCredentials: return early on error Dec 2, 2016

Block Together

An API app intended to help cope with harassers and abusers on Twitter.

See more details at

Developer Setup Instructions

First, create an app on Twitter for your local version of blocktogether:

  1. Head to and click "Create New App."

  2. Fill out form & click "Create your Twitter application". Important: fill in some arbitrary URL for 'Callback URL.' It will be overridden by the app, but if it's empty you won't be able to log in. The description and website don't matter; You'll only be using this for testing.

  3. Under "Application Settings" > "Access level", click "modify app permissions" and select "Read and Write" access. The write permission is necessary to apply blocks, unblocks, and mutes. You may need to add a phone number to your account in order to get read/write permission.

  4. After you've set the read-write permissions, click the "Keys and Access Tokens" tab. Note that changing your app's permissions will regenerate these keys.

  5. Copy config/development.json to ~/.btconfig.json, and edit the "consumerKey" and "consumerSecret" fields to match the "Consumer Key (API Key)" and "Consumer Secret (API Secret)" fields from the "Keys and Access Tokens" page.

Next, make sure that you have Vagrant installed. From the blocktogether directory, run:

vagrant up
vagrant ssh -c /vagrant/

You can now access your local version of Block Together in a browser at http://localhost:3000.

Note: It's highly recommended you create a few test accounts on Twitter in order to be able to exercise the sharing functionality of Block Together, and so that you don't create or delete blocks on your main account unintentionally.

Developing locally

It’s recommended that you develop in a Vagrant instance; but if you want to develop on your local machine the steps are these:


  1. brew install mysql node (MariaDB can be used in place of MySQL)
  2. brew services start mysql
  3. In MySQL, create a ’blocktogether’ database, a 'blocktogether'@'localhost' user, and grant the latter privileges on the former (see bin/
  4. sed -i 's/__PASSWORD__//' config/sequelize.json (unless you set a database password; then replace __PASSWORD__ with that)
  5. openssl req -new -newkey rsa:2048 -nodes -days 10000 -x509 -keyout config/rpc.key -out config/rpc.crt -subj /CN=blocktogether-rpc
  6. Make a test Twitter account and an app with read/write permissions (follow the instructions above), and add its keys to config/development.json
  7. cp config/development.json config/config.json
  8. npm i
  9. ./node_modules/.bin/sequelize --config config/sequelize.json db:migrate
  10. export BT_CONFIG_DIR=$(pwd)/config
  11. ./


This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see