Metadata format reference (config v2)¶
Table of contents
Introduction¶
With config v2, the metadata that is exported from the server by the CLI is a
directory of multiple files.
Note
For config v1, see Metadata file format reference (config v1).
Metadata directory format¶
The following files will be generated in the metadata/ directory of your project:
Note
The output of the export_metadata API is a JSON version of the metadata files.
actions.graphql¶
The actions.graphql file contains all the action definitions and custom type definitions.
Example: A query action called greet and two custom types called SampleInput and SampleOutput.
type Query {
  greet (
    arg1: SampleInput!
  ): SampleOutput
}
input SampleInput {
  username : String!
}
type SampleOutput {
  greetings : String!
}
actions.yaml¶
The actions.yaml file contains metadata related to actions.
Example: An action called greet with the handler set to <base_url>/greet and two custom types called SampleInput and SampleOutput.
actions:
- name: greet
  definition:
    kind: ""
    handler: <base_url>/greet
    forward_client_headers: true
    headers:
    - value: application/json
      name: Content-Type
custom_types:
  enums: []
  input_objects:
  - name: SampleInput
  objects:
  - name: SampleOutput
  scalars: []
Example: Same example as above but with the base URL of the handler passed as an environment variable.
actions:
- name: greet
  definition:
    kind: ""
    handler: '{{ACTION_BASE_URL}}/greet'
    forward_client_headers: true
    headers:
    - value: application/json
      name: Content-Type
custom_types:
  enums: []
  input_objects:
  - name: SampleInput
  objects:
  - name: SampleOutput
  scalars: []
allow_list.yaml¶
The allow_list.yaml file contains the metadata related to allow lists.
Example: A query collection called allowed-queries set as the allow-list.
- collection: allowed-queries
cron_triggers.yaml¶
The cron_triggers.yaml file contains metadata related to cron triggers.
The webhook can be an HTTP endpoint or an environment variable containing the HTTP endpoint.
Example: A cron trigger called test-trigger.
- name: test-trigger
webhook: <webhook-url>
schedule: 0 12 * * 1-5
include_in_metadata: true
payload: {}
retry_conf:
  num_retries: 1
  timeout_seconds: 60
  tolerance_seconds: 21600
  retry_interval_seconds: 10
Note
The metadata about a cron trigger will not be stored if Include this trigger in Hasura Metadata is disabled in the advanced option of events on the console or include_in_metadata is passed as false via the API.
functions.yaml¶
Contains the metadata related to custom functions.
Example: A custom SQL function called search_books.
- function:
  schema: public
  name: search_books
query_collections.yaml¶
The query_collections.yaml file conatins metadata information about query collections.
Example: A query collection called sample-collection which contains two queries test and test2.
- name: sample-collection
  definition:
    queries:
    - name: test
      query: |-
        query test {
          books {
            id
            author_id
            title
          }
        }
    - name: test2
      query: |-
        query test2 {
            authors{
                id
                author_name
            }
        }
remote_schemas.yaml¶
The remote_schemas.yaml file contains the metadata related to remote schemas.
Example: A remote schema called my-remote-schema with URL <remote-schema-url>.
- name: my-remote-schema
  definition:
    url: <remote-schema-url>
    timeout_seconds: 40
Example: A remote schema called my-remote-schema with URL passed as environment variable.
- name: my-remote-schema
  definition:
    url_from_env: REMOTE_SCHEMA
    timeout_seconds: 40
tables.yaml¶
The tables.yaml file contains metadata related to tables.
Example: Two tables called authors and books including relationships and an event trigger defined on the authors table.
- table:
    schema: public
    name: authors
  insert_permissions:
  - role: user
    permission:
      check:
        id:
          _eq: X-Hasura-User-Id
      columns:
      - name
      backend_only: false
  select_permissions:
  - role: user
    permission:
      columns:
      - id
      - name
      filter:
        id:
          _eq: X-Hasura-User-Id
  array_relationships:
  - name: books
    using:
      foreign_key_constraint_on:
        column: author_id
        table:
          schema: public
          name: books
  event_triggers:
  - name: event_test
    definition:
      enable_manual: false
      insert:
        columns: '*'
      delete:
        columns: '*'
      update:
        columns:
        - id
        - author_name
    retry_conf:
      num_retries: 1
      interval_sec: 10
      timeout_sec: 60
    webhook: <webhook_url>
- table:
    schema: public
    name: books
  insert_permissions:
  - role: user
    permission:
      check:
        id:
          _eq: X-Hasura-User-Id
      columns:
      - author_id
      - name
      backend_only: false
  select_permissions:
  - role: user
    permission:
      columns:
      - id
      - name
      filter:
        id:
          _eq: X-Hasura-User-Id
  object_relationships:
  - name: author
    using:
      foreign_key_constraint_on: author_id
