What is a DAO?

A DAO (Decentralized Autonomous Organization) is a Smart Contract-controlled organizational system. Currently, every organization has some sort of hierarchy, with typical top-down decision making. In the future, we can have democratic organizations where rules are created and changes are based on voting. Every function (such as payroll and fund management) can be controlled by Smart Contracts. These types of organizations will be called DAOs: where no single authority will be in control and organizational decisions are powered by Smart Contracts. These types of organizations will be unstoppable.

Organizations that can be spun up instantly, that can’t be shut down by governments, that are resistant to internet censorship, and that allows small groups of people to collaborate effectively.

What is Aragon?

Aragon fulfills this dream and provides tools to build a DAO on top of Ethereum (a Smart Contract blockchain). Aragon provides a full end-to-end framework to build DAOs. Let's understand Aragon’s architecture and different parts of its framework.

Before understanding how Aragon architecture works together, let’s understand its different parts.

aragonCLI: a tool for creating, testing and publishing Aragon applications through the command line.

aragonOS: manages different parts of the Aragon stack; it’s a Smart Contract framework that enables flexible and upgradeable governance mechanisms by creating and assigning permissions to multiple entities. It mainly provides 3 functionalities:

Upgradability Permission Control Forwarding

aragonPM: a decentralized package manager build on top of aragonOS that handles upgradeability of Smart Contracts and arbitrary data blobs, such as web apps. aragonPM allows multiple aragonPM registries with different governance models for package creation and publishing new versions. There is an official Aragon curated instance, aragonpm.eth, curated by Aragon and an open registry ( open.aragonpm.eth ) for the community.

aragonPM Repository: a Smart Contract deployed inside aragonPM that keeps track of the versions for a package.