An architectural overview of HASH
HASH is built around a flexible type system which allows for information to be expressed as entities with types. Types can inherit from one another, and entities can have multiple types. Users can create their own types, keeping them private, or making them public. Types can also be composed from other types, making HASH the first multi-tenant, open-source, typed knowledge graph in the world.
Most entities and types you work with in HASH will be user-created, or generated by workers, apps or integrations. But there are also a number of core concepts which you'll likely want to familiarize yourself with as a developer building on HASH.
hash.ai
), deployed within a private network (e.g. available via a VPN), or running locally for development purposes.Image File
), extending the range of ways in which they can be used in HASH.A number of other system entity types exist:
Each instance of HASH relies on a number of components. Opportunities for contribution will mainly arise in the key internally-written applications:
apps/hash-graph
): a Rust application which manages interaction with the datastore and authorization service, and exposes a REST API to other components of the system for creating, updating and querying types, entities, and permission-related records. The Graph has no knowledge of particular types, and is solely responsible for providing consumers with the ability to build and query a graph.apps/hash-api
): a Node.js/TypeScript application which is mainly responsible for authenticating users and passing requests between them and the Graph, and servicing the particular queries the frontend relies on. It exposes a GraphQL API, as well as some other endpoints related to file upload and retrieval, and external integration authentication and synchronization.apps/*worker*
): Node.js applications registered with a Temporal server, which can be called by other components of the system to run workflows for background, scheduled or long-running jobs. Heavily used by AI features.apps/hash-frontend
): a Next.js/TypeScript frontend for the HASH workspace application. It provides a graphical interface for users to build their own web through the creation of types and entities, as well as reporting on the results of automated web-building jobs (e.g. intergrations, AI inference).apps/plugin-browser
): a React/TypeScript browser extension which allows users to configure the AI-enabled creation of entities as they browse the web.We also make use of third-party open-source applications as part of:
More information about each of these, as well as the corresponding code, can be found in the hash-
prefixed subdirectories within apps
(in our @hashintel/hash
public monorepo).
Previous