English for Directus Developers

Learn the English vocabulary for Directus: data models, permissions, flows, and the extensions system, explained for developers building headless backends.

Directus wraps an existing SQL database with an auto-generated API and admin panel, which means its vocabulary blends database terms with CMS terms. Being precise about whether something is a “collection” (a table), a “flow” (an automation), or a “role” (a permission group) keeps conversations about a Directus project grounded and avoids confusing it with a traditional headless CMS. This guide covers the essential terms.

Key Vocabulary

Collection — in Directus, a database table exposed through the API and admin panel, either created through Directus or introspected from an existing schema. “Since the orders table already existed in the database, Directus picked it up automatically as a collection without any migration.”

Data model — the overall structure of collections, fields, and relationships in a Directus project, configurable visually or via the schema API. “Before we add the new feature, let’s sketch the data model so we know whether reviews should relate to products as a many-to-one or many-to-many.”

Permission — a granular access rule scoped to a role, collection, and action (read, create, update, delete), optionally filtered by field or by a dynamic condition. “The permission only grants read access to draft items if the user is the item’s own author — that’s enforced with a dynamic filter, not a static rule.”

Flow — a no-code or low-code automation triggered by an event (like an item being created) that runs a sequence of operations, such as sending a webhook or transforming data. “We built a flow that fires whenever an order’s status changes to shipped and sends a webhook to the fulfillment service.”

Extension — custom code (an interface, panel, endpoint, or hook) added to a Directus instance to extend its behavior beyond the built-in configuration options. “The custom pricing calculation needed logic Directus doesn’t support out of the box, so we wrote it as a custom endpoint extension.”

Directus SDK — the official JavaScript/TypeScript client for querying the Directus API with type safety, commonly used from a frontend framework. “We’re using the Directus SDK in the Next.js app so the item queries are typed against our actual data model.”

Common Phrases

  • “Is this collection managed by Directus, or did we introspect it from an existing table?”
  • “Does this permission need a dynamic filter, or is a static read/write rule enough?”
  • “Could this be a flow instead of custom backend code? It might not need an extension at all.”
  • “Is the SDK generating the right types here, or do we need to regenerate the schema snapshot?”
  • “Which role does this permission apply to — is it scoped too broadly?”

Example Sentences

Explaining an automation choice in a design review: “Rather than writing a custom extension, we built this as a flow — it triggers on item creation, calls an external validation webhook, and updates a status field, all without custom code to maintain.”

Reporting a permissions bug: “Editors are able to see draft items that belong to other authors — the dynamic filter on the read permission isn’t actually scoping to user_created like we intended.”

Discussing data modeling with a teammate: “We should model tags as a many-to-many relationship between articles and a tags collection, not as a comma-separated text field — it’ll make filtering and permissions much easier to reason about.”

Professional Tips

  • Say “collection” when you mean the Directus-exposed table, and “table” when you’re talking about the raw database — mixing them causes confusion about which layer a bug lives in.
  • When reporting a permissions issue, specify whether it’s a static rule or a dynamic filter condition that’s misbehaving — they’re configured and debugged differently.
  • Use “flow” specifically for no-code automations and “extension” for anything requiring custom code, since stakeholders often ask “can we avoid custom code here?”
  • Mention the Directus SDK by name when discussing frontend integration, since it implies generated types tied to the live schema, not hand-written interfaces.

Practice Exercise

  1. Explain in two sentences the difference between a Directus flow and a Directus extension.
  2. Write a one-sentence bug report describing a permission that’s scoped too broadly.
  3. Describe, in your own words, why introspecting an existing database table differs from creating a new collection from scratch.