This vision statement is intended to be the driving vision for the Phorge project, of which all core team members and contributors must agree to.
Phorge is an open source web-based platform to enable collaborative software development. It features code repository hosting, code review, task management, and more.
- Build a quality open source and extensible software development platform for professional teams which aids in implementing an opinionated development model.
- See "Development Model" under "What is Phorge".
- To save professional software engineers as much time as possible, with an understanding that reducing errors and/or catching errors earlier saves time.
- This statement is verbatim one of the original visions of the Phabricator project, of which Phorge is a community fork.
- Provide the space and resources for the community to collaborate both on maintaining and enhancing the tooling provided by the platform.
- Phorge is not a service. Users are free to host on their own infrastructure.
Phorge is an open source community fork of Phabricator™ built by Phacility™, Inc. In May 2021 Phacility announced that it would wind down its hosting services, support services, as well as no longer maintaining the Phabricator project. A subset of the existing community eager to see the project continue with both maintenance and feature enhancements decided to organize and start Phorge.
Much of Phorge’s design tenets and goals, along with its flavor, are rooted in and continued from its origins from Phabricator.
- flavor: Phabricator is well-known for its witty documentation.
What Is Phorge
Phorge is an open source and extensible software development platform for professional teams which aids in implementing an opinionated development model.
- Open Source: The entire platform is built in the open under a permissible license. It is free for personal and commercial use.
- Extensible: The platform is designed to be easily customized with extensions, where extensions can customize existing tools and applications or even introduce entire new ones.
- Software Development Platform: As a platform, Phorge is aimed at addressing the entire software development lifecycle including ideation, development, working with continuous integration systems, deployment, and more. It is a collection of specialized tools that complement each other to provide a comprehensive solution.
- Professional Teams: Phorge focuses on supporting development models that involve many different roles that make up development teams, fostering exchanges across team boundaries and letting organizations build strong communities around the code they write.
- Opinionated: The development model which Phorge focuses on encourages a specific workflow which has been proven to scale well in professional development environments.
- Fun: While geared towards professional software development, things like “software development lifecycle” are better enjoyed with humor and levity.
Tools like git and mercurial provide the building blocks for software development and enable a wide range of different development models and processes. The development model which Phorge is focused on supporting is primarily based on Trunk-Based Development.
Phorge promotes the idea that in-development work should not exist in the remote repository until it has been reviewed, approved, and landed. Separating in-development work from the remote allows the development, testing, and review to be done collaboratively without interfering with other work on the same repository. When the work is ready to be landed publicly it is rebased and squashed. This removes iterative development changes and maintains a linear branch history in the remote repository. The result is that the remote public repository represents a (mostly) stable state with a clear and understandable history. While the iterations made during development will not be evident in the remote public repository, they will continue to exist within Phorge for historical purposes. This process is proven to scale well as teams and projects grow.
- The development and review process is abstracted away from the source control technology.
- Developers are free to use version control workflows that suit their individual style for local development changes.
- Changes are squashed into a single commit and rebased onto the repository branch head, resulting in a clean, linear history.
- Emphasis is made on code review and encouraging more communication during the process.
Development of Phorge happens on a publicly accessible instance of Phorge accessible at https://we.phorge.it. Doing so keeps with tradition of modern open source development, as well as demonstrates the stability and reliability of the product.
The Phorge team promotes community involvement by providing community chat in addition to the publicly accessible instance, and providing documentation for being involved including information on setting up development environments, extension development guides, etc.
Development of Phorge is guided by the core team, a technical steering committee consisting of members willing to dedicate time to enabling the project to make forward progress.
The initial core team will consist of members of the existing Phabricator community in good standing and have a track record with the Phabricator upstream. The initial core team members will communally apply and agree to this vision statement. They will be granted access to the primary Phorge server where the project development occurs, and will be the initial team responsible for the changes to the managed project source.
Members of the Phorge community who are in good standing and demonstrate knowledge and technical ability in guiding the project can apply for the core team on the publicly accessible instance by creating a task tagged with an explicit marker identifying the application. The core team will review these tasks for accepting new membership.
The core team is responsible for
- Maintaining the vision of the Phorge project.
- Running the finances for the Phorge project, to support the public instance and other assets necessary for the project.
- Maintaining the upstream infrastructure and repositories for the Phorge platform.
- Managing the release process for changes to Phorge.
- Empowering select members of the community to be responsible for the design and approval of changes to the platform.
- Enabling the Phorge community to provide feedback and participate in the development of Phorge
- Curating the Phorge community to be free of spam and other actions-of-bad-faith.
Core Team Consensus
The core team will use tasks in the public instance of Phorge to encapsulate decisions that need to be discussed and decided upon. These tasks will be tagged with an explicit marker to distinguish these from other tasks.
Core team members are responsible for seeking the insight and input from other core members when making impactful decisions. Where disagreements arise, core team members are responsible for addressing concerns. All core team members will have the option to provide their input in a timely manner in order to reach consensus. Multiple core team members must reach consensus for moving forward on decisions in which not all core team members are in agreement.
The Phorge development team is responsible for
- Reviewing and approving proposed changes for the upstream, which may be authored by other community members.
- Developing fixes and features for the Phorge project.
- Ensuring proposed changes meet quality expectations and are tested.
- Triaging issues reported by community members.
The development team will initially consist of the core team members, but will expand to other community members who are in good standing and demonstrate knowledge and technical ability in developing quality changes to Phorge.
Feedback and Issue Reporting
The public instance allows open registration, allowing for members of the Phorge community to report issues or participate in the development of Phorge. Community members are expected to provide details about issues being observed or problems attempted to be solved. This includes providing background context where needed and stating problems without jumping to potential solutions, in order for the Phorge development team to make decisions around the best recourse.
Tradepost / Phactory
The public instance of Phorge will also be used to allow community members to develop and share Phorge extensions in more publicly accessible repositories. These extension repositories will be managed individually by their authors/participants and will not be managed by the Phorge core team except under exigent circumstances, such as when a popular extension is abandoned by the original authors/participants. The Phorge core team will also be responsible for ensuring the community can develop and operate without interference from spam or other actions-of-bad-faith on the platform.
Code of Conduct
All members of the Phorge community, including the core team, are required to be respectful of others while participating in the community. Violations of this will be reviewed by the core team who may decide to remove those in question from the public instance to reduce the negative impact on the community.
These design tenets set forth the guiding principles for changes to be accepted and landed in the Phorge project.
Phorge’s development model is known to be disruptive during the onboarding of team members. The Phorge team is committed to reducing this friction where possible.
Phorge is designed for big development teams however, and there is an expectation that users invest in their tooling for the long-term payoff that their development model scales well.
Tools implemented by Phorge are intended to solve problems well which requires that they are designed with the long-term in mind. To support this, features should be built first as extensions where possible, or some other incubation process where features are released as prototypes. Prototype features will be accessible for users who are willing to test them knowing they may be incomplete, buggy or may undergo breaking changes before reaching production quality.
Quality & Reliability
The community maintains a high quality standard for Phorge. This is accomplished by ensuring code changes meet the standards set forth by these design tenets.
All changes are required to have a test plan, be tested, code reviewed, and approved before being adopted upstream. When adopted upstream the changes will exist in a branch intended only for early adopters. After changes are proven to be acceptable the changes are then promoted to the stable release branch. Changes should not introduce regressions, with the exception of intentionally deprecating APIs or behaviors.
Phorge will provide an upgrade process for installations currently running Phabricator. Changes to the API (Conduit) will be made in a degradation process, where old APIs are marked as deprecated for removal for a time period before being fully removed. Conduit APIs will not be removed without a replacement available.
Phorge is intended to be used by many different roles within software development processes. The process for onboarding new users to the platform as well as their experience with using the applications and tools is absolutely key for the success of the development process.
Modularity & Extensibility
Applications within the Phorge ecosystem are designed to encapsulate singular activities such as: code hosting, code review, user management, task management, etc. These applications are primarily designed to be independent such that they can operate without reliance on other applications, although many foundational applications are necessary, such as user management, system configuration, etc.
A modular design helps to encapsulate and encourage single-responsibility designs which can reduce complexity and allow for easier maintenance of the code base.
While Phorge is intended to support many different development processes it will not be possible to support every need by different organizations. The majority of changes accepted upstream must be known to be generally applicable to generally supported development processes. To allow for customizing development processes the code design is set up to be easily extensible with custom code. Phorge encourages organizations to share their extensions with the community; such contributions may eventually be adopted upstream.
Organizations using Phorge are entrusting the platform to maintain their product code which may contain intellectual property, proprietary information, or other trade secrets. These organizations are also entrusting the platform to be run on their own networks and infrastructure.
Phorge adopts best practices for modern web application development and handles security reports with great importance.
Phorge does not permit the notion of "super administrators" that are allowed to violate its security model. Administration is a janitorial power only.
Performance & Scalability
Phorge is designed to be performant with large repositories and user-bases, including scaling horizontally via clustering to support the infrastructure needs.