.. meta:: :description: Hasura Metadata file format reference :keywords: hasura, docs, metadata, file format .. _metadata_file_format: Metadata file format reference ============================== .. contents:: Table of contents :backlinks: none :depth: 1 :local: The CLI now supports two versions of configuration: ``v1`` and ``v2`` config v1 --------- For ``config v1``, the ``config.yaml`` of your Hasura project would look like: .. code-block:: bash endpoint: http://localhost:8080 The metadata file that is exported from the server is a JSON/YAML representation of the Hasura metadata stored in the ``hdb_catalog`` schema on the Postgres database. The top level keys will be the following arrays: .. code-block:: yaml functions: [] remote_schemas: [] tables: [] Depending on the tables tracked, remote schemas and functions created, these keys will have elements inside them. The ``table`` will have permission rules, relationships and event triggers defined for each table. Here is an example metadata file: **metadata.yaml** .. code-block:: yaml functions: - search_articles remote_schemas: - comment: null definition: forward_client_headers: false headers: [] url: https://graphql-pokemon.now.sh/graphql url_from_env: null name: pokemon tables: - table: author array_relationships: - comment: null name: articlesByauthorId using: foreign_key_constraint_on: column: author_id table: article delete_permissions: [] event_triggers: [] insert_permissions: - comment: null permission: check: id: _eq: X-Hasura-User-Id columns: - name set: {} role: user object_relationships: [] select_permissions: - comment: null permission: allow_aggregations: false columns: - id - name filter: id: _eq: X-Hasura-User-Id role: user update_permissions: [] - table: article array_relationships: [] delete_permissions: [] event_triggers: - definition: delete: columns: '*' insert: columns: '*' update: columns: - id - title - author_id headers: [] name: update_article_search_index retry_conf: interval_sec: 10 num_retries: 0 timeout_sec: 60 webhook: https://my-algolia-api.com/update_index insert_permissions: - comment: null permission: check: author_id: _eq: X-Hasura-User-Id columns: - title set: author_id: x-hasura-user-id role: user object_relationships: - comment: null name: authorByauthorId using: foreign_key_constraint_on: author_id select_permissions: - comment: null permission: allow_aggregations: true columns: - author_id - id - title filter: author_id: _eq: X-Hasura-User-Id role: user update_permissions: [] The schema for this file will mostly correspond to the table structure of the :doc:`metadata catalogue <../../how-it-works/metadata-schema>` config v2 --------- For ``config v2``, the ``config.yaml`` of your Hasura project would look like: .. code-block:: bash actions: handler_webhook_baseurl: http://localhost:3000/api kind: synchronous endpoint: http://localhost:8080 metadata_directory: metadata version: 2 With ``config v2``, the metadata that is exported from the server is a directory of multiple files. When you run ``hasura metadata export``, the following files will be generated in the ``metadata/`` directory of your project. - ``version.yaml``: Contains the metadata version of the server - ``tables.yaml``: Contains the metadata related to tables. - ``remote_schemas.yaml``: Contains the metadata related to :doc:`remote schemas<../../remote-schemas/index>` - ``functions.yaml``: Contains the metadata related to :doc:`custom functions<../../schema/custom-functions>` - ``allow_list.yaml``: Contains the metadata related to :doc:`allow lists<../../deployment/allow-list>` - ``actions.yaml``: Contains the metadata related to :doc:`actions<../../actions/index>` - ``actions.graphql``: Contains all the action definition and custom type definitions