This task discusses the state of third-party application development for Phabricator.
Overview
========
Third-party application development is something we plan to support eventually, but **it is not supported today** (July 2014), and support is **very far away**. To provide some sense of how far:
- **Internal Applications**: Phabricator might be a suitable platform for development of internal (your company only) applications in **1-2 years**.
- **Released Applications**: Phabricator might be suitable as a platform for development of released applications in **2-3 years**.
- **Web Framework**: Phabricator might be suitable as a general-purpose web framework in **3+ years**.
The current support, infrastructure, and ecosystem are way behind where they need to be to make developing on Phabricator a reasonable decision. Development today will be plagued by serious problems: unusable APIs, frequent API changes, virtually no documentation, no upstream support, no developer ecosystem, major missing pieces of functionality, and major missing tools.
Long-Term Plans
=========
Phabricator's core is a mostly-modular application platform, and Phabricator's applications are mostly built in an extensible way on top of it. Over time, we have increased modularity and separation of applications, and we plan to continue down this path. When making infrastructure decisions we generally move in this direction, and we consider non-modular parts of the codebase to be technical debt and we are gradually removing them. Eventually, we intend for it to be possible to develop third-party applications which are close to parity with first-party applications.
However, this day is a long way away:
- Phabricator's core does not present stable, public-facing APIs, and we frequently change major parts of internal infrastructure.
- Many critical capabilities are not reasonably available to third-party applications yet. Although we are improving modularity, we aren't fully there, and it will take us a long time to get there.
- There is no documentation, and we will not support third-party development until we're ready for third parties to develop applications.
- There is no system for packaging, versioning, releasing or distributing applications.
- In fact, there's no version system for Phabricator's core.
- Overall, this is **not a major priority for us**, and the motivation is primarily code quality (that is, modular applications with looser coupling are better for us, too), not providing a public platform. Far more users are interested in bug fixes and features in first-party applications than are interested in third-party development.
These major issues (and many more smaller issues) need to be resolved before we can recommend Phabricator for application development.