diff --git a/.changeset/rebrand-d9-docs.md b/.changeset/rebrand-d9-docs.md new file mode 100644 index 0000000000..c6cacd067e --- /dev/null +++ b/.changeset/rebrand-d9-docs.md @@ -0,0 +1,6 @@ +--- +'@wbce-d9/app': patch +'@wbce-d9/api': patch +--- + +Rebrand Directus to d9: update docs, logos, sidebar loader, and fix broken CDN image references diff --git a/.github/DISCUSSION_TEMPLATE/docs-suggestions.yml b/.github/DISCUSSION_TEMPLATE/docs-suggestions.yml index 4581646160..599a6f4dd5 100644 --- a/.github/DISCUSSION_TEMPLATE/docs-suggestions.yml +++ b/.github/DISCUSSION_TEMPLATE/docs-suggestions.yml @@ -4,7 +4,7 @@ body: value: | Hi, thank you for taking the time to create a docs suggestion! - Please do be aware that this is _not_ the place to ask a question. To ask a question, [join our Discord server](https://directus.chat) instead! + Please do be aware that this is _not_ the place to ask a question. To ask a question, use [GitHub Discussions](https://github.com/LaWebcapsule/directus9/discussions) instead! - type: input attributes: diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index c38520819c..9f81e8b6e7 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -2,10 +2,10 @@ blank_issues_enabled: false contact_links: - name: Request a new feature url: https://github.com/LaWebcapsule/directus9/discussions/new?category=feature-requests - about: Share your ideas on how to make Directus better. + about: Share your ideas on how to make d9 better. - name: Suggest improvements for the docs url: https://github.com/LaWebcapsule/directus9/discussions/new?category=docs-suggestions - about: Share your ideas on how to improve the documentation of Directus. + about: Share your ideas on how to improve the documentation of d9. - name: Ask a question - url: https://directus.chat/ + url: https://github.com/LaWebcapsule/directus9/discussions about: Please ask and answer questions here. diff --git a/.gitignore b/.gitignore index 57910a294f..9f00b22409 100644 --- a/.gitignore +++ b/.gitignore @@ -36,6 +36,12 @@ debug # Temporary files TODO +*.csv +.~lock.* + +# Docker (local only) +docker-compose.prod.yml +snapshots/ # Directus /schema.yaml diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000000..bffdb32381 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,31 @@ +# d9 — Directus 9 Fork by La Webcapsule + +## Project + +d9 is an open-source fork of Directus 9 (GPLv3), focused on performance and EU regulatory compliance. Maintained by La Webcapsule. + +## Skills & Contributing + +### Install the d9-skills plugin + +All agent skills and the SkillOps contribution pipeline live in the **[d9-skills](https://github.com/LaWebcapsule/d9-skills)** plugin repo. + +```bash +# As a Claude Code plugin (recommended — includes skills + commands + hooks) +git clone https://github.com/LaWebcapsule/d9-skills.git +claude --plugin-dir ./d9-skills + +# Skills only (any agent) +npx skills add LaWebcapsule/d9-skills +``` + +### Contributing a skill + +Every debugging session is a potential contribution. Run `/d9-skills:skillops` to share your experience. The pipeline detects the pattern, anonymizes your session, formats a SKILL.md, and opens a PR — all from a single command. + +## Important rules + +- Code identifiers `@directus/`, `directus_*`, `DIRECTUS_*`, `npx directus`, `new Directus()` must NEVER be renamed +- Plugins must be rebuilt (`pnpm build` in plugins/) before any deployment +- AWS region is eu-west-3 (Paris) for all services +- Contact: support@webcapsule.io diff --git a/api/package.json b/api/package.json index fe1562a471..7ae129382b 100644 --- a/api/package.json +++ b/api/package.json @@ -22,7 +22,7 @@ "framework", "vue" ], - "homepage": "https://directus.io", + "homepage": "https://github.com/LaWebcapsule/directus9", "bugs": { "url": "https://github.com/LaWebcapsule/directus9/issues" }, diff --git a/api/src/cli/utils/create-env/env-stub.liquid b/api/src/cli/utils/create-env/env-stub.liquid index 5af59a8394..0498f0b73c 100644 --- a/api/src/cli/utils/create-env/env-stub.liquid +++ b/api/src/cli/utils/create-env/env-stub.liquid @@ -307,8 +307,8 @@ EXTENSIONS_AUTO_RELOAD=false #################################################################################################### ### Email -# Email address from which emails are sent ["no-reply@directus.io"] -EMAIL_FROM="no-reply@directus.io" +# Email address from which emails are sent +EMAIL_FROM="no-reply@example.com" # What to use to send emails. One of # sendmail, smtp, mailgun, sendgrid, ses. diff --git a/api/src/database/seeds/13-settings.yaml b/api/src/database/seeds/13-settings.yaml index 576054212e..f2ea019a64 100644 --- a/api/src/database/seeds/13-settings.yaml +++ b/api/src/database/seeds/13-settings.yaml @@ -7,7 +7,7 @@ columns: type: string length: 100 nullable: false - default: 'Directus' + default: 'd9' project_url: type: string length: 255 diff --git a/api/src/services/mail/index.ts b/api/src/services/mail/index.ts index ea70bf672b..8cdb44122d 100644 --- a/api/src/services/mail/index.ts +++ b/api/src/services/mail/index.ts @@ -103,7 +103,7 @@ export class MailService { .first(); return { - projectName: projectInfo?.project_name || 'Directus', + projectName: projectInfo?.project_name || 'd9', projectColor: projectInfo?.project_color || '#546e7a', projectLogo: getProjectLogoURL(projectInfo?.project_logo), projectUrl: projectInfo?.project_url || '', diff --git a/api/src/services/tfa.ts b/api/src/services/tfa.ts index 08509b6443..dcd77a056f 100644 --- a/api/src/services/tfa.ts +++ b/api/src/services/tfa.ts @@ -44,7 +44,7 @@ export class TFAService { return { secret, - url: authenticator.keyuri(user.email, project?.project_name || 'Directus', secret), + url: authenticator.keyuri(user.email, project?.project_name || 'd9', secret), }; } diff --git a/app/index.html b/app/index.html index 161186264b..3f8fe53df1 100644 --- a/app/index.html +++ b/app/index.html @@ -27,7 +27,7 @@
diff --git a/app/public/favicon.ico b/app/public/favicon.ico index 6edbfd8239..f9b22fcda3 100644 Binary files a/app/public/favicon.ico and b/app/public/favicon.ico differ diff --git a/app/public/img/directus-white.png b/app/public/img/directus-white.png index dd0425b791..acdb1fec6e 100644 Binary files a/app/public/img/directus-white.png and b/app/public/img/directus-white.png differ diff --git a/app/public/img/icons/mstile-150x150.png b/app/public/img/icons/mstile-150x150.png index 6259913816..545b6134ac 100644 Binary files a/app/public/img/icons/mstile-150x150.png and b/app/public/img/icons/mstile-150x150.png differ diff --git a/app/public/img/icons/safari-pinned-tab.svg b/app/public/img/icons/safari-pinned-tab.svg index 46793831b5..8928bb12f7 100644 --- a/app/public/img/icons/safari-pinned-tab.svg +++ b/app/public/img/icons/safari-pinned-tab.svg @@ -1,41 +1,11 @@ - - - - -Created by potrace 1.11, written by Peter Selinger 2001-2013 - - - + + + + + + + + + diff --git a/app/public/manifest.webmanifest b/app/public/manifest.webmanifest index 8e0c547698..3591db1035 100644 --- a/app/public/manifest.webmanifest +++ b/app/public/manifest.webmanifest @@ -1,6 +1,6 @@ { - "name": "Directus", - "short_name": "Directus", + "name": "d9", + "short_name": "d9", "theme_color": "#263238", "background_color": "#263238", "display": "standalone", diff --git a/app/src/app.vue b/app/src/app.vue index e8fe44bd86..56c962ffbe 100644 --- a/app/src/app.vue +++ b/app/src/app.vue @@ -81,7 +81,7 @@ watch( watch( () => serverStore.info?.project?.project_name, (projectName) => { - document.title = projectName || 'Directus'; + document.title = projectName || 'd9'; }, { immediate: true } ); diff --git a/app/src/assets/logo-dark.svg b/app/src/assets/logo-dark.svg index 6f58b53d8f..cc8b6c5d72 100644 --- a/app/src/assets/logo-dark.svg +++ b/app/src/assets/logo-dark.svg @@ -1,3 +1,11 @@ - - - \ No newline at end of file + + + + + + + + + + + diff --git a/app/src/assets/logo-loader.svg b/app/src/assets/logo-loader.svg new file mode 100644 index 0000000000..15c8e1e8bc --- /dev/null +++ b/app/src/assets/logo-loader.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/app/src/assets/logo.svg b/app/src/assets/logo.svg index 64123071af..a7ffe4a2b5 100644 --- a/app/src/assets/logo.svg +++ b/app/src/assets/logo.svg @@ -1,3 +1,11 @@ - - - \ No newline at end of file + + + + + + + + + + + diff --git a/app/src/assets/sprite.png b/app/src/assets/sprite.png new file mode 100644 index 0000000000..3a9e616ba4 Binary files /dev/null and b/app/src/assets/sprite.png differ diff --git a/app/src/assets/sprite.svg b/app/src/assets/sprite.svg index f2fd82339b..37ddf8ea2d 100644 --- a/app/src/assets/sprite.svg +++ b/app/src/assets/sprite.svg @@ -1,112 +1,104 @@ - - - - Directus App v8 Sprite Final - Created with Sketch. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/constants.ts b/app/src/constants.ts index b711124b6f..e0aae069ff 100644 --- a/app/src/constants.ts +++ b/app/src/constants.ts @@ -2,26 +2,27 @@ import { Type } from '@wbce-d9/types'; export const VALIDATION_TYPES = ['FAILED_VALIDATION', 'RECORD_NOT_UNIQUE']; -export const DIRECTUS_LOGO = ` - -⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣶⣦⣤⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ -⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠀⠻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣦⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ -⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⣿⣿⣿⣷⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ -⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣤⣿⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠛⠛⠿⠿⠿⠿⠿⠛⠛⠉⠀⢰⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ -⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢰⣿⣿⣿⣿⣶⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ -⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣶⣶⣦⣤⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ -⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣶⣶⣶⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠿⠿⠛⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ -⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ -⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ -⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡌⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ -⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣤⣶⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠁⠛⠛⠿⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣶⣶⣤⣤⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ -⠀⠀⠀⠀⠀⠀⠀⠀⢀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠟⠁⠀⠀⠀⠀⠀⠀⠀⠉⠛⣿⣿⣿⣿⣿⡆⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣶⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ -⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⣿⣿⣿⣿⣿⡿⠿⠛⠛⠋⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠛⠿⣿⣄⠈⠻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣦⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ -⠀⠀⠀⠀⠀⠀⠀⣾⣿⣿⣿⣿⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠉⠉⠉⠉⠀⠀⠀⠀⠀⠀⠀⠉⢿⣿⣿⣿⣷⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ -⠀⠀⠀⠀⠀⣤⣿⣿⣿⣿⠟⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ -⠀⠀⠀⣴⣿⣿⣿⣿⠟⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ -⠀⠀⠀⠀⠉⠉⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ - +export const D9_LOGO = ` +%c + ██████████████████████████ + ████████████████████████████████ + ██████████ ██████████ ██ +████████ ████████ ████ +███████ ████████████████ ███████ ████ +██████ ██████████████████████ ██████ █████ +██████ ████████ ████████ █████ █████ +██████ ███████ ██████ ███████ █████ █████ +██████ ███████ ██████ ███████ █████ █████ +██████ ████████ ████████ █████ █████ +██████ ██████████████████████ ██████ ████ +███████ ████████████████ ██████ ████ +████████ ████████ ███ + ██████████ ██████████ ██ + ████████████████████████████████ ██ + ██████████████████████████ ██ + ██ + █ +%c `; /** @@ -65,7 +66,7 @@ export const MODULE_BAR_DEFAULT = [ enabled: true, name: '$t:documentation', icon: 'help', - url: 'https://docs.directus.io', + url: 'https://github.com/LaWebcapsule/directus9/tree/main/docs', }, { type: 'module', diff --git a/app/src/main.ts b/app/src/main.ts index e1136c44f0..d2c70dadd9 100644 --- a/app/src/main.ts +++ b/app/src/main.ts @@ -5,7 +5,7 @@ import { createPinia } from 'pinia'; import { createApp } from 'vue'; import App from './app.vue'; import { registerComponents } from './components/register'; -import { DIRECTUS_LOGO } from './constants'; +import { D9_LOGO } from './constants'; import { registerDirectives } from './directives/register'; import { i18n } from './lang/'; import { router } from './router'; @@ -16,13 +16,13 @@ import { loadExtensions, registerExtensions } from './extensions'; init(); async function init() { - console.log(DIRECTUS_LOGO); + console.log(D9_LOGO, 'color:#6644ff', ''); console.info( - `Hey! Interested in helping build this open-source data management platform?\nIf so, join our growing team of contributors at: https://directus.chat` + `Hey! Interested in helping build this open-source data platform?\nJoin us at: https://github.com/LaWebcapsule/directus9` ); - console.info(`%c🐰 Starting Directus...`, 'color:Green'); + console.info(`%c☄️ Starting d9...`, 'color:#6644ff'); console.time('🕓 Application Loaded'); diff --git a/app/src/utils/set-favicon.ts b/app/src/utils/set-favicon.ts index b39bd7aa12..88569bad14 100644 --- a/app/src/utils/set-favicon.ts +++ b/app/src/utils/set-favicon.ts @@ -13,7 +13,10 @@ const svg = (color: string, hide: boolean) => ` ${ hide ? '' - : '' + : '' + + '' + + '' + + '' } `; diff --git a/app/src/views/private/components/module-bar-logo.vue b/app/src/views/private/components/module-bar-logo.vue index 62ba650096..ca232b4481 100644 --- a/app/src/views/private/components/module-bar-logo.vue +++ b/app/src/views/private/components/module-bar-logo.vue @@ -102,18 +102,18 @@ export default defineComponent({ .logo { position: absolute; - top: 18px; - left: 10px; - width: 40px; - height: 32px; + top: 12.5px; + left: 12.5px; + width: 35px; + height: 35px; margin: 0 auto; - background-image: url('../../../assets/sprite.svg'); - background-position: 0% 0%; - background-size: 600px 32px; + background-image: url('../../../assets/logo-loader.svg'); + background-size: 35px 35px; + background-repeat: no-repeat; } .running { - animation: 560ms run steps(14) infinite; + animation: 1s spin linear infinite; } } @@ -130,9 +130,9 @@ export default defineComponent({ opacity: 0; } -@keyframes run { +@keyframes spin { 100% { - background-position: 100%; + transform: rotate(360deg); } } diff --git a/app/src/views/public/logo-dark.svg b/app/src/views/public/logo-dark.svg index d781d2fbf3..82723174ea 100644 --- a/app/src/views/public/logo-dark.svg +++ b/app/src/views/public/logo-dark.svg @@ -1,3 +1,11 @@ - - + + + + + + + + + + diff --git a/app/src/views/public/logo-light.svg b/app/src/views/public/logo-light.svg index a5b0c2d0d9..cc8b6c5d72 100644 --- a/app/src/views/public/logo-light.svg +++ b/app/src/views/public/logo-light.svg @@ -1,3 +1,11 @@ - - + + + + + + + + + + diff --git a/app/src/views/public/public-view.vue b/app/src/views/public/public-view.vue index b275468b97..eade112f3b 100644 --- a/app/src/views/public/public-view.vue +++ b/app/src/views/public/public-view.vue @@ -6,7 +6,7 @@

{{ info?.project?.project_name }}

diff --git a/code_of_conduct.md b/code_of_conduct.md index 0df06c7a81..113b8a2333 100644 --- a/code_of_conduct.md +++ b/code_of_conduct.md @@ -44,7 +44,7 @@ event. Representation of a project may be further defined and clarified by proje ## Enforcement Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at -info@directus.io. All complaints will be reviewed and investigated and will result in a response that is deemed +support@webcapsule.io. All complaints will be reviewed and investigated and will result in a response that is deemed necessary and appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. diff --git a/contributing.md b/contributing.md index 8a7e5b14cb..14d0971132 100644 --- a/contributing.md +++ b/contributing.md @@ -1,23 +1,23 @@ # Contributing -Heya! Welcome to Directus, and thank you for taking the time to contribute back to Open Source Software! ❤️ We want -everybody to be able to contribute to Directus, no matter your background or expertise. In order to facilitate that, +Heya! Welcome to d9, and thank you for taking the time to contribute back to Open Source Software! We want +everybody to be able to contribute to d9, no matter your background or expertise. In order to facilitate that, we've put together a couple tips and tricks below. Our team truly appreciates every single contributor, community -member, GitHub star, pull-request, bug report, and feature request. Keeping Directus completely free and open-source is +member, GitHub star, pull-request, bug report, and feature request. Keeping d9 completely free and open-source is our way of saying: **Thank you!** > We're here to help! > -> If you have _any_ questions along your contributor journey, please feel free to come chat with us on -> [our Discord server](https://directus.chat). +> If you have _any_ questions along your contributor journey, please feel free to reach out on +> [GitHub Discussions](https://github.com/LaWebcapsule/directus9/discussions) or via [email](mailto:support@webcapsule.io). ## Code of Conduct -**The Directus [Code of Conduct](https://github.com/LaWebcapsule/directus9/blob/main/code_of_conduct.md) is one of the +**The d9 [Code of Conduct](https://github.com/LaWebcapsule/directus9/blob/main/code_of_conduct.md) is one of the ways we put our values into practice. We expect all of our staff, contractors and contributors to know and follow this code.** -**Our contributors and maintainers work extremely hard to build Directus as premium open-source software. Please be +**Our contributors and maintainers work extremely hard to build d9 as open-source software. Please be respectful of those efforts throughout our ecosystem. Trolling, harassing, insulting, or other unacceptable behavior by participants will not be tolerated.** @@ -54,13 +54,13 @@ Discussion on our GitHub Discussions board: https://github.com/LaWebcapsule/dire ### Document the Project -The [Directus Docs](https://github.com/directus/docs) are living documents that can always be improved on. Notice any +The [d9 Docs](./docs/) are living documents that can always be improved on. Notice any parts of the docs in dire need of some tender love and care? Feel free to open a Pull Request! ### Helping Others -The Directus community is growing quickly, which also means there's more and more people that have questions. Helping -out your fellow developers by answering questions on [Discord](https://directus.chat) or +The d9 community is launching, and we welcome questions and contributions. Helping +out your fellow developers by answering questions on [GitHub Discussions](https://github.com/LaWebcapsule/directus9/discussions/categories/q-a) is a great way to help the project. @@ -81,9 +81,9 @@ have been triaged, accepted, and are ready to be implemented. #### Implementing Features -With the continuous growth of Directus, more and more people are relying on Directus for (critical) data workloads in -various use cases. This means we need to be careful with any changes that might affect the stability, security, -performance, or scalability of Directus. For this reason, it's important that any new feature is properly thought +With the continuous growth of d9, more and more people are relying on d9 for (critical) data workloads in +various use cases. This means we need to be careful with any changes that might affect the stability, +performance, or scalability of d9. For this reason, it's important that any new feature is properly thought through and discussed before being implemented. Before you start writing code to implement your new feature idea, please read through and understand our triaging @@ -96,8 +96,7 @@ Feature Request Discussions that are deemed ready to be implemented with the dis "Accepted" and converted into an Issue, at which point the feature is ready to be implemented. New feature ideas reported directly to issues might be converted into a Discussion for further triaging at -[the core team](https://github.com/orgs/directus/people)'s discretion first. This is often due to a lack of detail, or -lack of proven interest. +the core team's discretion first. This is often due to a lack of detail, or lack of proven interest. Each Pull Request that comes in is required to resolve [an open Issue](https://github.com/LaWebcapsule/directus9/issues) that is labeled "Bug", "Improvement", or "New Feature". This ensures that any code change made implements a known @@ -105,13 +104,13 @@ actionable item, be it a feature or otherwise. ### Reporting Security Vulnerabilities -If you believe you have discovered a security issue within a Directus product or service, please reach out to us -directly over email: [security@directus.io](mailto:security@directus.io). We will then open a +If you believe you have discovered a security issue within a d9 product or service, please reach out to us +directly over email: [support@webcapsule.io](mailto:support@webcapsule.io). We will then open a [GitHub Security Advisory](https://github.com/LaWebcapsule/directus9/security/advisories) for tracking the fix. We value the members of the independent security research community who find security vulnerabilities and work with our team so that proper fixes can be issued to users. Our policy is to credit all researchers in the fix's release notes. In order to receive credit, security researchers must follow responsible disclosure practices, including: -- They do not publish the vulnerability prior to the Directus team releasing a fix for it +- They do not publish the vulnerability prior to the d9 team releasing a fix for it - They do not divulge exact details of the issue, e.g., through exploits or proof-of-concepts diff --git a/directus/readme.md b/directus/readme.md index 9f9ab00e11..2e158b472e 100644 --- a/directus/readme.md +++ b/directus/readme.md @@ -1,30 +1,23 @@

 

-Logo + + + + d9 Logo +

 

-**This repository is a fork of the Directus 9. Directus 9 was under GPLv3 license and so is this repository. As Directus -10 is now a premium open-source software, this repository aims to maintain a standard openSource version of -Directus 9. This repository is not bound to the directus core team.** - -## Scope of the fork - -Our main goal with this repository is to release security updates and some fixes of the directus 9 version. All -contributions are welcome. - -:exclamation: :construction_worker: The documentation is provided in the state it was for the directus 9 version and has -link toward the directus platform. However the directus platform is now in v10 and the informations you can find there -may not be reliable for the v9. +**d9 is an open-source fork of Directus 9 (GPLv3), maintained independently by [La Webcapsule](https://github.com/LaWebcapsule). This repository is not affiliated with the Directus core team.** ## Introduction -**Directus 9 is a free and open-source data platform for headless content management**. It can be installed on top of +**d9 is a free and open-source data platform for headless content management**. It can be installed on top of any new or existing SQL database, instantly providing a dynamic API (REST+GraphQL) and accompanying App for managing -content. Built entirely in TypeScript (in Node and Vue), Directus is completely modular and end-to-end extensible... +content. Built entirely in TypeScript (in Node and Vue), d9 is completely modular and end-to-end extensible... with absolutely no paywalls or artificial limitations. -Modern and intuitive, the Directus App enables no-code data discovery, allowing for even the most non-technical users to +Modern and intuitive, the d9 App enables no-code data discovery, allowing for even the most non-technical users to view, author, and manage your raw database content. Our performant and flexible API is able to adapt to any relational schema, and includes rule-based permissions, event/web hooks, custom endpoints, numerous auth options, configurable storage adapters, and much more. @@ -35,24 +28,15 @@ Aurora/Redshift or Google Cloud Platform SQL. Learn more at... - [GitHub](https://github.com/LaWebcapsule/directus9) - -**All the following links are for Directus v10 ; contribution are welcome to make specific documentation for the -Directus 9** - -- [Website](https://directus.io/) -- [Documentation](https://docs.directus.io/) -- [Community](https://directus.chat/) -- [Twitter](https://twitter.com/directus) -- [Cloud](https://directus.cloud/) -- [Marketplace](https://directus.market/) +- [Documentation](https://github.com/LaWebcapsule/directus9/tree/main/docs)

 

## Installing -Directus requires NodeJS 10+. +d9 requires NodeJS 18+. -Install Directus9 : +Install d9: ``` npm install @wbce-d9/directus9 @@ -77,7 +61,7 @@ creation of your first admin user. ## Updating -To update an existing Directus project, navigate to your project directory and run: +To update an existing d9 project, navigate to your project directory and run: ``` npm update @@ -87,7 +71,7 @@ npm update ## Migrating from directus@9.0.0^ to @wbce-d9@9.0.0^ -You need to change your dependencies : +You need to change your dependencies: 1. In package.json @@ -96,27 +80,27 @@ You need to change your dependencies : "@directus/some-package" --> "@wbce-d9/some-package" ``` -2. Update your dependencies : +2. Update your dependencies: ``` npm update ``` -3. If you have some code : +3. If you have some code: ```ts import {...} from "directus" import {...} from "@directus/some-package" ``` -should become : +should become: ```ts import {...} from "@wbce-d9/directus9" import {...} from "@wbce-d9/some-package" ``` -4. You don't have to do any changes to your databases. Directus9 use the same schema as directus@9.0.0^. As a +4. You don't have to do any changes to your databases. d9 uses the same schema as directus@9.0.0^. As a consequence, you don't need other changes than the three steps below. ## Contributing @@ -124,23 +108,12 @@ import {...} from "@wbce-d9/some-package" Please report any and all issues [on our GitHub](https://github.com/LaWebcapsule/directus9/issues/new). Pull-requests are more than welcome, and always appreciated. Please be sure to read our -[Contributors Guide](https://docs.directus.io/contributing/introduction/) before starting work on a new feature/fix, or -reach out a member of the Core Team via [GitHub](https://github.com/LaWebcapsule/directus9/discussions) or -[Discord](https://directus.chat) with any questions. - -

 

- -## Supporting - -This is a fork of directus9. We welcome contribution and no support is asked. +[Contributors Guide](https://github.com/LaWebcapsule/directus9/blob/main/contributing.md) before starting work on a new feature/fix, or +reach out via [GitHub Discussions](https://github.com/LaWebcapsule/directus9/discussions) with any questions.

 

## License -Directus is released under the [GPLv3 license](./license). Monospace Inc owns all Directus trademarks, logos, and -intellectual property on behalf of our project's community. Copyright © 2004-2020, Monospace Inc. - -**This repository is a fork of the Directus 9. Directus 9 was under GPLv3 license and so is this repository. As Directus -10 is now a premium open-source software, this repository aims to maintain a standard openSource version of -Directus 9. This repository is not bound to the directus core team.** +d9 is released under the [GPLv3 license](./license). This repository is a fork of Directus 9, which was released under GPLv3 by Monospace Inc. +d9 is an independent project maintained by La Webcapsule. diff --git a/docker-compose.yml b/docker-compose.yml index 7e33379b7d..f6277b1037 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,6 +1,6 @@ # This compose file is meant to spin up a copy of all supported database vendors + Redis and S3 (Minio). # For production use see the docker compose file example in the docs: -# https://docs.directus.io/self-hosted/installation/docker/#docker-compose +# https://github.com/LaWebcapsule/directus9/tree/main/docs # # ONLY FOR DEBUGGING. THIS IS NOT INTENDED FOR PRODUCTION USE. # diff --git a/docs/.vitepress/components/ArticleFeedback.vue b/docs/.vitepress/components/ArticleFeedback.vue index 26e91ce371..772d845efe 100644 --- a/docs/.vitepress/components/ArticleFeedback.vue +++ b/docs/.vitepress/components/ArticleFeedback.vue @@ -30,7 +30,7 @@ const prompts = [ 'Make it count', 'Leave some feedback', 'Help us improve', - `We're all ears 🐰`, + `We're all ears ☄️`, 'Tell us what is missing', 'Your thoughts matter to us', 'Feedback is a gift', diff --git a/docs/.vitepress/config.js b/docs/.vitepress/config.js index ae4905f26a..3d36b4e0f2 100644 --- a/docs/.vitepress/config.js +++ b/docs/.vitepress/config.js @@ -5,26 +5,15 @@ import { URLS, EMAILS } from './constants.js'; function markdownVariablesPlugin() { const replacements = { '{{WEBSITE_URL}}': URLS.WEBSITE, - '{{CLOUD_URL}}': URLS.CLOUD, '{{DOCS_URL}}': URLS.DOCS, - '{{CDN_URL}}': URLS.CDN, '{{GITHUB_URL}}': URLS.GITHUB, '{{GITHUB_DIRECTUS_URL}}': URLS.GITHUB_DIRECTUS, '{{GITHUB_COMMUNITY_URL}}': URLS.GITHUB_COMMUNITY, '{{LOCALES_URL}}': URLS.LOCALES, - '{{TWITTER_URL}}': URLS.TWITTER, - '{{DISCORD_CHAT_URL}}': URLS.DISCORD_CHAT, - '{{DISCORD_INVITE_URL}}': URLS.DISCORD_INVITE, - '{{AWESOME_URL}}': URLS.AWESOME, - '{{YOUTUBE_URL}}': URLS.YOUTUBE, '{{EXAMPLE_URL}}': URLS.EXAMPLE, '{{LDAP_URL}}': URLS.LDAP, '{{NPM_URL}}': URLS.NPM, '{{DOCKER_HUB_URL}}': URLS.DOCKER_HUB, - '{{G2_REVIEWS_URL}}': URLS.G2_REVIEWS, - '{{CAPTERRA_URL}}': URLS.CAPTERRA, - '{{TRUSTRADIUS_URL}}': URLS.TRUSTRADIUS, - '{{PRODUCTHUNT_URL}}': URLS.PRODUCTHUNT, '{{SECURITY_EMAIL}}': EMAILS.SECURITY, '{{INFO_EMAIL}}': EMAILS.INFO, '{{SUPPORT_EMAIL}}': EMAILS.SUPPORT, @@ -52,8 +41,8 @@ function markdownVariablesPlugin() { export default defineConfig({ base: '/', lang: 'en-US', - title: 'Directus Docs', - description: 'Directus. An Instant App & API for your SQL Database.', + title: 'd9 Docs', + description: 'd9 — Open Data Platform. An Instant App & API for your SQL Database.', ignoreDeadLinks: true, vite: { plugins: [markdownVariablesPlugin()], @@ -65,52 +54,6 @@ export default defineConfig({ }, }, head: [ - [ - 'script', - { - type: 'text/javascript', - async: true, - defer: true, - src: 'https://js-na1.hs-scripts.com/20534155.js', - }, - ], - [ - 'script', - { - type: 'text/javascript', - async: true, - src: 'https://ws.zoominfo.com/pixel/636535e8d10f825332bbd795', - 'referrer-policy': 'unsafe-url', - }, - ], - [ - 'script', - { - type: 'text/javascript', - async: true, - defer: false, - src: 'https://www.googletagmanager.com/gtag/js?id=UA-24637628-7', - }, - ], - [ - 'script', - {}, - `(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': - new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], - j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= - 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); - })(window,document,'script','dataLayer','GTM-PTLT3GH');`, - ], - [ - 'script', - {}, - `window.dataLayer = window.dataLayer || []; -function gtag(){dataLayer.push(arguments);} -gtag('js', new Date()); - -gtag('config', 'UA-24637628-7'); - `, - ], ['link', { rel: 'shortcut icon', type: 'image/svg+xml', href: '/favicon.svg' }], [ 'link', @@ -179,9 +122,6 @@ gtag('config', 'UA-24637628-7'); }, nav: [ { text: 'Docs', link: '/' }, - // { text: 'Cookbook', link: '/cookbook/add-a-recipe', activeMatch: '/cookbook/' }, - { text: 'Website', link: URLS.WEBSITE }, - { text: 'Cloud', link: URLS.CLOUD }, { text: 'GitHub', link: URLS.GITHUB }, ], algolia: { @@ -190,7 +130,6 @@ gtag('config', 'UA-24637628-7'); indexName: 'directus', }, sidebar: { - // '/cookbook/': sidebarCookbooks(), '/': sidebar(), }, editLink: { @@ -221,7 +160,7 @@ function sidebar() { link: '/getting-started/support', }, { - text: 'Backing Directus', + text: 'Supporting d9', link: '/getting-started/backing-directus', }, { diff --git a/docs/.vitepress/constants.js b/docs/.vitepress/constants.js index c7d729426e..c9188290f3 100644 --- a/docs/.vitepress/constants.js +++ b/docs/.vitepress/constants.js @@ -1,29 +1,16 @@ export const URLS = { - WEBSITE: 'https://directus.io/', - CLOUD: 'https://directus.cloud', - DOCS: 'https://docs.directus.io', - CDN: 'https://cdn.directus.io', + WEBSITE: 'https://github.com/LaWebcapsule/directus9', + DOCS: 'https://github.com/LaWebcapsule/directus9/tree/main/docs', GITHUB: 'https://github.com/LaWebcapsule/directus9', - GITHUB_DIRECTUS: 'https://github.com/directus', - GITHUB_COMMUNITY: 'https://github.com/directus-community', + GITHUB_DIRECTUS: 'https://github.com/LaWebcapsule', + GITHUB_COMMUNITY: 'https://github.com/LaWebcapsule/directus9/discussions', LOCALES: 'https://locales.directus.io', - TWITTER: 'https://twitter.com/directus', - DISCORD_CHAT: 'https://directus.chat', - DISCORD_INVITE: 'https://discord.com/invite/directus', - AWESOME: 'https://github.com/directus-community/awesome-directus', - YOUTUBE: 'https://www.youtube.com/c/DirectusVideos', - EXAMPLE: 'https://example.directus.io', - LDAP: 'ldap://ldap.directus.io', - NPM: 'https://www.npmjs.com/package/directus', - DOCKER_HUB: 'https://hub.docker.com/r/directus/directus', - G2_REVIEWS: 'https://www.g2.com/products/directus/reviews', - CAPTERRA: 'https://www.capterra.com/p/156619/Directus', - TRUSTRADIUS: 'https://www.trustradius.com/products/directus/reviews', - PRODUCTHUNT: 'https://www.producthunt.com/posts/directus-9', + NPM: 'https://www.npmjs.com/package/@wbce-d9/directus9', + DOCKER_HUB: 'https://github.com/LaWebcapsule/directus9/pkgs/container/directus9', }; export const EMAILS = { - SECURITY: 'security@directus.io', - INFO: 'info@directus.io', - SUPPORT: 'support@directus.io', + SECURITY: 'support@webcapsule.io', + INFO: 'support@webcapsule.io', + SUPPORT: 'support@webcapsule.io', }; diff --git a/docs/.vitepress/theme/overrides.css b/docs/.vitepress/theme/overrides.css index 2eac325789..89a2b032f6 100644 --- a/docs/.vitepress/theme/overrides.css +++ b/docs/.vitepress/theme/overrides.css @@ -23,10 +23,15 @@ } /** - * Make logo size of the sidebar + * Logo sizing * -------------------------------------------------------------------------- */ .VPNav .VPNavBar .VPNavBarTitle .logo { - height: unset; + height: 36px; + width: auto; +} +.VPSidebar .VPSidebarNav .logo { + height: 36px; + width: auto; } /** diff --git a/docs/app/activity-log.md b/docs/app/activity-log.md index 28905f66e5..98a1960dc0 100644 --- a/docs/app/activity-log.md +++ b/docs/app/activity-log.md @@ -12,24 +12,21 @@ readTime: 2 min read :::tip Before You Begin -We recommend you try the [Quickstart Guide](/getting-started/quickstart.md) to get an overview of the platform. +We recommend you try the Quickstart Guide to get an overview of the platform. ::: :::tip Learn More To manage the Activity Log programmatically, please see our guide on the -[Activity Log API](/reference/system/activity.md). +Activity Log API. ::: ## Overview - -The Activity Log is the only Module in Directus Core that is not found in the [Module Bar](/app/overview#_1-module-bar). +The Activity Log is the only Module in d9 Core that is not found in the [Module Bar](/app/overview#_1-module-bar). Instead, it is accessed via the notifications tray of the [Sidebar](/app/overview#_4-sidebar). The Activity Log page has the same features and functionality as the [Collection Page](/app/content/collections). @@ -49,7 +46,7 @@ please see [Revert an Item](/app/content/items#revert-an-item). ## View an Activity Log Item -![Activity Log Default Fields]({{CDN_URL}}/docs/v9/configuration/activity-log/activity-log-20220816/activity-log-default-fields-20220816A.webp) +![Activity Log Default Fields](/images/activity-log-default-fields-20220816A.webp) Click any item in the Activity Log and a side drawer will open, displaying its logged details. The following information is stored for each item. @@ -65,18 +62,12 @@ is stored for each item. ## Filter by Activity - In addition to the filter and display functionality inherited from the [Collection Page](/app/content/collections), you can also filter items by activity from the Navigation Bar. ## Modify an Activity - To ensure proper accountability, system collections are **read only** by design. However, users with an Admin role have the ability to reopen, view, and modify an item's values in activities from non-system collections (where the name does diff --git a/docs/app/content.md b/docs/app/content.md index 8a41caef2a..459fe8978a 100644 --- a/docs/app/content.md +++ b/docs/app/content.md @@ -27,7 +27,7 @@ Link to tutorial ## Collection Page -![Collection Overview]({{CDN_URL}}/docs/v9/app-guide/content/content/content-20220415A/collection-page-20220415A.webp) +![Collection Overview](/images/collection-page-20220415A.webp) The Content Module consists of Collection Pages and Item Pages. Use the Navigation Bar on the left to move between Collections. Each Collection Page displays all Items in its Collection and comes with highly configurable @@ -39,13 +39,13 @@ more, see our guide on the [Collection Page](/app/content/collections). The Content module helps you manage Items. Collections are managed within the **Settings** menu, as these actions results in changes to the data model. To learn more, see our guide on -[data model configuration](/configuration/data-model). +[data model configuration](/app/data-model). ::: ## Item Page -![Article Overview]({{CDN_URL}}/docs/v9/app-guide/content/content/content-20220415A/item-page-20220215A.webp) +![Article Overview](/images/item-page-20220215A.webp) When you click an Item on the Collection page, its Item Page will open. The Item Page is a form that enables you to view, edit or delete an Item and its field values. You can also comment on, share, archive, or revert an Item from this @@ -53,9 +53,6 @@ form. To learn more, see our guide on the [Item Page](/app/content/items). ## Shares - In any project, certain Collections will have limited access permissions. In some cases, you may need to share one of the Items within the collection with an individual or group of individuals who don't yet have permission. In this case, diff --git a/docs/app/content/collections.md b/docs/app/content/collections.md index e908417254..b59f0a9b40 100644 --- a/docs/app/content/collections.md +++ b/docs/app/content/collections.md @@ -24,13 +24,10 @@ Link to tutorial ## Toggle Hidden Collections - Some projects may have dozens or even hundreds of collections, which can be overwhelming to sort through. To ease this problem, Admins can choose to -[hide collections by default](/configuration/data-model/collections.html#toggle-collection-visibility) on the Navigation +hide collections by default on the Navigation bar. Users can then show or hide hidden collections as desired. To toggle collection visibility, follow these steps. 1. Navigate to the Content Module. @@ -41,15 +38,12 @@ bar. Users can then show or hide hidden collections as desired. To toggle collec This functionality is purely aesthetic, provided to help you _visually cleanup_ the Navigation Bar. For admins who'd like to block users' access permissions, please see -[users, roles and permissions](/configuration/users-roles-permissions). +[users, roles and permissions](/app/users-roles-permissions). ::: ## Adjust Page Layout - Layouts determine how you view or interact with Items in a Collection. Whether your Collection contains blog posts, project management tasks, geo-coordinates, temporal data or beyond; Layouts present Items in a more human-friendly way. @@ -57,9 +51,6 @@ project management tasks, geo-coordinates, temporal data or beyond; Layouts pres ## Search Items - Find all Items with one or more Fields containing your searched value, excluding any Items which have been [filtered out](#filter-items). To search through a Collection's Items, follow these steps. @@ -70,9 +61,6 @@ Find all Items with one or more Fields containing your searched value, excluding ## Filter Items - Filters allow you to conditionally select Items from a Collection. Use-cases include customizing Item search results, restricting Item access permissions for specific Users or Roles, building dashboard analytics with the Insights module, @@ -80,14 +68,11 @@ and more. To Learn More, see our guide on [Filters](/app/filters). ## Manually Sort Items - Drag and drop Items to custom sort them as desired. This is only possible on certain Layouts, such as the default [Table Layout](/app/layouts#table-layout). To sort a Collection's Items, follow these steps. -1. Be sure [a sort field](/configuration/data-model/collections#sort-field) has been configured under **"Settings > Data +1. Be sure [a sort field](/app/data-model/collections#sort-field) has been configured under **"Settings > Data Model > Collection"**.\ _(Shown in the video)_ 2. Navigate to the Content Module and select the desired Collection. @@ -98,7 +83,7 @@ Drag and drop Items to custom sort them as desired. This is only possible on cer ::: warning Manual Sorting Requires Configuration -Only available if a [sort field](/configuration/data-model/collections#sort-field) has been configured. +Only available if a [sort field](/app/data-model/collections#sort-field) has been configured. ::: @@ -111,9 +96,6 @@ This means that while the values in this Sort Field do get updated and modified, ## Automatically Sort Items - Sort Items alphabetically or numerically, in ascending or descending order. Sorting is not possible on certain Layouts, such as the Map Layout. Layouts that do support automatic sorting have controls in slightly different locations. To @@ -127,9 +109,6 @@ Automatic sorting is a non-destructive action which does not change your data. ## View Archived Items - The no-code app allows you to hide archived Items, display them alongside other Items, or display archived Items only. To learn how to archive an Item, see our guide on the [Item Page](/app/content/items#archive-an-item). To change whether @@ -144,15 +123,12 @@ an archived Item is displayed, follow these steps. :::warning Archiving Requires Configuration -Only available if an [Archive field](/configuration/data-model/collections#archive) has been configured. +Only available if an [Archive field](/app/data-model/collections#archive) has been configured. ::: ## Create a Bookmark - Save how a Collection Page looks so that you can return to the exact same view later. This includes details such as the Layout, search queries, filters, custom sort & order, etc. To create a Bookmark from the Collection Page, follow these @@ -167,13 +143,13 @@ Your Bookmark will appear in the Navigation Bar, under the associated Collection :::tip Learn More -To learn more, see our guide on [Presets and Bookmarks](/configuration/presets-bookmarks). +To learn more, see our guide on [Presets and Bookmarks](/app/presets-bookmarks). ::: ## Import / Export Items -![Import and Export Items]({{CDN_URL}}/docs/v9/app-guide/content/content-collections/content-collections-20220415A/imports-exports-20220416A.webp) +![Import and Export Items](/images/imports-exports-20220416A.webp) The Content, User Directory and File Library modules allow importing and exporting of multiple Items stored as files. This makes it quick and easy to handle tasks like uploading and downloading new customer information; pulling down sales @@ -182,10 +158,7 @@ data for transformation, reports, analysis, and beyond. To learn more, see how t ## Batch Delete, Archive or Edit Items - It is possible to delete, archive, or edit multiple Items at once from the Collection Page. Deletion will permanently delete Items from the database, this cannot be reverted. When batch editing, the Item Page opens, allowing you to make diff --git a/docs/app/content/items.md b/docs/app/content/items.md index 2eb17bbee7..b04d8da372 100644 --- a/docs/app/content/items.md +++ b/docs/app/content/items.md @@ -27,9 +27,6 @@ Add links once "archive item" is created ## Create an Item - To create an Item, follow these steps. @@ -40,16 +37,13 @@ To create an Item, follow these steps. ::: tip Singletons -If the collection is configured as a [Singleton](/configuration/data-model/collections#collection-setup) in the data +If the collection is configured as a [Singleton](/app/data-model/collections#collection-setup) in the data model settings, the App will skip step two above and automatically open the Item Page. ::: ## Edit an Item - To edit an Item's field values, follow these steps. @@ -79,9 +73,6 @@ automatically open the Item Page. ## Advanced Save Options - To do an advanced save when you create or edit an item, follow these steps. @@ -95,9 +86,6 @@ To do an advanced save when you create or edit an item, follow these steps. ## Archive an Item - To archive an Item, follow these steps. @@ -108,18 +96,15 @@ To archive an Item, follow these steps. ::: warning Requires Configuration -Requires an [Archive field](/configuration/data-model/collections#archive) to be configured within the Collection's data +Requires an [Archive field](/app/data-model/collections#archive) to be configured within the Collection's data model settings. ::: ## Revert an Item - -As you update Field Values on Items, Directus saves these [Revisions](/getting-started/glossary#revisions), and they can +As you update Field Values on Items, d9 saves these [Revisions](/getting-started/glossary#revisions), and they can be compared side-by-side to the current state. To revert an Item, follow these steps. 1. Navigate to the Content Module and select the desired Collection. @@ -145,9 +130,6 @@ You can also revert Items [programmatically via the API](/reference/system/revis ## Comment on an Item - Comments is a collaborative tool that are left on an Item in the sidebar and remain there for you and other team members to view. To create a comment, follow these steps. @@ -175,9 +157,6 @@ to delete the comment. ## Delete an Item - To delete an Item, follow these steps. diff --git a/docs/app/content/shares.md b/docs/app/content/shares.md index af9bccd1ee..26ce7b8793 100644 --- a/docs/app/content/shares.md +++ b/docs/app/content/shares.md @@ -3,10 +3,6 @@ > The Shares utility enables you to share an Item with anyone, regardless of their permissions, even if they are not > users within the project. - @@ -79,7 +79,7 @@ tables are further broken down into columns and rows. ### Columns -![A Column]({{CDN_URL}}/docs/v9/configuration/data-model/data-model-20220805/columns-20220805A.webp) +![A Column](/images/columns-20220805A.webp) Columns are categories that store one kind of information. Each column has a unique, descriptive name and stores one unit of information in each of its [cell values](#cell-values). Columns keep the data organized, consistent, and easily @@ -89,7 +89,7 @@ accessible. The columns you choose to add to a data table will completely depend ### Cell Values -![Cell Values]({{CDN_URL}}/docs/v9/configuration/data-model/data-model-20220805/datatable-cell-value-20220805A.webp) +![Cell Values](/images/datatable-cell-value-20220805A.webp) Each value in a column is stored in its own cell. In general, you want to create columns that save _atomic_ values. That means create the column to store the smallest indivisible units There is no restriction for the kinds of information to @@ -115,14 +115,14 @@ unexpected and even dangerous behaviors in your program. ### Rows -![Rows]({{CDN_URL}}/docs/v9/configuration/data-model/data-model-20220805/row-20220805A.webp) +![Rows](/images/row-20220805A.webp) Each row stores data associated to a unique record, event, object, entity, observation, etc. Data tables can contain millions, _even billions and trillions_ of rows of data. ### Primary Keys -![Primary Key]({{CDN_URL}}/docs/v9/configuration/data-model/data-model-20220805/primary-keys-20220805A.webp) +![Primary Key](/images/primary-keys-20220805A.webp) In order to uniquely identify and track each row, every data table must have a primary key column. A primary key is a unique ID that identifies a specific row. Any pattern or system could be used to generate primary keys, so long as it @@ -132,7 +132,7 @@ differentiate it from other rows. ### Foreign Keys -![Foreign Keys]({{CDN_URL}}/docs/v9/configuration/data-model/data-model-20220805/foreign-keys-20220805A.webp) +![Foreign Keys](/images/foreign-keys-20220805A.webp) Since primary keys uniquely identify each and every row in a data table, they are the perfect tool to create relationships. If you want to relationally link rows between two data tables, you create a column to store _foreign @@ -163,12 +163,12 @@ There are several ways you can relationally link tables: M2M relationships, M2As require a junction data table as well as an additional column on the junction table to store the related tables' names. -To learn more about how these relationships work conceptually, as well as how they are handled within Directus, see our -guide on [relationships](/configuration/data-model/relationships). +To learn more about how these relationships work conceptually, as well as how they are handled within d9, see our +guide on [relationships](/app/data-model/relationships). ### Database Schemas -![Data Table to schema]({{CDN_URL}}/docs/v9/configuration/data-model/data-model-20220805/datatable-to-schema-20220805A.webp) +![Data Table to schema](/images/datatable-to-schema-20220805A.webp) In our examples so far, we have seen and described actual [data tables](#data-tables). As you design your relational data model, you will need to create a schema to keep track of its complexity. @@ -205,7 +205,7 @@ irrelevant to the current learning point, we omit their details so you can focus Please note too, that with more complex schemas, containing dozens _(or maybe hundreds!)_ of relationally linked data tables, you usually include datatype information as well as a visualization of how each and every table interlinks. -![A Complex Schema]({{CDN_URL}}/docs/v9/configuration/data-model/data-model-20220805/complex-schema.webp) +![A Complex Schema](/images/complex-schema.webp) ### Avoid Data Duplication @@ -245,7 +245,7 @@ data is displayed on each user profile page, for chat messaging and other types situation in many projects_. In this case, the author name and other details would also need to exist in the `users` table. -![Duplicate Data]({{CDN_URL}}/docs/v9/configuration/data-model/data-model-20220805/duplicate-data-20220829A.webp) +![Duplicate Data](/images/duplicate-data-20220829A.webp) This creates duplicate data. There are two big problems with this: @@ -286,7 +286,7 @@ blog - author_img ``` -As described in the section on [Rows](/configuration/data-model#rows), we want each row in a data table to represent one +As described in the section on [Rows](/app/data-model#rows), we want each row in a data table to represent one unique record, event, object, entity, observation, etc. To do this, we can remove the `author_name` column from the `blog` table and replace it with an `author_id` foreign key table, which stores foreign keys from the `users` table. @@ -315,7 +315,7 @@ between `blog` and `users`. ### Working With Relational Data Models -![Database, Backend, Frontend]({{CDN_URL}}/docs/v9/configuration/data-model/data-model-20220805/database-backend-frontend-20220805A.webp) +![Database, Backend, Frontend](/images/database-backend-frontend-20220805A.webp) Once you've designed your data model conceptually, you typically build and interact with it using SQL, or Structured Querying Language. This language is used to create, read & query, update, and delete anything and everything in the @@ -346,14 +346,11 @@ Therefore, developers need to build front-ends with polished UIs and custom disp human-friendly. However, even for developers with strong SQL database skills, building out APIs and GUIs to build and manage a data model is time consuming. -## Data Models in Directus +## Data Models in d9 - -All relational data model concepts listed above apply in Directus. You get complete, un-opinionated, relational data -model design and configuration. The difference is that Directus handles all SQL, builds the API, and provides a Data +All relational data model concepts listed above apply in d9. You get complete, un-opinionated, relational data +model design and configuration. The difference is that d9 handles all SQL, builds the API, and provides a Data Studio which lets business users work with data in a human-friendly way. The Data Studio also offers features and functionalities to display and interact with your data intuitively. Once your @@ -370,43 +367,34 @@ You have the power to do the following things, without a line of code or SQL: - Configure how data is interacted with by users in the Data Studio. - Translate any and all text in the Data Studio into any language. -Directus replaces traditional relational database jargon with more user-friendly terms and concepts. Please keep in mind -that while traditional relational database jargon strictly encompasses database concepts, some of the new Directus terms +d9 replaces traditional relational database jargon with more user-friendly terms and concepts. Please keep in mind +that while traditional relational database jargon strictly encompasses database concepts, some of the new d9 terms encompass these relational database concepts _plus display and interaction logic_. The following sections will introduce -Directus terms and map them to classic relational database concepts. +d9 terms and map them to classic relational database concepts. ## Collections - A collection _is a set of [items](#items)_. This can be a 1-1 match-up with a data table in SQL, a group of other collections, or a readonly view. You access all collections, including built-in system collections required to power your project, under **Settings > Data Model**. From there, click a collection to open its configurations page. To learn more, see our guide on -[collections](/configuration/data-model/collections). +[collections](/app/data-model/collections). ## Fields - Fields are database columns, but with a twist. Remember, SQL database columns store pure, raw data. From there, developers build out custom logic and UIs to determine -how this data is displayed and interacted with. In Directus, fields encompass column configurations, as well as custom -configuration over how to the data is displayed and interacted with in the Data Studio. Directus also has +how this data is displayed and interacted with. In d9, fields encompass column configurations, as well as custom +configuration over how to the data is displayed and interacted with in the Data Studio. d9 also has [alias fields](/getting-started/glossary#alias), which are virtual and do not match directly to a column. To learn more, -see our guide on [fields](/configuration/data-model/fields/). +see our guide on [fields](/app/data-model/fields). ## Items - Items are data table rows, but with a twist. @@ -420,17 +408,14 @@ You access items from other app modules, such as [Content](/app/content), [User ## Data Type Superset -Directus abstracts type differences between SQL vendors with a +d9 abstracts type differences between SQL vendors with a [Data Type Superset](/getting-started/glossary#data-type-superset). ## Keys and IDs - -Primary keys are called IDs in Directus fairly frequently. When you -[create a collection](/configuration/data-model/collections#create-a-collection), you must add an `id` field. Directus +Primary keys are called IDs in d9 fairly frequently. When you +[create a collection](/app/data-model/collections#create-a-collection), you must add an `id` field. d9 supports the following types of IDs: - **Auto-Incremented Integer** — IDs increment `1`, `2`, `3` up to `2^31-1` or `2,147,483,647`. @@ -443,9 +428,6 @@ supports the following types of IDs: ## Relationships - -Directus supports all standard [types of relationships](#types-of-relationships), as well as a few more of its own -compound types. To learn more, see our guide on [relationships](/configuration/data-model/relationships). +d9 supports all standard [types of relationships](#types-of-relationships), as well as a few more of its own +compound types. To learn more, see our guide on [relationships](/app/data-model/relationships). diff --git a/docs/app/data-model/collections.md b/docs/app/data-model/collections.md index fb61f4b435..c5eae7a0e4 100644 --- a/docs/app/data-model/collections.md +++ b/docs/app/data-model/collections.md @@ -19,21 +19,15 @@ API documentation ## Overview - Collections are data tables. Typically, you access items within a collection in the [Content Module](/app/content). ## System Collections - System collections store the data and configuration details required to power your project. -Since system collections store information that powers your Directus project. You cannot reconfigure system collections +Since system collections store information that powers your d9 project. You cannot reconfigure system collections or any of their default fields, as any reconfigurations would break your project. However, you _can_ create and configure new fields on a system collection. This lets you safely customize your data model as desired. @@ -42,34 +36,31 @@ each system collection is responsible for, as well as where to find relevant App | System Collection | Purpose | APP | API | | ----------------- | ------------------------------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------- | ------------------------------------------------ | -| Activity | Tracks and stores all events within Directus, giving full accountability over everything. | [Activity Log](/configuration/activity-log) | [Activity](/reference/system/activity) | -| Collections | Stores data table & configuration details each and every Collection. | [Collections](/configuration/data-model/collections) | [Collections](/reference/system/collections) | +| Activity | Tracks and stores all events within d9, giving full accountability over everything. | [Activity Log](/app/activity-log) | [Activity](/reference/system/activity) | +| Collections | Stores data table & configuration details each and every Collection. | [Collections](/app/data-model/collections) | [Collections](/reference/system/collections) | | Dashboards | Stores dashboard configuration details and all relationally linked panels. | [Insights](/app/insights) | **N/A** | -| Fields | Stores configuration details for each field. | [Fields](/configuration/data-model/fields/) | [Fields](/reference/system/fields) | +| Fields | Stores configuration details for each field. | [Fields](/app/data-model/fields) | [Fields](/reference/system/fields) | | Files | This stores file location from asset storage as well as any data associated with that file. | [File Library](/app/file-library) | [Files](/reference/files) | -| Flows | Stores basic logic required for Flows, which enable event-triggered task automation. | [Flows](/configuration/flows) | [Flows](/reference/system/flows) | +| Flows | Stores basic logic required for Flows, which enable event-triggered task automation. | [Flows](/app/flows) | [Flows](/reference/system/flows) | | Folders | Stores information required for Folders, which provide virtual file asset management. | [Folders](/app/file-library#folders) | [Folders](/reference/system/folders) | | Migrations | Used by our install/upgrade process to track when migration scripts for a specific release have been run. | It has no relevant app functionality. | **N/A** | | Notifications | Stores details about in-app notifications. | [Module Bar](/app/overview#_1-module-bar) and [Sidebar](/app/overview#_4-sidebar) | [Notifications](/reference/system/notifications) | -| Operations | Stores information required for Operations, which are a part of [Flows](#flows). | [Operations](/configuration/flows) | [Operations](/reference/system/operations.md) | +| Operations | Stores information required for Operations, which are a part of [Flows](#flows). | [Operations](/app/flows) | Operations | | Panels | This stores information about individual analytics panels, which are displayed on [Dashboards](#dashboards). | [Insights](/app/insights) | **N/A** | -| Permissions | This stores the access permissions configured for roles. | [Users, Roles & Permissions](/configuration/users-roles-permissions) | [Permissions](/reference/system/permissions) | -| Presets | This stores details for presets and bookmarks. | [Presents & Bookmarks](/configuration/presets-bookmarks) | [Presets](/reference/system/presets) | -| Relations | This stores information about relationships between collections. | [Relationships](/configuration/data-model/relationships) | [Relations](/reference/system/relations) | -| Revisions | Revisions are changes/edits made to Items. Directus keeps track of edits made, so you're able to revert to a previous state at will. | [Revert an Item](/app/content/items#revert-an-item) | [Revisions](/reference/system/revisions) | -| Roles | Stores information about each role created. | [Users, Roles, and Permissions](/configuration/users-roles-permissions) | [Roles](/reference/system/roles) | +| Permissions | This stores the access permissions configured for roles. | [Users, Roles & Permissions](/app/users-roles-permissions) | [Permissions](/reference/system/permissions) | +| Presets | This stores details for presets and bookmarks. | [Presents & Bookmarks](/app/presets-bookmarks) | [Presets](/reference/system/presets) | +| Relations | This stores information about relationships between collections. | [Relationships](/app/data-model/relationships) | [Relations](/reference/system/relations) | +| Revisions | Revisions are changes/edits made to Items. d9 keeps track of edits made, so you're able to revert to a previous state at will. | [Revert an Item](/app/content/items#revert-an-item) | [Revisions](/reference/system/revisions) | +| Roles | Stores information about each role created. | [Users, Roles, and Permissions](/app/users-roles-permissions) | [Roles](/reference/system/roles) | | Sessions | Stores information about each user session, for system purposes. | **N/A** | **N/A** | -| Settings | Stores all configurations made within **Settings > Project Settings**. | [Project Settings](/configuration/project-settings) | [settings](/reference/system/settings) | +| Settings | Stores all configurations made within **Settings > Project Settings**. | [Project Settings](/app/project-settings) | [settings](/reference/system/settings) | | Shares | Stores all information regarding data shares. | [Data Sharing](/app/content/shares) | | | Users | Stores information about each user within the platform. | [User Directory](/app/user-directory) | [Users](/reference/system/relations) | -| Webhooks | Stores all information about configured webhooks. | [Webhooks](/configuration/webhooks) | [Webhooks](/reference/system/relations) | +| Webhooks | Stores all information about configured webhooks. | [Webhooks](/app/webhooks) | [Webhooks](/reference/system/relations) | ## Create a Collection - To create a collection, follow these steps. @@ -79,7 +70,7 @@ To create a collection, follow these steps. 3. Optional: Make any other configurations as desired. - **Singleton** — Toggles whether the collection is a [Singleton](#collection-setup). - **Primary Key Field** — Sets the name of the primary key field, defaults to `id`. - - **Type** — Sets the [type of ID](/configuration/data-model/fields/#keys-and-ids) to use for this collection. + - **Type** — Sets the [type of ID](/app/data-model/fields#keys-and-ids) to use for this collection. 4. Click arrow_forward to confirm. 5. Enable and rename the other Optional System Fields as desired: - **Status** — Stores item status. @@ -99,30 +90,27 @@ displayed with [Collection Naming Translations](#collection-setup). :::warning Composite Keys -Directus does not currently support composite keys. If your project uses composite keys, you will need to make an +d9 does not currently support composite keys. If your project uses composite keys, you will need to make an adjustment to the data model. ::: :::warning SQL Views -Directus does not currently support creation of virtual tables via SQL Views. +d9 does not currently support creation of virtual tables via SQL Views. ::: ::: tip Database Tables Remember, a collection is simply a database table. Therefore, you can import or create a table directly in the database -and it will automatically appear within your Directus project. The first time you manage that table, a +and it will automatically appear within your d9 project. The first time you manage that table, a `directus_collections` record will be created with default values. ::: ## Toggle Collection Visibility - To toggle whether a collection is hidden by default in the Content Module, follow these steps. @@ -132,7 +120,7 @@ To toggle whether a collection is hidden by default in the Content Module, follo :::tip -Assuming a user has [access permissions](/configuration/users-roles-permissions), hidden collections can still be +Assuming a user has [access permissions](/app/users-roles-permissions), hidden collections can still be viewed. They must right-click on the Navigation Bar and choose visibility **Show Hidden Collections**. @@ -140,9 +128,6 @@ Collections**. ## Create a Folder - Folders allow you to sub-nest and group how collections are displayed. This feature simply changes how the collections are displayed under **Settings > Data Model** and in the Content Module. It has no impact on the data model. To create a @@ -156,9 +141,6 @@ folder, follow these steps. ## Toggle Folder Display - To toggle folder display, follow these steps. @@ -170,9 +152,6 @@ To toggle folder display, follow these steps. ## Sort and Nest Collections - To sort and nest collections in **Settings > Data Model** and **Content Module**, follow these steps. @@ -182,9 +161,6 @@ To sort and nest collections in **Settings > Data Model** and **Content Module** ## Configure a Collection - To configure a collection, follow these steps. @@ -201,19 +177,13 @@ To configure a collection, follow these steps. ### Fields & Layout - This section allows you to create and configure fields, as well as configure how fields are displayed on the [Item Details Page](/app/content/items). To learn more, please see the documentation on -[fields](/configuration/data-model/fields/). +[fields](/app/data-model/fields). ### Collection Setup - These controls allow you to modify how the collection is displayed within the Content Module. @@ -229,13 +199,13 @@ These controls allow you to modify how the collection is displayed within the Co - **Singleton** — Toggle to bypass the [Collection Page](/app/content/collections) and take users to the [Item Details Page](/app/content/items). - **Collection Naming Translations** — Translate the collection name across multiple languages. When the default - language is changed in [Project Settings](/configuration/project-settings#general) or + language is changed in [Project Settings](/app/project-settings#general) or [User Details Page](/app/user-directory#user-details-page), the relevant translation, if any exists, will be used throughout the app. :::tip Collection Naming Translations -By default, Directus uses the [Title Formatter](/getting-started/glossary#title-formatter) to display collection keys as +By default, d9 uses the [Title Formatter](/getting-started/glossary#title-formatter) to display collection keys as human readable names, but you can also use translations to explicitly rename more technical table keys. ::: @@ -248,9 +218,6 @@ A collection that only contains one single item. For example, a website's **Abou ### Archive - Selects a field to handle archiving items. This provides a _soft-delete_ functionality for items in a collection. Archived items will still exist in the collection and database, but are filtered within the Data Studio. To configure an @@ -286,9 +253,6 @@ filtered out. This gives you the flexibility to manage archived items however yo ### Sort Field - The sort feature enables users to [manually sort Items](/app/content/collections#manually-sort-items) within the Data Studio. This is typically shown on the **Content Module > Collection Page**. It can also be used for sorting items @@ -300,7 +264,7 @@ unselectable in the Sort Field dropdown. To configure a sort field, follow these steps. -1. [Create a Field](/configuration/data-model/fields/#create-a-field-standard) with an `INTEGER` data type. +1. [Create a Field](/app/data-model/fields#create-a-field-standard) with an `INTEGER` data type. 2. Choose a field from the dropdown under **Settings > Data Model > [Collection] > Sort**. 3. Click check to confirm. @@ -309,7 +273,7 @@ Once you sort field is configured, you may want to learn how to ::: tip Automatic Setup -When you [create a Collection](/configuration/data-model/collections#create-a-collection), you have the option of +When you [create a Collection](/app/data-model/collections#create-a-collection), you have the option of creating a **Sort** field. If you choose to include this field, the collection's sort settings will automatically be configured for you. @@ -330,11 +294,8 @@ You can also set this field to be **Hidden** so it doesn't show up within the It ### Accountability - -By default, your Directus Project tracks all [activity](/reference/system/activity) and +By default, your d9 Project tracks all [activity](/reference/system/activity) and [revisions](/reference/system/revisions) for collections. However, you can override this and choose what data is tracked. @@ -353,9 +314,6 @@ Accountability is a log of _who does what_ in your project. It is for your team' ### Duplication - The **Save as Copy** option on the Item Details Page offers a way to effectively duplicate the current item. Since there may be unique or relational data within the item, it's important to control exactly what will be copied. Duplication @@ -365,9 +323,6 @@ lets you configure which parent & relational field values will be copied when yo ## Delete a Collection - To delete a collection, follow these steps. diff --git a/docs/app/data-model/fields.md b/docs/app/data-model/fields.md index 5852a12b55..638af2d532 100644 --- a/docs/app/data-model/fields.md +++ b/docs/app/data-model/fields.md @@ -6,9 +6,6 @@ ## Overview - To access a collection's fields, navigate to **Settings > Data Model > [Collection]**. From here, you can click a field to access its **Configuration Drawer** and make advanced configurations. You also have the following controls for each @@ -34,9 +31,6 @@ Context Menu** and **Field Configuration Drawer**, described below. ## Create a Field (Standard) - To make field configuration as intuitive and easy as possible, a template wizard is provided so that you can create fields pre-configured for common use-cases. When you create a field this way, you will still have full power to @@ -53,9 +47,6 @@ fields pre-configured for common use-cases. When you create a field this way, yo ## Create a Field (Advanced) - This field creation method opens the **Field Configuration Drawer** so you can customize every field detail from the start. To create a field in advanced mode, follow these steps. @@ -70,15 +61,12 @@ start. To create a field in advanced mode, follow these steps. ::: tip Database Columns Remember, a field is a database column. Therefore, you can create a column directly in the database and it will -automatically appear within Directus. You can then enhance the experience further by configuring it as desired. +automatically appear within d9. You can then enhance the experience further by configuring it as desired. ::: ## Configure a Field - Fields are configured in the **Field Configuration Drawer**, which is composed of eight sections. These provide extensive customization options, from the database column's details, to how it is displayed and interacted with, and @@ -107,9 +95,6 @@ create new fields within system collections. ## Duplicate a Field - To duplicate a field, follow these steps. @@ -133,19 +118,13 @@ field will not be copied. ## Toggle Field Visibility (for Admins) - For users with any _non-admin_ role, a field's visibility can be adjusted via -[access permissions](/configuration/users-roles-permissions.md). However, you may want to hide certain fields for admins +access permissions. However, you may want to hide certain fields for admins as well. This is handy if the field is distracting or has no need to be seen on the item details page. ## Adjust Field Width - Adjusting the field width in **Fields and Layout** will change field width on the [Item Detail Page](/app/content#item-page). To adjust field width, follow these steps. @@ -158,9 +137,6 @@ Adjusting the field width in **Fields and Layout** will change field width on th ## Manually Sort Fields - Adjusting the field order in **Fields and Layout** will change its order on the [Item Page](/app/content/collections#item-page). To manually sort fields, click drag_indicator to @@ -168,9 +144,6 @@ drag and drop the field as desired. ## Delete a Field - To permanently delete a field and all its stored values, follow these steps. diff --git a/docs/app/data-model/fields/groups.md b/docs/app/data-model/fields/groups.md index 40fdea3d70..e2afbc1f77 100644 --- a/docs/app/data-model/fields/groups.md +++ b/docs/app/data-model/fields/groups.md @@ -4,7 +4,7 @@ ## Accordion -![An accordion interface that allows use to expand and collapse different fields.]({{CDN_URL}}/docs/v9/configuration/data-model/fields/interfaces-20230308/interface-accordion.webp) +![An accordion interface that allows use to expand and collapse different fields.](/images/interface-accordion.webp) Group interface that allows user to show and hide certain fields within the group by clicking on each field. @@ -13,9 +13,9 @@ Group interface that allows user to show and hide certain fields within the grou ## Detail Group -![A group of form fields that are currently hidden behind a toggle.]({{CDN_URL}}/docs/v9/configuration/data-model/fields/interfaces-20230308/interface-detailgroup-closed.webp) +![A group of form fields that are currently hidden behind a toggle.](/images/interface-detailgroup-closed.webp) -![A group of form fields that are currently visible but can be hidden behind a toggle.]({{CDN_URL}}/docs/v9/configuration/data-model/fields/interfaces-20230308/interface-detailgroup-open.webp) +![A group of form fields that are currently visible but can be hidden behind a toggle.](/images/interface-detailgroup-open.webp) Group interface that allows user to show or hide all fields within the group by clicking on the header toggle. @@ -25,7 +25,7 @@ Group interface that allows user to show or hide all fields within the group by ## Raw Group -![A group of form fields]({{CDN_URL}}/docs/v9/configuration/data-model/fields/interfaces-20230308/interface-rawgroup.webp) +![A group of form fields](/images/interface-rawgroup.webp) Interface that groups multiple fields together, but always displays them. @@ -36,4 +36,4 @@ Interface that groups multiple fields together, but always displays them. Any fields that you add within a Group will also maintain that grouping throughout the App Studio in filters, dropdowns, and more. -![Content collection interface that shows a highlighted dropdown with several different groups of fields.]({{CDN_URL}}/docs/v9/configuration/data-model/fields/interfaces-20230308/interface-group-filter.webp) +![Content collection interface that shows a highlighted dropdown with several different groups of fields.](/images/interface-group-filter.webp) diff --git a/docs/app/data-model/fields/other.md b/docs/app/data-model/fields/other.md index 6fa891cd62..c1844afb52 100644 --- a/docs/app/data-model/fields/other.md +++ b/docs/app/data-model/fields/other.md @@ -4,9 +4,9 @@ ## Hash -![Form text input. Value is "value to hash on save"]({{CDN_URL}}/docs/v9/configuration/data-model/fields/interfaces-20230308/interface-hash.webp) +![Form text input. Value is "value to hash on save"](/images/interface-hash.webp) -![Form text input that shows the value is securely hashed.]({{CDN_URL}}/docs/v9/configuration/data-model/fields/interfaces-20230308/interface-hash-secure.webp) +![Form text input that shows the value is securely hashed.](/images/interface-hash-secure.webp) Text input that allows users to hash the value on save. Both the API and SDK provide methods to [verify the hash]({{DOCS_URL}}/reference/system/utilities.html#verify-a-hash). @@ -17,7 +17,7 @@ Text input that allows users to hash the value on save. Both the API and SDK pro ## Slider -![A standard form text input]({{CDN_URL}}/docs/v9/configuration/data-model/fields/interfaces-20230308/interface-slider.webp) +![A standard form text input](/images/interface-slider.webp) Range input that allows users to select a number with an interactive slider. diff --git a/docs/app/data-model/fields/presentation.md b/docs/app/data-model/fields/presentation.md index 91a12791d1..995d2fe19d 100644 --- a/docs/app/data-model/fields/presentation.md +++ b/docs/app/data-model/fields/presentation.md @@ -4,7 +4,7 @@ ## Divider -![A horizontal divider between two form fields]({{CDN_URL}}/docs/v9/configuration/data-model/fields/interfaces-20230308/interface-divider.webp) +![A horizontal divider between two form fields](/images/interface-divider.webp) A horizontal divider to separate fields into different sections. @@ -15,9 +15,9 @@ A horizontal divider to separate fields into different sections. ## Button Links -![A group of two buttons. One primary button. One default button.]({{CDN_URL}}/docs/v9/configuration/data-model/fields/interfaces-20230308/interface-buttonlinks.webp) +![A group of two buttons. One primary button. One default button.](/images/interface-buttonlinks.webp) -![A form for creating new Button Links. Form has four fields: "Label", "Icon", "Type", "URL"]({{CDN_URL}}/docs/v9/configuration/data-model/fields/interfaces-20230308/interface-buttonlinks-new.webp) +![A form for creating new Button Links. Form has four fields: "Label", "Icon", "Type", "URL"](/images/interface-buttonlinks-new.webp) Group of one or more buttons that link to a preset or dynamic url. @@ -30,11 +30,11 @@ Group of one or more buttons that link to a preset or dynamic url. ## Notice -![A standard warning notice in yellow with a hazard icon.]({{CDN_URL}}/docs/v9/configuration/data-model/fields/interfaces-20230308/interface-notice.webp) +![A standard warning notice in yellow with a hazard icon.](/images/interface-notice.webp) An alert or notice interface to notify users of important information. - **Color**: `Primary`, `Normal`, `Info`, `Success`, `Warning`, `Danger` - **Icon**: Icon to display in the Notice. -- **Text**: Enter your notice content. You can also use [Translation Strings](/configuration/translation-strings) here +- **Text**: Enter your notice content. You can also use [Translation Strings](/app/translation-strings) here to provide notices in different languages. diff --git a/docs/app/data-model/fields/relational.md b/docs/app/data-model/fields/relational.md index a3196a4c20..e8f3c6016b 100644 --- a/docs/app/data-model/fields/relational.md +++ b/docs/app/data-model/fields/relational.md @@ -1,12 +1,12 @@ # Relational > Interfaces are how users interact with fields on the Item Detail page. These are the standard Relational interfaces. -> We recommend that you review [Relationships](/configuration/data-model/relationships) before working with Relational +> We recommend that you review [Relationships](/app/data-model/relationships) before working with Relational > interfaces. ## File -![A file type form input where user can pick from three options: "Upload File From Device", "Choose Files from Library", "Import File from URL"]({{CDN_URL}}/docs/v9/configuration/data-model/fields/interfaces-20230308/interface-file.webp) +![A file type form input where user can pick from three options: "Upload File From Device", "Choose Files from Library", "Import File from URL"](/images/interface-image.webp) Interface that allows uses to upload a single file of any mime-type, choose an existing file from the [File Library](/app/file-library), or import a file from a URL. @@ -15,7 +15,7 @@ Interface that allows uses to upload a single file of any mime-type, choose an e ## Image -![A file type form input where user can pick from three options: "Upload File From Device", "Choose Files from Library", "Import File from URL"]({{CDN_URL}}/docs/v9/configuration/data-model/fields/interfaces-20230308/interface-image.webp) +![A file type form input where user can pick from three options: "Upload File From Device", "Choose Files from Library", "Import File from URL"](/images/interface-image.webp) Interface that allows uses to upload a single image file, choose an existing image from the [File Library](/app/file-library), or import an image from a URL. @@ -25,14 +25,14 @@ Interface that allows uses to upload a single image file, choose an existing ima ## Files -![A file type form input where user can select and upload multiple files.]({{CDN_URL}}/docs/v9/configuration/data-model/fields/interfaces-20230308/interface-files.webp) +![A file type form input where user can select and upload multiple files.](/images/interface-files.webp) Interface that allows uses to upload multiple files, choose an existing image from the [File Library](/app/file-library), or import an image from a URL. -This field will create a [Many-To-Many (M2M)](/configuration/data-model/relationships#many-to-many-m2m) junction -collection when added to the [Data Model](/configuration/data-model) for your -[Collection](/configuration/data-model/collections). +This field will create a [Many-To-Many (M2M)](/app/data-model/relationships#many-to-many-m2m) junction +collection when added to the [Data Model](/app/data-model) for your +[Collection](/app/data-model/collections). - **Folder**: Folder for the uploaded files. Does not affect the location of existing files. - [**Display Template**](/app/display-templates): Fields or custom text that represent the specific item through various @@ -43,13 +43,13 @@ collection when added to the [Data Model](/configuration/data-model) for your ## Builder (M2A) -![A form interface that allows users to create a relationship from the current item by selecting different items from multiple, distinct Collections.]({{CDN_URL}}/docs/v9/configuration/data-model/fields/interfaces-20230308/interface-m2a.webp) +![A form interface that allows users to create a relationship from the current item by selecting different items from multiple, distinct Collections.](/images/interface-m2a.webp) Interface that allows users to create relationships between the current item and multiple items from multiple, distinct -collections. See [Many-to-Any (M2A) Relationships](/configuration/data-model/relationships#many-to-any-m2a). +collections. See [Many-to-Any (M2A) Relationships](/app/data-model/relationships#many-to-any-m2a). Useful in many different contexts including -[creating re-usable page components](/use-cases/headless-cms/create-reusable-page-components-using-m2a). +[creating re-usable page components](/guides/headless-cms/reusable-components). - **Creating Items**: Allow users to create new Items in the M2A collection. - **Selecting Items**: Allow users to select existing files in the M2A collection. @@ -58,14 +58,14 @@ Useful in many different contexts including ## Many To Many -![A form interface that allows users to select multiple different items from a single collection. Buttons for "Create New" and "Add Existing".]({{CDN_URL}}/docs/v9/configuration/data-model/fields/interfaces-20230308/interface-m2m.webp) +![A form interface that allows users to select multiple different items from a single collection. Buttons for "Create New" and "Add Existing".](/images/interface-m2m.webp) Interface that allows users to create relationships between the current item and many different items from a single collection. -This field will create a [Many-To-Many (M2M)](/configuration/data-model/relationships#many-to-many-m2m) junction -collection when added to the [Data Model](/configuration/data-model) for your -[Collection](/configuration/data-model/collections). +This field will create a [Many-To-Many (M2M)](/app/data-model/relationships#many-to-many-m2m) junction +collection when added to the [Data Model](/app/data-model) for your +[Collection](/app/data-model/collections). - **Layout**: `List`, `Table` - **Creating Items**: Allow users to create new Items in the M2M collection. @@ -78,12 +78,12 @@ collection when added to the [Data Model](/configuration/data-model) for your ## One to Many -![A form interface that allows users to select multiple items from a single collection. Buttons for "Create New" and "Add Existing".]({{CDN_URL}}/docs/v9/configuration/data-model/fields/interfaces-20230308/interface-o2m.webp) +![A form interface that allows users to select multiple items from a single collection. Buttons for "Create New" and "Add Existing".](/images/interface-o2m.webp) Interface that allows users to create a relationship between the current item and many items from a single collection. Adding a One To Many field to the data model will create a corresponding Many to One field in the child collection. See -[One-to-Many (O2M) Relationships](/configuration/data-model/relationships#one-to-many-o2m). +[One-to-Many (O2M) Relationships](/app/data-model/relationships#one-to-many-o2m). - **Layout**: `List`, `Table` - **Creating Items**: Allow users to create new Items in the M2A collection. @@ -96,14 +96,14 @@ Adding a One To Many field to the data model will create a corresponding Many to ## Tree View -![A form interface that shows multiple parent and child items from the same collection. Buttons for "Create New" and "Add Existing".]({{CDN_URL}}/docs/v9/configuration/data-model/fields/interfaces-20230308/interface-treeview.webp) +![A form interface that shows multiple parent and child items from the same collection. Buttons for "Create New" and "Add Existing".](/images/interface-treeview.webp) Special One-to-Many (O2M) interface that allows users to create and manage recursive relationships between items from the same collection. The Tree View interface is only available on self-referencing (recursive) relationships. See -[Many-to-Any (O2M) Relationships](/configuration/data-model/relationships#many-to-any-m2a) and -[Build a Content Hierarchy](/cookbook/data-models/build-a-content-hierarchy). +[Many-to-Any (O2M) Relationships](/app/data-model/relationships#many-to-any-m2a) and +Build a Content Hierarchy. - [**Display Template**](/app/display-templates): Fields or custom text that represent the specific item through various places in the App Studio. @@ -113,12 +113,12 @@ The Tree View interface is only available on self-referencing (recursive) relati ## Many to One -![A form interface that allows a user to select a single item from a collection."]({{CDN_URL}}/docs/v9/configuration/data-model/fields/interfaces-20230308/interface-m2o.webp) +![A form interface that allows a user to select a single item from a collection."](/images/interface-m2o.webp) Interface that allows users to create a relationship between the current item and a single item from a single collection. -See [Many-to-One (M20) Relationships](/configuration/data-model/relationships#many-to-one-m2o) +See [Many-to-One (M20) Relationships](/app/data-model/relationships#many-to-one-m2o) - [**Display Template**](/app/display-templates): Fields or custom text that represent the specific item through various places in the App Studio. @@ -128,10 +128,10 @@ See [Many-to-One (M20) Relationships](/configuration/data-model/relationships#ma ## Translations -![A form interface with two columns and two fields per column - "Title" and "Content". One column contains the English translation for each field. Second column contains the French translation for each field.]({{CDN_URL}}/docs/v9/configuration/data-model/fields/interfaces-20230308/interface-translations.webp) +![A form interface with two columns and two fields per column - "Title" and "Content". One column contains the English translation for each field. Second column contains the French translation for each field.](/images/interface-translations.webp) Special relational Interface designed specifically to handle translations. See -[Translations (O2M)](/configuration/data-model/relationships#translations-o2m). +[Translations (O2M)](/app/data-model/relationships#translations-o2m). - **Language Indicator Field**: The field from your `languages` collection that identifies the language to the user. - **Language Direction Field**: The field from your `languages` collection that identifies the text direction for a diff --git a/docs/app/data-model/fields/selection.md b/docs/app/data-model/fields/selection.md index 3ef1c36958..3114ddc699 100644 --- a/docs/app/data-model/fields/selection.md +++ b/docs/app/data-model/fields/selection.md @@ -4,7 +4,7 @@ ## Toggle -![A toggle form input with label named "Enabled"]({{CDN_URL}}/docs/v9/configuration/data-model/fields/interfaces-20230308/interface-toggle.webp) +![A toggle form input with label named "Enabled"](/images/interface-toggle.webp) A checkbox input that allows user to toggle value between on and off / true and false. @@ -18,7 +18,7 @@ A checkbox input that allows user to toggle value between on and off / true and ## Datetime -![A date picker input. User can select a calendar date and input a time. ]({{CDN_URL}}/docs/v9/configuration/data-model/fields/interfaces-20230308/interface-datetime.webp) +![A date picker input. User can select a calendar date and input a time. ](/images/interface-datetime.webp) Date picker input that allows user to select a date and time. @@ -28,16 +28,14 @@ Date picker input that allows user to select a date and time. ## Repeater -![A standard form text input]({{CDN_URL}}/docs/v9/configuration/data-model/fields/interfaces-20230308/interface-repeater.webp) - -![A standard form text input]({{CDN_URL}}/docs/v9/configuration/data-model/fields/interfaces-20230308/interface-repeater-open.webp) +![A standard form text input](/images/interface-repeater-open.webp) Interface for repeating groups of fields. -You can use any [Text & Number](/configuration/data-model/fields/text-numbers), -[Selection](/configuration/data-model/fields/selection), or [Other](/configuration/data-model/fields/other) fields -within a Repeater. [Relational](/configuration/data-model/fields/relational.md), -[Presentation](/configuration/data-model/fields/presentation.md), or [Group](/configuration/data-model/fields/groups.md) +You can use any Text & Number, +Selection, or Other fields +within a Repeater. Relational, +Presentation, or Group fields are not allowed. Value is stored as a JSON array of objects. @@ -56,7 +54,7 @@ Value is stored as a JSON array of objects. ## Map -![An interactive map interface that shows a single point on the east coast of the United States. Map has buttons for zoom, search, and full screen.]({{CDN_URL}}/docs/v9/configuration/data-model/fields/interfaces-20230308/interface-map.webp) +![An interactive map interface that shows a single point on the east coast of the United States. Map has buttons for zoom, search, and full screen.](/images/interface-map.webp) Interface that shows geospatial data on an interactive map. @@ -65,7 +63,7 @@ Interface that shows geospatial data on an interactive map. ## Color -![A text input for color hex codes that allows user to select color modes ]({{CDN_URL}}/docs/v9/configuration/data-model/fields/interfaces-20230308/interface-color.webp) +![A text input for color hex codes that allows user to select color modes ](/images/interface-color.webp) A color picker interface that allows users to input color codes and convert between different color modes. @@ -75,7 +73,7 @@ A color picker interface that allows users to input color codes and convert betw ## Dropdown -![A select input with a dropdown of options.]({{CDN_URL}}/docs/v9/configuration/data-model/fields/interfaces-20230308/interface-dropdown.webp) +![A select input with a dropdown of options.](/images/interface-dropdown.webp) Input that allows user to select a value from a list of options. @@ -90,7 +88,7 @@ Input that allows user to select a value from a list of options. ## Icon -![A select input with a dropdown grid of icon choices.]({{CDN_URL}}/docs/v9/configuration/data-model/fields/interfaces-20230308/interface-icon.webp) +![A select input with a dropdown grid of icon choices.](/images/interface-icon.webp) Search input that allows user to select from a list of icons. @@ -98,7 +96,7 @@ Search input that allows user to select from a list of icons. ## Checkboxes -![A form input with multiple checkboxes.]({{CDN_URL}}/docs/v9/configuration/data-model/fields/interfaces-20230308/interface-checkboxes.webp) +![A form input with multiple checkboxes.](/images/interface-checkboxes.webp) Input that allows user to select multiple checkboxes. @@ -114,7 +112,7 @@ Input that allows user to select multiple checkboxes. ## Checkboxes (Tree) -![A form input with a nested tree of multiple parent and child checkboxes.]({{CDN_URL}}/docs/v9/configuration/data-model/fields/interfaces-20230308/interface-checkboxes-tree.webp) +![A form input with a nested tree of multiple parent and child checkboxes.](/images/interface-checkboxes-tree.webp) Nested tree of checkboxes that can be expanded or collapsed. @@ -127,7 +125,7 @@ Nested tree of checkboxes that can be expanded or collapsed. ## Dropdown (Multiple) -![A select input where user can select multiple options from a dropdown.]({{CDN_URL}}/docs/v9/configuration/data-model/fields/interfaces-20230308/interface-dropdown-multiple.webp) +![A select input where user can select multiple options from a dropdown.](/images/interface-dropdown-multiple.webp) Input that allows user to select multiple values from a list of options. @@ -142,7 +140,7 @@ Input that allows user to select multiple values from a list of options. ## Radio Buttons -![A radio button form input with different options to select]({{CDN_URL}}/docs/v9/configuration/data-model/fields/interfaces-20230308/interface-radio-buttons.webp) +![A radio button form input with different options to select](/images/interface-radio-buttons.webp) Radio button input that allows users to select a single value from multiple choices. diff --git a/docs/app/data-model/fields/text-numbers.md b/docs/app/data-model/fields/text-numbers.md index 6848dfff48..c789932678 100644 --- a/docs/app/data-model/fields/text-numbers.md +++ b/docs/app/data-model/fields/text-numbers.md @@ -5,7 +5,7 @@ ## Input -![A standard form text input]({{CDN_URL}}/docs/v9/configuration/data-model/fields/interfaces-20230308/interface-input.webp) +![A standard form text input](/images/interface-input.webp) A standard form input. @@ -19,7 +19,7 @@ A standard form input. ## Autocomplete Input (API) -![An autocomplete form text input that shows a dropdown list of options based on a search query]({{CDN_URL}}/docs/v9/configuration/data-model/fields/interfaces-20230308/interface-autocomplete.webp) +![An autocomplete form text input that shows a dropdown list of options based on a search query](/images/interface-autocomplete.webp) A search input that will populate dropdown choices by making a request to a given URL. @@ -33,7 +33,7 @@ A search input that will populate dropdown choices by making a request to a give ## Code -![A code editor input]({{CDN_URL}}/docs/v9/configuration/data-model/fields/interfaces-20230308/interface-code.webp) +![A code editor input](/images/interface-code.webp) Code editor for pre-formatted text. @@ -46,7 +46,7 @@ Code editor for pre-formatted text. ## Textarea -![A standard form textarea input]({{CDN_URL}}/docs/v9/configuration/data-model/fields/interfaces-20230308/interface-textarea.webp) +![A standard form textarea input](/images/interface-textarea.webp) Textarea input for longer plain text. @@ -55,7 +55,7 @@ Textarea input for longer plain text. ## WYSIWYG -![A What You See Is What You Get (WYSIWYG) form input that has a toolbar for formatting]({{CDN_URL}}/docs/v9/configuration/data-model/fields/interfaces-20230308/interface-wysiwyg.webp) +![A What You See Is What You Get (WYSIWYG) form input that has a toolbar for formatting](/images/interface-wysiwyg.webp) The What You See Is What You Get (WYSIWYG) interface provides a text area with rich formatting options in the toolbar. @@ -71,7 +71,7 @@ The What You See Is What You Get (WYSIWYG) interface provides a text area with r ## Markdown -![A markdown text editor with a toolbar with formatting options. Edit and preview tabs.]({{CDN_URL}}/docs/v9/configuration/data-model/fields/interfaces-20230308/interface-markdown.webp) +![A markdown text editor with a toolbar with formatting options. Edit and preview tabs.](/images/interface-markdown.webp) Markdown text editor with formatting options in the toolbar. You can switch between Edit and Preview modes. @@ -86,7 +86,7 @@ Markdown text editor with formatting options in the toolbar. You can switch betw ## Tags -![A standard form text input where user can select, add, and remove tags.]({{CDN_URL}}/docs/v9/configuration/data-model/fields/interfaces-20230308/interface-tags.webp) +![A standard form text input where user can select, add, and remove tags.](/images/interface-tags.webp) A text input that allows users to apply any number of tags. When adding new tag, press Enter to save the tag. diff --git a/docs/app/data-model/relationships.md b/docs/app/data-model/relationships.md index e2b694a2a1..720f5b777e 100644 --- a/docs/app/data-model/relationships.md +++ b/docs/app/data-model/relationships.md @@ -1,13 +1,13 @@ # Relationships -> Relationships are a crucial part of any relational database. Directus supports all standard relationship types, as +> Relationships are a crucial part of any relational database. d9 supports all standard relationship types, as > well as a few more of its own _compound_ types, which are custom-tailored to make certain _common but complex_ tasks a > breeze. :::tip Before You Begin Regardless of the relationship you want to configure, we recommend you read every section of this document, in order, at -least once. This is because you must understand how M2Os work in Directus to understand O2Ms, you must understand M2Os +least once. This is because you must understand how M2Os work in d9 to understand O2Ms, you must understand M2Os and O2Ms to understand M2Ms, etc. ::: @@ -15,26 +15,26 @@ and O2Ms to understand M2Ms, etc. ## Overview The Data Studio makes _the process_ of configuring relational data models easier, faster, and more intuitive by offering -no-code configuration. Directus _does not_ enforce opinionated schemas, rule systems, or other arbitrary limitations to +no-code configuration. d9 _does not_ enforce opinionated schemas, rule systems, or other arbitrary limitations to your data models. Therefore, aside from any technical limitations of your project's infrastructure or core requirements for any relational data model, _like having a primary key field for every collection or a data type assigned to every field,_ you are free to build the data model as you want. In this guide, we will go over the following topics: -- What kinds of relationships exist within Directus. +- What kinds of relationships exist within d9. - How to configure a desired relationship within the Data Studio. - How relationships are implemented in the data model and displayed in the Data Studio. - When it might be appropriate to use a given type of relationship. -By the end, you'll understand everything needed to start building data models in Directus, even if relational data model +By the end, you'll understand everything needed to start building data models in d9, even if relational data model concepts are a new concept to you. -### Directus vs Classic Data Model Terms +### d9 vs Classic Data Model Terms When we use classic data model terms, _such as data table, column, row, etc..._ this signals that the explanation is -focused strictly on what happens in the database. When Directus terminology is used, _such as collection, field, item, -etc..._ this signals that the explanation includes Directus logic and functionality. +focused strictly on what happens in the database. When d9 terminology is used, _such as collection, field, item, +etc..._ this signals that the explanation includes d9 logic and functionality. ## Many-to-One (M2O) @@ -49,7 +49,7 @@ To create an M2O relationship, we add a foreign key field to the parent collecti collection to items in the related collection. If we have two tables, `cities` and `countries`, we can create a `cities.country_id` foreign key field. -![Many-to-One Relational Diagram]({{CDN_URL}}/docs/v9/configuration/data-model/relationships/relations-20221026/m2o-20221026A.webp) +![Many-to-One Relational Diagram](/images/m2o-20221026A.webp) Let's take a look at the schema. @@ -69,11 +69,11 @@ countries Note the following things from the schema above: - An M2O relationship requires just one column within the parent table. -- When an M2O relational field is configured in Directus, an Item Page on the parent collection will enable access to +- When an M2O relational field is configured in d9, an Item Page on the parent collection will enable access to the item from the related collection. So in our example above, an Item Page in `cities` will enable access to the related country from the `countries` table. -However, in the Directus Data Studio, an M2O field does not automatically provide access to the parent collection's +However, in the d9 Data Studio, an M2O field does not automatically provide access to the parent collection's items within the related collection. In our example, this means that when you open an Item Page in `countries`, you will not see related cities. @@ -82,7 +82,7 @@ This is where O2M fields come in to play. :::tip Configure an M2O The easiest way to configure an M2O field is to follow the guide on how to -[create a field (standard)](/configuration/data-model/fields/#create-a-field-standard) and select the M2O Interface from +[create a field (standard)](/app/data-model/fields#create-a-field-standard) and select the M2O Interface from the template wizard. ::: @@ -90,12 +90,12 @@ the template wizard. ## One-to-Many (O2M) Within a relational database, an O2M relationship is the exact same type of relationship as an M2O. Remember, at the end -of the [M2O](#many-to-one-m2o) section, we learned that configuring an M2O in Directus does not let us access related -items within an Item Page on the related collection. In Directus, configuring an O2M creates an +of the [M2O](#many-to-one-m2o) section, we learned that configuring an M2O in d9 does not let us access related +items within an Item Page on the related collection. In d9, configuring an O2M creates an [Alias](/getting-started/glossary#alias) field, which lets us access related items. To demonstrate this, let's continue with the `cities` and `countries` example relationship used in the M2O section. -![One-to-Many Relational Diagram]({{CDN_URL}}/docs/v9/configuration/data-model/relationships/relations-20221026/o2m-20221026A.webp) +![One-to-Many Relational Diagram](/images/o2m-20221026A.webp) Let's take a look at the schema. @@ -113,7 +113,7 @@ cities - country_id (the M2O field) ``` -Note the following points from the schema above. When we create an O2M in Directus: +Note the following points from the schema above. When we create an O2M in d9: - Since the perspective is flipped, we now consider `countries` to be the parent collection. - It isn't always necessary to create an O2M. In some cases, you won't want or need to access items from both sides. @@ -129,14 +129,14 @@ Note the following points from the schema above. When we create an O2M in Direct :::tip Configure an O2M The easiest way to configure an O2M is to follow the guide on how to -[create a field (standard)](/configuration/data-model/fields/#create-a-field-standard) and select the O2M alias field +[create a field (standard)](/app/data-model/fields#create-a-field-standard) and select the O2M alias field type from the template wizard. ::: ## One-to-One (O2O) -Directus does not include a dedicated One-to-One (O2O) relationship type or Interface. However, in the database, O2O is +d9 does not include a dedicated One-to-One (O2O) relationship type or Interface. However, in the database, O2O is almost exactly the same as an M2O. The only difference is that an O2O enforces _cardinality_. In other words, one item from the parent collection can be linked with one item on the related collection, and vice-versa. @@ -144,15 +144,15 @@ For example, each country has one capital city, and vice versa. This is an O2O. this O2O to the `cities` and `countries` example relationship used in the previous sections. The first strategy you may think of it to add a new `capital_city` field on the `countries` collection, storing the name -of the capital city directly. But this would create [duplicate data](/configuration/data-model#avoid-data-duplication), +of the capital city directly. But this would create [duplicate data](/app/data-model#avoid-data-duplication), because the same city would exist in both `countries.capital_city` as well as `cities.name`. But remember, we want to _avoid duplicate data!_ -![Duplicate Data from Capital Cities]({{CDN_URL}}/docs/v9/configuration/data-model/relationships/relations-20221026/o2o-duplicate-20221026A.webp) +![Duplicate Data from Capital Cities](/images/o2o-duplicate-20221026A.webp) Instead, we want to use an O2O relationship. Let's try adding a `cities.capital_of` field. -![An inefficient One-to-One Relationship]({{CDN_URL}}/docs/v9/configuration/data-model/relationships/relations-20221026/o2o-inefficient-20221026A.webp) +![An inefficient One-to-One Relationship](/images/o2o-inefficient-20221026A.webp) Let's take a look at the schema. @@ -176,7 +176,7 @@ O2O onto. But in this case it is sub-optimal. Since _most cities_ are not capita `NULL` values. However, every single country has a capital city. So if we create the O2O on the `countries` collection, it will be much more efficient. -![A One-to-One Relationship]({{CDN_URL}}/docs/v9/configuration/data-model/relationships/relations-20221026/o2o-20221026A.webp) +![A One-to-One Relationship](/images/o2o-20221026A.webp) Let's take a look at the schema. @@ -195,11 +195,11 @@ cities - country_id ``` -Note the following points from the schema above. When we create an O2O in Directus: +Note the following points from the schema above. When we create an O2O in d9: - We can add the O2O field on either collection. However, in some cases it is more efficient to add it to a specific collection. -- Since the O2O field is really just an M2O field behind the scenes, and since Directus doesn't automatically display +- Since the O2O field is really just an M2O field behind the scenes, and since d9 doesn't automatically display M2O fields in the related collection, you may want to [configure an O2M field](#one-to-many-o2m) so that you can access items from the related collection as well. @@ -210,7 +210,7 @@ Note the following points from the schema above. When we create an O2O in Direct --> The easiest way to configure an O2O is to follow the guide on how to -[create a field (standard)](/configuration/data-model/fields/#create-a-field-standard) and select the **M2O** field type +[create a field (standard)](/app/data-model/fields#create-a-field-standard) and select the **M2O** field type from the template wizard. Then, configure the field's schema, toggling on **Unique** so that each value in the M2O field is unique, resulting in an O2O relationship. @@ -230,7 +230,7 @@ relationships between rows, no matter how many exist. To demonstrate this, let's think about the relationship between recipes and ingredients: a _recipe_ can have many _ingredients_, and _ingredients_ can be in many _recipes_. -![Many-to-Many Relational Diagram]({{CDN_URL}}/docs/v9/configuration/data-model/relationships/relationships-20220805/m2m-20220805A.webp) +![Many-to-Many Relational Diagram](/images/m2m-20220805A.webp) Let's take a look at the schema. @@ -255,11 +255,11 @@ ingredients - name ``` -Note the following points from the schema above. When we create an M2M in Directus: +Note the following points from the schema above. When we create an M2M in d9: - Our junction collection, `recipe_ingredients`, each row contains two foreign key columns. This is what creates the relationships between the two tables. -- Assuming the M2M alias field is created within the `recipes` collection, Directus does not automatically add a field +- Assuming the M2M alias field is created within the `recipes` collection, d9 does not automatically add a field to display recipes within the `ingredients` collection. However, you can configure an alias field within `ingredients` if desired: @@ -283,7 +283,7 @@ ingredients --> The easiest way to configure an M2M is to follow the guide on how to -[create a field (standard)](/configuration/data-model/fields/#create-a-field-standard) and select **Many to Many** from +[create a field (standard)](/app/data-model/fields#create-a-field-standard) and select **Many to Many** from the template wizard. ::: @@ -291,7 +291,7 @@ the template wizard. ## Many-to-Any (M2A) Sometimes called a _matrix field_ or _replicator_, an M2A relationship allows you to link items from the parent -collection to any item in any collection in the database. When you configure an M2A in Directus, an M2A +collection to any item in any collection in the database. When you configure an M2A in d9, an M2A [Alias](/getting-started/glossary#alias) field is created as well as a junction collection, like we saw on M2M relationships. The difference is that the junction collection on an M2A also has a field to store the **collection key** _(the name of the collection)_ for related collections. @@ -299,7 +299,7 @@ _(the name of the collection)_ for related collections. One common example of when M2As are used is for _page builders_, which have a `pages` collection that combines multiple collections for each type of page section, such as `heading`, `text_bodies`, `image`, `video`, _etc_. -![Many-to-Any Relational Diagram]({{CDN_URL}}/docs/v9/configuration/data-model/relationships/relationships-20220805/m2a-20220805A.webp) +![Many-to-Any Relational Diagram](/images/m2a-20220805A.webp) Let's take a look at the schema: @@ -336,7 +336,7 @@ images - file ``` -Note the following points from the schema above. When we create an M2A in Directus: +Note the following points from the schema above. When we create an M2A in d9: - Compared to the M2O and M2M relationships, there may be a lower likelihood that you will need to configure alias fields on related collections, such as `headings`, `text_bodies` and `images`, as these collections may not be as @@ -353,14 +353,14 @@ Note the following points from the schema above. When we create an M2A in Direct --> The easiest way to configure an M2A is to follow the guide on how to -[create a field (standard)](/configuration/data-model/fields/#create-a-field-standard) and select the **Many to Any** +[create a field (standard)](/app/data-model/fields#create-a-field-standard) and select the **Many to Any** Interface from the template wizard. ::: ## Translations (O2M) -Directus provides this special relational Interface designed specifically to handle translations. When you create a +d9 provides this special relational Interface designed specifically to handle translations. When you create a Translations O2M in the Data Studio, the following things happen within your data model. A Translations O2M alias field is created. A junction collection and a `languages` collection are created. All your translations are stored within context fields, configured by you, on the junction collection. Therefore, when you create a Translations O2M, you also @@ -370,7 +370,7 @@ the Translations O2M alias field. But behind the scenes, it is powered by an M2M To demonstrate, let's create a Translations O2M relationship for `articles`, a common content type that you may want to translate. -![Translations O2M]({{CDN_URL}}/docs/v9/configuration/data-model/relationships/relationships-20220805/o2m-translations-20220805A.webp) +![Translations O2M](/images/o2m-translations-20220805A.webp) Let's take a look at the schema. @@ -406,7 +406,7 @@ Note the following points from the schema above. When we create a Translations O easily extensible and it creates a sub-optimal experience to have every single translation of every field on the item details page. The Translations O2M alias field is designed specifically to make the translation process easier. - There may come a time when you want to make a pre-existing parent field translatable. To do this, you can - [duplicate a field](/configuration/data-model/fields/#duplicate-a-field), move it to the translation collection, and + [duplicate a field](/app/data-model/fields#duplicate-a-field), move it to the translation collection, and then delete the parent field. However, be aware that duplicating a field does _not_ duplicate any existing field values. @@ -419,7 +419,7 @@ Note the following points from the schema above. When we create a Translations O --> The easiest way to configure a Translations relationship is to follow the guide on how to -[create a field (standard)](/configuration/data-model/fields/#create-a-field-standard) and select the **Translations +[create a field (standard)](/app/data-model/fields#create-a-field-standard) and select the **Translations O2M** Interface from the template wizard. ::: diff --git a/docs/app/display-templates.md b/docs/app/display-templates.md index 75fb5029c2..4d475a3bd8 100644 --- a/docs/app/display-templates.md +++ b/docs/app/display-templates.md @@ -1,20 +1,17 @@ --- description: - Display Templates, a utility used throughout Directus, allow you to set Field Values and custom text in order to + Display Templates, a utility used throughout d9, allow you to set Field Values and custom text in order to better represent the Items in a Collection. readTime: 1 min read --- # Display Templates -> Display Templates, a utility used throughout Directus, allow you to set Field Values and custom text in order to +> Display Templates, a utility used throughout d9, allow you to set Field Values and custom text in order to > better represent the Items in a Collection. ## How it Works - Display Templates can be found in various places all throughout the App, such as [Layout Options](/app/layouts) and the [List Panel](/app/insights#lists) in Insights. Display Templates are easy to setup, just follow these steps: diff --git a/docs/app/faq.md b/docs/app/faq.md index 08f6a05c75..4f648c52b1 100644 --- a/docs/app/faq.md +++ b/docs/app/faq.md @@ -10,6 +10,6 @@ You can do this with the following command: npx directus users passwd --email admin@example.com --password newpasswordhere ``` -## Why isn't Directus properly saving Chinese characters or emoji? +## Why isn't d9 properly saving Chinese characters or emoji? Please ensure that the encoding for your database, tables, and fields are set to `utf8mb4`. diff --git a/docs/app/file-library.md b/docs/app/file-library.md index 07e1f00e13..2646e4830e 100644 --- a/docs/app/file-library.md +++ b/docs/app/file-library.md @@ -1,15 +1,15 @@ --- -description: The File Library Module aggregates all files within the Directus Project into one consolidated library. +description: The File Library Module aggregates all files within the d9 Project into one consolidated library. readTime: 7 min read --- # File Library -> The File Library Module aggregates all files within the Directus Project into one consolidated library. It is a +> The File Library Module aggregates all files within the d9 Project into one consolidated library. It is a > full-featured Digital Asset Management (DAM) system for storing, organizing, browsing, and transforming your various > files and assets. -![File Library]({{CDN_URL}}/docs/v9/app-guide/file-library/file-library-20220305A/file-library-20220307A.webp) +![File Library](/images/file-library-20220307A.webp) ::: warning More Documents on Folder and File Management @@ -28,18 +28,15 @@ Familiarity with the [Collections Page](/app/content/collections) will be helpfu The File Library acts as one big [Folder](#folders) to store all uploaded [Files](#files). Sub-folders can be created within the File Library to help Files stay organized. Folders and File information are stored in regular Collections, -which means [User and Role access permissions](/configuration/users-roles-permissions.md) are fully configurable and +which means User and Role access permissions are fully configurable and granular on both Folders and Files. Multiple files can be uploaded at once through the app and also programmatically via the API. Any type of file can be uploaded, _not just images_. When a Folder is selected from the Navigation Bar, the [File Listing Page](#folders) is presented. This page has all the same features and functionalities as the [Collections Page](/app/content/collections). - 1. Select a Folder. There are two options: - Choose desired Folder from the Navigation Bar. @@ -57,7 +54,7 @@ When a file is clicked in the File Listing Page, the File Details Page appears. and embeds, with core Fields included out-of-the-box (see below), and the ability for Administrators to add additional custom Fields. This page has the same features and functionality as the [Item Page](/getting-started/glossary#items). -![Files]({{CDN_URL}}/docs/v9/app-guide/file-library/file-library-20220305A/files-20220305A.webp) +![Files](/images/files-20220305A.webp) ### Action Buttons @@ -72,7 +69,7 @@ Notice the following Buttons in the Header: ::: tip Deleting Files Linked to Items -By default, Directus will not allow you to delete a File until you remove it from any and all related Items. However, +By default, d9 will not allow you to delete a File until you remove it from any and all related Items. However, this behavior can be reconfigured so that Files automatically update when the image is deleted by setting the relational constraint of your File Field to `SET NULL` or `CASCADE` when the File is deleted. @@ -83,7 +80,7 @@ constraint of your File Field to `SET NULL` or `CASCADE` when the File is delete The Files Collection comes pre-configured with the following Fields out of the box. New Fields can be created and customized as needed in **Settings > Data Model**. However the pre-configured Fields cannot be changed or deleted. -![File Details]({{CDN_URL}}/docs/v9/app-guide/file-library/file-library-20220305A/file-details-20220305A.webp) +![File Details](/images/file-details-20220305A.webp) - **Preview** – A preview of the image or file. - **Title** – A title for the File. @@ -98,7 +95,7 @@ customized as needed in **Settings > Data Model**. However the pre-configured Fi The file sidebar also includes the following details, which are not editable and serve as metadata. -![File Sidebar]({{CDN_URL}}/docs/v9/app-guide/file-library/file-library-20220305A/file-sidebar-20220305A.webp) +![File Sidebar](/images/file-sidebar-20220305A.webp) - **Type** – The MIME type of the file, displayed in the App as a formatted media type. - **Dimensions** – _Images only_. The width and height of the image in pixels. @@ -114,9 +111,6 @@ The file sidebar also includes the following details, which are not editable and Rotate, crop, flip, or adjust aspect ratios of an image. - 1. From the **File Library**, click a file to open its detail page. 2. Click the tune button in the top right to open the image editor. @@ -139,9 +133,6 @@ be [uploaded programmatically via the API](/reference/files). When a file is replaced, its existing info and all relationships are kept. - 1. Click the Image Preview on the File Detail page. A popup will appear. 2. Upload your file. You have 3 options: @@ -153,7 +144,7 @@ When a file is replaced, its existing info and all relationships are kept. Folders provide the organization system for Files. -![Folders]({{CDN_URL}}/docs/v9/app-guide/file-library/file-library-20220305A/folders-20220305A.webp) +![Folders](/images/folders-20220305A.webp) They can be named, renamed, and nested as sub-folders anywhere in the Folder hierarchy. Once a Folder is selected from the Navigation Bar, File Listing Page opens. The File Listing Page displays all Files within a Folder. It also enables @@ -163,9 +154,6 @@ batch deleting, sorting, filtering, searching, etc. Folders can also be managed ## Create a Folder - 1. From the **File Library**, click on the create_new_folder button located in the Header. 2. Fill in a Folder name as desired. @@ -173,9 +161,6 @@ batch deleting, sorting, filtering, searching, etc. Folders can also be managed ## Rename a Folder - 1. From the **File Library**, right-click on the Folder you wish to rename and select "Rename Folder". 2. Update the Folder name as desired. @@ -183,9 +168,6 @@ batch deleting, sorting, filtering, searching, etc. Folders can also be managed ## Move a Folder - 1. From the **File Library**, right-click on the folder you wish to move and select **"Move to Folder"**. A popup will appear. @@ -194,9 +176,6 @@ batch deleting, sorting, filtering, searching, etc. Folders can also be managed ## Delete a Folder - 1. From the **File Library**, right-click on the Folder you wish to delete and select **"Delete Folder"**. 2. Click **"Delete"**. @@ -209,5 +188,5 @@ When you delete a Folder, any nested Files and Folders will be moved one level u ## More Help -Looking for technical support for your non-enterprise project? Chat with thousands of engineers within our growing -[Community on Discord]({{DISCORD_INVITE_URL}}) +Looking for technical support? Join our growing +[community on GitHub Discussions]({{GITHUB_COMMUNITY_URL}}) or reach out at [support@webcapsule.io](mailto:{{SUPPORT_EMAIL}}). diff --git a/docs/app/filters.md b/docs/app/filters.md index 9cdece6b1c..125c971c36 100644 --- a/docs/app/filters.md +++ b/docs/app/filters.md @@ -12,7 +12,7 @@ readTime: 5 min read > restricting Item access permissions for specific Users or Roles, building dashboard analytics with the Insights > module, and more. -![Filters]({{CDN_URL}}/docs/v9/app-guide/filters/filters-20220303A/filters-20220303A.webp) +![Filters](/images/filters-20220303A.webp) ::: warning There Are Two Filters Documents @@ -26,8 +26,8 @@ This page is a non-technical guide to using Filters. For more technical info, se ::: tip Assumed Knowledge Filters are intuitive to use, but get quite nuanced as complexity increases. In order to use Filters effectively, you -will need to understand the Field _(aka [data model](/configuration/data-model))_ being filtered as well as any relevant -[Users, Roles and Permissions](/configuration/users-roles-permissions.md). +will need to understand the Field _(aka [data model](/app/data-model))_ being filtered as well as any relevant +Users, Roles and Permissions. ::: @@ -35,9 +35,6 @@ A basic filter is composed of 3 parts: A **Field** from the Collection being Fil [Operator](/reference/filter-rules#filter-operators), and some specified **Value** to filter for within each Item's Field. - 2. Click filter_list or **"Add Filter"**. 3. Select the Field to filter by. @@ -62,7 +59,7 @@ automatically display. An exhaustive list of Operators and what they do can be f `AND` Groups give the option to filter for Items that meet _all of several criteria_. On the other hand, `OR` Groups filter for Items that meet _any one of several criteria_. -![AND/OR Groups]({{CDN_URL}}/docs/v9/app-guide/filters/filters-20220303A/and-or-groups-20220303A.webp) +![AND/OR Groups](/images/and-or-groups-20220303A.webp) 1. Click "Add Filter". 2. Click "And/OR Group" at the very top of the dropdown menu. @@ -85,11 +82,8 @@ conditions inside of OR Groups. The following video shows how to filter for Blog posts written within the past 60 days. - -The following Dynamic Variables are built into Directus to make Filtering easier: `$CURRENT_USER`, `$CURRENT_ROLE`, +The following Dynamic Variables are built into d9 to make Filtering easier: `$CURRENT_USER`, `$CURRENT_ROLE`, `$NOW` and `$NOW()`. For more information, please see the Dynamic Variables section in [Filter Rules](/reference/filter-rules). @@ -112,9 +106,6 @@ one of these Fields, you can run Filters on the current Collection by Field valu Here are step-by-step instructions on how to filter by Fields in other Collections: - 1. Click "Add Filter". 2. Click the desired relational Field. This will pop down and display the related Collection Fields. @@ -123,7 +114,7 @@ Here are step-by-step instructions on how to filter by Fields in other Collectio ## Unfilterable Fields -![Unfilterable Fields]({{CDN_URL}}/docs/v9/app-guide/filters/filters-20220303A/unfilterable-fields-20220303A.webp) +![Unfilterable Fields](/images/unfilterable-fields-20220303A.webp) Not all Fields can be filtered. As seen above in [Filtering by Related Collections](#filtering-by-related-collections), Alias Fields cannot be filtered; they instead provide a dropdown menu to access Fields from a related Collection. @@ -132,22 +123,15 @@ Filters. ## Extensibility Options -Directus Core is completely open-source, modular and extensible. Extensions allow you to expand or modify any part of -Directus to fit your needs. Here are some great resources to get started down that track. +d9 Core is completely open-source, modular and extensible. Extensions allow you to expand or modify any part of +d9 to fit your needs. Here are some great resources to get started down that track. - [Extensions > Introduction](/extensions/introduction) - [Extensions > Creating Extensions](/extensions/creating-extensions) - [Contributing > Introduction](/contributing/introduction) - [Contributing > Codebase Overview](/contributing/codebase-overview) -::: tip Accelerated Development - -Working on an enterprise project and looking to outsource or financially sponsor the development of a Shares extension? -Contact [our team]({{WEBSITE_URL}}contact) - -::: - ## More Help -Looking for technical support for your non-enterprise project? Chat with thousands of engineers within our growing -[Community on Discord]({{DISCORD_INVITE_URL}}) +Looking for technical support? Join our growing +[community on GitHub Discussions]({{GITHUB_COMMUNITY_URL}}) or reach out at [support@webcapsule.io](mailto:{{SUPPORT_EMAIL}}). diff --git a/docs/app/flows.md b/docs/app/flows.md index 8343c1bd25..f8bac49c80 100644 --- a/docs/app/flows.md +++ b/docs/app/flows.md @@ -1,18 +1,18 @@ --- description: - Flows enable custom, event-driven data processing and task automation within Directus. Each flow is composed of one + Flows enable custom, event-driven data processing and task automation within d9. Each flow is composed of one trigger, followed by a series of operations. readTime: 5 min read --- # Flows -> Flows enable custom, event-driven data processing and task automation within Directus. Each flow is composed of one +> Flows enable custom, event-driven data processing and task automation within d9. Each flow is composed of one > trigger, followed by a series of operations. :::tip Before You Begin -Please be sure to see the [Quickstart Guide](/getting-started/quickstart.md) to get a basic overview of the platform. +Please be sure to see the Quickstart Guide to get a basic overview of the platform. ::: @@ -55,35 +55,34 @@ Async/Sync -> ## What's a Flow? -![What's a Flow?]({{CDN_URL}}/docs/v9/configuration/flows/flows/flows-20220603A/whats-a-flow-20220603A.webp) +![What's a Flow?](/images/whats-a-flow-20220603A.webp) Each flow is made up of three elements: A trigger, operations, and a data chain. ### **Triggers** -Each flow begins with a [trigger](/configuration/flows/triggers), which defines the action or event that starts the +Each flow begins with a [trigger](/app/flows/triggers), which defines the action or event that starts the Flow. This action or event could be some type of transaction within the app, an incoming webhook, a cron job, etc. ### Operations -An [operation](/configuration/flows/operations) is an action or process performed within the flow. These enable you to +An [operation](/app/flows/operations) is an action or process performed within the flow. These enable you to manage data: _send off emails, push in-app notifications, send webhooks, and beyond_. To put it in conceptual terms, operations do three things: -- **Get data** from Directus or another outside service. +- **Get data** from d9 or another outside service. - **Process data** a.k.a. transform it, validate it, or whatever. -- **Send data** to Directus or another outside service. +- **Send data** to d9 or another outside service. :::tip Developers -You can even develop your own [custom operations](/extensions/operations.md) to fit any use-case. +You can even develop your own custom operations to fit any use-case. ::: @@ -98,7 +97,7 @@ with [data chain variables](#data-chain-variables). Not every operation that executes in a flow does so successfully. In some cases, your operations are going to fail. Perhaps an operation tried to access data that doesn't exist, or a webhook operation fails for some reason, or perhaps -you set a [condition](/configuration/flows/operations.md#condition) operation, which _fails by design_ when its +you set a condition operation, which _fails by design_ when its condition is not met. These kinds of failed operations do not immediately stop your flow. Instead, flows let you implement @@ -115,9 +114,6 @@ create a flow, which we discuss in the next section. ## Configure A Flow - ### Create a Flow @@ -131,7 +127,7 @@ create a flow, which we discuss in the next section. :::tip -To learn more, see the section below on [Logs](#logs) as well as the [Activity Log](/configuration/activity-log.html) +To learn more, see the section below on [Logs](#logs) as well as the Activity Log documentation. ::: @@ -139,7 +135,7 @@ documentation. ### Configure a Trigger 3. Click arrow_forward to navigate to **Trigger Setup**. Select a - [trigger](/configuration/flows/triggers) type and configure as desired. + [trigger](/app/flows/triggers) type and configure as desired. 4. Click done in the menu header to confirm. You'll now see your trigger in an empty grid area. Its time to start adding operations. @@ -147,8 +143,8 @@ You'll now see your trigger in an empty grid area. Its time to start adding oper ### Configure an Operation 5. On the trigger panel, click add and the **Create Operation** side drawer will open. -6. Choose a **Name**, an [operation](/configuration/flows/operations) type, and configure as desired.\ - Directus will convert the name into a unique operation key, used on the [data chain](#the-data-chain).\ +6. Choose a **Name**, an [operation](/app/flows/operations) type, and configure as desired.\ + d9 will convert the name into a unique operation key, used on the [data chain](#the-data-chain).\ If you don't choose a name, the system will auto-generate a name and key for you. 7. Next, click done in the page header to confirm and return to the flow grid area. 8. From here, you can make the following optional configurations: @@ -195,11 +191,6 @@ Now that we know how to create and configure a flow, it's time to get a firmer u ## The Data Chain - Remember, each flow creates its own JSON object to store any data generated. @@ -261,11 +252,6 @@ Remember, `$trigger`, `$accountability`, and `$last` begin with `$`, but not `op ## Data Chain Variables - While [configuring your operations](#configure-an-operation), you can use keys from the data chain as variables to access data. Simply wrap the variable with quotes and _double mustaches_. For example: @@ -309,8 +295,8 @@ You **cannot** pass any type of computation using double-moustache syntax. :::tip -To perform computations on flow data, use the [script operation](/configuration/flows/operations.md#script) or a -[webhook](/configuration/flows/operations.md#webhook). +To perform computations on flow data, use the script operation or a +webhook. ::: @@ -318,17 +304,9 @@ Certain operations use dropdowns, toggles, checkboxes, and other input options. input raw values directly with [Toggle to Raw Editor](#configure-an-operation). You can use double-moustache syntax to access data dynamically in these input options as well. - ## Logs - Accessible from the sidebar, logs store information for each flow execution. Each log will display information from triggers as well as each operation in the flow. To access a flow's logs, follow these steps. @@ -358,7 +336,7 @@ because `$accountability` is generated by the trigger. _(These configuration options are not stored on the data chain)_. - **Payload** — Displays the data appended under this ``. -Remember, the [Log to Console](/configuration/flows/operations.md#log-to-console) operation is a key debugging tool. It +Remember, the Log to Console operation is a key debugging tool. It does not append data to the data chain. You will view your log message under **Options**. Therefore, anything you log will always be displayed as nested under a `message` key. For example, if you decide to log `"The last operation was a success"`, it will be displayed as: diff --git a/docs/app/flows/operations.md b/docs/app/flows/operations.md index a706d934da..6c4d879cd6 100644 --- a/docs/app/flows/operations.md +++ b/docs/app/flows/operations.md @@ -1,6 +1,6 @@ --- description: - Operations are the individual actions in a flow. They enable you to do things like manage data within Directus, + Operations are the individual actions in a flow. They enable you to do things like manage data within d9, transform the flow's data, send information off to outside services, set conditional logic, trigger other flows, and beyond! readTime: 5 min read @@ -8,7 +8,7 @@ readTime: 5 min read # Operations -> Operations are the individual actions in a flow. They enable you to do things like manage data within Directus, +> Operations are the individual actions in a flow. They enable you to do things like manage data within d9, > transform the flow's data, send information off to outside services, set conditional logic, trigger other flows, _and > beyond!_ @@ -16,13 +16,13 @@ readTime: 5 min read On this page, we'll explain what each operation does, the value it appends to the data chain, how to make use of its configuration options, as well as any well as other relevant details. We will assume you have read the documentation on -[Flows](/configuration/flows) and [Triggers](/configuration/flows/triggers). +[Flows](/app/flows) and [Triggers](/app/flows/triggers). ::: ## Condition -![Condition]({{CDN_URL}}/docs/v9/configuration/flows/operations/operations-20220603A/condition-20220603A.webp) +![Condition](/images/condition-20220603A.webp) A **Condition** operation lets you choose a **success path** or **failure path** by validating data passed into it with [Filter Rules](/reference/filter-rules). @@ -41,7 +41,7 @@ append an array containing an object you can use to help debug the misconfigurat :::warning -When using an [Event Hook](/configuration/flows/triggers.md#event-hook) configured to be **Action (Blocking)**, if your +When using an Event Hook configured to be **Action (Blocking)**, if your flow ends with a condition that executes with a `reject` path, it will cancel your database transaction. ::: @@ -51,7 +51,6 @@ flow ends with a condition that executes with a `reject` path, it will cancel yo This operation lets you add a custom script using vanilla JavaScript or TypeScript. The script will be executed securely @@ -115,7 +114,7 @@ Make sure your `return` value is valid JSON. :::tip Throwing Errors If you throw an error in a **Run Script** operation, it will immediately break your flow chain and stop execution of -subsequent flows. If you used a ["Blocking" Event hook](/configuration/flows/triggers.md#event-hook), throwing an error +subsequent flows. If you used a "Blocking" Event hook, throwing an error will cancel the original event transaction to the database. ::: @@ -130,7 +129,7 @@ Script** operation is no longer supported. If your script requires a third-party ## Create Data -![Create Data]({{CDN_URL}}/docs/v9/configuration/flows/operations/operations-20220603A/create-data-20220603A.webp) +![Create Data](/images/create-data-20220603A.webp) This operation creates item(s) in a collection. @@ -149,7 +148,7 @@ An array with the ID(s) of all items created will be appended under its `.items.create` which contains an operation that then tries to create another item in that ``. This would throw an infinite loop where the @@ -166,7 +165,7 @@ To learn about payload requirements when creating an item, see [API Reference > ## Delete Data -![Delete Data]({{CDN_URL}}/docs/v9/configuration/flows/operations/operations-20220603A/delete-data-20220603A.webp) +![Delete Data](/images/delete-data-20220603A.webp) This operation deletes item(s) from a collection. @@ -186,7 +185,7 @@ An array with the ID(s) of all items deleted will be appended under its `.items.delete` which contains an operation that then tries to delete another item in that ``. This would throw an infinite loop where the @@ -197,7 +196,7 @@ triggers other event hooks. ## Read Data -![Read Data]({{CDN_URL}}/docs/v9/configuration/flows/operations/operations-20220603A/read-data-20220603A.webp) +![Read Data](/images/read-data-20220603A.webp) This operation reads item(s) from a collection and adds them onto the data chain. You may select Items by their ID or by running a query. @@ -218,7 +217,7 @@ An array containing all items read will be appended under its ``. :::warning -**Emit Events** toggles the event's _visibility_ throughout Directus. For example, if togged on, this operation will +**Emit Events** toggles the event's _visibility_ throughout d9. For example, if togged on, this operation will trigger relevant event hooks in other flows or custom extensions. If toggled off, the operation will not trigger other event hooks. Imagine a situation where you have a flow being triggered by `.items.read` which contains an operation that then tries to read another item in that ``. This would throw an infinite loop where the @@ -229,7 +228,7 @@ triggers other event hooks. ## Update Data -![Update Data]({{CDN_URL}}/docs/v9/configuration/flows/operations/operations-20220603A/update-data-20220603A.webp) +![Update Data](/images/update-data-20220603A.webp) This operation updates item(s) in a collection. You may select item(s) to update by their ID or by running a query. @@ -250,7 +249,7 @@ An array containing all items updated will be appended under its ` :::warning -**Emit Events** toggles the event's _visibility_ throughout Directus. For example, if togged on, this operation will +**Emit Events** toggles the event's _visibility_ throughout d9. For example, if togged on, this operation will trigger relevant event hooks in other flows or custom extensions. If toggled off, the operation will not trigger other event hooks. Imagine a situation where you have a flow being triggered by `.items.update` which contains an operation that then tries to update another item in that ``. This would throw an infinite loop where the @@ -267,15 +266,15 @@ To learn about `payload` requirements when updating an item, see [API Reference ## Log to Console -![Log to Console]({{CDN_URL}}/docs/v9/configuration/flows/operations/operations-20220603A/log-to-console-20220603A.webp) +![Log to Console](/images/log-to-console-20220603A.webp) -This operation outputs information to the server-side console as well as the [Logs](/configuration/flows#logs) within +This operation outputs information to the server-side console as well as the [Logs](/app/flows#logs) within the Data Studio. This is a key tool for troubleshooting flow configuration. A Log operation's key will have a null value on the data chain. **Options** -- **Message** — Sets a [log message](/configuration/flows#logs). +- **Message** — Sets a [log message](/app/flows#logs). **Payload** @@ -284,11 +283,11 @@ append a `null` value on the `operationKey`. **More Details** -For more details, see the section on [Logs](/configuration/flows#logs). +For more details, see the section on [Logs](/app/flows#logs). ## Send Email -![Send Email]({{CDN_URL}}/docs/v9/configuration/flows/operations/operations-20220603A/send-email-20220603A.webp) +![Send Email](/images/send-email-20220603A.webp) This operation sends off emails. @@ -320,9 +319,9 @@ may send it there automatically. ## Send Notification -![Send Notification]({{CDN_URL}}/docs/v9/configuration/flows/operations/operations-20220603A/send-notification-20220603A.webp) +![Send Notification](/images/send-notification-20220603A.webp) -This operation pushes notifications to Directus Users. If the operation executes successfully, a list containing the IDs +This operation pushes notifications to d9 Users. If the operation executes successfully, a list containing the IDs of all sent notifications generated is appended under this operation's key. **Options** @@ -347,7 +346,7 @@ You can input an array of UUIDs in the `To` input option to send off multiple em ## Webhook / Request URL -![Webhook / Request URL]({{CDN_URL}}/docs/v9/configuration/flows/operations/operations-20220603A/webhook-20220603A.webp) +![Webhook / Request URL](/images/webhook-20220603A.webp) This operation makes a request to another URL. @@ -364,7 +363,7 @@ When an operation completes successfully, the `response` is appended under its ` ## Sleep -![Sleep]({{CDN_URL}}/docs/v9/configuration/flows/operations/operations-20220603A/sleep-20220603A.webp) +![Sleep](/images/sleep-20220603A.webp) This operation creates a delay in the Flow for a given amount of milliseconds, then continues to the next operation. @@ -378,7 +377,7 @@ This operation does not generate data. It will append a `null` value on its `ope ## Transform Payload -![Transform Payload]({{CDN_URL}}/docs/v9/configuration/flows/operations/operations-20220603A/transform-payload-20220603A.webp) +![Transform Payload](/images/transform-payload-20220603A.webp) This operation lets you custom define your own JSON payload for use in subsequent operations. This enables you to take multiple sources of data and "tidy them up" into a single payload. @@ -412,10 +411,10 @@ Then you could stitch together all this data to create a new JSON object, like s ## Trigger Flow -![Trigger Flow]({{CDN_URL}}/docs/v9/configuration/flows/operations/operations-20220603A/trigger-flow-20220603A.webp) +![Trigger Flow](/images/trigger-flow-20220603A.webp) This operation starts another flow and _(optionally)_ passes data into it. It should be used in combination with the -[Another Flow](/configuration/flows/triggers#another-flow) trigger. +[Another Flow](/app/flows/triggers#another-flow) trigger. **Options** diff --git a/docs/app/flows/triggers.md b/docs/app/flows/triggers.md index 0212e8c6e3..ad6e6db0e7 100644 --- a/docs/app/flows/triggers.md +++ b/docs/app/flows/triggers.md @@ -13,13 +13,13 @@ readTime: 3 min read :::tip Before You Begin -Please be sure to read the overview documentation on [Flows](/configuration/flows). +Please be sure to read the overview documentation on [Flows](/app/flows). ::: ## Event Hook -![Event Hooks]({{CDN_URL}}/docs/v9/configuration/flows/triggers/triggers-20220603A/event-hook-20220602A.webp) +![Event Hooks](/images/event-hook-20220602A.webp) Event Hooks are triggered by events within the platform. The logic is based on [Custom API Hooks](/extensions/hooks). Any data generated by the event will be nested in the `$trigger`. @@ -54,7 +54,7 @@ the database. For example, let's say you configure the scope to be `item.create`. -- A request to create an item is sent to Directus. +- A request to create an item is sent to d9. - The create item event halts. - The event's `payload` is copied into the `$trigger` of the flow. - The flow runs. @@ -71,8 +71,8 @@ cancel the transaction. :::tip Cancelling Transactions To completely cancel a transaction, you'll need to throw an error within a -[script operation](/configuration/flows/operations.md#script) or end the flow on a -[failure path](/configuration/flows#control-flow). +script operation or end the flow on a +[failure path](/app/flows#control-flow). ::: @@ -87,7 +87,7 @@ desired. For example, let's imagine once more that you configure the scope to be `item.create`. -- A request to create an item is sent to Directus. +- A request to create an item is sent to d9. - The create item event is transacted. - The event's `payload` is copied into the `$trigger` of the flow. - The flow runs. @@ -98,7 +98,7 @@ control over the event transaction. ## Webhook -![Webhook]({{CDN_URL}}/docs/v9/configuration/flows/triggers/triggers-20220603A/webhook-20220602A.webp) +![Webhook](/images/webhook-20220602A.webp) Triggers on an incoming HTTP request to: `/flows/trigger/:this-webhook-trigger-id` which you can copy from the webhook trigger panel. @@ -126,7 +126,7 @@ finish and return whatever value is in **Response Body**. This slows the API, bu ## Schedule (CRON) -![Schedule a Cron Job]({{CDN_URL}}/docs/v9/configuration/flows/triggers/triggers-20220603A/cron-20220602A.webp) +![Schedule a Cron Job](/images/cron-20220602A.webp) This trigger enables you to create data at scheduled intervals, via [6-point cron job syntax](https://github.com/node-cron/node-cron#cron-syntax). @@ -149,13 +149,13 @@ This trigger enables you to create data at scheduled intervals, via ## Another Flow -![Another Flow]({{CDN_URL}}/docs/v9/configuration/flows/triggers/triggers-20220603A/another-flow-20220602A.webp) +![Another Flow](/images/another-flow-20220602A.webp) -This trigger executes by the [trigger flow](/configuration/flows/operations#another-flow) operation, allowing you to +This trigger executes by the [trigger flow](/app/flows/operations#another-flow) operation, allowing you to chain flows. - **Response Body** — Optional. Defines data to return and append under the `` of - [trigger flow](/configuration/flows/operations#another-flow) operation that tripped the trigger. Choose to return: + [trigger flow](/app/flows/operations#another-flow) operation that tripped the trigger. Choose to return: - **Data of Last Operation** — Responds with value from `$last`. - **All Data** — Responds with the entire data chain. - **Other** — Responds with value from an ``. @@ -168,7 +168,7 @@ If you pass an array to this trigger, it will run once for each item in the arra ## Manual -![A pane is open in front of a Flow. It shows various options detailed below.]({{CDN_URL}}/docs/v9/configuration/flows/triggers-20230227A/manual-20230227A.webp) +![A pane is open in front of a Flow. It shows various options detailed below.](/images/manual-input-settings-20230227A.webp) This Trigger starts your flow on a manual click of a button within the Data Studio. When you use this trigger, a **Flows** menu containing a button will appear in the sidebar of the specified collection page(s) and/or its item pages. @@ -178,19 +178,19 @@ _grayed out_ until you select some number of items. From the item page, the curr automatically. These item IDs are passed in to `$trigger`. - **Collections** — Choose the Collection(s) to add the button to. -- **Location** — Choose to display the button on the [Item Page](/app/content.md#item-page), - [Collection Page](/app/content.md#collection-page), or both. +- **Location** — Choose to display the button on the Item Page, + Collection Page, or both. - **Asynchronous** — Toggle whether the Flow executes asynchronously. If enabled, you can immediately trigger the flow again. If not, you must wait for the flow to complete to use it again. - **Collection Page (Requires Selection)** — Toggle whether a selection is required in the Collection Page to trigger. - **Require Confirmation** - Toggle whether a confirmation dialog will be shown before the flow is executed. -After the operation runs, a toast notification will appear in your [sidebar](/app/overview.md#4-sidebar) indicating +After the operation runs, a toast notification will appear in your sidebar indicating whether the flow ran successfully. ### Confirmation Dialog -![A modal is shown reading "Please provide alert information" with two text fields - one for text and one for content.]({{CDN_URL}}/docs/v9/configuration/flows/triggers-20230227A/manual-confirmation-dialog-20230227A.webp) +![A modal is shown reading "Please provide alert information" with two text fields - one for text and one for content.](/images/manual-confirmation-dialog-20230227A.webp) If enabled, a confirmation dialog will be shown in a modal before the flow is executed. There are further options to set up a confirmation dialog. @@ -198,7 +198,7 @@ up a confirmation dialog. - **Confirmation Description** - Text shown at the top of the modal. - **Confirmation Input Fields** - Set up one or more inputs to be filled by users before executing the flow. -![A pane is open in front of a Flow. It shows various options detailed below.]({{CDN_URL}}/docs/v9/configuration/flows/triggers-20230227A/manual-input-settings-20230227A.webp) +![A pane is open in front of a Flow. It shows various options detailed below.](/images/manual-input-settings-20230227A.webp) Each input field can have its own data type, interface, and display options. Some convenience options are also provided to immediately alter the user input (such as trimming whitespace and slugifying text). diff --git a/docs/app/import-export.md b/docs/app/import-export.md index c446b3b53a..cbdcdff921 100644 --- a/docs/app/import-export.md +++ b/docs/app/import-export.md @@ -32,9 +32,6 @@ This page details Importing and Exporting of Items as files via the no-code app. ## Import Items - To import Items from a file, follow the steps below. @@ -45,7 +42,7 @@ To import Items from a file, follow the steps below. 4. Select the desired file and click **"open"**. 5. Click **"Start Import"** to import the Items. -The Items will now be in the Collection. The file itself will not be stored in the Directus Project. +The Items will now be in the Collection. The file itself will not be stored in the d9 Project. :::tip Importing Relational Files @@ -61,10 +58,7 @@ Add link ## Export Items - When exporting Items, the [Export Items Menu](#export-items-menu) provides granular control over exactly which Items and Fields are exported, how they are exported, and where they are exported. To export Items, follow the steps below. @@ -85,7 +79,7 @@ Export your file to CSV to seamlessly open in excel. :::tip Exporting to File Library -When downloading 2,500 or more Items, you will be required to download into the Directus Project's File Library. After +When downloading 2,500 or more Items, you will be required to download into the d9 Project's File Library. After exporting, go to the File Library to download your file locally. ::: @@ -101,9 +95,6 @@ permissions for the related Collection and a firm understanding of the relationa ## Export Items Menu - This menu provides granular control over exactly which Items and Fields are exported, how they are exported, and where they are exported. diff --git a/docs/app/insights.md b/docs/app/insights.md index c3f154b295..279527560b 100644 --- a/docs/app/insights.md +++ b/docs/app/insights.md @@ -1,23 +1,17 @@ --- -description: Insights is a Module in Directus that allows rapid, no-code build-out of analytics dashboards. +description: Insights is a Module in d9 that allows rapid, no-code build-out of analytics dashboards. readTime: 9 min read --- # Insights -> Insights is a Module in Directus that allows rapid, no-code build-out of analytics dashboards. Regardless of your +> Insights is a Module in d9 that allows rapid, no-code build-out of analytics dashboards. Regardless of your > use-case _(be it business intelligence, user progress tracking, web traffic conversions, or whatever!)_ you will be > able to setup key data metrics in just a few clicks. - ## How it Works - First, create a Dashboard, then fill the Dashboard with Panels. @@ -33,13 +27,13 @@ First, create a Dashboard, then fill the Dashboard with Panels. ## Dashboards Overview -![Dashboard Grid Area]({{CDN_URL}}/docs/v9/app-guide/insights/insights-20220216A/dashboards-overview-20220216A.webp) +![Dashboard Grid Area](/images/dashboards-overview-20220216A.webp) -Each Directus Dashboard provides a drag-and-drop canvas where you can create and arrange different Panels to easily +Each d9 Dashboard provides a drag-and-drop canvas where you can create and arrange different Panels to easily build out customized analytics. The Dashboard area automatically expands as you add more and more Panels. In theory, a Dashboard area can expand infinitely large... but in practice, users will probably only want to build Dashboards as large as the screen they will be viewing on. You are able to create as many Dashboards as you need. Additionally, the -Dashboard view, edit, and create permissions are [fully configurable](/configuration/users-roles-permissions) by User +Dashboard view, edit, and create permissions are [fully configurable](/app/users-roles-permissions) by User Role. :::tip Auto Refresh @@ -50,14 +44,14 @@ The Auto Refresh menu in the [Sidebar](/app/overview#_4-sidebar) lets you select ## Create, Edit, and Delete Dashboards -![How to Add, Edit and Delete Dashboards in Directus Insights]({{CDN_URL}}/docs/v9/app-guide/insights/insights-20220216A/create-edit-delete-dashboards-20220216A.webp) +![How to Add, Edit and Delete Dashboards in d9 Insights](/images/create-edit-delete-dashboards-20220216A.webp) 1. Click the add icon in the page header to create a new Dashboard. 2. Click the item option to edit or delete a Dashboard. ## Panels Overview -![Directus Dashboard Panels]({{CDN_URL}}/docs/v9/app-guide/insights/insights-20220216A/panels-overview-20220216A.webp) +![d9 Dashboard Panels](/images/dashboards-overview-20220216A.webp) Panels are the building-blocks we add onto Insights dashboards to create, save and display data analytics. There are five types of Panels, and each one provides some unique analytics tool. @@ -71,7 +65,7 @@ five types of Panels, and each one provides some unique analytics tool. ## Panel Header Options -![Panel Header Options]({{CDN_URL}}/docs/v9/app-guide/insights/insights-20220216A/panel-header-options-20220216A.webp) +![Panel Header Options](/images/panel-header-options-20220216A.webp) All panel types let you set custom text to provide quick and clear context about what a Panel represents. Panel Header options are exactly the same for all four Panel types. Headers are also totally optional and can be hidden. @@ -84,7 +78,7 @@ options are exactly the same for all four Panel types. Headers are also totally ## Labels -![Label Panel Options]({{CDN_URL}}/docs/v9/app-guide/insights/insights-20220216A/label-panel-options-20220216A.webp) +![Label Panel Options](/images/label-panel-options-20220216A.webp) As the name implies, this panel simply allows you to _label_ a group of other panels. Labels do not provide analytics. Labels simply help visually group the other panels (_which do provide analytics_) and give context to your dashboard. @@ -94,7 +88,7 @@ Labels simply help visually group the other panels (_which do provide analytics_ ## Lists -![List Panel Options]({{CDN_URL}}/docs/v9/app-guide/insights/insights-20220216A/list-panel-options-20220216A.webp) +![List Panel Options](/images/list-panel-options-20220216A.webp) List panels display some number of Items from a Collection, _as a list!_ These Items displayed can be filtered by other criteria as well. So for example, you could show your top 5 selling products, 3 worst performing sales regions, 10 @@ -111,7 +105,7 @@ list that could be generated from your dataset. ## Metrics -![Metrics Panel Options]({{CDN_URL}}/docs/v9/app-guide/insights/insights-20220216A/metric-panel-options-20220216A.webp) +![Metrics Panel Options](/images/metric-panel-options-20220216A.webp) Metrics Panels allow you to aggregate all Items in a Field down to a single value. @@ -162,7 +156,7 @@ grayed out and unselectable in the `field dropdown list`. ## Time Series -![Time Series Panel Options]({{CDN_URL}}/docs/v9/app-guide/insights/insights-20220216A/time-series-panel-options-20220216A.webp) +![Time Series Panel Options](/images/time-series-panel-options-20220216A.webp) The Time Series Panel allows you to build graphs and see how data changes over time. @@ -197,7 +191,7 @@ type in `3 years`, `1 month`, `2 weeks`, `5 days`, etc. ## Global Variable -![Global Variables]({{CDN_URL}}/docs/v9/app-guide/insights/insights-220624A/global-variable-220624A.webp) +![Global Variables](/images/global-variable-220624A.webp) - **Variable Key** — Sets your variable. Use this key to access the variable in other Insights panels. - **Type** — Sets the data type of your variable. @@ -260,11 +254,11 @@ or JSON variable in a place that requires Datetime data. ## Bar Chart -![Dashboard edit page with a bar chart options panel visible.]({{CDN_URL}}/docs/v9/app-guide/insights/20220223/panels-bar-options-230223A.webp) +![Dashboard edit page with a bar chart options panel visible.](/images/panels-bar-options-230223A.webp) :::info Availability -The Bar Chart Panel is only available in Directus Cloud and Enterprise Self-Hosted projects. +The Bar Chart Panel is only available in d9 Cloud and Enterprise Self-Hosted projects. ::: @@ -282,11 +276,11 @@ The Bar Chart Panel allows you to build vertical and horizontal bar charts from ## Line Chart -![Dashboard edit page with a line chart options panel visible.]({{CDN_URL}}/docs/v9/app-guide/insights/20220223/panels-line-options-230223A.webp) +![Dashboard edit page with a line chart options panel visible.](/images/panels-line-options-230223A.webp) :::info Availability -The Line Chart Panel is only available in Directus Cloud and Enterprise Self-Hosted projects. +The Line Chart Panel is only available in d9 Cloud and Enterprise Self-Hosted projects. ::: @@ -310,11 +304,11 @@ data. ## Meter -![Dashboard edit page with a meter options panel visible.]({{CDN_URL}}/docs/v9/app-guide/insights/20220223/panels-meter-options-230223A.webp) +![Dashboard edit page with a meter options panel visible.](/images/panels-meter-options-230223A.webp) :::info Availability -The Meter Panel is only available in Directus Cloud and Enterprise Self-Hosted projects. +The Meter Panel is only available in d9 Cloud and Enterprise Self-Hosted projects. ::: @@ -334,11 +328,11 @@ The Meter Panel takes a maximum value and allows you to show a completion percen ## Pie or Donut Chart -![Dashboard edit page with a pie or donut options panel visible.]({{CDN_URL}}/docs/v9/app-guide/insights/20220223/panels-pie-donut-options-230223A.webp) +![Dashboard edit page with a pie or donut options panel visible.](/images/panels-pie-donut-options-230223A.webp) :::info Availability -The Pie and Donut Chart Panels are only available in Directus Cloud and Enterprise Self-Hosted projects. +The Pie and Donut Chart Panels are only available in d9 Cloud and Enterprise Self-Hosted projects. ::: diff --git a/docs/app/layouts.md b/docs/app/layouts.md index 5f731a666e..948fb8cb35 100644 --- a/docs/app/layouts.md +++ b/docs/app/layouts.md @@ -10,9 +10,6 @@ readTime: 9 min read ## What's a Layout? - Data models vary drastically in shape and purpose, from eCommerce platforms to IoT fleets and everything in between. While excel-style data tables often closely resemble how the data is stored in the database, this is not always the most @@ -20,9 +17,6 @@ human-friendly way to view the data. Layouts provide intuitive displays to view ## How it Works - To adjust an Item's Layout, follow these steps. @@ -72,9 +66,6 @@ As you go through Layouts, it may be helpful to keep the following points in min ## Table Layout - This Layout supports all forms of data, as it directly reflects how data is stored in a Collection. This is the default Layout used in the Content Module. It includes the following controls. @@ -104,17 +95,14 @@ Layout used in the Content Module. It includes the following controls. ::: warning Manual Sorting Requires Configuration -Only available if you [configure a sort field](/configuration/data-model/collections#sort-field) in the Collection's +Only available if you [configure a sort field](/app/data-model/collections#sort-field) in the Collection's Data Model Settings. ::: ## Card Layout - This tiled Layout is ideal for Collections that prioritize an image _(e.g. a user or blog post)_. This is the default for both the [User Directory](/app/user-directory) and [File Library](/app/file-library). It includes the following @@ -142,9 +130,6 @@ controls. ## Calendar Layout - This Layout is ideal for Collections with time-oriented data _(e.g. events and appointments)_. It includes the following controls. @@ -168,16 +153,13 @@ controls. :::tip Configuration Requirements -To use this Layout, the Collection will need at least one datetime [Field](/configuration/data-model/fields.md) to set a +To use this Layout, the Collection will need at least one datetime Field to set a start time, but ideally two datetime Fields _(to set a start time and end time)_. ::: ## Map Layout - This Layout is ideal for Collections that emphasize geospatial data. It provides a world map, with Items displayed as points, lines, and other geometry. The following options are available: @@ -216,13 +198,10 @@ Link to Map Field ## Kanban Layout - :::info Availability -The Kanban Layout is only available in Directus Cloud and Enterprise Self-Hosted projects. +The Kanban Layout is only available in d9 Cloud and Enterprise Self-Hosted projects. ::: @@ -258,7 +237,7 @@ _There is no Subheader for the Kanban Layout._ :::tip Configuration Requirements -To make this Layout work, you will need to configure an appropriate status [Field](/configuration/data-model/fields.md) +To make this Layout work, you will need to configure an appropriate status Field on the Collection, then identify this Field under **"Group By"** in the Layout Options menu. ::: diff --git a/docs/app/overview.md b/docs/app/overview.md index 712829098d..3e5fd17166 100644 --- a/docs/app/overview.md +++ b/docs/app/overview.md @@ -8,13 +8,13 @@ readTime: 3 min read > The App is a no-code presentation layer for your data, content, and assets. It uses an intuitive left-to-right visual > hierarchy for general organization and navigation. -Directus Application Overview +d9 Application Overview ## 1. Module Bar The leftmost section of the App is the module bar, which includes the: -- **Project Logo** — Displays your configured project logo and project color (defaults to the Directus logo and color). +- **Project Logo** — Displays your configured project logo and project color (defaults to the d9 logo and color). If configured, clicking this component will navigate to the Project URL. During platform activity, an indeterminate progress indicator will also be shown here. - **Module Navigation** — Allows navigating between the different modules your user has access to. Customizing the diff --git a/docs/app/presets-bookmarks.md b/docs/app/presets-bookmarks.md index e2c2162932..3b5d212a54 100644 --- a/docs/app/presets-bookmarks.md +++ b/docs/app/presets-bookmarks.md @@ -12,20 +12,20 @@ readTime: 3 min read :::tip Before You Begin -We recommend you read through the [Quickstart Guide](/getting-started/quickstart.md) to get an overview of the platform -first, then see our guide on the [Collection Page](/app/content/collections.md) so you're familiar with its features and +We recommend you read through the Quickstart Guide to get an overview of the platform +first, then see our guide on the Collection Page so you're familiar with its features and functionalities. ::: :::tip Learn More -To manage Presets and Bookmarks programmatically, see our [API guide on Presets](/reference/system/presets.md). +To manage Presets and Bookmarks programmatically, see our API guide on Presets. ::: -Remember, a [Collection Page](/app/content/collections.md) enables you to customize how its items are presented. That -is, it lets you sort, search, or filter items and even change [Layouts](/app/layouts.md). In some cases, you may need to +Remember, a Collection Page enables you to customize how its items are presented. That +is, it lets you sort, search, or filter items and even change Layouts. In some cases, you may need to apply the same display adjustments again and again. Presets save these adjustments, like a snapshot. You can create presets for all project collections, as well as `directus_activity`, `directus_files` and `directus_users`. @@ -33,9 +33,6 @@ Admins can access and manage all presets under **Settings > Presets and Bookmark ## Create a Preset - There are two types or presets, Defaults and Bookmarks. @@ -59,7 +56,7 @@ becomes a Bookmark. If **Name** is left blank, the preset will be a Default. To - **Scope** — Defines which users have access to this preset. - **Layout** — Selects a Layout for the preset, which is adjusted from the Sidebar. - **Name** — Sets a name, which determines if the preset is a Default or Bookmark. Note that this field supports - [Translation Strings](/configuration/translation-strings.md). + Translation Strings. 4. Scroll down to the **Layout Preview** section and make any other adjustments or configurations as desired. Each preset saves all of the information needed to recreate this Layout Preview, just as it is shown. 5. Click check to confirm. @@ -73,9 +70,6 @@ is: User, then Role, then Global. ## Edit a Preset - 1. Navigate to **Settings > Presets & Bookmarks > [preset]**. 2. Reconfigure your preset as desired. @@ -83,9 +77,6 @@ is: User, then Role, then Global. ## Delete a Preset - 1. Navigate to **Settings > Presets & Bookmarks > [preset]**. 2. Click delete in the page header and a popup will appear. Click **Confirm**. diff --git a/docs/app/project-settings.md b/docs/app/project-settings.md index c3371fb4a2..2f0bf63c3e 100644 --- a/docs/app/project-settings.md +++ b/docs/app/project-settings.md @@ -18,9 +18,6 @@ To manage your project settings programmatically, see our API documentation on [ ## Configure Project Settings - To configure Project Settings, follow these steps. @@ -32,7 +29,7 @@ All configuration options are described in detail below. ## General -![How to Configure General Project Settings]({{CDN_URL}}/docs/v9/configuration/project-settings/project-settings-20220815/general-project-settings-20220811A.webp) +![How to Configure General Project Settings](/images/general-project-settings-20220811A.webp) - **Project Name** — Sets the name on the [Navigation Bar](/app/overview.html#_2-navigation-bar), as well as login and public pages. @@ -42,9 +39,6 @@ All configuration options are described in detail below. ## Branding & Style - - **Project Color** — Sets color on the project logo, FavIcon and login/public pages. - **Project Logo** — Adds a 40x40px logo at the top of the [Module Bar](/app/overview.html#_1-module-bar) and on the @@ -62,15 +56,12 @@ All configuration options are described in detail below. ::: tip Browser FavIcon & Title The Project Color is also used to set a dynamic FavIcon and the Project Name is used in the browser's page title, making -it easier to identify different Directus projects. +it easier to identify different d9 projects. ::: ## Modules - - **Module Bar** — Allows the following customization of links displayed in the [Module Bar](/app/overview.html#_1-module-bar). @@ -80,11 +71,11 @@ it easier to identify different Directus projects. - **Add Link** — To add a new custom link, click **Add Link** and fill in the details below. - **Name** — Sets the title of the module link, also shown in a tooltip on hover. - **Icon** — Selects an icon for the module button. - - **URL** — Should start with a `/` for links within the [Directus Data Studio](/app/overview). + - **URL** — Should start with a `/` for links within the [d9 Data Studio](/app/overview). ## Security -![How to Configure Security in Project Settings]({{CDN_URL}}/docs/v9/configuration/project-settings/project-settings-20220815/security-project-settings-20220811A.webp) +![How to Configure Security in Project Settings](/images/security-project-settings-20220811A.webp) - **Auth Password Policy** — Sets a policy requirement for all user's passwords via a JavaScript regex. Supports the following options: @@ -97,9 +88,6 @@ it easier to identify different Directus projects. ## Files & Storage - The platform's file middleware allows for cropping and transforming image assets on the fly. This means you can simply request an original image, include any desired parameters, and you'll be served the new asset as a response. @@ -129,7 +117,7 @@ To learn more, please see the API guide on [transformation presets](/reference/f ## Mapping -![How to Configure Mapping in Directus]({{CDN_URL}}/docs/v9/configuration/project-settings/project-settings-20220815/mapping-project-settings-20220815A.webp) +![How to Configure Mapping in d9](/images/mapping-project-settings-20220815A.webp) - **Mapbox Access Token** — Create a [Mapbox Access Token](https://docs.mapbox.com/help/glossary/access-token) and enter it here to improve the platform's mapping experience. @@ -142,9 +130,6 @@ To learn more, please see the API guide on [transformation presets](/reference/f ## Image Editor - - **Custom Aspect Ratios** — Adds custom aspect ratios in the [image editor](/app/file-library#edit-an-image). - **Text** — Sets a name to identify the aspect ratio. diff --git a/docs/app/settings.md b/docs/app/settings.md index 525736f4b7..be4c6a645e 100644 --- a/docs/app/settings.md +++ b/docs/app/settings.md @@ -9,9 +9,6 @@ readTime: 2 min read > The Settings Module is where your entire Project is configured, making it the first place to go after installation. To > maintain project safety and integrity, this module is only available to Administrators. - ::: warning Administrators Only @@ -21,12 +18,12 @@ Only Administrators have access to the Settings Module. Settings are split into five distinct sections, each described below. -- [Project Settings](/configuration/project-settings) — Setup branding and other global style options. -- [Data Model](/configuration/data-model) — Create and modify [Collections](/getting-started/glossary#collections), +- [Project Settings](/app/project-settings) — Setup branding and other global style options. +- [Data Model](/app/data-model) — Create and modify [Collections](/getting-started/glossary#collections), [Relationships](/getting-started/glossary#relationships), form layout, and [Fields](/getting-started/glossary#fields). -- [Roles & Permissions](/configuration/users-roles-permissions) — Create and manage access via Roles and Permissions. -- [Presets & Bookmarks](/configuration/presets-bookmarks) — Set default views of data and configure bookmarks. -- [Webhooks](/configuration/webhooks) — Use platform events to trigger external services. +- [Roles & Permissions](/app/users-roles-permissions) — Create and manage access via Roles and Permissions. +- [Presets & Bookmarks](/app/presets-bookmarks) — Set default views of data and configure bookmarks. +- [Webhooks](/app/webhooks) — Use platform events to trigger external services. Aside from the above pages, there are three shorthand links: diff --git a/docs/app/translation-strings.md b/docs/app/translation-strings.md index a6062bb045..4ff73a36cc 100644 --- a/docs/app/translation-strings.md +++ b/docs/app/translation-strings.md @@ -10,15 +10,9 @@ readTime: 3 min read > Translation Strings are multilingual key-value pairs that you can use throughout the app. They enable you to translate > things like dropdown options, placeholder text, field notes, and more. - ## Create a Translation String - To create a Translation String, follow these steps. @@ -33,9 +27,6 @@ To create a Translation String, follow these steps. ## Use a Translation String - Throughout the Settings Module, you will notice certain input fields have a translate icon on them. While can always type static text into these input fields, this translate icon indicates that you @@ -51,7 +42,7 @@ have the option assign a Translation String. To assign a Translation String, fol Your Translation String is set! Now the language-appropriate text will be shown based on the current language of the app. There are two ways to change the app language. First, administrators can set the Project's -[default language](/configuration/project-settings#general). Second, Users can choose their own personal +[default language](/app/project-settings#general). Second, Users can choose their own personal [language preference](/app/user-directory#user-preferences). Also note that if a language is chosen for which there is no Translation String, the translation key _(from step three)_ will be displayed instead. diff --git a/docs/app/user-directory.md b/docs/app/user-directory.md index 46e6ac7191..186da292f3 100644 --- a/docs/app/user-directory.md +++ b/docs/app/user-directory.md @@ -9,14 +9,14 @@ readTime: 7 min read > are the individual accounts for logging in to the App. Each User belongs to a [Role](/getting-started/glossary#roles) > which defines its [Permissions](/getting-started/glossary#permissions). -![User Directory Page]({{CDN_URL}}/docs/v9/app-guide/user-directory/user-directory-20220222A/user-directory-20220222A.webp) +![User Directory Page](/images/user-directory-20220222A.webp) @@ -27,7 +27,7 @@ This Module is a management system that enables one to view, invite, create, edi information. Users can be created directly in the app, or invited to join via email. When a User is created, they must also be assigned a Role. This Role defines the User's data access permissions within -Directus. In other words, it determines what a User can see and do inside the app. +d9. In other words, it determines what a User can see and do inside the app. The User Directory is composed of two pages: The User Directory Page and the User Details Page. It has all the same features and functionality as the [Content Module](/app/content/collections) such as manual and automatic sorting, batch @@ -35,12 +35,7 @@ edit/delete/archive, import/export from files, etc. ## User Directory Page - + The User Directory Page lists all Users in a Project, with a navigation that allows quick access to Users by Role. This page has the same functionality as the [Collection Page](/app/content/collections). @@ -51,9 +46,9 @@ page has the same functionality as the [Collection Page](/app/content/collection - **Sort Direction** — Toggles ascending & descending sort order. - **Search** — Enables classic type-based searching. - **Filter** — Enables advanced query-based search. -- person_add — [Invite people](/configuration/users-roles-permissions#inviting-a-user) to become +- person_add — [Invite people](/app/users-roles-permissions#inviting-a-user) to become Users via email. -- add — [Create User](/configuration/users-roles-permissions#creating-a-user) manually. +- add — [Create User](/app/users-roles-permissions#creating-a-user) manually. _The following are only visible once Users are selected._ @@ -62,19 +57,19 @@ _The following are only visible once Users are selected._ ### Layout Options -![User Directory Layout Options]({{CDN_URL}}/docs/v9/app-guide/user-directory/user-directory-20220222A/user-directory-layout-options-20220222A.webp) +![User Directory Layout Options](/images/user-directory-layout-options-20220222A.webp) The **Sidebar > Layout Options** _(denoted by layers when Sidebar is minimized)_ allows you to adjust how Users are displayed on the User Directory. To learn more, see [Layouts](/app/layouts). ## User Details Page -![The User Page]({{CDN_URL}}/docs/v9/app-guide/user-directory/user-directory-20220222A/user-profile-20220222A.webp) +![The User Page](/images/user-profile-20220222A.webp) A User's profile page can be accessed from the User Directory or by clicking the User Menu at the bottom of the [Module Bar](/app/overview#_1-module-bar). The profile page has the same features and functionality as the [Item Page](/app/content/items). Administrators can add and customize Fields under -[Settings > Data Model > Directus Users](/configuration/data-model), but the following are available by default. +[Settings > Data Model > d9 Users](/app/data-model), but the following are available by default. - **First Name** — The given name. - **Last Name** — The family/surname. @@ -88,7 +83,7 @@ A User's profile page can be accessed from the User Directory or by clicking the ### User Preferences -![User Preferences]({{CDN_URL}}/docs/v9/app-guide/user-directory/user-directory-20220222A/user-preferences-20220222A.webp) +![User Preferences](/images/user-preferences-20220222A.webp) - **Language** — The preferred App language/locale. - **Theme** — Light or Dark mode (or based on system preferences). @@ -97,7 +92,7 @@ A User's profile page can be accessed from the User Directory or by clicking the ### Admin Options -![Admin Options]({{CDN_URL}}/docs/v9/app-guide/user-directory/user-directory-20220222A/admin-options-20220222A.webp) +![Admin Options](/images/admin-options-20220222A.webp) - **Status** — Sets User status as Draft, Invited, Active, Suspended, Archived. - **Role** — Defines the User's Role. @@ -107,7 +102,7 @@ A User's profile page can be accessed from the User Directory or by clicking the ### Read-only Info -![User Profile Sidebar Information]({{CDN_URL}}/docs/v9/app-guide/user-directory/user-directory-20220222A/user-profile-sidebar-information-20220309A.webp) +![User Profile Sidebar Information](/images/user-profile-sidebar-information-20220309A.webp) Information in the Sidebar _(denoted by info when Sidebar is minimized)_ also includes the following read-only details: @@ -118,12 +113,7 @@ following read-only details: ## View a User - + Users are referenced throughout the app, often for accountability purposes. Hovering over a User in this context will provide a popover with basic information. Clicking that popover will navigate you to a view of that User's profile page. diff --git a/docs/app/users-roles-permissions.md b/docs/app/users-roles-permissions.md index 0f5b1685f7..52f44c121b 100644 --- a/docs/app/users-roles-permissions.md +++ b/docs/app/users-roles-permissions.md @@ -12,30 +12,30 @@ readTime: 7 min read > assigned a [role](/getting-started/glossary#roles) which defines its > [access permissions](/getting-started/glossary#permissions). -![Users, Roles and Permissions]({{CDN_URL}}/docs/v9/configuration/users-roles-permissions/users-roles-permissions-20220909/users-roles-permissions-20220907A.webp) +![Users, Roles and Permissions](/images/users-roles-permissions-20220907A.webp) :::tip Before You Begin -We recommend you try the [Quickstart Guide](/getting-started/quickstart.md) to get an overview of the platform. +We recommend you try the Quickstart Guide to get an overview of the platform. ::: :::tip Learn More To manage users, role and permissions programmatically via the API, please see our API guides on -[users](/reference/system/users.md), [roles](/reference/system/roles.md), and -[permissions](/reference/system/permissions.md). +users, roles, and +permissions. ::: -In order to understand how users, roles, and permissions work in Directus, a conceptual understanding of _how they work +In order to understand how users, roles, and permissions work in d9, a conceptual understanding of _how they work in general_ will be helpful. The following few paragraphs will introduce you to how users, roles, and permissions work within a relational database. If you're already familiar with these concepts, feel free to skip to -[How it Works in Directus](#how-it-works-in-directus). +[How it Works in d9](#how-it-works-in-directus). ### Users -Remember, [users are data](/reference/system/users.md). They are simply rows in a `users` data table. It may be easy to +Remember, users are data. They are simply rows in a `users` data table. It may be easy to forget this if you are new to working with data models, as the term _users_ can create a warm place in our hearts which distinguishes or elevates it above and beyond term _"data"_. But from the perspective of the data model, that's not the case. Users are still just data. @@ -59,7 +59,7 @@ other entity that can login and interact with the database. In many cases, your project will have multiple users doing the same thing _(managers, writers, subscribers, etc)_. If we assigned permissions directly to the user, we would have to configure the same permissions over and over, which makes it tedious to change configurations for all users doing the same job and also leads to a higher chance of misconfiguration. -This problem is an example of [data duplication](/configuration/data-model.md#avoid-data-duplication). To avoid this, we +This problem is an example of data duplication. To avoid this, we create roles, configure the role's permissions once, then assign the role to users as desired. Regardless of your project, your SQL database will _always_ need an administrator role and a public role. In addition, @@ -109,18 +109,15 @@ deadline. Finally, you likely want to restrict each student's CRUD access to all It is common to have multiple, complex business rules in a project. -## How it Works in Directus +## How it Works in d9 - -While you have full reign to configure these using SQL, Directus also provides a complete system to configure and manage +While you have full reign to configure these using SQL, d9 also provides a complete system to configure and manage users, roles, and permissions without writing a single line of SQL. The process has three key steps. -1. [Create a Role](/configuration/users-roles-permissions/roles.md#create-a-role) -2. [Configure its Permissions](/configuration/users-roles-permissions/permissions.md#configure-role-permissions) -3. [Assign Role to User](/configuration/users-roles-permissions/roles.md#assign-role-to-user) +1. Create a Role +2. Configure its Permissions +3. Assign Role to User :::tip No Artificial Limits @@ -131,25 +128,25 @@ complex granular permissions as desired. :::tip -Remember, the following users, role and permissions systems built into Directus cannot be deleted, however using them is +Remember, the following users, role and permissions systems built into d9 cannot be deleted, however using them is optional. You may configure your own system as desired. ::: -## Directus Users +## d9 Users -![Users in the Directus Data Studio]({{CDN_URL}}/docs/v9/configuration/users-roles-permissions/users-roles-permissions-20220909/users-20220807A.webp) +![Users in the d9 Data Studio](/images/users-20220807A.webp) -Within the Data Studio, users are managed within the [User Directory](/app/user-directory.md). However, there are some +Within the Data Studio, users are managed within the User Directory. However, there are some controls available to assign users to roles in **Settings > Roles and Permissions**. -To learn more, please see our guide on [users](/configuration/users-roles-permissions/users.md). +To learn more, please see our guide on users. -## Directus Roles +## d9 Roles -![Roles in the Directus Data Studio]({{CDN_URL}}/docs/v9/configuration/users-roles-permissions/users-roles-permissions-20220909/roles-20220907A.webp) +![Roles in the d9 Data Studio](/images/roles-20220907A.webp) -You can create as many roles as you need for your project. Directus also comes with built-in administrator and public +You can create as many roles as you need for your project. d9 also comes with built-in administrator and public roles, which cannot be deleted. The administrator role provides full permissions for all data in the app, and this cannot be limited. You must always @@ -159,31 +156,31 @@ The public role comes with all access permissions turned off by default, but thi Remember, any access permissions granted to this role will apply to everyone, including unauthenticated web traffic _and all existing users_. If you wish to keep the project private, simply keep all permissions turned off. -To learn more, see our guide on [roles](/configuration/users-roles-permissions/roles.md). +To learn more, see our guide on roles. -## Directus Permissions +## d9 Permissions -![Roles in the Directus Data Studio]({{CDN_URL}}/docs/v9/configuration/users-roles-permissions/users-roles-permissions-20220909/permissions-20220907A.webp) +![Roles in the d9 Data Studio](/images/roles-20220907A.webp) -Directus offers an extremely granular, yet easy to configure permissions system. When you +d9 offers an extremely granular, yet easy to configure permissions system. When you [create a role](#create-a-role), all permissions are turned off by default, allowing you to explicitly grant permissions as desired. -There are two other key points to note about Directus. First, the term -[custom access permissions](/configuration/users-roles-permissions/permissions.md#configure-custom-permissions) is used +There are two other key points to note about d9. First, the term +custom access permissions is used in place of [business rules](#business-rules), however the concept is the same. Second, instead of the standard CRUD -permissions, Directus provides CRUDS permissions: _create, read, update, delete, and share_. This _fifth_ type of -permission, share, defines whether a user has permissions to perform [data sharing](/app/content/shares.md) on items in +permissions, d9 provides CRUDS permissions: _create, read, update, delete, and share_. This _fifth_ type of +permission, share, defines whether a user has permissions to perform data sharing on items in a collection. -To learn more, see our guide on [permissions](/configuration/users-roles-permissions/permissions.md). +To learn more, see our guide on permissions. ## Workflows -![Workflows in the Directus]({{CDN_URL}}/docs/v9/configuration/users-roles-permissions/workflows-20220909/workflows-20220909B.webp) +![Workflows in the d9](/images/workflows-20220909A.webp) Workflows are a way to setup structured stages to content authoring and data management. They are created primarily with -custom access permissions, but can be enhanced with email notifications, custom [Interfaces](/extensions/interfaces.md) -as well as [flows](/configuration/flows.md). Directus supports endlessly configurable workflows. +custom access permissions, but can be enhanced with email notifications, custom Interfaces +as well as flows. d9 supports endlessly configurable workflows. -To learn more, see our recipe on [basic workflows](/cookbook/permissions/basic-workflows.md). +To learn more, see our recipe on basic workflows. diff --git a/docs/app/users-roles-permissions/permissions.md b/docs/app/users-roles-permissions/permissions.md index 3320e0eb01..5c358280ae 100644 --- a/docs/app/users-roles-permissions/permissions.md +++ b/docs/app/users-roles-permissions/permissions.md @@ -1,35 +1,32 @@ --- description: - Directus offers an extremely granular, yet easy to configure permissions system. When you create a role, all + d9 offers an extremely granular, yet easy to configure permissions system. When you create a role, all permissions are turned off by default. readTime: --- # Permissions -> Directus offers an extremely granular, yet easy to configure permissions system. When you create a role, all +> d9 offers an extremely granular, yet easy to configure permissions system. When you create a role, all > permissions are turned off by default. From here, you explicitly reconfigure its permissions for each collection as > desired. :::tip Learn More -To configure permissions programmatically, see our API documentation on [permissions](/reference/system/permissions.md). +To configure permissions programmatically, see our API documentation on permissions. ::: ## Configure Permissions - To configure a role's access permissions, follow these steps. 1. Navigate to **Settings > Roles & Permissions > [Role]** and scroll to **Permissions**.\ - Each collection is a row. Its [CRUDS permissions](/configuration/users-roles-permissions.md#directus-permissions) are + Each collection is a row. Its CRUDS permissions are in columns. 2. Click the icon of the collection and permission type that you want to set and a tooltip will appear. If you'd like to - adjust permissions for Directus system collections, then click **System Collections** to expand the menu and access + adjust permissions for d9 system collections, then click **System Collections** to expand the menu and access these collections. 3. Click the icon in the relevant collection row and CRUDS permission column and a popup menu will appear with the following permission levels: @@ -44,16 +41,13 @@ To configure a role's access permissions, follow these steps. ::: warning Admin Roles -If you [configured the role's details](/configuration/users-roles-permissions/roles.md#configure-role-details) to have +If you configured the role's details to have **Admin Access**, permission configuration is disabled. ::: ## Configure Custom Permissions - To configure custom access permissions for a role, follow these steps. @@ -62,9 +56,9 @@ To configure custom access permissions for a role, follow these steps. 2. Configure custom access permission validations as desired. For each CRUDS permission, you will have one or more of the following sub-menus: - - **Item Permissions** — Set [filters](/app/filters.md) to define items the role is granted permissions. + - **Item Permissions** — Set filters to define items the role is granted permissions. - **Field Permissions** — Toggle to limit which fields the role is granted permissions. - - **Field Validation** — Set [filters](/app/filters.md) to define valid field values on create or update. + - **Field Validation** — Set filters to define valid field values on create or update. - **Field Presets** — Use JSON to set default field values on [create](/reference/items.html#create-an-item) or [update](/reference/items.html#update-an-item) of an item. The value will then appear on the item page, and can be overwritten if desired. @@ -73,9 +67,6 @@ To configure custom access permissions for a role, follow these steps. ## Toggle All Collection Permissions - To grant or restrict all CRUDS permissions to a collection at once, follow these steps. @@ -86,12 +77,9 @@ To grant or restrict all CRUDS permissions to a collection at once, follow these ## Reset System Permissions - This is only available when **App Access** is enabled when you -[configure role details](/configuration/users-roles-permissions/roles.md#configure-role-details). If you made any custom +configure role details. If you made any custom configurations to system collections, these will be reverted. To reset system permissions, follow these steps. 1. Navigate to **Settings > Roles & Permissions > [Role]**. diff --git a/docs/app/users-roles-permissions/roles.md b/docs/app/users-roles-permissions/roles.md index e0a1bfa8dc..9ca9e15b81 100644 --- a/docs/app/users-roles-permissions/roles.md +++ b/docs/app/users-roles-permissions/roles.md @@ -10,24 +10,18 @@ readTime: :::tip Learn More -To configure roles programmatically, see our API documentation on [roles](/reference/system/roles.md). +To configure roles programmatically, see our API documentation on roles. ::: ## View a Role - To view an existing role, navigate to **Settings > Roles & Permissions > [Role]**. Now you can see the role's permissions and other details. ## Create a Role - To create a role, follow these steps. @@ -47,9 +41,6 @@ Next, you will likely need to [configure the role's details](#configure-role-det ## Configure Role Details - In addition to defining permissions, roles come with a number of other configuration options. To configure a role's details, follow these steps. @@ -73,16 +64,13 @@ details, follow these steps. Roles with _App Access_ enabled are created with the minimum permissions required to login to the app and access their own profile information. Roles that have neither _Admin_ nor _App Access_ enabled are created with public permissions. -You can always [reconfigure permissions](/configuration/users-roles-permissions/permissions.md#configure-permissions) +You can always reconfigure permissions later. ::: ## Delete a Role - To delete a role, follow these steps. @@ -94,13 +82,13 @@ To delete a role, follow these steps. If you delete a role that still has users in it, those users will be given a `NULL` role, which limits them to public permissions. However, you can always -[assign them a new role](/configuration/users-roles-permissions/users.md#assign-role-to-existing-user). +assign them a new role. ::: :::tip Built-in Roles -Directus does not allow you to delete the built-in public role or administrator role. To learn more, please see the -introductory section on [Directus Roles](/configuration/users-roles-permissions.html#directus-roles). +d9 does not allow you to delete the built-in public role or administrator role. To learn more, please see the +introductory section on d9 Roles. ::: diff --git a/docs/app/users-roles-permissions/users.md b/docs/app/users-roles-permissions/users.md index 95636ede54..927311297f 100644 --- a/docs/app/users-roles-permissions/users.md +++ b/docs/app/users-roles-permissions/users.md @@ -10,19 +10,16 @@ readTime: :::tip Learn More -To configure users programmatically, see our API documentation on [users](/reference/system/users.md). +To configure users programmatically, see our API documentation on users. ::: -Within the Data Studio, the [User Directory](/app/user-directory.md) is the primary place to manage users. However, +Within the Data Studio, the User Directory is the primary place to manage users. However, certain controls are included in **Settings > Roles & Permissions > [Role]** as well, which is what the following sections will focus on. ## Invite a User - To invite people to become users via email and automatically assign them a role in the process, follow these steps. @@ -39,9 +36,6 @@ Instead of comma-separated emails, you can also add new emails line-by-line. ## Create a User - To create a user and assign their role _(and other details)_ follow these steps. @@ -52,9 +46,6 @@ To create a user and assign their role _(and other details)_ follow these steps. ## Assign Role to Existing User - To assign a role to an existing user, follow these steps. @@ -67,9 +58,6 @@ To assign a role to an existing user, follow these steps. ## Remove User's Role - To remove a user from a role, follow these steps. diff --git a/docs/app/webhooks.md b/docs/app/webhooks.md index c9582dda8f..b068da9bbc 100644 --- a/docs/app/webhooks.md +++ b/docs/app/webhooks.md @@ -12,7 +12,7 @@ readTime: 2 min read :::warning Webhooks are a deprecated feature and will be removed from the platform. This functionality has been fully replaced by -[Flows](/configuration/flows.md). +Flows. ::: diff --git a/docs/contributing/codebase-overview.md b/docs/contributing/codebase-overview.md index d9542b80c6..0b3e9d6db9 100644 --- a/docs/contributing/codebase-overview.md +++ b/docs/contributing/codebase-overview.md @@ -1,6 +1,6 @@ --- description: - The core concepts behind Directus are simple, however the problems that must be solved to honor them can be remarkably + The core concepts behind d9 are simple, however the problems that must be solved to honor them can be remarkably complex. We strive to design and engineer the most elegant solutions possible, so that our codebase remains accessible. readTime: 3 min read @@ -8,20 +8,20 @@ readTime: 3 min read # Codebase Overview -> **The core concepts behind Directus are simple, however the problems that must be solved to honor them can be +> **The core concepts behind d9 are simple, however the problems that must be solved to honor them can be > remarkably complex.** We strive to design and engineer the most elegant solutions possible, so that our codebase > remains accessible. ## Monorepo -The primary Directus repository is located at [`directus/directus`]({{GITHUB_URL}}) and +The primary d9 repository is located at [`directus/directus`]({{GITHUB_URL}}) and houses the Admin App (Vue.js 3 w/ Composition API), API (Node.js), API Specification (OpenAPI), and other smaller -packages used internally. Directus follows a monorepo design similar to React or Babel — this page will outline our +packages used internally. d9 follows a monorepo design similar to React or Babel — this page will outline our monorepo's design and structure. ## `/api` -Contains the Directus API (REST+GraphQL), written in Node.js. +Contains the d9 API (REST+GraphQL), written in Node.js. #### `/api/src/cli` @@ -58,7 +58,7 @@ Various utility functions. ## `/app` -Contains the Directus Admin App, written in Vue.js 3 w/ the Composition API. +Contains the d9 Admin App, written in Vue.js 3 w/ the Composition API. #### `/app/public` diff --git a/docs/contributing/github-ci.md b/docs/contributing/github-ci.md index cef4b008bf..ad89a20a9c 100644 --- a/docs/contributing/github-ci.md +++ b/docs/contributing/github-ci.md @@ -1,13 +1,13 @@ --- description: - This guide explains how to publish a forked version of Directus on NPM, Dockerhub and GHCR. You need to first create a + This guide explains how to publish a forked version of d9 on NPM, Dockerhub and GHCR. You need to first create a fork. readTime: 2 min read --- # GitHub CI -> This guide explains how to publish a forked version of Directus on NPM, Dockerhub and GHCR. You need to first +> This guide explains how to publish a forked version of d9 on NPM, Dockerhub and GHCR. You need to first > [create a fork](/contributing/running-locally) ::: warning Using a fork in production is neither supported nor recommended. diff --git a/docs/contributing/introduction.md b/docs/contributing/introduction.md index d67176814f..ed579e0280 100644 --- a/docs/contributing/introduction.md +++ b/docs/contributing/introduction.md @@ -1,27 +1,27 @@ --- -description: An introduction to the process, rules and guidelines that for all code contributions to Directus. +description: An introduction to the process, rules and guidelines that for all code contributions to d9. readTime: 6 min read --- # Contributing -Heya! Welcome to Directus, and thank you for taking the time to contribute back to our project! ❤️ We want everybody to -be able to contribute to Directus, no matter your background or expertise. In order to facilitate that, we've put +Heya! Welcome to d9, and thank you for taking the time to contribute back to our project! ❤️ We want everybody to +be able to contribute to d9, no matter your background or expertise. In order to facilitate that, we've put together a couple tips and tricks below. Our team truly appreciates every single contributor, community member, GitHub star, pull-request, bug report, and feature request. > We're here to help! > -> If you have _any_ questions along your contributor journey, please feel free to come chat with us on -> [our Discord server]({{DISCORD_CHAT_URL}}). +> If you have _any_ questions along your contributor journey, please feel free to reach out on +> [GitHub Discussions]({{GITHUB_COMMUNITY_URL}}) or via [email](mailto:{{SUPPORT_EMAIL}}). ## Code of Conduct -**The Directus [Code of Conduct]({{GITHUB_URL}}/blob/main/code_of_conduct.md) is one of the +**The d9 [Code of Conduct]({{GITHUB_URL}}/blob/main/code_of_conduct.md) is one of the ways we put our values into practice. We expect all of our staff, contractors and contributors to know and follow this code.** -**Our contributors and maintainers work extremely hard to build Directus as premium open-source software. Please be +**Our contributors and maintainers work extremely hard to build d9 as open-source software. Please be respectful of those efforts throughout our ecosystem. Trolling, harassing, insulting, or other unacceptable behavior by participants will not be tolerated.** @@ -58,8 +58,8 @@ Discussion on our GitHub Discussions board: {{GITHUB_URL}}/discussions ### Helping Others -The Directus community is growing quickly, which also means there's more and more people that have questions. Helping -out your fellow developers by answering questions on [Discord]({{DISCORD_CHAT_URL}}) or +The d9 community is growing quickly, which also means there's more and more people that have questions. Helping +out your fellow developers by answering questions on [GitHub Discussions]({{GITHUB_URL}}/discussions/categories/q-a) is a great way to help the project. @@ -73,9 +73,9 @@ have been triaged, accepted, and are ready to be implemented. #### Implementing Features -With the continuous growth of Directus, more and more people are relying on Directus for (critical) data workloads in +With the continuous growth of d9, more and more people are relying on d9 for (critical) data workloads in various use cases. This means we need to be careful with any changes that might affect the stability, security, -performance, or scalability of Directus. For this reason, it's important that any new feature is properly thought +performance, or scalability of d9. For this reason, it's important that any new feature is properly thought through and discussed before being implemented. Before you start writing code to implement your new feature idea, please read through and understand our triaging @@ -97,7 +97,7 @@ actionable item, be it a feature or otherwise. ### Reporting Security Vulnerabilities -If you believe you have discovered a security issue within a Directus product or service, please reach out to us +If you believe you have discovered a security issue within a d9 product or service, please reach out to us directly over email: [{{SECURITY_EMAIL}}](mailto:{{SECURITY_EMAIL}}). We will then open a [GitHub Security Advisory]({{GITHUB_URL}}/security/advisories) for tracking the fix. @@ -105,5 +105,5 @@ We value the members of the independent security research community who find sec team so that proper fixes can be issued to users. Our policy is to credit all researchers in the fix's release notes. In order to receive credit, security researchers must follow responsible disclosure practices, including: -- They do not publish the vulnerability prior to the Directus team releasing a fix for it +- They do not publish the vulnerability prior to the d9 team releasing a fix for it - They do not divulge exact details of the issue, e.g., through exploits or proof-of-concepts diff --git a/docs/contributing/running-locally.md b/docs/contributing/running-locally.md index b038fdb3c1..f519720bbd 100644 --- a/docs/contributing/running-locally.md +++ b/docs/contributing/running-locally.md @@ -1,29 +1,29 @@ --- description: - This guide explains how to install the _Development_ version of Directus locally so that you can work on the + This guide explains how to install the _Development_ version of d9 locally so that you can work on the platform's source code. readTime: 4 min read --- # Running Locally -> This guide explains how to install the _Development_ version of Directus locally so that you can work on the +> This guide explains how to install the _Development_ version of d9 locally so that you can work on the > platform's source code. To install the _Production_ version locally, please follow to our > [Docker Guide](/self-hosted/docker-guide). ::: tip Minimum Requirements You will need to have [the latest version of Node](https://nodejs.org/en/download/current) to _build_ a Development -version of Directus. +version of d9. You will also need to have the package manager [pnpm](https://pnpm.io) installed. ::: -## 1. Fork the Directus repository +## 1. Fork the d9 repository Go to the [repository]({{GITHUB_URL}}) and fork it to your GitHub account. A fork is your -copy of the Directus repository which allows you to freely experiment with changes without affecting the original +copy of the d9 repository which allows you to freely experiment with changes without affecting the original project. ## 2. Clone from your repository @@ -79,7 +79,7 @@ To start the initialization run the following command: pnpm --filter api cli bootstrap ``` -This will set-up the required tables for Directus and make sure all the migrations have run. +This will set-up the required tables for d9 and make sure all the migrations have run. ## 7. Start the development server @@ -146,7 +146,7 @@ If you encounter errors during this installation process, make sure your node ve ## 8. Make your fixes/changes -At this point you are ready to start working on Directus! Before diving in however, it's worth reading through the +At this point you are ready to start working on d9! Before diving in however, it's worth reading through the introduction to [Contributing](/contributing/introduction). ::: tip Debugging diff --git a/docs/contributing/translations.md b/docs/contributing/translations.md index 7b3a604608..b464182ec1 100644 --- a/docs/contributing/translations.md +++ b/docs/contributing/translations.md @@ -1,6 +1,6 @@ --- description: - Directus supports internationalization across the entire App. Many languages are currently supported, with more being + d9 supports internationalization across the entire App. Many languages are currently supported, with more being added all the time. Anyone can add or refine any languages through the integration with Crowdin readTime: 2 min read --- @@ -50,4 +50,4 @@ using the "Comment" section. ## Requesting a New Language To add a new language to the Crowdin service, you can make a request via Crowdin's **Discussions** section, or reach out -to a Core Team member via [Discord]({{DISCORD_CHAT_URL}}). +to the Core Team via [email](mailto:{{SUPPORT_EMAIL}}). diff --git a/docs/dictionary.txt b/docs/dictionary.txt index 31aa7f2392..36e644f220 100644 --- a/docs/dictionary.txt +++ b/docs/dictionary.txt @@ -16,7 +16,7 @@ (C|c)heckboxes (C|c)loudinary (C|c)loudinary's -(C|c)odebase +(C|c)odebase[.-]?(.*) (C|c)onfigs? (C|c)ustomizable (D|d)atacenter @@ -140,6 +140,8 @@ destructured devs DigitalOcean DigitalOcean's +d9 +d9[-.](.*) directus Directus directus_(.*) @@ -236,6 +238,7 @@ middleware misconfiguration misconfigurations Mongo +mp4 monorepo's more_horiz multitenant @@ -372,6 +375,7 @@ VPC Vue Vue's WebDAV +Webcapsule webhosting webpage whitelabeling diff --git a/docs/extensions/bundles.md b/docs/extensions/bundles.md index ed5e884380..530d1e5bc0 100644 --- a/docs/extensions/bundles.md +++ b/docs/extensions/bundles.md @@ -1,5 +1,5 @@ --- -description: A guide on how to build extension bundles in Directus. +description: A guide on how to build extension bundles in d9. readTime: 5 min read --- @@ -9,7 +9,7 @@ readTime: 5 min read ## Create a Bundle -When [scaffolding your Directus extension](/extensions/creating-extensions.html#scaffolding-your-directus-extension), +When [scaffolding your d9 extension](/extensions/creating-extensions.html#scaffolding-your-directus-extension), select the `bundle` type. This will create a new empty bundle. ## Entries diff --git a/docs/extensions/creating-extensions.md b/docs/extensions/creating-extensions.md index c5b235acbe..322ef191ac 100644 --- a/docs/extensions/creating-extensions.md +++ b/docs/extensions/creating-extensions.md @@ -1,11 +1,11 @@ --- -description: A guide on how to scaffold your Directus Extension. +description: A guide on how to scaffold your d9 Extension. readTime: 5 min read --- # Creating Extensions -## Scaffolding your Directus Extension +## Scaffolding your d9 Extension The easiest way to start developing extensions is to use the `create-directus-extension` utility: @@ -40,14 +40,14 @@ The generated `package.json` file contains an additional `directus:extension` fi - `type` — The type of the extension - `path` — The path to the built extension - `source` — The path to the source entrypoint -- `host` — A semver string that indicates with which versions of the Directus host, the extension is compatible with +- `host` — A semver string that indicates with which versions of the d9 host, the extension is compatible with The CLI will use those fields by default to determine the input and output file paths and how the extension should be built. ## Building your Extension -Before your extension can be used by Directus, it has to be built. If you used the `create-directus-extension` utility +Before your extension can be used by d9, it has to be built. If you used the `create-directus-extension` utility to scaffold your extension, building your extension is as easy as running: ```bash @@ -131,7 +131,7 @@ on changes automatically. ## Publishing your Extension -To make an extension available to all Directus users, you can publish the npm package created by +To make an extension available to all d9 users, you can publish the npm package created by `@wbce-d9/extensions-sdk` to the npm registry. Make sure the name of the package follows the naming convention for package extensions: `directus-extension-` or `@/directus-extension-`. `` has to be replaced with the name of your extension. @@ -143,8 +143,8 @@ There are two ways to install an extension. ### Package Extension Package extensions are essentially npm packages. They can be installed from the npm registry, from a tarball, from a git -repository or any other means supported by npm. On startup, Directus will automatically load any package extension -installed into your Directus project folder. +repository or any other means supported by npm. On startup, d9 will automatically load any package extension +installed into your d9 project folder. To install an extension from the npm registry, simply use the npm CLI: @@ -153,7 +153,7 @@ cd npm install ``` -`` has to be replaced by the Directus project folder. `` should be replaced +`` has to be replaced by the d9 project folder. `` should be replaced with the full name of the package extension (e.g. `directus-extension-custom`). ### Local Extension diff --git a/docs/extensions/displays.md b/docs/extensions/displays.md index 9dd9d0b79f..bf0cf07470 100644 --- a/docs/extensions/displays.md +++ b/docs/extensions/displays.md @@ -1,5 +1,5 @@ --- -description: A guide on how to build custom Display Extensions in Directus. +description: A guide on how to build custom Display Extensions in d9. readTime: 4 min read --- @@ -12,7 +12,7 @@ readTime: 4 min read The entrypoint of your display is the `index` file inside the `src/` folder of your extension package. It exports a configuration object with options to configure the behavior of your display. When loading your display, this object is -imported by the Directus host. +imported by the d9 host. Example of an entrypoint: @@ -35,7 +35,7 @@ export default { - `id` — The unique key for this display. It is good practice to scope proprietary displays with an author prefix. - `name` — The human-readable name for this display. - `icon` — An icon name from the [material icon set](/getting-started/glossary#material-icons), or the extended list of - Directus custom icons. + d9 custom icons. - `description` — A short description (<80 characters) of this display shown in the App. - `component` — A reference to your display component. - `options` — The options of your display. Can be either an options object or a dedicated Vue component. @@ -47,7 +47,7 @@ export default { ## Display Component -The display component is the part of your extension that will be rendered by the Directus App whenever your display +The display component is the part of your extension that will be rendered by the d9 App whenever your display should be used to show the value of a field. This display component has to be Vue component. The most straightforward way to write a Vue component is to use the Vue Single File Component syntax. @@ -83,12 +83,12 @@ values. - `collection` — The collection name of the field. - `field` — The key of the field. -Other than this simple API to communicate with the Directus App, the display component is a blank canvas, allowing you +Other than this simple API to communicate with the d9 App, the display component is a blank canvas, allowing you to create anything you need. ::: warning Vue Version -The Directus App uses Vue 3. There might be 3rd party libraries that aren't yet compatible with Vue 3. +The d9 App uses Vue 3. There might be 3rd party libraries that aren't yet compatible with Vue 3. ::: diff --git a/docs/extensions/email-templates.md b/docs/extensions/email-templates.md index 282c0de9cd..e7fc47b72b 100644 --- a/docs/extensions/email-templates.md +++ b/docs/extensions/email-templates.md @@ -1,5 +1,5 @@ --- -description: A guide on how to build custom Email Templates in Directus. +description: A guide on how to build custom Email Templates in d9. readTime: 1 min read --- diff --git a/docs/extensions/endpoints.md b/docs/extensions/endpoints.md index 91439fd7eb..1266247903 100644 --- a/docs/extensions/endpoints.md +++ b/docs/extensions/endpoints.md @@ -1,5 +1,5 @@ --- -description: A guide on how to build custom API endpoints in Directus. +description: A guide on how to build custom API endpoints in d9. readTime: 3 min read --- diff --git a/docs/extensions/hooks.md b/docs/extensions/hooks.md index c6368cfc4a..bfdf56e584 100644 --- a/docs/extensions/hooks.md +++ b/docs/extensions/hooks.md @@ -1,5 +1,5 @@ --- -description: A guide on how to build custom hooks in Directus. +description: A guide on how to build custom hooks in d9. readTime: 7 min read --- @@ -46,7 +46,7 @@ the event. Filter hooks act on the event's payload before the event is fired. They allow you to check, modify, or cancel an event. -Below is an example of canceling a `create` event by throwing a standard Directus exception. +Below is an example of canceling a `create` event by throwing a standard d9 exception. ```js export default ({ filter }, { exceptions }) => { @@ -109,7 +109,7 @@ The context object has the following properties: ### Init -Init hooks execute at a defined point within the life cycle of Directus. Use init hook objects to inject logic into +Init hooks execute at a defined point within the life cycle of d9. Use init hook objects to inject logic into internal services. The init register function receives two parameters: @@ -123,7 +123,7 @@ The callback function itself receives one parameter: ### Schedule -Schedule hooks execute at certain points in time rather than when Directus performs a specific action. This is supported +Schedule hooks execute at certain points in time rather than when d9 performs a specific action. This is supported through [`node-cron`](https://www.npmjs.com/package/node-cron). To set up a scheduled event, provide a cron statement as the first parameter to the `schedule()` function. For example diff --git a/docs/extensions/interfaces.md b/docs/extensions/interfaces.md index e7e11b0d16..8e09011057 100644 --- a/docs/extensions/interfaces.md +++ b/docs/extensions/interfaces.md @@ -1,5 +1,5 @@ --- -description: A guide on how to build custom Interfaces in Directus. +description: A guide on how to build custom Interfaces in d9. readTime: 4 min read --- @@ -12,7 +12,7 @@ readTime: 4 min read The entrypoint of your interface is the `index` file inside the `src/` folder of your extension package. It exports a configuration object with options to configure the behavior of your interface. When loading your interface, this object -is imported by the Directus host. +is imported by the d9 host. Example of an entrypoint: @@ -35,7 +35,7 @@ export default { - `id` — The unique key for this interface. It is good practice to scope proprietary interfaces with an author prefix. - `name` — The human-readable name for this interface. - `icon` — An icon name from the [material icon set](/getting-started/glossary#material-icons), or the extended list of - Directus custom icons. + d9 custom icons. - `description` — A short description (<80 characters) of this interface shown in the App. - `component` — A reference to your interface component. - `options` — The options of your interface. Can be either an options object or a dedicated Vue component. @@ -49,7 +49,7 @@ export default { ## Interface Component -The interface component is the part of your extension that will be rendered by the Directus App whenever your interface +The interface component is the part of your extension that will be rendered by the d9 App whenever your interface should be used to input some value into a field. This interface component has to be Vue component. The most straightforward way to write a Vue component is to use the Vue Single File Component syntax. @@ -81,7 +81,7 @@ export default { ``` The current value of the field is provided to the component via the `value` prop. If the value was changed inside your -component, it should be emitted to the Directus App by using the `input` emit. +component, it should be emitted to the d9 App by using the `input` emit. #### Available Props @@ -97,12 +97,12 @@ component, it should be emitted to the Directus App by using the `input` emit. - `input` — Update the value of the field. - `setFieldValue` - Used to set the value of other fields. -Other than this simple API to communicate with the Directus App, the interface component is a blank canvas, allowing you +Other than this simple API to communicate with the d9 App, the interface component is a blank canvas, allowing you to create anything you need. ::: warning Vue Version -The Directus App uses Vue 3. There might be 3rd party libraries that aren't yet compatible with Vue 3. +The d9 App uses Vue 3. There might be 3rd party libraries that aren't yet compatible with Vue 3. ::: diff --git a/docs/extensions/introduction.md b/docs/extensions/introduction.md index 5b6bc41c36..20ee3c6593 100644 --- a/docs/extensions/introduction.md +++ b/docs/extensions/introduction.md @@ -1,14 +1,14 @@ --- -description: An introduction to custom Extensions in Directus. +description: An introduction to custom Extensions in d9. readTime: 2 min read --- # Extensions -> In addition to being highly customizable, Directus has been architected to be completely modular and extensible. This +> In addition to being highly customizable, d9 has been architected to be completely modular and extensible. This > ensures you will never hit a hard feature ceiling within the platform. -Build, modify or expand any feature needed for your app or project. What makes Directus so flexible is that it has been +Build, modify or expand any feature needed for your app or project. What makes d9 so flexible is that it has been designed from the ground up with complete extensibility. In addition to offering our software's codebase as open-source, we've broken down the app code into component pieces called Extensions. New Extensions can be created, modified or expanded to suit any need. However, the following extension types come with the platform's App and API. @@ -19,7 +19,7 @@ The easiest way to start creating extensions is to use the [Extensions SDK](/ext ## App Extensions -Allow creating custom experiences within the Directus App. +Allow creating custom experiences within the d9 App. - [Modules](/extensions/modules) — Created with Vue.js - [Layouts](/extensions/layouts) — Created with Vue.js diff --git a/docs/extensions/layouts.md b/docs/extensions/layouts.md index b7cd35271c..275d74fe05 100644 --- a/docs/extensions/layouts.md +++ b/docs/extensions/layouts.md @@ -1,5 +1,5 @@ --- -description: A guide on how to build custom Layouts in Directus. +description: A guide on how to build custom Layouts in d9. readTime: 4 min read --- @@ -12,7 +12,7 @@ readTime: 4 min read The entrypoint of your layout is the `index` file inside the `src/` folder of your extension package. It exports a configuration object with options to configure the behavior of your layout. When loading your layout, this object is -imported by the Directus host. +imported by the d9 host. Example of an entrypoint: @@ -43,7 +43,7 @@ export default { - `id` — The unique key for this layout. It is good practice to scope proprietary layouts with an author prefix. - `name` — The human-readable name for this layout. - `icon` — An icon name from the [material icon set](/getting-started/glossary#material-icons), or the extended list of - Directus custom icons. + d9 custom icons. - `component` — A reference to your layout component. - `slots` — Additional components to be added by your layout. - `options` — A reference to an options component. @@ -55,7 +55,7 @@ export default { ## Layout Component -The layout component is the part of your extension that will be rendered by the Directus App whenever your layout should +The layout component is the part of your extension that will be rendered by the d9 App whenever your layout should be used to show the items of a collection. This layout component has to be Vue component. The most straightforward way to write a Vue component is to use the Vue Single File Component syntax. @@ -112,7 +112,7 @@ These props and emits are available in all components associated with your layou - `update:layoutOptions` — Update the user's currently saved layout options. - `update:layoutQuery` — Update the user's layout query parameters. -Other than this simple API to communicate with the Directus App and the system to share state between components, the +Other than this simple API to communicate with the d9 App and the system to share state between components, the layout component is a blank canvas, allowing you to create anything you need. The `@wbce-d9/extensions-sdk` package provides some useful composables to help with creating layouts: @@ -123,7 +123,7 @@ The `@wbce-d9/extensions-sdk` package provides some useful composables to help w ::: warning Vue Version -The Directus App uses Vue 3. There might be 3rd party libraries that aren't yet compatible with Vue 3. +The d9 App uses Vue 3. There might be 3rd party libraries that aren't yet compatible with Vue 3. ::: diff --git a/docs/extensions/migrations.md b/docs/extensions/migrations.md index 6d6cf0c5e2..227a28091a 100644 --- a/docs/extensions/migrations.md +++ b/docs/extensions/migrations.md @@ -1,11 +1,11 @@ --- -description: A guide on how to setup your owns custom Migrations in Directus. +description: A guide on how to setup your owns custom Migrations in d9. readTime: 2 min read --- # Custom Migrations -> Directus allows adding custom migration files that run whenever the `directus database migrate:*` commands are +> d9 allows adding custom migration files that run whenever the `directus database migrate:*` commands are > executed. All migrations must reside in the `extensions/migrations` folder. ## File Name @@ -49,12 +49,12 @@ what you're doing and backup your database before adding these migrations. ::: -## Migrations and Directus schema +## Migrations and d9 schema -Migrations can be used to manage the contents of Directus collections (e.g. initial hydration). In order to do it, you +Migrations can be used to manage the contents of d9 collections (e.g. initial hydration). In order to do it, you must ensure that the schema is up to date before running your migrations. -`directus database migrate:latest` runs the required Directus internal migrations and the migrations from `migrations` +`directus database migrate:latest` runs the required d9 internal migrations and the migrations from `migrations` directory. In general, you need the following flow: ```sh @@ -69,4 +69,4 @@ npx directus schema apply ./path/to/snapshot.yaml ``` Take notice here - to comply with this flow, `migrations` directory **must not contain** tasks that modify the contents -of your Directus, because schema is not yet created when you run `migrate:latest`. +of your d9, because schema is not yet created when you run `migrate:latest`. diff --git a/docs/extensions/modules.md b/docs/extensions/modules.md index 2cd0d5ddb4..14968b183f 100644 --- a/docs/extensions/modules.md +++ b/docs/extensions/modules.md @@ -1,18 +1,18 @@ --- -description: A guide on how to build custom Modules in Directus. +description: A guide on how to build custom Modules in d9. readTime: 5 min read --- # Custom Modules -> Custom Modules are completely open-ended components that allow you to create new experiences within the Directus +> Custom Modules are completely open-ended components that allow you to create new experiences within the d9 > platform. [Learn more about Modules](/getting-started/glossary#modules). ## Extension Entrypoint The entrypoint of your module is the `index` file inside the `src/` folder of your extension package. It exports a configuration object with options to configure the behavior of your module. When loading your module, this object is -imported by the Directus host. +imported by the d9 host. Example of an entrypoint: @@ -37,7 +37,7 @@ export default { - `id` — The unique key for this module. It is good practice to scope proprietary modules with an author prefix. - `name` — The human-readable name for this module. - `icon` — An icon name from the [material icon set](/getting-started/glossary#material-icons), or the extended list of - Directus custom icons. + d9 custom icons. - `color` — A color associated with the module. - `routes` — Details the routes in your module. The routes are registered as nested routes with the module's `id` serving as the base path. @@ -80,7 +80,7 @@ export default {}; ``` A route component provides a blank canvas for creating anything you need. You can use the globally registered -`private-view` component to get access to Directus' page structure consisting of the module bar, the navigation, the +`private-view` component to get access to d9' page structure consisting of the module bar, the navigation, the sidebar, the header and the main content area. ::: warning Enable the Module @@ -91,7 +91,7 @@ Before a module appears in the module bar, it has to be enabled inside the proje ::: warning Vue Version -The Directus App uses Vue 3. There might be 3rd party libraries that aren't yet compatible with Vue 3. +The d9 App uses Vue 3. There might be 3rd party libraries that aren't yet compatible with Vue 3. ::: @@ -123,7 +123,7 @@ If you prefer to use the Vue Options API, you can inject the `api` and `stores` ## Example: Accessing the API from within your extension -The Directus App's Vue app instance provides a field called `api`, which can be injected into Vue components using +The d9 App's Vue app instance provides a field called `api`, which can be injected into Vue components using [Vue's inject framework](https://v3.vuejs.org/guide/component-provide-inject.html). This `api` field contains a property called `api`, which is an authenticated Axios instance. Here's an example of how to use it: diff --git a/docs/extensions/operations.md b/docs/extensions/operations.md index 02ba03e77e..8ea019b090 100644 --- a/docs/extensions/operations.md +++ b/docs/extensions/operations.md @@ -1,7 +1,7 @@ # Custom Operations > Custom Operations allow you to create new types of steps for flows. -> [Learn more about Operations](/configuration/flows/operations). +> [Learn more about Operations](/app/flows/operations). ## Extension Entrypoints @@ -11,7 +11,7 @@ the `src/` folder of your extension package. ### App Entrypoint The App entrypoint exports a configuration object with options to configure the appearance of your operation. When -loading your operation, this object is imported by the Directus App host. +loading your operation, this object is imported by the d9 App host. Example of an entrypoint: @@ -46,7 +46,7 @@ export default { - `id` — The unique key for this operation. It is good practice to scope proprietary operations with an author prefix. - `name` — The human-readable name for this operation. - `icon` — An icon name from the [material icon set](/getting-started/glossary#material-icons), or the extended list of - Directus custom icons. + d9 custom icons. - `description` — A short description (<80 characters) of this operation shown in the App. - `overview` — An overview that will be shown on the operation's tile. Can be either a function that receives the options of the operation and returns an array of objects containing `label` and `text` or a dedicated Vue component. @@ -55,7 +55,7 @@ export default { ### API Entrypoint The API entrypoint exports a configuration object with options to configure the behavior of your operation. When loading -your operation, this object is imported by the Directus API host. +your operation, this object is imported by the d9 API host. Example of an entrypoint: @@ -75,7 +75,7 @@ export default { ::: warning Extension Id -The extension id needs to be identical for both entrypoints in order for Directus to recognize them as part of the same +The extension id needs to be identical for both entrypoints in order for d9 to recognize them as part of the same extension. ::: @@ -85,7 +85,7 @@ extension. The handler function defined inside the API endpoint will be called whenever the flow the operation is connected to is executed. To trigger the operation connected to the `resolve` anchor, the handler function has to return a value. To trigger the operation connected to the `reject` anchor, the handler function has to throw with a value. This value will -then be added to the [data chain](/configuration/flows#the-data-chain). +then be added to the [data chain](/app/flows#the-data-chain). The handler function receives the two parameters `options` and `context`. `options` is an object with the operation's options as properties and their respective already interpolated values. `context` is an object with the following diff --git a/docs/extensions/panels.md b/docs/extensions/panels.md index 15ac647023..ebd01db6f9 100644 --- a/docs/extensions/panels.md +++ b/docs/extensions/panels.md @@ -1,5 +1,5 @@ --- -description: A guide on how to build custom Panels in Directus. +description: A guide on how to build custom Panels in d9. readTime: 3 min read --- @@ -13,7 +13,7 @@ readTime: 3 min read The entrypoint of your panel is the `index` file inside the `src/` folder of your extension package. It exports a configuration object with options to configure the behavior of your panel. When loading your panel, this object is -imported by the Directus host. +imported by the d9 host. Example of an entrypoint: @@ -47,7 +47,7 @@ export default { - `id` — The unique key for this panel. It is good practice to scope proprietary panels with an author prefix. - `name` — The human-readable name for this panel. - `icon` — An icon name from the [material icon set](/getting-started/glossary#material-icons), or the extended list of - Directus custom icons. + d9 custom icons. - `description` — A short description (<80 characters) of this panel shown in the App. - `component` — A reference to your panel component. - `options` — The options of your panel. Can be either an options object or a dedicated Vue component. @@ -56,7 +56,7 @@ export default { ## Panel Component -The panel component is the part of your extension that will be rendered by the Directus App whenever your panel should +The panel component is the part of your extension that will be rendered by the d9 App whenever your panel should be used for data visualization in a dashboard within the Insights module. This panel component has to be Vue component. The most straightforward way to write a Vue component is to use the Vue Single File Component syntax. @@ -106,7 +106,7 @@ export default { ::: warning Vue Version -The Directus App uses Vue 3. There might be 3rd party libraries that aren't yet compatible with Vue 3. +The d9 App uses Vue 3. There might be 3rd party libraries that aren't yet compatible with Vue 3. ::: diff --git a/docs/extensions/themes.md b/docs/extensions/themes.md index 4bb9a2e88f..58986363c9 100644 --- a/docs/extensions/themes.md +++ b/docs/extensions/themes.md @@ -1,16 +1,16 @@ --- -description: A guide on how to build custom Themes in Directus. +description: A guide on how to build custom Themes in d9. readTime: 2 min read --- # Themes & Styling -> **Form Follows Function** is the guiding design principle of Directus. The minimal UI allows the platform to be easily +> **Form Follows Function** is the guiding design principle of d9. The minimal UI allows the platform to be easily > tailored to your brand. [Learn more about the App](/app/overview). ## App Themes -The Directus App has been developed with customization and extensibility in mind. Colors and styles referenced within +The d9 App has been developed with customization and extensibility in mind. Colors and styles referenced within the codebase all use CSS variables, and therefore it is easy to make comprehensive changes to the App styling. There are two themes included by default: Light and Dark. You can duplicate these files to create your own themes — with @@ -26,7 +26,7 @@ no limit to customization. Below are several code resources for key SCSS files. ## Project Styling -See [Adjusting Project Settings](/configuration/project-settings) +See [Adjusting Project Settings](/app/project-settings) ## Custom CSS @@ -54,7 +54,7 @@ body { ::: warning Action Styling The `--primary` variable (and its shades) control call-to-actions and all other elements within the App using the -"Directus Purple". While it may be tempting to override this variable with your brand's color, please first review the +"d9 Purple". While it may be tempting to override this variable with your brand's color, please first review the following warnings: - Avoid using yellow, orange, or red hues that give a sense of "danger" diff --git a/docs/getting-started/architecture.md b/docs/getting-started/architecture.md index f4da4afc47..612f10c447 100644 --- a/docs/getting-started/architecture.md +++ b/docs/getting-started/architecture.md @@ -1,31 +1,31 @@ --- -description: A breakdown of the Directus platform architecture. +description: A breakdown of the d9 platform architecture. readTime: 2 min read --- # Architecture -> Directus is a wrapper for both your database and file asset storage system. +> d9 is a wrapper for both your database and file asset storage system. -At first glance, it may be tempting to think of Directus as an app-centric platform. But that's not the case. The app is +At first glance, it may be tempting to think of d9 as an app-centric platform. But that's not the case. The app is just a GUI powered by the API, which allows developers, business users, and data analysts equal access to data and asset storage, all in one place. Here's how the platform architecture breaks down. -![Directus Architecture Graphic]({{CDN_URL}}/docs/v9/getting-started/architecture/architecture-20220512/directus-architecture-20220512A.webp) +![d9 Architecture Graphic](/images/d9-architecture-20220512A.webp) ## The Database -Directus is plug-and-play. Once linked, it doesn't _own_ your data or file assets, but it does create about 20 new data +d9 is plug-and-play. Once linked, it doesn't _own_ your data or file assets, but it does create about 20 new data tables which are required for platform operation. These tables do not intermingle with the rest of your data, so you can -remove Directus without a trace. You also have the freedom to access the database with raw SQL queries, link up any +remove d9 without a trace. You also have the freedom to access the database with raw SQL queries, link up any other service to your database, and access your file assets with CLI commands. ## Database Introspection At the lowest layer, the platform introspects the database and abstracts away specific SQL details. Regardless of SQL -vendor you choose, the platform works seamlessly. Similarly, Directus syncs with your configured file storage service, +vendor you choose, the platform works seamlessly. Similarly, d9 syncs with your configured file storage service, providing control over file assets. ## The Data Engine @@ -36,7 +36,7 @@ user access. ## Access Control -Directus provides secure user access methods. Choose access token format and configure authentication as desired. You +d9 provides secure user access methods. Choose access token format and configure authentication as desired. You can set SSO and allow login through Google, Facebook, etc. ## The API @@ -44,13 +44,13 @@ can set SSO and allow login through Google, Facebook, etc. Finally, a complete set of REST and GraphQL endpoints are generated dynamically, based on your data model as well as your configured roles and associated access permissions. -The Directus JS-SDK is [available via NPM]({{NPM_URL}}). You also have access to two +The d9 JS-SDK is [available via NPM]({{NPM_URL}}). You also have access to two Command-Line Interfaces (CLI). One enables server-side actions relating to your on-prem instance, like migrating the -database or resetting a user. The other allows you to interact with a Directus instance as you would with an SDK. +database or resetting a user. The other allows you to interact with a d9 instance as you would with an SDK. ## The Data Studio -The Directus Data Studio is a no-code dashboard that brings the whole team together. +The d9 Data Studio is a no-code dashboard that brings the whole team together. - Build your data model and manage data, content, users, and file assets. - Create roles and permissions for your users, with granular and conditional logic. @@ -58,15 +58,15 @@ The Directus Data Studio is a no-code dashboard that brings the whole team toget ## Open Source -Directus is 100% open-source, modular, and extensible, ensuring you will never hit a hard feature ceiling within the +d9 is 100% open-source, modular, and extensible, ensuring you will never hit a hard feature ceiling within the platform. Built entirely in crispy clean Typescript, mostly on Node.js and Vue.js, you have the power to add or modify _any feature_ with your own custom extensions. [:star: Star us on GitHub! :star:]({{GITHUB_URL}}) ## Versioning -Directus follows a SemVer-like versioning structure, but it's important to note that it does not follow SemVer -precisely. For complex systems like Directus, SemVer doesn't really scale as any tweak to any part of the codebase could +d9 follows a SemVer-like versioning structure, but it's important to note that it does not follow SemVer +precisely. For complex systems like d9, SemVer doesn't really scale as any tweak to any part of the codebase could be considered a breaking change for a fraction of use cases. We rely on an 80/20 approach to breaking changes: If the change affects the vast majority of users, it's a major breaking change. Otherwise, we accept minor breaking changes as part of the minor release cycle. diff --git a/docs/getting-started/backing-directus.md b/docs/getting-started/backing-directus.md index cdbf7785b3..3ce98cdd7d 100644 --- a/docs/getting-started/backing-directus.md +++ b/docs/getting-started/backing-directus.md @@ -1,70 +1,39 @@ --- -description: What you can do to support Directus. -readTime: 4 min read +description: What you can do to support d9. +readTime: 3 min read --- -# Backing Directus +# Supporting d9 -> Directus is both _premium_ and _free_ — two things that don't often go together. It takes significant resources to -> maintain the platform. If you'd like to help keep development active, please consider supporting Directus through one -> of the methods below. +> d9 is fully open-source and free. It takes significant resources to maintain the platform. If you'd like to help +> keep development active, please consider supporting d9 through one of the methods below. ## Brand Advocacy -**You can create perfect software, but if no one knows about it, it's all for naught. Marketing and advertising are -expensive. You can help us cut these costs with the following quick options.** - - +**You can create perfect software, but if no one knows about it, it's all for naught.** **GitHub Stars**\ As an open-source project, stars are a primary metric by which we measure our success. It only takes a few seconds to head -to the [Directus GitHub Repo]({{GITHUB_URL}}) and click the star. With enough activity in a short -period of time, we get _even more exposure_ on GitHub's trending page! - -**Social Posts**\ -Engage with us on social media. Follow us! A quick post mentioning [@directus]({{TWITTER_URL}}) goes a long -way! _Plus, we re-tweet the team's favorite shout-outs to our 45K+ followers._ +to the [d9 GitHub Repo]({{GITHUB_URL}}) and click the star. **Testimonials**\ -_One sentence._ Even that was a sentence and it was only two words! If you're a fan of Directus, we'd love to hear why with -a short endorsement... More importantly, potential new users _need to hear your testimonial_ to see if the product is right -for them! Shoot us an [email](mailto:{{INFO_EMAIL}}), [Tweet]({{TWITTER_URL}}), or [Discord]({{DISCORD_CHAT_URL}}) -message with your name, title, and company. - -**Reviews**\ -The following popular rating platforms allow you to post your rating and testimonial publicly, which automatically gives -it more exposure. - -- [G2]({{G2_REVIEWS_URL}}) -- [Capterra]({{CAPTERRA_URL}}) -- [TrustRadius]({{TRUSTRADIUS_URL}}) -- [Product Hunt]({{PRODUCTHUNT_URL}}) +If you're a fan of d9, we'd love to hear why with a short endorsement. Shoot us an +[email](mailto:{{INFO_EMAIL}}) with your name, title, and company. ## Community Engagement -**While the Directus Core Team spearheads development, community engagement is an essential part of the Directus -mission. We need your help in order to make Directus all it can be.** - -**GitHub Sponsors**\ -The core team is funded. All monthly donations via [GitHub Sponsors](https://github.com/sponsors/directus) form a budget -to compensate the top community contributors. Donate to sponsor more [community developers](https://github.com/orgs/directus/people) +**While the d9 Core Team spearheads development, community engagement is an essential part of the d9 +mission. We need your help in order to make d9 all it can be.** **Code Pull Requests**\ -Squashing bugs, optimizing the codebase, increasing test coverage, and adding new features, are all extremely valuable. Obviously, -you're making the platform better for yourself as well. _That's a double whammy!_ [Go make your PR on GitHub!]({{GITHUB_DIRECTUS_URL}}) +Squashing bugs, optimizing the codebase, increasing test coverage, and adding new features, are all extremely valuable. +[Go make your PR on GitHub!]({{GITHUB_DIRECTUS_URL}}) Not quite a software engineer yet? We have plenty of documentation that can always use some extra attention. Learn more in our [Contributors Guide](/contributing/introduction). - - **Bug Reporting**\ -If you find an issue in Directus, no matter how small, we'd love to hear about it. Proper bug reporting helps our team improve +If you find an issue in d9, no matter how small, we'd love to hear about it. Proper bug reporting helps our team improve platform stability. [Report a bug on GitHub]({{GITHUB_URL}}/issues/new) **App Translations**\ @@ -72,37 +41,6 @@ Every button, element, or other line of text in the app is [fully translatable]( make our app an international platform. Our [Crowdin integration]({{LOCALES_URL}}) makes polishing existing translations or creating new ones a breeze. -## Financial Support - -**Talented full-time and part-time staff, infrastructure, and third-party services are just some of our organization's -many expenses. Here are a few support avenues that help us keep the lights on.** - -**Premium Support**\ -_Software engineering is hard!_ Let our Core Team help you better manage your Directus project with a dedicated Premium Support -agreement so your devs can focus on your app's core business logic. [Contact the Team]({{WEBSITE_URL}}contact) for more -info. - -**Sponsored Work**\ -[Commissioned Features](/getting-started/support#commissioned-features) and [Expedited Fixes](/getting-started/support#expedited-fixes) -are great ways to financially support the development of Directus and improve the codebase for the community _and for your -project!_ - -**Directus Cloud**\ -Cloud architecture, software updates, and configuration optimizations require fully dedicated effort. Cut through all that -digital red-tape and run your projects on [Directus Cloud](/cloud/overview). You get production-ready projects with zero -vendor lock-in, 90 second average build times, incredibly fair pricing, scaling at the click of a button, automatic updates -with no downtime and a constant stream of new [Cloud Exclusive Extensions](/cloud/glossary#extensions). - -We do everything we can to make hosting on [Directus Cloud](/cloud/overview) a no-brainer. - -:::tip Ready to try out Cloud? - -Test out Directus Cloud now with the [Quickstart Guide](/getting-started/quickstart). - -::: - -:::tip Enterprise Cloud - -Need total customization, unlimited scalability, and dedicated support? [Contact us]({{WEBSITE_URL}}contact) +## Contact -::: +For any question or support request, reach out at [support@webcapsule.io](mailto:{{SUPPORT_EMAIL}}). diff --git a/docs/getting-started/glossary.md b/docs/getting-started/glossary.md index 347852ce82..cbe4064b34 100644 --- a/docs/getting-started/glossary.md +++ b/docs/getting-started/glossary.md @@ -1,5 +1,5 @@ --- -description: A glossary of key Directus terminology. +description: A glossary of key d9 terminology. readTime: 15 min read --- @@ -18,8 +18,8 @@ with the admin option enabled can manage Settings within the app. [Fields](#fields) that do not map directly to an actual database column are called "alias" fields. For example, presentation fields (such as dividers and groups) and certain relational types that display data stored elsewhere (such -as [One-to-Many (O2M)](/configuration/data-model/relationships#one-to-many-o2m) and -[Many-to-Many (M2M)](/configuration/data-model/relationships#many-to-many-m2m)). +as [One-to-Many (O2M)](/app/data-model/relationships#one-to-many-o2m) and +[Many-to-Many (M2M)](/app/data-model/relationships#many-to-many-m2m)). ## API @@ -41,7 +41,7 @@ tracks the event type, user, timestamp, IP address, user-agent, and any associat Collections are containers for specific types of Items and contain any number of fields. Each collection represents a **table** in your database. By default, the [title formatter](#title-formatter) is used to display any existing database table names as human-readable collection titles. There are also "folder" collections that are -[exclusively used for organizational purposes](/configuration/data-model#sorting-grouping), and don't hold any data +[exclusively used for organizational purposes](/app/data-model#sorting-grouping), and don't hold any data themselves. Collections can be organized in any way that is appropriate for your project. You can architect them platform-specific @@ -55,10 +55,10 @@ unique value that is used to reference the Collection's items throughout the dat ### Relevant Guides -- [Creating a Collection](/configuration/data-model#creating-a-collection) -- [Configuring a Collection](/configuration/data-model#configuring-a-collection) -- [Deleting a Collection](/configuration/data-model#deleting-a-collection) -- [Adjusting a Collection Layout](/configuration/data-model#adjusting-a-collection-layout) +- [Creating a Collection](/app/data-model#creating-a-collection) +- [Configuring a Collection](/app/data-model#configuring-a-collection) +- [Deleting a Collection](/app/data-model#deleting-a-collection) +- [Adjusting a Collection Layout](/app/data-model#adjusting-a-collection-layout) ## Dashboards @@ -67,9 +67,9 @@ group data based on department, objective, business process or anything you choo ## Database Abstraction -Directus supports mirroring all the most widely used SQL databases, including PostgreSQL, MySQL, Microsoft SQL Server, +d9 supports mirroring all the most widely used SQL databases, including PostgreSQL, MySQL, Microsoft SQL Server, SQLite, OracleDB, MariaDB, CockroachDB, and other variants. Each vendor has subtle (and sometimes not so subtle) -differences in how they function, so Directus includes an abstraction layer that helps it avoid writing different code +differences in how they function, so d9 includes an abstraction layer that helps it avoid writing different code for each type. This means there is also the possibility of supporting other datastores in the future, such as NoSQL options like @@ -82,7 +82,7 @@ Displays are the smaller, read-only counterpart to [Interfaces](#interfaces), de displayed inline throughout the App. For example, you may have a "Status" field that uses a _Dropdown_ Interface on the Item Detail page, and a smaller -_Badge_ Display when the field is referenced throughout the rest of the App. Directus includes many Displays +_Badge_ Display when the field is referenced throughout the rest of the App. d9 includes many Displays out-of-the-box, below are the some key examples: - **Raw** — The exact value, straight from the API @@ -141,7 +141,7 @@ is an excellent Digital Asset Management system. ### Material Icons -Full list of icons [can be found here](https://fonts.google.com/icons). Directus supports both filled & outlined +Full list of icons [can be found here](https://fonts.google.com/icons). d9 supports both filled & outlined variants of Material icons. ### Social Icons @@ -193,7 +193,7 @@ connect data. For instance, if you have a `recipes` collection and an `ingredien ## Layouts Layouts determine how you view or interact with a Collection. In most cases, they offer a way to browse items based on a -specific type of data, but can also be used to visualize or interact with data. Directus includes several Layout options +specific type of data, but can also be used to visualize or interact with data. d9 includes several Layout options out-of-the-box, each with different features and configuration options. - **Table** — Works with any type of data, showing items as rows and their fields as columns. @@ -238,7 +238,7 @@ Multitenancy is an architecture that allows multiple tenants (e.g., customers) t two main ways to achieve multitenancy: - **Project Scoping** — Creating a super-admin layer that provisions new tenant projects has been made easier by the - Cloud-native model of Directus 9+. This method involves developing custom code that can dynamically spin up/down + Cloud-native model of d9. This method involves developing custom code that can dynamically spin up/down projects, but is also the most flexible, supporting scoped extensions and differentiated project settings. - **Role Scoping** — In this method, you create one Role per tenant, and configure their permissions to properly scope them within a single project. This direction allows for tenants to share a single schema using _item_ scoped @@ -279,11 +279,11 @@ often called `id`. ## Projects A Project is a complete instance of the platform. Each project represents a **Database**, but also encapsulates a config -file, asset storage, and any custom extensions. Projects are the highest level of organization in Directus. +file, asset storage, and any custom extensions. Projects are the highest level of organization in d9. - [Creating a Project](/self-hosted/quickstart) - [Configuring a Project](/self-hosted/config-options) -- [Adjusting Project Settings](/configuration/project-settings) +- [Adjusting Project Settings](/app/project-settings) - [Upgrading a Project](/self-hosted/upgrades-migrations) - [Backing-up a Project](/self-hosted/upgrades-migrations#backing-up-a-project) - [Migrating a Project](/self-hosted/upgrades-migrations#migrating-a-project) @@ -294,12 +294,12 @@ file, asset storage, and any custom extensions. Projects are the highest level o The platform allows you to group Items within different Collections. But often times it is important to "link" items across different collections (such as relating `recipes` and `ingredients`) — this is called a relationship, a crucial concept within any _relational_ database. There are several different types of relationships, each serving a specific -purpose. [Learn more about Relationships](/configuration/data-model/relationships). +purpose. [Learn more about Relationships](/app/data-model/relationships). ## Revisions Revisions are created whenever an Item is updated. These alternate versions are tracked so that previous states can be -recovered. Every change made to items in Directus is stored as a complete versioned snapshot and a set of specific +recovered. Every change made to items in d9 is stored as a complete versioned snapshot and a set of specific changes made (the delta). The revisions system is tightly coupled to the activity logs system, with each revision linked to the activity event where it was created. @@ -308,7 +308,7 @@ to the activity event where it was created. Roles define a specific set of access permissions, and are the primary organizational structure for Users within the platform. You can create an unlimited number of roles, so organize your users in whatever way feels most appropriate. -During the installation process, Directus automatically creates an "Administrators" Role, which is used to provide the +During the installation process, d9 automatically creates an "Administrators" Role, which is used to provide the initial admin user with full platform access. However this is just a _normal_ role, and so it can still be updated, renamed, or even deleted. Keep in mind that your project must maintain at least one role with Admin Access at all times. @@ -316,22 +316,22 @@ There is also a "Public" role that determines access for unauthenticated access. ### Relevant Guides -- [Creating a Role](/configuration/users-roles-permissions#creating-a-role) -- [Configuring a Role](/configuration/users-roles-permissions#configure-a-role) -- [Configuring Role Permissions](/configuration/users-roles-permissions#configure-permissions) -- [Configuring System Permissions](/configuration/users-roles-permissions#configure-system-permissions) -- [Deleting a Role](/configuration/users-roles-permissions#deleting-a-role) +- [Creating a Role](/app/users-roles-permissions#creating-a-role) +- [Configuring a Role](/app/users-roles-permissions#configure-a-role) +- [Configuring Role Permissions](/app/users-roles-permissions#configure-permissions) +- [Configuring System Permissions](/app/users-roles-permissions#configure-system-permissions) +- [Deleting a Role](/app/users-roles-permissions#deleting-a-role) ## Singleton -- **Directus** - A collection that only contains one single item +- **d9** - A collection that only contains one single item - [**Design pattern**](https://www.patterns.dev/posts/singleton-pattern/) - Classes which can be instantiated once and can be accessed globally. This single instance can be shared throughout our application, which makes singletons great for managing global state in an application. ## Storage Adapters -Storage adapters allow project files to be stored in different locations or services. By default, Directus includes the +Storage adapters allow project files to be stored in different locations or services. By default, d9 includes the following drivers: - **Local Filesystem** — The default, any file system location or network-attached storage @@ -367,9 +367,9 @@ cause data loss, so types are locked within the platform after a field is create ### Data Type Superset -Directus uses its built-in database abstraction to properly support all the different SQL vendors. However, these +d9 uses its built-in database abstraction to properly support all the different SQL vendors. However, these vendors do not share support for the same data types, instead, each SQL vendor maintains their own list. To standardize -all of these differences, Directus has a single _superset_ of types that map to the vendor-specific ones. +all of these differences, d9 has a single _superset_ of types that map to the vendor-specific ones. - **String** — A shorter set of characters with a configurable max length - **Text** — A longer set of characters with no real-world max length diff --git a/docs/getting-started/introduction.md b/docs/getting-started/introduction.md index 51ff01d826..ea4c7487f8 100644 --- a/docs/getting-started/introduction.md +++ b/docs/getting-started/introduction.md @@ -1,54 +1,58 @@ --- -description: An introduction to what Directus is, how it works, who it is for, and when to use it. +description: An introduction to what d9 is, how it works, who it is for, and when to use it. readTime: 8 min read --- # Introduction -> These Docs will help you get Directus up-and-running quickly, guide you through advanced features, and explain the -> core concepts that make Directus so unique. +> These Docs will help you get d9 up-and-running quickly, guide you through advanced features, and explain the +> core concepts that make d9 so unique. -## What is Directus? +## About d9 -::: tip Directus +**d9** is an open-source fork of Directus 9 (GPLv3), maintained independently by [La Webcapsule](https://github.com/LaWebcapsule). While Directus 10+ moved to a premium licensing model, d9 preserves a fully open-source data platform with a focus on **performance** and **European regulatory compliance**. -Directus ([duh REKT iss](http://audio.pronouncekiwi.com/Salli/Directus)) is Latin for: _laid straight, arranged in -lines_.\ -The broadest goal of our platform is to present data in a simple, orderly, and intuitive way. +d9 is not affiliated with the Directus core team. It is a community-driven project that ensures long-term open-source availability of the Directus 9 codebase. + +::: info Etymology + +The name "d9" comes from **D**irectus **9**. The word _Directus_ ([duh REKT iss](http://audio.pronouncekiwi.com/Salli/Directus)) is Latin for: _laid straight, arranged in lines_. The broadest goal of our platform is to present data in a simple, orderly, and intuitive way. ::: +## What is d9? + -**Directus is an Open Data Platform built to democratize the database.**\ +**d9 is an Open Data Platform built to democratize the database.**\ This platform provides everyone on your team, _regardless of technical skill_, equal access to data and digital file asset -management, for any data model or project. First, link Directus to your desired SQL database and file storage adapter. After -that, Directus enables you to perform CRUD operations, create users, assign roles with fully configurable permissions, build +management, for any data model or project. First, link d9 to your desired SQL database and file storage adapter. After +that, d9 enables you to perform CRUD operations, create users, assign roles with fully configurable permissions, build complex and granular queries, configure event-driven webhooks and task automation... _the list goes on!_ **Database Introspection & Abstraction**\ -SQL flavors all come with slightly different data types and idiosyncrasies. Directus uses [Database Introspection](#how-it-works) +SQL flavors all come with slightly different data types and idiosyncrasies. d9 uses [Database Introspection](#how-it-works) to read your database structure and create an abstraction layer to handle all the nitty-gritty details behind the scenes. -This technique works seamlessly with any major SQL database. It also lets you link Directus to your new or pre-existing database +This technique works seamlessly with any major SQL database. It also lets you link d9 to your new or pre-existing database or remove it anytime, with no impact on your existing data model. That means you'll never encounter vendor lock-in. **The App and APIs**\ -Once your database is introspected and abstracted, Directus dynamically generates REST and GraphQL API endpoints to manage +Once your database is introspected and abstracted, d9 dynamically generates REST and GraphQL API endpoints to manage your data with granular control. You also get CLI tools for file management and a complete JavaScript SDK. The API and CLI power the no-code App. In other words, the App is just a GUI that provides no-code access to the API. -This architecture is how Directus democratizes the database and provides control to [the whole team](#who-s-it-for). +This architecture is how d9 democratizes the database and provides control to [the whole team](#who-s-it-for). **Open-Source, Modular, Extensible, Scalable**\ -At the highest level, Directus organizes its features and functionality into Modules. Each Module allows you to interact +At the highest level, d9 organizes its features and functionality into Modules. Each Module allows you to interact with data in some specific way, such as data and content management, digital file asset management, drag and drop analytics -dashboard creation, or whatever. If you find Directus is missing something that your project needs, no problem! +dashboard creation, or whatever. If you find d9 is missing something that your project needs, no problem! -Built entirely in Typescript, primarily on [Node.js](https://nodejs.dev) and [Vue.js](https://vuejs.org), Directus is +Built entirely in Typescript, primarily on [Node.js](https://nodejs.dev) and [Vue.js](https://vuejs.org), d9 is 100% open-source, modular and extensible, ensuring your project never hits a hard feature ceiling. The platform scales without issue, _and some Projects have hundreds of millions of users._ @@ -61,13 +65,13 @@ _and much more._ :::tip Ready to dive in? -Get a project running in minutes. Learn Directus hands-on in the [Quickstart Guide](/getting-started/quickstart). +Get a project running in minutes. Learn d9 hands-on in the [Quickstart Guide](/getting-started/quickstart). ::: ## How It Works -**Directus is installed as a _layer_ on top of your new or existing SQL database.** +**d9 is installed as a _layer_ on top of your new or existing SQL database.** The App and API dynamically _"mirror"_ your actual schema and content in real-time. This is similar to how technical database clients (like _phpMyAdmin_) work. However, Database Introspection has many unique advantages: @@ -79,8 +83,8 @@ database clients (like _phpMyAdmin_) work. However, Database Introspection has m - Significant performance improvements through optimizations and indexing. In contrast, other platforms typically use a predefined or proprietary _one-size-fits-all_ data model to store content . -That is not the case with Directus. Directus gives you direct access to your pure and unaltered data. That means you -have the option to bypass the Directus middleware (API, SDK, App) and connect to your data with proper SQL queries. This +That is not the case with d9. d9 gives you direct access to your pure and unaltered data. That means you +have the option to bypass the d9 middleware (API, SDK, App) and connect to your data with proper SQL queries. This effectively removes all bottlenecks, latency overhead, and proprietary access limitations. ::: ## Why Use It? -**Directus is a simple, data-first solution to complex problems with no downsides.** +**d9 is a simple, data-first solution to complex problems with no downsides.** -Directus was created in 2004 and has been slowly, iteratively improved on for a long time. The core team has carefully +d9 was created in 2004 and has been slowly, iteratively improved on for a long time. The core team has carefully thought through the app, beginning to end, and strives to make this platform is an all-benefit and no downside experience. It is also plug-and-play, so you're free to link or remove it anytime, with zero impact on your data. You have no vendor lock-in whatsoever, _your data is yours_. There are no artificial data limits _(e.g. limits on users or @@ -178,40 +182,27 @@ roles)_. Consider competing platforms in the four general use cases [mentioned above](#when-to-use-it). Due diligence to select a viable solution from one of these categories can easily take six months to ensure the feature list, pricing, -scalability, migration options, etc.. all match the project in question. However, with Directus, that's not the case! +scalability, migration options, etc.. all match the project in question. However, with d9, that's not the case! You can test it immediately on an existing database or build a new data model from scratch, _with no impact on your data and no long-term commitments._ The following core principles guide this platform: - **Pure** — No predefined or proprietary schema. All system metadata is stored separately. -- **Open** — Directus Core is open source, with no obfuscated or cloud-only code. +- **Open** — d9 Core is open source, with no obfuscated or cloud-only code. - **Portable** — No vendor lock-in. Your database can be exported or migrated anytime. - **Limitless** — No arbitrary limits or paywalls on users, roles, translations, and data. - **Extensible** — Every aspect of this platform is modular to avoid any hard feature ceiling. - **Unopinionated** — Choose the stack, database, and architecture as you wish. -## Directus Cloud - -**Directus Cloud is the fastest and easiest way to get your Directus Projects going.** +## Self-Hosted -Cloud architecture can be complicated and resource-intensive. Directus Cloud provides scalable, optimized storage and -infrastructure, and automatic updates so developers can focus on the app's core business logic. Directus Cloud also -offers [Cloud Exclusive Extensions](/cloud/glossary#cloud-exclusives), enhancing Directus Core with even more features. +**d9 is designed to be self-hosted on your own infrastructure.** -With your free Directus Cloud account, you can set up Teams to organize Projects, Project billing, and other Team -Members however you need. You'll be able to get a Project running in about 90 seconds. Then as Project growth changes -over time, scale service up or down as needed at the click of a button. The cloud dashboard also provides simple, -straightforward analytics to help understand traffic and inform scaling decisions. - -:::tip Ready to try Directus Cloud? - -Set up your free Cloud account and learn Directus hands-on in the [Quickstart Guide](/getting-started/quickstart). - -::: +You have full control over your data, your deployment, and your infrastructure. Run d9 with Docker, on bare metal, or on any cloud provider of your choice. -:::tip Enterprise Cloud +:::tip Ready to get started? -Need advanced configuration, unlimited scalability, and dedicated support? [Contact us]({{WEBSITE_URL}}contact) +Deploy your own d9 instance in minutes with the [Quickstart Guide](/getting-started/quickstart) or the [Docker Guide](/self-hosted/docker-guide). ::: diff --git a/docs/getting-started/quickstart.md b/docs/getting-started/quickstart.md index 0d865b5800..a396e6d5e3 100644 --- a/docs/getting-started/quickstart.md +++ b/docs/getting-started/quickstart.md @@ -1,74 +1,48 @@ --- description: - Get up and running with Directus Cloud in minutes. Learn the basics of building your data model and managing + Get up and running with d9 in minutes. Learn the basics of building your data model and managing permissions. readTime: 7 min read --- # Quickstart Guide -> This quickstart guide is designed to get you up and running with a Directus Cloud Project in a snap. Along the way, -> you will better understand what Directus is, setup your free Directus Cloud Account, get a _hands-on introduction_ to -> the App and API, and find more resources to deep-dive into. +> This quickstart guide is designed to get you up and running with a d9 Project in a snap. Along the way, +> you will better understand what d9 is, get a _hands-on introduction_ to the App and API, and find more +> resources to deep-dive into. -## 1. Create Cloud Account and Login +## 1. Install & Start d9 -First, you'll need to [create an Account and log in](/cloud/accounts#create-account-and-login) on -[Directus Cloud]({{CLOUD_URL}}/login) +The fastest way to get started is with Docker: -Your Directus Cloud Account allows you to create and manage any number of Projects. We've made life easier by giving you -the option to create and log in to your free Cloud Account automatically with GitHub. If you don't have a GitHub account -or prefer not to use this login method, email-and-password login is available as well. - -The very first time you log in to your cloud account, you will be prompted to create a Team. Teams are totally free to -create. Each Directus Cloud Project exists within the scope of one Team. They allow you to organize Team Members, -Projects and Project Billing as desired. - -Once your Team is created, it's time to create your Directus Cloud Project! - -:::tip Learn More About Cloud - -- [Overview](/cloud/overview) -- [Cloud Accounts](/cloud/accounts) -- [Cloud Teams](/cloud/teams) - -::: - -## 2. Create and Access Project - -To create a Project, follow the steps below: - -1. Open the Team Menu in the Dashboard Header and select or [create](/cloud/teams#create-a-team) the desired Team. -2. Navigate to **"Projects"** and click **"Create Project"**. -3. Set the Project Name and tier. -4. Scroll to the bottom of the screen and choose the **"Empty Project"** Starting Template.\ - Note: The **"Demo Project"** adds in dummy data for in-depth feature demonstrations. -5. Click **"Create Project"**. - -_It should take around 90 seconds for the Cloud Project to build out. During this time, a link will be sent to the email -associated with your Cloud Account. The email will contain your Project URL as well as an email and password to login. -If you used GitHub to create your account, this will be your GitHub email. Once the build is complete, it's time log -in!_ - -7. You can [access a Project](/cloud/projects#access-a-project) from within the Cloud Dashboard or type the URL into - your browser. -8. Log in with your username and password from the email. +```bash +docker run -d \ + -p 8055:8055 \ + -e KEY=some-random-key \ + -e SECRET=another-random-key \ + -e ADMIN_EMAIL=admin@example.com \ + -e ADMIN_PASSWORD=your-password \ + -e DB_CLIENT=sqlite3 \ + -e DB_FILENAME=/directus/database/data.db \ + ghcr.io/lawebcapsule/directus9:latest +``` -:::tip Check All Inbox Folders +Or with npm: -Due to the algorithms used by some email providers, it is possible the email containing your Project login information -will end up in another folder like "Social" or "Promotions". +```bash +npm init @wbce-d9/directus-project@latest +``` -::: +Once running, open `http://localhost:8055` in your browser and log in with the admin credentials you set above. -:::tip Learn More About Cloud Projects +:::tip Learn More About Self-Hosting -- [Overview](/cloud/overview) -- [Cloud Projects](/cloud/projects) +- [Docker Guide](/self-hosted/docker-guide) +- [Config Options](/self-hosted/config-options) ::: -## 3. Create a Collection +## 2. Create a Collection Once logged in, you're greeted with the option to create your first [Collection](/getting-started/glossary#collections). @@ -84,28 +58,28 @@ Once logged in, you're greeted with the option to create your first [Collection] :::tip Learn More About Collections - [The Content Module](/app/content) -- [Create and Manage a Collection](/configuration/data-model/collections.md) -- [Build Relationships Between Collections](/configuration/data-model/relationships) +- Create and Manage a Collection +- [Build Relationships Between Collections](/app/data-model/relationships) ::: -## 4. Create a Field +## 3. Create a Field With your first Collection created, it's time to start adding some [Fields](/getting-started/glossary#fields). 1. Navigate to **Settings Module > Data Model > `Collection-Name`**. 2. Click the **"Create Field"** button and select the **"Input"** Field type. 3. Fill in a Field name under **Key**. We'll be calling our Field `title`.\ - Directus offers powerful Field customization options, but let's stick to the defaults for now. + d9 offers powerful Field customization options, but let's stick to the defaults for now. 4. Select **"Save"**. ::: tip Learn More About Fields -- [Create and Manage Fields in the App](/configuration/data-model) +- [Create and Manage Fields in the App](/app/data-model) ::: -## 5. Create an Item +## 4. Create an Item Now that we have a Collection with a Field configured, it's time to add an [Item](/getting-started/glossary#). @@ -121,15 +95,15 @@ Now that we have a Collection with a Field configured, it's time to add an [Item ::: -## 6. Set Roles & Permissions +## 5. Set Roles & Permissions -Directus comes with two built-in roles: Public and Admin. The Public Role determines what data is returned to +d9 comes with two built-in roles: Public and Admin. The Public Role determines what data is returned to non-authenticated users. Public comes with all permissions turned off and can be reconfigured with fully granular control to expose exactly what you want unauthenticated Users to see. The Admin role has full permissions and this cannot be changed. Aside from these built-in Roles, any number of new Roles can be created, all with fully customized, granular permissions. -By Default, content entered into Directus will be considered private. So permissions always start off set to the default +By Default, content entered into d9 will be considered private. So permissions always start off set to the default of block **No Access**, with full ability to reconfigure as desired. So, in order to have the API return our Items, let's add some read permissions. For simplicity's sake, we'll do this on the Public Role, instead of creating a new Role. @@ -141,17 +115,17 @@ of creating a new Role. ::: tip Learn More About Roles & Permissions -- [Users, Roles and Permissions](/configuration/users-roles-permissions). +- [Users, Roles and Permissions](/app/users-roles-permissions). ::: -## 7. Connect to the API +## 6. Connect to the API Now that your Project has some content in it which is exposed to the Public, it's time to start using this content externally! Data can be accessed in a number of ways, including the REST and GraphQL API endpoints. In this case, we'll use the `/items/` [REST API endpoint](/reference/items) to retrieve the Item we just created. -1. Open `http://your-project-url.directus.app/items/articles`.\ +1. Open `http://localhost:8055/items/articles`.\ You can use the browser or an API tool like [Postman](http://postman.com) or [Paw](https://paw.cloud) _And there it is! The Article Item you just created is being served in beautiful JSON, ready to be used anywhere and diff --git a/docs/getting-started/resources.md b/docs/getting-started/resources.md index 8f433850a2..5a0fbd0588 100644 --- a/docs/getting-started/resources.md +++ b/docs/getting-started/resources.md @@ -1,31 +1,24 @@ --- -description: Additional resources to the Directus community. +description: Additional resources for the d9 community. readTime: 1 min read --- # Resources -## Cloud - -- **[Directus Cloud]({{CLOUD_URL}})** — The best way to get your Project up and running. -- **[Enterprise Cloud]({{WEBSITE_URL}}contact)** — Custom-tailored solutions for industrial scale projects. -- **[Cloud Documentation](/cloud/overview)** — Docs for Directus cloud. -- **[System Status](https://status.directus.cloud)** — Up-to-date information on our various cloud systems. - ## Developer Resources - **[GitHub]({{GITHUB_URL}})** — The open-source repository and version control. -- **[NPM Package]({{NPM_URL}})** — The official Directus node package. -- **[Docker Image]({{DOCKER_HUB_URL}})** — The official Directus docker image. -- **[Documentation]({{DOCS_URL}})** — Docs for the most recent version of Directus. +- **[NPM Package]({{NPM_URL}})** — The official d9 node package. +- **[Docker Image]({{DOCKER_HUB_URL}})** — The official d9 docker image. +- **[Documentation]({{DOCS_URL}})** — Docs for the most recent version of d9. - **[Crowdin]({{LOCALES_URL}})** — Service for managing the App's many language translations. ## Community -- **[YouTube]({{YOUTUBE_URL}})** — Checkout our channel with video tutorials and feature - overviews. -- **[Discord]({{DISCORD_CHAT_URL}})** — A growing community of 4K+ developers. -- **[Twitter]({{TWITTER_URL}})** — The latest product info and sneak-peeks. +- **[GitHub Discussions]({{GITHUB_COMMUNITY_URL}})** — Ask questions, share ideas, and get help from the community. +- **[GitHub Issues]({{GITHUB_URL}}/issues)** — Report bugs or request features. - **[Website]({{WEBSITE_URL}})** — General information, resources, and team info. -- **[Awesome List]({{AWESOME_URL}})** — A list of awesome things related - Directus. + +## Contact + +For any question or support request, reach out at [support@webcapsule.io](mailto:{{SUPPORT_EMAIL}}). diff --git a/docs/getting-started/support.md b/docs/getting-started/support.md index 40a67cc013..e22259bce0 100644 --- a/docs/getting-started/support.md +++ b/docs/getting-started/support.md @@ -1,19 +1,19 @@ --- -description: How to get support for your Directus project. -readTime: 4 min read +description: How to get support for your d9 project. +readTime: 3 min read --- # Help & Support -> If you have questions while working with Directus, there are many resources to help you get up-and-running smoothly. +> If you have questions while working with d9, there are many resources to help you get up-and-running smoothly. ## Troubleshooting Steps -If you're experiencing issues or think you have found a problem in Directus, be sure to follow these steps before +If you're experiencing issues or think you have found a problem in d9, be sure to follow these steps before [Reporting a Bug](/contributing/introduction#bug-reporting): 1. Ensure your server and database meet the [minimum requirements](/self-hosted/docker-guide.html#supported-databases). -2. Ensure you’re on the [latest version]({{GITHUB_URL}}/releases/latest) of Directus. +2. Ensure you're on the [latest version]({{GITHUB_URL}}/releases/latest) of d9. 3. Stop `CTRL+C` and restart the server `npx directus start`. 4. Run the database migration script: `directus database migrate:latest`\ _Note: backup your database first._ @@ -23,78 +23,46 @@ If you're experiencing issues or think you have found a problem in Directus, be 8. Check for [existing Issues]({{GITHUB_URL}}/issues?q=is%3Aissue) (and [Discussions]({{GITHUB_URL}}/discussions)) that match your problem. -If you're still experiencing a problem after completing the above steps, you can chat through things on our +If you're still experiencing a problem after completing the above steps, you can reach out via [community support](#community-support) or [report a bug](/contributing/introduction#bug-reporting). -## Support Tiers - -### Community Support +## Community Support [GitHub Discussions]({{GITHUB_URL}}/discussions) is a great first place to reach out for help. Our community and core developers often check this platform and answer posts. It has the added benefit of being an archival resource for others developers with similar questions. -Our [Discord Community]({{DISCORD_CHAT_URL}}) is another great way to get assistance. Please keep all questions in the -help channels, be considerate, and remember that you are getting free help from the community. - :::warning No Guaranteed Response Time -While the Directus Core Team plays an active and engaged role in community discussions, there is no guaranteed response +While the d9 Core Team plays an active and engaged role in community discussions, there is no guaranteed response time for Community Support. ::: -### Basic and Premium Support - -Basic and Premium Support offer direct communication with the Directus Core Team. Basic support is included on all -Enterprise Projects, and Premium Support adds 24/7 response times for critical software issues only. - -Cloud customers and Self-Hosted users interested in learning more about our monthly retainer agreements should contact -us at [{{SUPPORT_EMAIL}}](mailto:{{SUPPORT_EMAIL}}). - -## Sponsored Work +## Direct Support -### Commissioned Features - -If you need a specific feature added to Directus faster than the normal development timeline, -[reach out to us]({{WEBSITE_URL}}contact) for a quote. Our parent agency will often help subsidize the cost of -developing new features if they pass our [80/20 Rule](/contributing/introduction#feature-requests) and can be merged -into the core codebase. Other custom/proprietary development will be built bespoke within our robust extension system. - -### Expedited Fixes - -We triage all reported bugs based on priority and how long the fix is estimated to take. If you need a specific issue -resolved sooner, [reach out to us]({{WEBSITE_URL}}contact) for a quote. +For any question or support request, reach out at [support@webcapsule.io](mailto:{{SUPPORT_EMAIL}}). ## Frequently Asked Questions -### Does Directus support Mongo/NoSQL? +### Does d9 support Mongo/NoSQL? -Not currently. Directus has been built specifically for wrapping _relational_ databases. While we could force Mongo to +Not currently. d9 has been built specifically for wrapping _relational_ databases. While we could force Mongo to use tables, columns, and rows via Mongoose object modeling, that approach of "faking" a relational structure in a non-structured environment like Mongo doesn't make a lot of sense. We do realize many users are interested in this feature, and will continue to explore its possibility. ### Why haven't you added this feature, or fixed that issue yet? -Directus is an open-source project, maintained by a small core team and community contributors who have limited time and +d9 is an open-source project, maintained by a small core team and community contributors who have limited time and resources. Our platform is feature-rich, however we strictly adhere to our -[80/20 Rule](/contributing/introduction#feature-requests) to avoid a messy/bloated codebase. Directus is also quite +[80/20 Rule](/contributing/introduction#feature-requests) to avoid a messy/bloated codebase. d9 is also quite stable, however new issues still arise, some of which may be triaged with a lower prioritization. -If you need, you can contact us about [sponsoring expedited fixes](#expedited-fixes) or -[commissioning new features](#commissioned-features). You can also -[submit a pull request]({{GITHUB_URL}}/pulls) — after all, it is open-source! +You can also [submit a pull request]({{GITHUB_URL}}/pulls) — after all, it is open-source! ### Can you give an ETA for this feature/fix? -If it is sponsored work, then yes, delivery dates are part of our statement of work agreements. Otherwise, most likely -not. This is open-source software, work is prioritized internally, and all timelines are subject to change. - -### But this is an emergency, my very important project requires it now! - -We understand, and are here to help. If you need something prioritized, you can reach out to us to discuss -[premium support](#basic-and-premium-support), [sponsoring expedited fixes](#expedited-fixes) or -[commissioning new features](#commissioned-features). +Most likely not. This is open-source software, work is prioritized internally, and all timelines are subject to change. diff --git a/docs/guides/flows/flows-for-loop.md b/docs/guides/flows/flows-for-loop.md index 37b6d81161..b8259e70cc 100644 --- a/docs/guides/flows/flows-for-loop.md +++ b/docs/guides/flows/flows-for-loop.md @@ -17,7 +17,7 @@ author: Eron Powell -**Directus Version:** {{$frontmatter.directus_version}} +**d9 Version:** {{$frontmatter.directus_version}} @@ -35,14 +35,14 @@ have noticed that each operation in a flow executes just one time. Because of th the operations of a single flow. However, to achieve a "for-loop", you can instead use the -[trigger flow](/configuration/flows/operations.md#trigger-flow) operation to pass the data into an -[another flow](/configuration/flows/triggers.md#another-flow) trigger. When this type of trigger receives an array as a +trigger flow operation to pass the data into an +another flow trigger. When this type of trigger receives an array as a Payload, the flow runs for each item in the array individually. :::tip Remember: for some use-cases, you can also iterate through data in a -[Run Script](/configuration/flows/operations.md#run-script) operation. +Run Script operation. ::: @@ -64,8 +64,8 @@ VIDEO IS OPTIONAL: delete if not needed ### Configure the Starting Flow -1. Configure a [flow](/configuration/flows.md#configure-a-flow) a - [trigger flow](/configuration/flows/operations.md#trigger-flow) operation. +1. Configure a flow a + trigger flow operation. 2. Under **Payload**, be sure to add the desired array. 3. Save and exit the flow. @@ -73,9 +73,9 @@ VIDEO IS OPTIONAL: delete if not needed Once your starting flow is configured as desired, follow these steps. -1. [Create a flow](/configuration/flows.md#create-a-flow) using the - [another flow](/configuration/flows/triggers.md#another-flow) trigger. -2. [Configure operations](/configuration/flows.md#configure-an-operation) as desired. +1. Create a flow using the + another flow trigger. +2. Configure operations as desired. ## Final Tips @@ -84,9 +84,9 @@ Once your for-loop is configured, you can process the data several ways. First, you could simple let the "for-loop" flow process each element in the **Payload**. Second, you could also configure a **Response Body** in the trigger of your "for-loop" flow. The **Response Body** gets -appended under the [trigger flow](/configuration/flows/operations.md#trigger-flow) operation in the starting flow. +appended under the trigger flow operation in the starting flow. -Third, you could add another [trigger flow](/configuration/flows/operations.md#trigger-flow) operation into the +Third, you could add another trigger flow operation into the "for-loop" flow, to create complex flow chains. If you do this, just keep API performance in mind. If you configure a **Response Body**, the parent flow will halt execution until it receives **Response Body**. diff --git a/docs/guides/flows/generate-work-reports.md b/docs/guides/flows/generate-work-reports.md index e9b32f47fb..0a55b987c3 100644 --- a/docs/guides/flows/generate-work-reports.md +++ b/docs/guides/flows/generate-work-reports.md @@ -1,5 +1,5 @@ --- -description: This recipe outlines a method to generate reports using Directus Flows. +description: This recipe outlines a method to generate reports using d9 Flows. tags: [] skill_level: directus_version: 9.18.1 @@ -8,7 +8,7 @@ author: Eron Powell --- # Generate Work Reports @@ -19,7 +19,7 @@ Pairs well with [workflows](/cookbook/permissions/workflows.md) -**Directus Version:** {{$frontmatter.directus_version}} +**d9 Version:** {{$frontmatter.directus_version}} diff --git a/docs/guides/flows/slugify-text-with-run-script.md b/docs/guides/flows/slugify-text-with-run-script.md index a551c55d07..81a74f91c1 100644 --- a/docs/guides/flows/slugify-text-with-run-script.md +++ b/docs/guides/flows/slugify-text-with-run-script.md @@ -15,7 +15,7 @@ author: Eron Powell -**Directus Version:** {{$frontmatter.directus_version}} +**d9 Version:** {{$frontmatter.directus_version}} @@ -31,11 +31,11 @@ English text. :::tip Requirements -You'll need a string somewhere in your [data chain](/configuration/flows.md#data-chains). +You'll need a string somewhere in your data chain. ::: -1. Create a [Run Script](/configuration/flows/operations.md#run-script) operation in your flow. +1. Create a Run Script operation in your flow. 2. Paste the following function into your Run Script operation. ```js diff --git a/docs/guides/headless-cms/approval-workflows.md b/docs/guides/headless-cms/approval-workflows.md index c70e9da655..3da6db3ade 100644 --- a/docs/guides/headless-cms/approval-workflows.md +++ b/docs/guides/headless-cms/approval-workflows.md @@ -17,7 +17,7 @@ author: Eron Powell -**Directus Version:** {{$frontmatter.directus_version}} +**d9 Version:** {{$frontmatter.directus_version}} @@ -25,11 +25,11 @@ author: Eron Powell ## Explanation -Remember, your basic [CRUDS permissions](/configuration/users-roles-permissions/permissions.md#configure-permissions) +Remember, your basic CRUDS permissions define what a role can and can't do to all items in a collection. -[Custom access permissions](/configuration/users-roles-permissions/permissions.md#configure-custom-permissions) take +Custom access permissions take things a step further and let you define what a role can and can't do to each item in a collection, _based on its -[field values](/configuration/data-model/fields.md)_. +field values_. Workflows are when you use these permissions techniques to create structured stages to content or data creation. In simplest terms, it is when you have two or more roles, and you give them different permissions at each stage in the @@ -38,7 +38,7 @@ content creation process. There are an infinite number of possible workflows you could configure. But for this recipe, we will configure a simple workflow where `writers` and `editors` work together to create, co-edit and publish `articles`. -![A Workflow]({{CDN_URL}}/docs/v9/configuration/users-roles-permissions/workflows-20220909/workflows-20220909B.webp) +![A Workflow](/images/workflows-20220909A.webp) For this recipe, our workflow will have three stages, `draft`, `under review`, and `published`, which will be defined in a `status` field. @@ -53,7 +53,7 @@ a `status` field. This whole workflow is created with permissions. All we need to do to create these stages is change the `author` and `editor` permissions for each item in `articles` conditionally, based on the value of `status`. -![A Workflow]({{CDN_URL}}/docs/v9/configuration/users-roles-permissions/workflows-20220909/workflows-20220909A.webp) +![A Workflow](/images/workflows-20220909A.webp) ## How-To Guide @@ -61,8 +61,8 @@ This whole workflow is created with permissions. All we need to do to create the To implement a workflow, you'll need: -- An understanding of [permissions](/configuration/users-roles-permissions.md) and [filters](/reference/filter-rules.md) - in Directus. +- An understanding of permissions and filters + in d9. - A collection with some kind of content. In this recipe, we'll use a collection called `articles`. - A field on that collection to validate conditionally. We'll use a `status` field. - Two _(or more)_ roles that will work to author content. We'll use `writer` and `editor` roles. @@ -75,13 +75,13 @@ To implement a workflow, you'll need: To create a structured workflow for `articles`, follow these steps. -1. First, [create a field](/configuration/data-model/fields.md#create-a-field-standard) to track the article status. +1. First, create a field to track the article status. We'll call this field `status`, but it could be named anything. -2. [Create a field](/configuration/data-model/fields.md#create-a-field-advanced) with a Dropdown Interface. Name it +2. Create a field with a Dropdown Interface. Name it `status` and add the stages _(`draft`, `under review` and `published`)_ needed for your content creation process. -3. Next, [create two roles](/configuration/users-roles-permissions/roles.md#create-a-role): `author` and `editor`. +3. Next, create two roles: `author` and `editor`. 4. Finally, configure - [custom access permissions](/configuration/users-roles-permissions/permissions.md#configure-custom-permissions) for + custom access permissions for each role based on the value of the `status` field. - For the `author` role: - Set a filter under **Create > Use Custom > Field Validation** to ensure the author can only create articles with @@ -135,7 +135,7 @@ explicit set of permissions each role has at each stage. :::tip Next Steps -Workflows can be further enhanced with custom [Interfaces](/extensions/interfaces.md) as well as -[flows](/configuration/flows.md). +Workflows can be further enhanced with custom Interfaces as well as +flows. ::: diff --git a/docs/guides/headless-cms/build-static-website/next-13.md b/docs/guides/headless-cms/build-static-website/next-13.md index 28aeb8bcb2..599940a443 100644 --- a/docs/guides/headless-cms/build-static-website/next-13.md +++ b/docs/guides/headless-cms/build-static-website/next-13.md @@ -1,5 +1,5 @@ --- -description: This guide shows you how build a website with Next 13 and Directus as a Headless CMS. +description: This guide shows you how build a website with Next 13 and d9 as a Headless CMS. tags: [] skill_level: directus_version: 9.21.4 @@ -7,23 +7,23 @@ author_override: author: Kevin Lewis --- -# Build a Website With Next 13 and the Directus JavaScript SDK +# Build a Website With Next 13 and the d9 JavaScript SDK > {{ $frontmatter.description }} [Next](https://nextjs.org/) is a popular JavaScript framework based on React.js. In this tutorial, you will learn how to -build a website using Directus as a CMS. You will store, retrieve, and use global metadata such as the site title, -create new pages dynamically based on Directus items, and build a blog. +build a website using d9 as a CMS. You will store, retrieve, and use global metadata such as the site title, +create new pages dynamically based on d9 items, and build a blog. ## Before You Start You will need: - To install Node.js and a code editor on your computer. -- To sign up for a Directus Cloud account. +- To sign up for a d9 Cloud account. - Some knowledge of React.js and Next. -Create a new Directus Cloud project - any tier and configuration is suitable for this tutorial. +Create a new d9 Cloud project - any tier and configuration is suitable for this tutorial. Open your terminal and run the following command to create a new Next project: @@ -45,7 +45,7 @@ Open `my-website` in your code editor. ## Create Helper For @wbce-d9/sdk -To share a single instance of the Directus JavaScript SDK between multiple pages in this project, create a single helper +To share a single instance of the d9 JavaScript SDK between multiple pages in this project, create a single helper file that can be imported later. Create a new directory called `lib` and a new file called `directus.js` inside of it. ```js @@ -54,11 +54,11 @@ const directus = new Directus('https://your-project-id.directus.app/'); export default directus; ``` -Ensure your Project URL is correct when initializing the Directus JavaScript SDK. +Ensure your Project URL is correct when initializing the d9 JavaScript SDK. ## Using Global Metadata and Settings -In your Directus project, navigate to Settings -> Data Model and create a new collection called `global`. Under the +In your d9 project, navigate to Settings -> Data Model and create a new collection called `global`. Under the Singleton option, select 'Treat as a single object', as this collection will have just a single entry containing global website metadata. @@ -68,7 +68,7 @@ Navigate to the content module and enter the global collection. Collections will as a singleton, it will launch directly into the one-item form. Enter information in the title and description field and hit save. -![A form named "Global" has two inputs - a title and a description, each filled with some text.]({{CDN_URL}}/docs/v9/headless-cms/how-to-packet-20220222A/next-global-config.webp) +![A form named "Global" has two inputs - a title and a description, each filled with some text.](/images/next-global-config.webp) By default, new collections are not accessible to the public. Navigate to Settings -> Roles & Permissions -> Public and give Read access to the Global collection. @@ -95,10 +95,10 @@ export default async function HomePage() { ``` Type `npm run dev` in your terminal to start the Next development server and open `http://localhost:3000` in your -browser. You should see data from your Directus Global collection in your page. Some additional files will be created by +browser. You should see data from your d9 Global collection in your page. Some additional files will be created by Next that it expects, but do not yet exist - these can be safely ignored for now. -## Creating Pages With Directus +## Creating Pages With d9 Create a new collection called `pages` - make the Primary ID Field a "Manually Entered String" called `slug`, which will correlate with the URL for the page. For example `about` will later correlate to the page `localhost:3000/about`. @@ -134,14 +134,14 @@ export default async function DynamicPage({ params }) { } ``` -Go to `http://localhost:3000/about`, replacing `about` with any of your item slugs. Using the Directus JavaScript SDK, +Go to `http://localhost:3000/about`, replacing `about` with any of your item slugs. Using the d9 JavaScript SDK, the single item with that slug is retrieved, and the page should show your data. `readOne()` only checks against your `slug` Primary ID Field. _Note that we check if a returned value exists, and return a 404 if not. Please also note that [`dangerouslySetInnerHTML` should only be used for trusted content](https://reactjs.org/docs/dom-elements.html#dangerouslysetinnerhtml)._ -## Creating Blog Posts With Directus +## Creating Blog Posts With d9 Create a new collection called `authors` with a single text input field called `name`. Create one or more authors. @@ -213,7 +213,7 @@ Update the returned HTML: Visit `http://localhost:3000` and you should now see a blog post listing, with latest items first. -![A page with a title of "Blog". On it is a list of three items - each with a title, author, and date. The title is a link.]({{CDN_URL}}/docs/v9/headless-cms/how-to-packet-20220222A/next-blog-listing.webp) +![A page with a title of "Blog". On it is a list of three items - each with a title, author, and date. The title is a link.](/images/next-blog-listing.webp) ### Create Blog Post Listing @@ -249,19 +249,19 @@ export default async function DynamicPage({ params }) { Some key notes about this code snippet. -- In the `` tag, `directus.url` is the value provided when creating the Directus plugin. -- The `width` attribute demonstrates Directus' built-in image transformations. +- In the `` tag, `directus.url` is the value provided when creating the d9 plugin. +- The `width` attribute demonstrates d9' built-in image transformations. - Once again, `dangerouslySetInnerHTML` should only be used if all content is trusted. - Because almost-all fields are used in this page, including those from the `image` relational field, the `fields` - property when using the Directus JavaScript SDK can be set to `*.*`. + property when using the d9 JavaScript SDK can be set to `*.*`. Click on any of the blog post links, and it will take you to a blog post page complete with a header image. -![A blog post page shows an image, a title, and a number of paragraphs.]({{CDN_URL}}/docs/v9/headless-cms/how-to-packet-20220222A/next-blog-single.webp) +![A blog post page shows an image, a title, and a number of paragraphs.](/images/next-blog-single.webp) ## Add Navigation -While not strictly Directus-related, there are now several pages that aren't linked to each other. In `app/layout.tsx`, +While not strictly d9-related, there are now several pages that aren't linked to each other. In `app/layout.tsx`, above the `{children}` rendering, add a navigation. Don't forget to use your specific page slugs. ```html @@ -276,14 +276,14 @@ above the `{children}` rendering, add a navigation. Don't forget to use your spe ## Next Steps -Through this guide, you have set up a Next project, created a Directus helper, and used it to query data. You have used +Through this guide, you have set up a Next project, created a d9 helper, and used it to query data. You have used a singleton collection for global metadata, dynamically created pages, as well as blog listing and post pages. If you want to change what is user-accessible, consider setting up more restrictive roles and accessing only valid data at build-time. If you want to build more complex dynamic pages made out of reusable components, check out -[our recipe on doing just this](/use-cases/headless-cms/create-reusable-page-components-using-m2a). +[our recipe on doing just this](/guides/headless-cms/reusable-components). If you want to see the code for this project, you can find it [on GitHub]({{GITHUB_DIRECTUS_URL}}/examples/blob/main/website-next13). diff --git a/docs/guides/headless-cms/build-static-website/nuxt-3.md b/docs/guides/headless-cms/build-static-website/nuxt-3.md index d5195ef2c6..dad08ed5c3 100644 --- a/docs/guides/headless-cms/build-static-website/nuxt-3.md +++ b/docs/guides/headless-cms/build-static-website/nuxt-3.md @@ -1,5 +1,5 @@ --- -description: This guide shows you how build a website with Nuxt 3 and Directus as a Headless CMS. +description: This guide shows you how build a website with Nuxt 3 and d9 as a Headless CMS. tags: [] skill_level: directus_version: 9.21.4 @@ -7,25 +7,25 @@ author_override: author: Kevin Lewis --- -# Build a Website With Nuxt 3 and the Directus JavaScript SDK +# Build a Website With Nuxt 3 and the d9 JavaScript SDK > {{ $frontmatter.description }} [Nuxt](https://nuxt.com/) is a popular JavaScript framework based on Vue.js. In this tutorial, you will learn how to -build a website using Directus as a CMS. You will store, retrieve, and use global metadata such as the site title, -create new pages dynamically based on Directus items, and build a blog. +build a website using d9 as a CMS. You will store, retrieve, and use global metadata such as the site title, +create new pages dynamically based on d9 items, and build a blog. ## Before You Start You will need: - To install Node.js and a code editor on your computer. -- To sign up for a Directus Cloud account. +- To sign up for a d9 Cloud account. - Some knowledge of Vue.js and Nuxt. -Create a new Directus Cloud project - any tier and configuration is suitable for this tutorial. +Create a new d9 Cloud project - any tier and configuration is suitable for this tutorial. -Open your terminal and run the following commands to create a new Nuxt project and the Directus JavaScript SDK: +Open your terminal and run the following commands to create a new Nuxt project and the d9 JavaScript SDK: ``` npx nuxt init my-website @@ -53,7 +53,7 @@ export default defineNuxtPlugin(() => { }); ``` -Ensure your Project URL is correct when initializing the Directus JavaScript SDK. +Ensure your Project URL is correct when initializing the d9 JavaScript SDK. Inside of your `app.vue` entry file, add the following to the bottom to test that your plugin works: @@ -61,14 +61,14 @@ Inside of your `app.vue` entry file, add the following to the bottom to test tha ``` -Refresh your browser, and check the console. You should see the Directus instance logged, which means you have access to -all of the Directus JavaScript SDK methods by using the `useNuxtApp()` composable in any page or component. +Refresh your browser, and check the console. You should see the d9 instance logged, which means you have access to +all of the d9 JavaScript SDK methods by using the `useNuxtApp()` composable in any page or component. Once you've confirmed this, remove the ` ``` -Refresh your browser. You should see data from your Directus Global collection in your page. +Refresh your browser. You should see data from your d9 Global collection in your page. -## Creating Pages With Directus +## Creating Pages With d9 Create a new collection called `pages` - make the Primary ID Field a "Manually Entered String" called `slug`, which will correlate with the URL for the page. For example `about` will later correlate to the page `localhost:3000/about`. @@ -134,14 +134,14 @@ of the top-level pages. ``` -Go to `http://localhost:3000/about`, replacing `about` with any of your item slugs. Using the Directus JavaScript SDK, +Go to `http://localhost:3000/about`, replacing `about` with any of your item slugs. Using the d9 JavaScript SDK, the single item with that slug is retrieved, and the page should show your data. `readOne()` only checks against your `slug` Primary ID Field. _Note that we check if a returned value exists, and return a 404 if not. Please also note that [`v-html` should only be used for trusted content.](https://vuejs.org/api/built-in-directives.html#v-html)_ -## Creating Blog Posts With Directus +## Creating Blog Posts With d9 Create a new collection called `authors` with a single text input field called `name`. Create one or more authors. @@ -204,7 +204,7 @@ Update the `