English for Hasura GraphQL Engine
Learn the English vocabulary for Hasura: auto-generated schemas, permissions, relationships, and remote schemas in an instant-GraphQL-on-your-database setup.
Hasura’s whole pitch is generating a GraphQL API directly from your database schema, which means most bugs teams hit aren’t in hand-written resolver code — they’re in permissions, relationships, or tracking configuration. Naming these Hasura-specific concepts precisely is what makes debugging sessions productive instead of confusing.
Key Vocabulary
Tracked table — a database table that Hasura has been explicitly configured to expose through its auto-generated GraphQL API; an untracked table simply doesn’t appear in the schema at all. “The new column showed up in the database but not in the API — turns out the table itself was never tracked in Hasura after the migration ran.”
Permission rule — a row- and column-level access policy defined per role (like user or admin) that determines which rows a query can return and which fields can be selected, inserted, or updated.
“The bug wasn’t in our frontend code — the user role’s permission rule was missing a filter, so it was returning other users’ rows in addition to the current user’s own.”
Relationship (object / array) — a defined link between two tracked tables (often derived from a foreign key) that lets a GraphQL query nest related data, an object relationship for a single related row and an array relationship for many.
“We added an array relationship from authors to books so a single query can fetch an author along with every book they’ve written, instead of making a separate request per book.”
Remote schema — an external GraphQL API that Hasura stitches into its own schema, letting clients query Hasura’s database-backed types and a third-party or custom service’s types in one request. “The recommendation logic lives in a separate microservice, so we added it as a remote schema — clients can query products and recommendations together without knowing two services are involved.”
Hasura action — a way to extend Hasura’s auto-generated API with custom business logic, defined as a GraphQL mutation or query that Hasura forwards to a webhook you control, when the logic can’t be expressed as a plain database operation. “Sending a welcome email isn’t something Hasura can generate automatically, so we defined it as an action that calls our own webhook after the underlying insert happens.”
Common Phrases
- “Is this table actually tracked in Hasura, or does it just exist in the database without being exposed?”
- “Is the missing data a permission-rule problem, or is the relationship itself not configured?”
- “Should this be an object relationship or an array relationship, given the cardinality here?”
- “Is this logic something Hasura can auto-generate, or do we need a custom action with a webhook?”
- “Is this type coming from our tracked tables, or is it actually served through a remote schema?”
Example Sentences
Debugging a permissions issue:
“Users were seeing other people’s draft posts — the permission rule for the user role was filtering on published = true for reads but had no filter at all on the row-level select for drafts.”
Explaining a schema design decision:
“We added the array relationship from orders to order_items so the frontend can fetch a full order in one query, instead of the client making N follow-up requests per item.”
Describing an architecture choice in a review: “We’re stitching in the payments service as a remote schema rather than replicating its data into our own tables, since payment state needs to stay authoritative in that service.”
Professional Tips
- Say tracked explicitly when a table’s data isn’t showing up in the API — it’s usually the first thing to check and often the actual root cause.
- Name the specific permission rule and role involved when discussing an access bug — “permissions are wrong” is far less actionable than “the
userrole’s select permission is missing a filter.” - Distinguish object and array relationships precisely in schema reviews — picking the wrong cardinality early causes confusing null-versus-list bugs downstream.
- Use action deliberately when proposing custom logic — it signals you’ve already ruled out expressing the behavior as a plain database operation, which is Hasura’s default and preferred path.
Practice Exercise
- Explain what it means for a table to be “tracked” in Hasura.
- Describe the difference between an object relationship and an array relationship.
- Write a sentence explaining when you’d reach for a Hasura action instead of relying on auto-generated CRUD.