DEV Community

loading...
Cover image for Phabricator is Phabulous

Phabricator is Phabulous

deciduously profile image Ben Lovy ・5 min read

Phabricator is SO COOL y'all. I gotta tell you about it.

Until this week the only collaborative toolset I'd ever used is what's built in to GitHub. Which, to be sure, is pretty cool. Once your projects get to a certain size, Issues and Milestones are a much better way to organize than //TODO comments.

Phabricator is a whole other step up, though. Originally created internally to coordinate software development at Facebook, the project maintainer Evan Priestly eventually left his post to create the Phallacity company and work on Phabricator phull-time.

All-in-one

Phabricator isn't just GitHub Projects. It's a suite of interconnected tools. I'm sure it's one of many and most of you probably use a similar integrated solution at work, but this one is my first, and I like it a lot.

Differential

It integrates with Git, and if you're familiar with a GitHub Pull Request the analog is a Differential Revision:

Differential Revision

Everything is on one page, making it easy to navigate through this revision's history and see all changes throughout the repository:

DiffRev Diff

Harbormaster

Harbormaster is the built-in continuous integration tool:

Harbormaster

This project has integrated with Jenkins for a completely automated CI/CD pipeline.

Maniphest

Maniphest is for working on the Task level - more or less analogous to a GitHub Issue.

Maniphest

You can associate subtasks and parent tasks, as well as specific Differential Revisions.

Dashboards

Phabricator is super customizable. Here's a customized "Task Finder" Dashboard that @codemouse92 created for this instance:

task finder

By correctly leveraging project and help wanted tags, you can easily guide would-be contributors towards easy entry points in the code.

Herald

Herald is a rules engine, letting you script logic into many parts of the site. It can automatically add project tags to new Differential Revisions, or add subscribers, or reject commits from team members without the requisite project affiliations - and much more. I haven't used it yet, as it's already configured for this instance, but there's clearly a lot of power there.

Phriction

Phriction is the built-in wiki.

phriction

Yup. It's a wiki. No surprises there, but useful to have integrated.

Projects

This is a way to organize your Maniphest tasks. There's a Kanban-style Workboard:

kanban

Just like home!

Ponder

Ponder is a space for open-ended, general discussion that isn't specifically tied to any particular Task or Differential Revision.

ponder

Of course, these are Phabricator objects as well.

Phurl

There's even a built-in URL shortener:

phurl

Super handy!

Conpherence

Conpherence is the built-in chat application - think Slack-Lite:

conpherence

Phame/Pholio

In addition to the above sections, there are also dedicated spaces to upload static assets like images and fonts, and a place to publish blog posts - all of course generating hyperlinkable Phabricator objects!

Hyper-linked to the MAX

This is the best part. Every single thing gets a unique identifier. A Differential Revision might get D238, a Task might be T1235, the chatrooms are Z23, users are @bdlovy, et cetera.

What's great is that the moment one of these tags is mentioned anywhere it gets hyperlinked in both places. Every Phabricator object ID gets surrounded by a grey box:

link

That grey box is a link to the object in question - which now has a link right back:

mention

The built-in chat widget is a Phabricator object too, so if you ask for help in a chatroom for a specific task, and you'll get a link just like that on the task page to the specific point of the chatroom logs.

Of course, these object IDs are searchable as well:

search

Arcanist

Phabricator has a command-line tool that exposes nearly all webapp functionality at the command line. I've so far just used it for creating a new Differential Revision. Once you've made your changes in your separate branch, you can git commit and then run arc diff.

You can use the above tags here, too, though! When you commit with arc diff, your $EDITOR will open and let you write up the Differential Revision sections:

Scrobble BitClass2

Summary: Progress towards T1225: Scrobble ALL the bits.  Bits from BitClass2 have now been fully scrobbled.

Test Plan: Test suite has been updated

Reviewers: @smartperson

Subscribers: @peerwhoknowsstuff

Revert Plan: Reset to commit f928ybrv9q48th from landing D291

Edit it, save it, boom. Automatically, any configured linters and E2E tests get run, your CI/CD is engaged, and you get a link to the created Differential Revision link to your CLI. At the same time, the Phabricator pages for each of T1225, commit f928ybrv9q48th, and Differential Revision D291 have been updated themselves to include a link to the new revision you just created, just because you mentioned it. Also, any mentioned reviewers and subscribers are notified.

When you host a Phabricator mirror in GitHub, you get this whole message. Phabricator:

phabricator DR

GitHub:

github PR

It's good stuff.

PHP

If you've been paying attention, you've noticed several of these tools have a phunky ph in 'em. Yep, this tool is implemented in PHP - like it or not, it's a staple. It might not have "sex appeal" anymore, whatever the heck that means, but it's hard to deny that it's more than capable of getting the job done however complex that job may be.

FOSS

Phabricator is phree! That's right, it's some Pretty Handy Open-Source Software. It's also completely free of charge. The source is on GitHub (and Phabricator) and you can run it on your own hardware as-is. They do offer hosted instances and enterprise support, but there's nothing stopping you from spinning up a personal-use instance right now (except perhaps ISP conditions).

I've had a blast getting familiar with this tool - it blows GitHub out of the water in terms of utility. Each individual part isn't necessarily novel or groundbreaking, but each does work incredibly seamlessly. To me, though, the real boon here is the interconnectedness. The automatic hyperlinking between Phabricator objects is simple, intuitive, and you never need to worry about it. I feel I'm already spoiled.

All that said, it's also my first time using a tool like this beyond GitHub - what else ya got for me?

Photo by Ant Rozetsky on Unsplash

Discussion (10)

pic
Editor guide
Collapse
tiguchi profile image
Thomas Iguchi

I've been using Phabricator for a while now and I love it. It's just hard to convince non-technical people to use it, since it can be visually quite overwhelming, and the obscure module names such as "Maniphest" are a constant source for head scratchers ("where do I find the tickets again?").

At least it's possible to customize the heck out of it, so I created a main menu side bar with reasonable, self-describing entries in it such as "Repositories" instead of "Diffusion" or "Code Review" instead of "Differential".

Other than that it's a great hub for keeping everything organized and in one place. In addition to what you mention in your post, I also want to point out that Phabricator has a pretty powerful feature for event handling and scripting. It can be used to set up simple and complex rules that trigger an action or that enforce access rights and policies, e.g. "start a Jenkins build if there's a new commit in a certain branch" or "refuse a commit if a protected file has been changed and the committer is not member of a specific project".

If anyone's interested in self-hosting Phabricator: it can be really a pain in the backside to install.
I created an interactive installation Bash script a couple years ago that does the whole installation and setup process automatically. Unfortunately it only supports Debian, but with a minor tweak Ubuntu should work as well

Collapse
deciduously profile image
Ben Lovy Author

Thanks for adding on to this! I haven't looked into Herald yet, it looks really cool (and clearly already put to good use in this organization).

Too bad about the install process - thankfully there's devs like you who don't put up with that :)

Collapse
lijukrks profile image
Liju Kuriakose

Thanks a lot that the installation script is very useful for me I am using the ubuntu server, but I managed to change the script as I need.

Collapse
codemouse92 profile image
Jason C. McDonald • Edited

Great write-up!

I also love the Remarkup markup language specific to Phabricator. Compared to Markdown, it's just a lot more intuitive!

Also, you may not have discovered it yet, but by wrapping those codes in curly braces, like {P1} or {T567}, you actually get an embedded form of the object. Usually Differentials and Tasks are just listed with title and status, but other objects, like Pastes (P) and Slowvote Polls (V), the contents are actually displayed right there.

There's sort of a playful spirit about the whole thing that also makes it a joy to use, in my opinion. They even took the time to build a meme generator, Macro, right in. You upload images to Macro, and then you can embed them in any Remarkup text with a custom caption. Soooo much room for abus...uhm...productivity. ;)

Just for kicks, here's a (mostly) complete list of the applications in Phabricator to date. I've marked the ones I have never used with as *:

  • Almanac: Service directory for distributed computing/clusters.*
  • Audit: Browse code, post-commit reviews.
  • Badges: Reward users.
  • Calendar: Events and scheduling. (Prototype)
  • Conpherence: Chat with other users.
  • Countdown: Uhm...that's a countdown tool.
  • Dashboards: Customizable pages.
  • Differential: Pre-commit reviews (think pull request)
  • Diffusion: Repository browser and manager.
  • Drydock: Manage distributed build resources.*
  • Flags: Personal bookmarks of Phabricator objects.
  • Fund: Accept donations. (Prototype)*
  • Harbormaster: CI/CD integration.
  • Herald: Automatically issue alerts or perform actions.
  • Legalpad: Sign and track legal agreements.
  • Macro: Meme generator.
  • Maniphest: Issue tracker.
  • Nuance: Support desk task queues. (Prototype)*
  • Owners: Organize code by responsible user/team.
  • Phame: Blog (can even publish as external blog)
  • Paste: Store and edit text snippets; with highlighting and history.
  • Passphrase: Store credentials and other secrets.
  • People: User profiles.
  • Pholio: Graphics review (great for UI mockup discussion!)
  • Phortune: Manage accounts and billing. (Prototype)*
  • Phragment: Versioned artifact storage. (Prototype)*
  • Phriction: Wiki.
  • Phurl: Link shortener. (Prototype)
  • Ponder: Ask and answer questions, StackOverflow-style.
  • Projects: Manage projects, kanban boards, teams, tags
  • Releeph: Manage releases. (Prototype)*
  • Slowvote: Create, vote in, and view polls.
  • Spaces: Permissions control.
  • Tokens: Leave thumbs up, hearts, etc. on objects.
Collapse
deciduously profile image
Ben Lovy Author

I'm tempted to spin up a personal instance for my next large hobby project.

Collapse
codemouse92 profile image
Jason C. McDonald

Fun fact: Task Finder is actually just a Dashboard constructed for our specific instance, using custom queries with project tags. The Dashboard feature is so cool like that. :)

Collapse
deciduously profile image
Ben Lovy Author

...that IS a fun fact. I'll edit the post.

Collapse
valentinogagliardi profile image
Valentino Gagliardi

Impressive tool!

Collapse
dannypsnl profile image
林子篆

really cool, thanks for sharing.

Collapse
adam_cyclones profile image
Adam Crockett

They had me at free!