# craft

Published articles for craft.

This is one page of public article previews, not the complete archive. Follow Next page to continue. Summaries are not the original full articles.

## Is AI going to steal my job as a design engineer?

DevFeed: [Is AI going to steal my job as a design engineer?](<https://devfeed.tech/articles/is-ai-going-to-steal-my-job-as-a-design-engineer-33297.md>)

Original publisher: [Read original article](<https://freek.dev/3183-is-ai-going-to-steal-my-job-as-a-design-engineer>)

Author: Freek Van der Herten (freek@spatie.be)

Published: 2026-08-25T12:30:28Z

Content type: opinion

Language: en

Sources: [freek.dev - all blogposts](<https://devfeed.tech/sources/freek-dev-all-blogposts.md>)

Topics: [Artificial Intelligence](<https://devfeed.tech/topics/ai.md>), [Job](<https://devfeed.tech/topics/job.md>)

Tags: [agents](<https://devfeed.tech/tags/agents.md>), [ai](<https://devfeed.tech/tags/ai.md>), [automation](<https://devfeed.tech/tags/automation.md>), [career](<https://devfeed.tech/tags/career.md>), [craft](<https://devfeed.tech/tags/craft.md>), [design](<https://devfeed.tech/tags/design.md>), [job](<https://devfeed.tech/tags/job.md>)

### AI overview

Tom Wilson reflects on how AI is changing the work of design engineers. He argues that AI agents may take over more scaffolding work, while human judgment, product taste, restraint, and polished visual craft remain important.

### Source excerpt

Tom Wilson reflects on what AI is changing for design engineers, and where human judgment still matters. He argues that agents can take over more of the scaffolding work, while product taste, restraint, and polished visual craft remain the real edge. Read more

## Swizec Teller on JS-Craft

DevFeed: [Swizec Teller on JS-Craft](<https://devfeed.tech/articles/swizec-teller-on-js-craft-37659.md>)

Original publisher: [Read original article](<https://swizec.com/interviews/js-craft>)

Author: hi@swizec.com (Swizec Teller)

Published: 2026-03-16T00:00:00Z

Content type: article

Language: en

Sources: [Swizec Teller](<https://devfeed.tech/sources/swizec-teller.md>)

Topics: [scaling](<https://devfeed.tech/topics/scaling.md>)

Tags: [craft](<https://devfeed.tech/tags/craft.md>), [engineering](<https://devfeed.tech/tags/engineering.md>), [remote](<https://devfeed.tech/tags/remote.md>), [remote-work](<https://devfeed.tech/tags/remote-work.md>), [startup](<https://devfeed.tech/tags/startup.md>)

### AI overview

An interview with Daniel from JS-Craft about priorities, writing as an engineering skill, startup decisions, remote work, and lessons from Scaling Fast.

### Source excerpt

Daniel from JS-Craft talks with Swizec Teller about priorities, writing, startup engineering, and Scaling Fast.

## The CISO's Craft: Watchmaker or Gardener?

DevFeed: [The CISO's Craft: Watchmaker or Gardener?](<https://devfeed.tech/articles/the-ciso-s-craft-watchmaker-or-gardener-39499.md>)

Original publisher: [Read original article](<https://www.philvenables.com/post/the-ciso-s-craft-watchmaker-or-gardener>)

Author: Phil Venables

Published: 2026-01-24T16:39:53Z

Content type: opinion

Language: en

Sources: [Risk and Cyber](<https://devfeed.tech/sources/risk-and-cyber.md>)

Topics: [Security](<https://devfeed.tech/topics/security.md>), [Cybersecurity](<https://devfeed.tech/topics/cybersecurity.md>)

Tags: [ciso](<https://devfeed.tech/tags/ciso.md>), [craft](<https://devfeed.tech/tags/craft.md>), [cybersecurity](<https://devfeed.tech/tags/cybersecurity.md>), [leadership](<https://devfeed.tech/tags/leadership.md>), [precision](<https://devfeed.tech/tags/precision.md>), [security](<https://devfeed.tech/tags/security.md>)

### AI overview

The article considers whether security leaders should operate more like precise watchmakers, adaptive gardeners, or both when leading organizational transformations. It also argues that cybersecurity benchmarking should focus on control effectiveness and outcomes rather than inputs such as budgets.

### Source excerpt

Some time ago I saw a comment about the distinction between acting like a "watchmaker" or a "gardener" when undertaking organization transformations. I misplaced the original reference so, unfortunately, I can't credit appropriately. But, I've been thinking a lot about what this would mean in the context of security leadership. Specifically, should the CISO be a watchmaker or a gardener, or both? The Watchmaker CISO: Precision and Control Imagine a master watchmaker, meticulously crafting...

## Academic Chat with Murat and Aleksey: 5 Cs of the Invisible Curriculum.

DevFeed: [Academic Chat with Murat and Aleksey: 5 Cs of the Invisible Curriculum.](<https://devfeed.tech/articles/academic-chat-with-murat-and-aleksey-5-cs-of-the-invisible-curriculum-39542.md>)

Original publisher: [Read original article](<https://charap.co/academic-chat-with-murat-and-aleksey-5-cs-of-the-invisible-curriculum/>)

Author: Aleksey Charapko

Published: 2025-10-10T22:31:34Z

Content type: article

Language: en

Sources: [Aleksey Charapko](<https://devfeed.tech/sources/aleksey-charapko.md>)

Topics: [abstraction](<https://devfeed.tech/topics/abstraction.md>), [Continuation](<https://devfeed.tech/topics/continuation.md>)

Tags: [academic](<https://devfeed.tech/tags/academic.md>), [collective](<https://devfeed.tech/tags/collective.md>), [craft](<https://devfeed.tech/tags/craft.md>), [curiosity](<https://devfeed.tech/tags/curiosity.md>), [discussion](<https://devfeed.tech/tags/discussion.md>), [other-thoughts](<https://devfeed.tech/tags/other-thoughts.md>), [research](<https://devfeed.tech/tags/research.md>)

### AI overview

A discussion about the skills and qualities needed for PhD research, framed around the five Cs: Curiosity, Clarity, Craft, Community, and Courage. It especially considers research taste, levels of abstraction, curiosity, stopping points, and the influence of academic communities.

### Source excerpt

Instead of reading papers, last night, Murat and I engaged in an interesting discussion on skills, traits, and qualities needed for a PhD. This discussion came as a follow-up to Murat's recent blog on "The Invisible Curriculum of Research." In his blog, Murat discusses "Curiosity, Clarity, Craft, Community, and Courage" as skills/qualities of a good [...]

## Going Global with Twig Globals in Craft CMS

DevFeed: [Going Global with Twig Globals in Craft CMS](<https://devfeed.tech/articles/going-global-with-twig-globals-in-craft-cms-31265.md>)

Original publisher: [Read original article](<https://nystudio107.com/blog/going-global-with-twig-globals-in-craft-cms>)

Author: andrew@nystudio107.com (Andrew Welch)

Published: 2024-09-02T18:25:00Z

Content type: tutorial

Language: en

Sources: [nystudio107 | Articles on modern web development.](<https://devfeed.tech/sources/nystudio107-articles-on-modern-web-development.md>)

Topics: [Content Management System](<https://devfeed.tech/topics/cms.md>), [Web](<https://devfeed.tech/topics/web.md>), [coding](<https://devfeed.tech/topics/coding.md>)

Tags: [added](<https://devfeed.tech/tags/added.md>), [article](<https://devfeed.tech/tags/article.md>), [challenges](<https://devfeed.tech/tags/challenges.md>), [cms](<https://devfeed.tech/tags/cms.md>), [collection](<https://devfeed.tech/tags/collection.md>), [craft](<https://devfeed.tech/tags/craft.md>), [global](<https://devfeed.tech/tags/global.md>), [globals](<https://devfeed.tech/tags/globals.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [insights](<https://devfeed.tech/tags/insights.md>), [learn](<https://devfeed.tech/tags/learn.md>), [leveraging](<https://devfeed.tech/tags/leveraging.md>), [simplify](<https://devfeed.tech/tags/simplify.md>), [templating](<https://devfeed.tech/tags/templating.md>), [twig](<https://devfeed.tech/tags/twig.md>), [variables](<https://devfeed.tech/tags/variables.md>)

### AI overview

This tutorial explains how variable scope works in Twig templates used by Craft CMS, including the challenges of making variables globally available. It discusses the trade-offs of global variables and how they can reduce component reusability and modularity, while noting that they can be appropriate in simpler websites.

### Source excerpt

Learn how to simplify some Twig templating challenges by leveraging the global variables & the _globals Collection added in Craft CMS 4.5

## Connecting to an External Database in Craft CMS

DevFeed: [Connecting to an External Database in Craft CMS](<https://devfeed.tech/articles/connecting-to-an-external-database-in-craft-cms-31247.md>)

Original publisher: [Read original article](<https://nystudio107.com/blog/connecting-to-an-external-database-in-craft-cms>)

Author: andrew@nystudio107.com (Andrew Welch)

Published: 2024-08-06T14:03:00Z

Content type: tutorial

Language: en

Sources: [nystudio107 | Articles on modern web development.](<https://devfeed.tech/sources/nystudio107-articles-on-modern-web-development.md>)

Topics: [Databases](<https://devfeed.tech/topics/databases.md>), [Content Management System](<https://devfeed.tech/topics/cms.md>), [configuration](<https://devfeed.tech/topics/configuration.md>), [MySQL](<https://devfeed.tech/topics/mysql.md>), [MariaDB](<https://devfeed.tech/topics/mariadb.md>), [PostgreSQL](<https://devfeed.tech/topics/postgresql.md>), [SQLite](<https://devfeed.tech/topics/sqlite.md>), [legacy](<https://devfeed.tech/topics/legacy.md>)

Tags: [application](<https://devfeed.tech/tags/application.md>), [built-in](<https://devfeed.tech/tags/built-in.md>), [cms](<https://devfeed.tech/tags/cms.md>), [components](<https://devfeed.tech/tags/components.md>), [configuration](<https://devfeed.tech/tags/configuration.md>), [connect](<https://devfeed.tech/tags/connect.md>), [craft](<https://devfeed.tech/tags/craft.md>), [database](<https://devfeed.tech/tags/database.md>), [external](<https://devfeed.tech/tags/external.md>), [flexibility](<https://devfeed.tech/tags/flexibility.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [insights](<https://devfeed.tech/tags/insights.md>), [learn](<https://devfeed.tech/tags/learn.md>), [legacy](<https://devfeed.tech/tags/legacy.md>), [leveraging](<https://devfeed.tech/tags/leveraging.md>), [mariadb](<https://devfeed.tech/tags/mariadb.md>), [mysql](<https://devfeed.tech/tags/mysql.md>), [postgresql](<https://devfeed.tech/tags/postgresql.md>), [sqlite](<https://devfeed.tech/tags/sqlite.md>), [using](<https://devfeed.tech/tags/using.md>)

### AI overview

A tutorial explaining how to connect Craft CMS to an external database using Twig and configuration in config/app.php, without requiring the deprecated Connect plugin. It covers Craft application components and database types supported through Yii2.

### Source excerpt

Learn how to connect to an external database using Craft CMS by leveraging the built-in flexibility of application components

## Adding Content with Content Migrations in Craft CMS

DevFeed: [Adding Content with Content Migrations in Craft CMS](<https://devfeed.tech/articles/adding-content-with-content-migrations-in-craft-cms-31238.md>)

Original publisher: [Read original article](<https://nystudio107.com/blog/adding-content-with-content-migrations-in-craft-cms>)

Author: andrew@nystudio107.com (Andrew Welch)

Published: 2024-05-13T14:27:00Z

Content type: tutorial

Language: en

Sources: [nystudio107 | Articles on modern web development.](<https://devfeed.tech/sources/nystudio107-articles-on-modern-web-development.md>)

Topics: [Content Management System](<https://devfeed.tech/topics/cms.md>), [migration](<https://devfeed.tech/topics/migration.md>), [PHP](<https://devfeed.tech/topics/php.md>), [Database](<https://devfeed.tech/topics/database.md>), [Command-line interface](<https://devfeed.tech/topics/cli.md>), [Performance Testing](<https://devfeed.tech/topics/performance-testing.md>), [Development](<https://devfeed.tech/topics/development.md>), [Git](<https://devfeed.tech/topics/git.md>)

Tags: [cli](<https://devfeed.tech/tags/cli.md>), [cms](<https://devfeed.tech/tags/cms.md>), [content](<https://devfeed.tech/tags/content.md>), [craft](<https://devfeed.tech/tags/craft.md>), [create](<https://devfeed.tech/tags/create.md>), [database](<https://devfeed.tech/tags/database.md>), [development](<https://devfeed.tech/tags/development.md>), [environments](<https://devfeed.tech/tags/environments.md>), [git](<https://devfeed.tech/tags/git.md>), [insights](<https://devfeed.tech/tags/insights.md>), [learn](<https://devfeed.tech/tags/learn.md>), [migrations](<https://devfeed.tech/tags/migrations.md>), [performance-testing](<https://devfeed.tech/tags/performance-testing.md>), [php](<https://devfeed.tech/tags/php.md>), [syncs](<https://devfeed.tech/tags/syncs.md>)

### AI overview

A tutorial on using content migrations in Craft CMS 5 to create and seed Entries, Fields, Entry Types, and Sections across environments. It explains how migrations can be version-controlled, run through Craft CLI commands, and rolled back after performance testing or other automated content tasks.

### Source excerpt

Learn how to create content migrations in Craft CMS 5 to add content that syncs across environments

## Advanced String Manipulation in Twig with Craft CMS

DevFeed: [Advanced String Manipulation in Twig with Craft CMS](<https://devfeed.tech/articles/advanced-string-manipulation-in-twig-with-craft-cms-31304.md>)

Original publisher: [Read original article](<https://nystudio107.com/blog/string-manipulation-in-twig-with-craft-cms>)

Author: andrew@nystudio107.com (Andrew Welch)

Published: 2024-05-01T17:39:00Z

Content type: tutorial

Language: en

Sources: [nystudio107 | Articles on modern web development.](<https://devfeed.tech/sources/nystudio107-articles-on-modern-web-development.md>)

Topics: [Content Management System](<https://devfeed.tech/topics/cms.md>), [PHP](<https://devfeed.tech/topics/php.md>), [Library](<https://devfeed.tech/topics/library.md>), [Code](<https://devfeed.tech/topics/code.md>), [phpstorm](<https://devfeed.tech/topics/phpstorm.md>)

Tags: [advanced](<https://devfeed.tech/tags/advanced.md>), [craft](<https://devfeed.tech/tags/craft.md>), [hidden](<https://devfeed.tech/tags/hidden.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [insights](<https://devfeed.tech/tags/insights.md>), [learn](<https://devfeed.tech/tags/learn.md>), [manipulation](<https://devfeed.tech/tags/manipulation.md>), [plugins](<https://devfeed.tech/tags/plugins.md>), [powers](<https://devfeed.tech/tags/powers.md>), [required](<https://devfeed.tech/tags/required.md>), [string](<https://devfeed.tech/tags/string.md>), [twig](<https://devfeed.tech/tags/twig.md>), [unleash](<https://devfeed.tech/tags/unleash.md>)

### AI overview

This tutorial explains how to perform advanced string manipulation in Twig with Craft CMS without additional plugins. It shows how to access the bundled Stringy PHP library through Twig's create() function and demonstrates several Stringy functions.

### Source excerpt

Learn how to unleash hidden string manipulation powers in Twig with Craft CMS 5, no plugins required!

## Indexing by Custom Field in Craft CMS

DevFeed: [Indexing by Custom Field in Craft CMS](<https://devfeed.tech/articles/indexing-by-custom-field-in-craft-cms-31273.md>)

Original publisher: [Read original article](<https://nystudio107.com/blog/indexing-by-custom-field-in-craft-cms>)

Author: andrew@nystudio107.com (Andrew Welch)

Published: 2023-06-28T17:13:00Z

Content type: tutorial

Language: en

Sources: [nystudio107 | Articles on modern web development.](<https://devfeed.tech/sources/nystudio107-articles-on-modern-web-development.md>)

Topics: [Content Management System](<https://devfeed.tech/topics/cms.md>), [Database](<https://devfeed.tech/topics/database.md>), [migration](<https://devfeed.tech/topics/migration.md>)

Tags: [article](<https://devfeed.tech/tags/article.md>), [cms](<https://devfeed.tech/tags/cms.md>), [content](<https://devfeed.tech/tags/content.md>), [craft](<https://devfeed.tech/tags/craft.md>), [custom](<https://devfeed.tech/tags/custom.md>), [custom-fields](<https://devfeed.tech/tags/custom-fields.md>), [database](<https://devfeed.tech/tags/database.md>), [fields](<https://devfeed.tech/tags/fields.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [indexes](<https://devfeed.tech/tags/indexes.md>), [indexing](<https://devfeed.tech/tags/indexing.md>), [insights](<https://devfeed.tech/tags/insights.md>), [learn](<https://devfeed.tech/tags/learn.md>), [make](<https://devfeed.tech/tags/make.md>), [migration](<https://devfeed.tech/tags/migration.md>), [performance](<https://devfeed.tech/tags/performance.md>)

### AI overview

A tutorial on adding database indexes for custom fields in Craft CMS through a content migration. It explains that Craft CMS does not automatically index custom fields, so queries filtering on those fields may not scale well as datasets grow.

### Source excerpt

Learn how to make a content migration to add database indexes for custom fields in Craft CMS

## Logging to a File with Craft CMS 4

DevFeed: [Logging to a File with Craft CMS 4](<https://devfeed.tech/articles/logging-to-a-file-with-craft-cms-4-31279.md>)

Original publisher: [Read original article](<https://nystudio107.com/blog/logging-to-a-file-with-craft-cms-4>)

Author: andrew@nystudio107.com (Andrew Welch)

Published: 2022-12-21T19:35:00Z

Content type: tutorial

Language: en

Sources: [nystudio107 | Articles on modern web development.](<https://devfeed.tech/sources/nystudio107-articles-on-modern-web-development.md>)

Topics: [Content Management System](<https://devfeed.tech/topics/cms.md>), [Logging](<https://devfeed.tech/topics/logging.md>), [log management](<https://devfeed.tech/topics/log-management.md>), [PHP](<https://devfeed.tech/topics/php.md>)

Tags: [article](<https://devfeed.tech/tags/article.md>), [cms](<https://devfeed.tech/tags/cms.md>), [craft](<https://devfeed.tech/tags/craft.md>), [custom](<https://devfeed.tech/tags/custom.md>), [easily](<https://devfeed.tech/tags/easily.md>), [file](<https://devfeed.tech/tags/file.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [insights](<https://devfeed.tech/tags/insights.md>), [learn](<https://devfeed.tech/tags/learn.md>), [logging](<https://devfeed.tech/tags/logging.md>), [logs](<https://devfeed.tech/tags/logs.md>), [module](<https://devfeed.tech/tags/module.md>), [php](<https://devfeed.tech/tags/php.md>), [plugin](<https://devfeed.tech/tags/plugin.md>), [send](<https://devfeed.tech/tags/send.md>), [separate](<https://devfeed.tech/tags/separate.md>)

### AI overview

A tutorial showing how to configure Craft CMS 4 plugins or modules to send their logs to separate files using Monolog and a FileLog helper class. It explains log levels, category matching, namespaces, and storage/logs output.

### Source excerpt

Learn how to easily send logs from your custom module or plugin to a separate file in Craft CMS 4

## Autocomplete for Behaviors in PhpStorm with Mixins & Veneers

DevFeed: [Autocomplete for Behaviors in PhpStorm with Mixins & Veneers](<https://devfeed.tech/articles/autocomplete-for-behaviors-in-phpstorm-with-mixins-veneers-31244.md>)

Original publisher: [Read original article](<https://nystudio107.com/blog/autocomplete-for-behaviors-in-phpstorm-with-mixins-veneers>)

Author: andrew@nystudio107.com (Andrew Welch)

Published: 2022-12-20T15:42:00Z

Content type: tutorial

Language: en

Sources: [nystudio107 | Articles on modern web development.](<https://devfeed.tech/sources/nystudio107-articles-on-modern-web-development.md>)

Topics: [phpstorm](<https://devfeed.tech/topics/phpstorm.md>), [code-completion](<https://devfeed.tech/topics/code-completion.md>), [Content Management System](<https://devfeed.tech/topics/cms.md>), [Development](<https://devfeed.tech/topics/development.md>)

Tags: [added](<https://devfeed.tech/tags/added.md>), [autocomplete](<https://devfeed.tech/tags/autocomplete.md>), [behaviors](<https://devfeed.tech/tags/behaviors.md>), [cms](<https://devfeed.tech/tags/cms.md>), [code](<https://devfeed.tech/tags/code.md>), [code-analysis](<https://devfeed.tech/tags/code-analysis.md>), [code-completion](<https://devfeed.tech/tags/code-completion.md>), [completion](<https://devfeed.tech/tags/completion.md>), [craft](<https://devfeed.tech/tags/craft.md>), [insights](<https://devfeed.tech/tags/insights.md>), [intellisense](<https://devfeed.tech/tags/intellisense.md>), [learn](<https://devfeed.tech/tags/learn.md>), [mixins](<https://devfeed.tech/tags/mixins.md>), [phpstorm](<https://devfeed.tech/tags/phpstorm.md>), [project](<https://devfeed.tech/tags/project.md>), [using](<https://devfeed.tech/tags/using.md>), [veneers](<https://devfeed.tech/tags/veneers.md>)

### AI overview

A tutorial on restoring PhpStorm IntelliSense code completion for behaviors added to Craft CMS projects. It explains how to use mixins and veneer classes so PhpStorm can recognize dynamically added properties and methods through static code analysis.

### Source excerpt

Learn how to get PhpStorm IntelliSense code completion for Behaviors added to your Craft CMS project using Mixins & Veneers

## Fluent Multi-Environment Config for Craft CMS 4

DevFeed: [Fluent Multi-Environment Config for Craft CMS 4](<https://devfeed.tech/articles/fluent-multi-environment-config-for-craft-cms-4-31263.md>)

Original publisher: [Read original article](<https://nystudio107.com/blog/fluent-multi-environment-config-for-craft-cms-4>)

Author: andrew@nystudio107.com (Andrew Welch)

Published: 2022-07-26T04:00:00Z

Content type: tutorial

Language: en

Sources: [nystudio107 | Articles on modern web development.](<https://devfeed.tech/sources/nystudio107-articles-on-modern-web-development.md>)

Topics: [Content Management System](<https://devfeed.tech/topics/cms.md>), [data](<https://devfeed.tech/topics/data.md>)

Tags: [allows](<https://devfeed.tech/tags/allows.md>), [autocomplete](<https://devfeed.tech/tags/autocomplete.md>), [better](<https://devfeed.tech/tags/better.md>), [cms](<https://devfeed.tech/tags/cms.md>), [config](<https://devfeed.tech/tags/config.md>), [craft](<https://devfeed.tech/tags/craft.md>), [create](<https://devfeed.tech/tags/create.md>), [editor](<https://devfeed.tech/tags/editor.md>), [environment](<https://devfeed.tech/tags/environment.md>), [errors](<https://devfeed.tech/tags/errors.md>), [fewer](<https://devfeed.tech/tags/fewer.md>), [files](<https://devfeed.tech/tags/files.md>), [fluent](<https://devfeed.tech/tags/fluent.md>), [insights](<https://devfeed.tech/tags/insights.md>), [less](<https://devfeed.tech/tags/less.md>), [model](<https://devfeed.tech/tags/model.md>), [multi-environment](<https://devfeed.tech/tags/multi-environment.md>), [settings](<https://devfeed.tech/tags/settings.md>), [using](<https://devfeed.tech/tags/using.md>), [work](<https://devfeed.tech/tags/work.md>)

### AI overview

This tutorial explains how Craft CMS 4.2's optional fluent configuration interface improves multi-environment config files. It highlights autocomplete, inline documentation, and type-checking as ways to reduce lookup work and configuration errors.

### Source excerpt

Using the new fluent model config settings in Craft CMS 4.2 allows you to create better config files, with less work and fewer errors

## Searching Craft CMS Matrix Blocks

DevFeed: [Searching Craft CMS Matrix Blocks](<https://devfeed.tech/articles/searching-craft-cms-matrix-blocks-31293.md>)

Original publisher: [Read original article](<https://nystudio107.com/blog/searching-craft-cms-matrix-blocks>)

Author: andrew@nystudio107.com (Andrew Welch)

Published: 2021-11-26T05:00:00Z

Content type: tutorial

Language: en

Sources: [nystudio107 | Articles on modern web development.](<https://devfeed.tech/sources/nystudio107-articles-on-modern-web-development.md>)

Topics: [Query (disambiguation)](<https://devfeed.tech/topics/query.md>), [Content Management System](<https://devfeed.tech/topics/cms.md>)

Tags: [based](<https://devfeed.tech/tags/based.md>), [behavior](<https://devfeed.tech/tags/behavior.md>), [blocks](<https://devfeed.tech/tags/blocks.md>), [cms](<https://devfeed.tech/tags/cms.md>), [contain](<https://devfeed.tech/tags/contain.md>), [contents](<https://devfeed.tech/tags/contents.md>), [craft](<https://devfeed.tech/tags/craft.md>), [custom](<https://devfeed.tech/tags/custom.md>), [easily](<https://devfeed.tech/tags/easily.md>), [elements](<https://devfeed.tech/tags/elements.md>), [entries](<https://devfeed.tech/tags/entries.md>), [insights](<https://devfeed.tech/tags/insights.md>), [little](<https://devfeed.tech/tags/little.md>), [matrix](<https://devfeed.tech/tags/matrix.md>), [php](<https://devfeed.tech/tags/php.md>), [query](<https://devfeed.tech/tags/query.md>), [twig](<https://devfeed.tech/tags/twig.md>)

### AI overview

A tutorial on querying Craft CMS Entries by the content of their Matrix blocks. It explains how to find matching Matrix blocks, collect their owner IDs, and use those IDs to filter an Element query, including a generalized approach usable in Twig.

### Source excerpt

With a little custom Behavior, we can easily query for Elements such as Entries in Craft CMS based on the contents of the Matrix Blocks they contain

## Custom Matrix Block Peer Validation Rules

DevFeed: [Custom Matrix Block Peer Validation Rules](<https://devfeed.tech/articles/custom-matrix-block-peer-validation-rules-31255.md>)

Original publisher: [Read original article](<https://nystudio107.com/blog/custom-matrix-block-validation-rules>)

Author: andrew@nystudio107.com (Andrew Welch)

Published: 2021-05-24T04:00:00Z

Content type: tutorial

Language: en

Sources: [nystudio107 | Articles on modern web development.](<https://devfeed.tech/sources/nystudio107-articles-on-modern-web-development.md>)

Topics: [Content Management System](<https://devfeed.tech/topics/cms.md>), [Website](<https://devfeed.tech/topics/website.md>)

Tags: [authoring](<https://devfeed.tech/tags/authoring.md>), [better](<https://devfeed.tech/tags/better.md>), [blocks](<https://devfeed.tech/tags/blocks.md>), [builder](<https://devfeed.tech/tags/builder.md>), [cms](<https://devfeed.tech/tags/cms.md>), [content](<https://devfeed.tech/tags/content.md>), [craft](<https://devfeed.tech/tags/craft.md>), [custom](<https://devfeed.tech/tags/custom.md>), [errors](<https://devfeed.tech/tags/errors.md>), [experience](<https://devfeed.tech/tags/experience.md>), [insights](<https://devfeed.tech/tags/insights.md>), [leverage](<https://devfeed.tech/tags/leverage.md>), [matrix](<https://devfeed.tech/tags/matrix.md>), [module](<https://devfeed.tech/tags/module.md>), [peer](<https://devfeed.tech/tags/peer.md>), [rules](<https://devfeed.tech/tags/rules.md>), [validation](<https://devfeed.tech/tags/validation.md>)

### AI overview

A tutorial on extending Craft CMS Matrix block content builders with custom peer validation rules. The example validates sundae blocks by limiting scoop and topping counts, requiring at least one scoop, and rejecting a specific flavor combination.

### Source excerpt

Leverage a Craft CMS module to add custom peer validation rules to your content builder Matrix blocks for a better content authoring experience

## A Vite Buildchain for Craft CMS Plugins & Modules

DevFeed: [A Vite Buildchain for Craft CMS Plugins & Modules](<https://devfeed.tech/articles/a-vite-buildchain-for-craft-cms-plugins-modules-31237.md>)

Original publisher: [Read original article](<https://nystudio107.com/blog/a-vite-buildchain-for-craft-cms-plugins>)

Author: andrew@nystudio107.com (Andrew Welch)

Published: 2021-05-17T04:00:00Z

Content type: tutorial

Language: en

Sources: [nystudio107 | Articles on modern web development.](<https://devfeed.tech/sources/nystudio107-articles-on-modern-web-development.md>)

Topics: [Vite](<https://devfeed.tech/topics/vite.md>), [Content Management System](<https://devfeed.tech/topics/cms.md>), [Tailwind CSS](<https://devfeed.tech/topics/tailwind.md>), [JavaScript](<https://devfeed.tech/topics/javascript.md>), [CSS](<https://devfeed.tech/topics/css.md>), [modules](<https://devfeed.tech/topics/modules.md>), [PostCSS](<https://devfeed.tech/topics/postcss.md>)

Tags: [buildchain](<https://devfeed.tech/tags/buildchain.md>), [builds](<https://devfeed.tech/tags/builds.md>), [cms](<https://devfeed.tech/tags/cms.md>), [composer](<https://devfeed.tech/tags/composer.md>), [craft](<https://devfeed.tech/tags/craft.md>), [css](<https://devfeed.tech/tags/css.md>), [developer-experience](<https://devfeed.tech/tags/developer-experience.md>), [drop-in](<https://devfeed.tech/tags/drop-in.md>), [giving](<https://devfeed.tech/tags/giving.md>), [insights](<https://devfeed.tech/tags/insights.md>), [javascript](<https://devfeed.tech/tags/javascript.md>), [module](<https://devfeed.tech/tags/module.md>), [modules](<https://devfeed.tech/tags/modules.md>), [optimized](<https://devfeed.tech/tags/optimized.md>), [plugin](<https://devfeed.tech/tags/plugin.md>), [plugins](<https://devfeed.tech/tags/plugins.md>), [postcss](<https://devfeed.tech/tags/postcss.md>), [production](<https://devfeed.tech/tags/production.md>), [replacement](<https://devfeed.tech/tags/replacement.md>), [tailwind](<https://devfeed.tech/tags/tailwind.md>), [tailwind-css](<https://devfeed.tech/tags/tailwind-css.md>), [vite](<https://devfeed.tech/tags/vite.md>)

### AI overview

This tutorial explains how to add a Vite buildchain to Craft CMS plugins and modules. It covers TypeScript, Hot Module Replacement for CSS, JavaScript, and Twig templates, Vue.js 3, Tailwind CSS with JIT, PostCSS, and optimized production builds with Rollup and content-hash versioning.

### Source excerpt

A drop-in buildchain you can use in your Craft CMS plugins and modules, giving you Hot Module Replacement for JavaScript, Tailwind CSS, and optimized production builds.

## Vite.js Next Generation Frontend Tooling + Craft CMS

DevFeed: [Vite.js Next Generation Frontend Tooling + Craft CMS](<https://devfeed.tech/articles/vite-js-next-generation-frontend-tooling-craft-cms-31318.md>)

Original publisher: [Read original article](<https://nystudio107.com/blog/using-vite-js-next-generation-frontend-tooling-with-craft-cms>)

Author: andrew@nystudio107.com (Andrew Welch)

Published: 2021-05-05T00:51:00Z

Content type: tutorial

Language: en

Sources: [nystudio107 | Articles on modern web development.](<https://devfeed.tech/sources/nystudio107-articles-on-modern-web-development.md>)

Topics: [Vite](<https://devfeed.tech/topics/vite.md>), [Front end](<https://devfeed.tech/topics/frontend.md>), [JavaScript](<https://devfeed.tech/topics/javascript.md>), [Tooling](<https://devfeed.tech/topics/tooling.md>), [Content Management System](<https://devfeed.tech/topics/cms.md>)

Tags: [article](<https://devfeed.tech/tags/article.md>), [cms](<https://devfeed.tech/tags/cms.md>), [combines](<https://devfeed.tech/tags/combines.md>), [craft](<https://devfeed.tech/tags/craft.md>), [frontend](<https://devfeed.tech/tags/frontend.md>), [generation](<https://devfeed.tech/tags/generation.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [integrate](<https://devfeed.tech/tags/integrate.md>), [javascript](<https://devfeed.tech/tags/javascript.md>), [modern](<https://devfeed.tech/tags/modern.md>), [shows](<https://devfeed.tech/tags/shows.md>), [simplicity](<https://devfeed.tech/tags/simplicity.md>), [speed](<https://devfeed.tech/tags/speed.md>), [tooling](<https://devfeed.tech/tags/tooling.md>), [vite](<https://devfeed.tech/tags/vite.md>), [vite-js](<https://devfeed.tech/tags/vite-js.md>)

### AI overview

A tutorial on integrating Vite.js frontend tooling with Craft CMS. It explains Vite.js's speed and simplicity, compares its build workflow with webpack, and describes plugin installation and configuration for a server-rendered Craft CMS project.

### Source excerpt

Vite.js is next generation frontend tooling for modern JavaScript that combines speed with simplicity. This article shows you how to integrate Vite.js with Craft CMS

## A Craft CMS Plugin Local Development Environment

DevFeed: [A Craft CMS Plugin Local Development Environment](<https://devfeed.tech/articles/a-craft-cms-plugin-local-development-environment-31232.md>)

Original publisher: [Read original article](<https://nystudio107.com/blog/a-craft-cms-plugin-local-development-environment>)

Author: andrew@nystudio107.com (Andrew Welch)

Published: 2021-04-21T04:00:00Z

Content type: tutorial

Language: en

Sources: [nystudio107 | Articles on modern web development.](<https://devfeed.tech/sources/nystudio107-articles-on-modern-web-development.md>)

Topics: [Content Management System](<https://devfeed.tech/topics/cms.md>), [Docker](<https://devfeed.tech/topics/docker.md>), [PHP](<https://devfeed.tech/topics/php.md>), [Development](<https://devfeed.tech/topics/development.md>), [Testing](<https://devfeed.tech/topics/testing.md>), [phpstorm](<https://devfeed.tech/topics/phpstorm.md>), [MySQL](<https://devfeed.tech/topics/mysql.md>), [Database](<https://devfeed.tech/topics/database.md>), [Front end](<https://devfeed.tech/topics/frontend.md>)

Tags: [article](<https://devfeed.tech/tags/article.md>), [cms](<https://devfeed.tech/tags/cms.md>), [composer](<https://devfeed.tech/tags/composer.md>), [containerized](<https://devfeed.tech/tags/containerized.md>), [craft](<https://devfeed.tech/tags/craft.md>), [debug](<https://devfeed.tech/tags/debug.md>), [details](<https://devfeed.tech/tags/details.md>), [develop](<https://devfeed.tech/tags/develop.md>), [development](<https://devfeed.tech/tags/development.md>), [docker](<https://devfeed.tech/tags/docker.md>), [ease](<https://devfeed.tech/tags/ease.md>), [environment](<https://devfeed.tech/tags/environment.md>), [frontend](<https://devfeed.tech/tags/frontend.md>), [insights](<https://devfeed.tech/tags/insights.md>), [local](<https://devfeed.tech/tags/local.md>), [mysql](<https://devfeed.tech/tags/mysql.md>), [php](<https://devfeed.tech/tags/php.md>), [phpstorm](<https://devfeed.tech/tags/phpstorm.md>), [plugin](<https://devfeed.tech/tags/plugin.md>), [plugin-development](<https://devfeed.tech/tags/plugin-development.md>), [plugins](<https://devfeed.tech/tags/plugins.md>), [postgres](<https://devfeed.tech/tags/postgres.md>), [test](<https://devfeed.tech/tags/test.md>)

### AI overview

This tutorial presents a portable, cross-platform Docker development environment for building, debugging, and testing Craft CMS plugins. It covers preconfigured PHP and database environments, testing content, PhpStorm and XDebug support, and plugin development setup.

### Source excerpt

This article details a containerized local development environment that you can use to develop, debug, and test Craft CMS plugins with ease

## Updating Craft CMS Without Headaches

DevFeed: [Updating Craft CMS Without Headaches](<https://devfeed.tech/articles/updating-craft-cms-without-headaches-31311.md>)

Original publisher: [Read original article](<https://nystudio107.com/blog/updating-craft-cms-without-headaches>)

Author: andrew@nystudio107.com (Andrew Welch)

Published: 2020-11-30T05:00:00Z

Content type: tutorial

Language: en

Sources: [nystudio107 | Articles on modern web development.](<https://devfeed.tech/sources/nystudio107-articles-on-modern-web-development.md>)

Topics: [Composer](<https://devfeed.tech/topics/composer.md>), [Content Management System](<https://devfeed.tech/topics/cms.md>), [Package manager](<https://devfeed.tech/topics/package-manager.md>), [PHP](<https://devfeed.tech/topics/php.md>), [Website](<https://devfeed.tech/topics/website.md>)

Tags: [cause](<https://devfeed.tech/tags/cause.md>), [cms](<https://devfeed.tech/tags/cms.md>), [composer](<https://devfeed.tech/tags/composer.md>), [craft](<https://devfeed.tech/tags/craft.md>), [dependency](<https://devfeed.tech/tags/dependency.md>), [documentation](<https://devfeed.tech/tags/documentation.md>), [doesn-t](<https://devfeed.tech/tags/doesn-t.md>), [headaches](<https://devfeed.tech/tags/headaches.md>), [here-s](<https://devfeed.tech/tags/here-s.md>), [insights](<https://devfeed.tech/tags/insights.md>), [latest](<https://devfeed.tech/tags/latest.md>), [maintenance](<https://devfeed.tech/tags/maintenance.md>), [pain](<https://devfeed.tech/tags/pain.md>), [php](<https://devfeed.tech/tags/php.md>), [prescription](<https://devfeed.tech/tags/prescription.md>), [update](<https://devfeed.tech/tags/update.md>), [updating](<https://devfeed.tech/tags/updating.md>), [version](<https://devfeed.tech/tags/version.md>)

### AI overview

A tutorial on updating Craft CMS after version 3 moved the platform and its plugins to Composer-managed PHP packages. It recommends frequent updates, ideally about once per month, to reduce dependency complexity and make problems easier to roll back.

### Source excerpt

Updating Craft CMS to the latest version doesn't have to cause headaches. Here's our prescription for how to update Craft CMS without pain

## Creating a custom field in Craft CMS

DevFeed: [Creating a custom field in Craft CMS](<https://devfeed.tech/articles/creating-a-custom-field-in-craft-cms-31251.md>)

Original publisher: [Read original article](<https://nystudio107.com/blog/creating-a-custom-field-in-craft-cms>)

Author: andrew@nystudio107.com (Andrew Welch)

Published: 2020-08-27T04:00:00Z

Content type: tutorial

Language: en

Sources: [nystudio107 | Articles on modern web development.](<https://devfeed.tech/sources/nystudio107-articles-on-modern-web-development.md>)

Topics: [Content Management System](<https://devfeed.tech/topics/cms.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [cms](<https://devfeed.tech/tags/cms.md>), [code](<https://devfeed.tech/tags/code.md>), [craft](<https://devfeed.tech/tags/craft.md>), [create](<https://devfeed.tech/tags/create.md>), [custom](<https://devfeed.tech/tags/custom.md>), [field](<https://devfeed.tech/tags/field.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [insights](<https://devfeed.tech/tags/insights.md>), [learn](<https://devfeed.tech/tags/learn.md>), [leveraging](<https://devfeed.tech/tags/leveraging.md>), [little](<https://devfeed.tech/tags/little.md>), [platform](<https://devfeed.tech/tags/platform.md>), [possible](<https://devfeed.tech/tags/possible.md>), [writing](<https://devfeed.tech/tags/writing.md>)

### AI overview

A tutorial on creating a custom field in Craft CMS whose dropdown options come from Craft Commerce country data. It recommends subclassing the built-in Craft Dropdown field and changing only the required behavior to reduce code and maintenance.

### Source excerpt

Learn how to create a custom field in Craft CMS, writing as little code as possible by leveraging the platform.

## Video: Craft a Dark Theme with Material Design

DevFeed: [Video: Craft a Dark Theme with Material Design](<https://devfeed.tech/articles/video-craft-a-dark-theme-with-material-design-29241.md>)

Original publisher: [Read original article](<https://material.io/blog/dark-theme-design-tutorial-video>)

Published: 2020-06-30T13:00:00Z

Content type: tutorial

Language: en

Sources: [Material.io - Material Design](<https://devfeed.tech/sources/material-io-material-design.md>)

Topics: [Dark Mode](<https://devfeed.tech/topics/dark-mode.md>), [Material Design](<https://devfeed.tech/topics/material-design.md>)

Tags: [apply](<https://devfeed.tech/tags/apply.md>), [components](<https://devfeed.tech/tags/components.md>), [craft](<https://devfeed.tech/tags/craft.md>), [design](<https://devfeed.tech/tags/design.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [learn](<https://devfeed.tech/tags/learn.md>), [material-design](<https://devfeed.tech/tags/material-design.md>), [palette](<https://devfeed.tech/tags/palette.md>), [typography](<https://devfeed.tech/tags/typography.md>), [video](<https://devfeed.tech/tags/video.md>)

### AI overview

A video tutorial explains how to create a dark theme palette and apply it to surfaces, typography, and components using Material Design.

### Source excerpt

Learn how to create a dark theme palette and apply it to surfaces, typography, and components

## Extending Craft CMS with Validation Rules and Behaviors

DevFeed: [Extending Craft CMS with Validation Rules and Behaviors](<https://devfeed.tech/articles/extending-craft-cms-with-validation-rules-and-behaviors-31262.md>)

Original publisher: [Read original article](<https://nystudio107.com/blog/extending-craft-cms-with-validation-rules-and-behaviors>)

Author: andrew@nystudio107.com (Andrew Welch)

Published: 2020-04-24T02:55:00Z

Content type: tutorial

Language: en

Sources: [nystudio107 | Articles on modern web development.](<https://devfeed.tech/sources/nystudio107-articles-on-modern-web-development.md>)

Topics: [Content Management System](<https://devfeed.tech/topics/cms.md>), [web applications](<https://devfeed.tech/topics/web-applications.md>), [Development](<https://devfeed.tech/topics/development.md>), [Framework](<https://devfeed.tech/topics/framework.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [amazingly](<https://devfeed.tech/tags/amazingly.md>), [application](<https://devfeed.tech/tags/application.md>), [built-in](<https://devfeed.tech/tags/built-in.md>), [cms](<https://devfeed.tech/tags/cms.md>), [code](<https://devfeed.tech/tags/code.md>), [craft](<https://devfeed.tech/tags/craft.md>), [customizable](<https://devfeed.tech/tags/customizable.md>), [development](<https://devfeed.tech/tags/development.md>), [flexible](<https://devfeed.tech/tags/flexible.md>), [framework](<https://devfeed.tech/tags/framework.md>), [functionality](<https://devfeed.tech/tags/functionality.md>), [insights](<https://devfeed.tech/tags/insights.md>), [offers](<https://devfeed.tech/tags/offers.md>), [platform](<https://devfeed.tech/tags/platform.md>), [using](<https://devfeed.tech/tags/using.md>), [web](<https://devfeed.tech/tags/web.md>)

### AI overview

A tutorial on extending Craft CMS by using its underlying Yii2 framework, with a focus on model validation rules and behaviors. It explains how models represent and validate data and how built-in validators can be leveraged.

### Source excerpt

Craft CMS is a web application that is amazingly flexible & customizable using the built-in functionality that the platform offers. Use the platform!

## Post-Mortem: Outbreak Database

DevFeed: [Post-Mortem: Outbreak Database](<https://devfeed.tech/articles/post-mortem-outbreak-database-31288.md>)

Original publisher: [Read original article](<https://nystudio107.com/blog/post-mortem-outbreak-database>)

Author: andrew@nystudio107.com (Andrew Welch)

Published: 2020-03-03T05:00:00Z

Content type: article

Language: en

Sources: [nystudio107 | Articles on modern web development.](<https://devfeed.tech/sources/nystudio107-articles-on-modern-web-development.md>)

Topics: [migration](<https://devfeed.tech/topics/migration.md>), [Content Management System](<https://devfeed.tech/topics/cms.md>), [PHP](<https://devfeed.tech/topics/php.md>), [Front end](<https://devfeed.tech/topics/frontend.md>), [Vue.js](<https://devfeed.tech/topics/vue.md>), [GraphQL](<https://devfeed.tech/topics/graphql.md>), [axios](<https://devfeed.tech/topics/axios.md>), [Website](<https://devfeed.tech/topics/website.md>), [Back end](<https://devfeed.tech/topics/backend.md>), [API](<https://devfeed.tech/topics/api.md>)

Tags: [aging](<https://devfeed.tech/tags/aging.md>), [axios](<https://devfeed.tech/tags/axios.md>), [cms](<https://devfeed.tech/tags/cms.md>), [content](<https://devfeed.tech/tags/content.md>), [craft](<https://devfeed.tech/tags/craft.md>), [custom](<https://devfeed.tech/tags/custom.md>), [frontend](<https://devfeed.tech/tags/frontend.md>), [graphql](<https://devfeed.tech/tags/graphql.md>), [hybrid](<https://devfeed.tech/tags/hybrid.md>), [management](<https://devfeed.tech/tags/management.md>), [migration](<https://devfeed.tech/tags/migration.md>), [modernizing](<https://devfeed.tech/tags/modernizing.md>), [php](<https://devfeed.tech/tags/php.md>), [post-mortem](<https://devfeed.tech/tags/post-mortem.md>), [post-mortems](<https://devfeed.tech/tags/post-mortems.md>), [twig-vue-js](<https://devfeed.tech/tags/twig-vue-js.md>), [vue](<https://devfeed.tech/tags/vue.md>), [vuex](<https://devfeed.tech/tags/vuex.md>), [website](<https://devfeed.tech/tags/website.md>)

### AI overview

A post-mortem on modernizing the aging custom PHP Outbreak Database website by migrating it to Craft CMS and planning a hybrid Twig/Vue.js frontend using Vuex, Axios, and GraphQL. The project aimed to improve content maintenance, researcher and journalist usability, and long-term technical foundations.

### Source excerpt

Modernizing an aging custom PHP website with Craft CMS for content management, and a hybrid Twig/Vue.js + Vuex + Axios + GraphQL on the frontend

## Flat Multi-Environment Config for Craft CMS 3

DevFeed: [Flat Multi-Environment Config for Craft CMS 3](<https://devfeed.tech/articles/flat-multi-environment-config-for-craft-cms-3-31286.md>)

Original publisher: [Read original article](<https://nystudio107.com/blog/multi-environment-configuration-for-craft-cms-3>)

Author: andrew@nystudio107.com (Andrew Welch)

Published: 2020-02-29T15:29:00Z

Content type: tutorial

Language: en

Sources: [nystudio107 | Articles on modern web development.](<https://devfeed.tech/sources/nystudio107-articles-on-modern-web-development.md>)

Topics: [Content Management System](<https://devfeed.tech/topics/cms.md>), [.env](<https://devfeed.tech/topics/dotenv.md>), [Environment Variables](<https://devfeed.tech/topics/environment-variables.md>), [configuration](<https://devfeed.tech/topics/configuration.md>), [Development](<https://devfeed.tech/topics/development.md>)

Tags: [aliases](<https://devfeed.tech/tags/aliases.md>), [api-keys](<https://devfeed.tech/tags/api-keys.md>), [approach](<https://devfeed.tech/tags/approach.md>), [article](<https://devfeed.tech/tags/article.md>), [cms](<https://devfeed.tech/tags/cms.md>), [config](<https://devfeed.tech/tags/config.md>), [configs](<https://devfeed.tech/tags/configs.md>), [craft](<https://devfeed.tech/tags/craft.md>), [database](<https://devfeed.tech/tags/database.md>), [docker](<https://devfeed.tech/tags/docker.md>), [environment](<https://devfeed.tech/tags/environment.md>), [environment-variables](<https://devfeed.tech/tags/environment-variables.md>), [file](<https://devfeed.tech/tags/file.md>), [files](<https://devfeed.tech/tags/files.md>), [flat](<https://devfeed.tech/tags/flat.md>), [git](<https://devfeed.tech/tags/git.md>), [heroku](<https://devfeed.tech/tags/heroku.md>), [insights](<https://devfeed.tech/tags/insights.md>), [multi-environment](<https://devfeed.tech/tags/multi-environment.md>), [need](<https://devfeed.tech/tags/need.md>), [presents](<https://devfeed.tech/tags/presents.md>), [secrets](<https://devfeed.tech/tags/secrets.md>), [sorts](<https://devfeed.tech/tags/sorts.md>), [variables](<https://devfeed.tech/tags/variables.md>)

### AI overview

A tutorial on configuring Craft CMS 3 across development, staging, and production environments using aliases, environment variables, .env files, and configuration files. It presents a flat configuration approach and discusses keeping environment-specific credentials and secrets separate from source code and databases.

### Source excerpt

Multi-environment configs for Craft CMS are a mix of aliases, environment variables, and config files. This article sorts it all out, and presents a flat config file approach

## Using Craft CMS as a Headless CMS with the GraphQL API

DevFeed: [Using Craft CMS as a Headless CMS with the GraphQL API](<https://devfeed.tech/articles/using-the-craft-cms-headless-with-the-graphql-api-31317.md>)

Original publisher: [Read original article](<https://nystudio107.com/blog/using-the-craft-cms-graphql-api-on-the-frontend>)

Author: andrew@nystudio107.com (Andrew Welch)

Published: 2020-01-20T05:00:00Z

Content type: tutorial

Language: en

Sources: [nystudio107 | Articles on modern web development.](<https://devfeed.tech/sources/nystudio107-articles-on-modern-web-development.md>)

Topics: [Content Management System](<https://devfeed.tech/topics/cms.md>), [GraphQL](<https://devfeed.tech/topics/graphql.md>), [API](<https://devfeed.tech/topics/api.md>), [Front end](<https://devfeed.tech/topics/frontend.md>), [Self-hosted](<https://devfeed.tech/topics/self-hosted.md>)

Tags: [added](<https://devfeed.tech/tags/added.md>), [api](<https://devfeed.tech/tags/api.md>), [authoring](<https://devfeed.tech/tags/authoring.md>), [cms](<https://devfeed.tech/tags/cms.md>), [craft](<https://devfeed.tech/tags/craft.md>), [formalized](<https://devfeed.tech/tags/formalized.md>), [frontend](<https://devfeed.tech/tags/frontend.md>), [gives](<https://devfeed.tech/tags/gives.md>), [graphql](<https://devfeed.tech/tags/graphql.md>), [headless](<https://devfeed.tech/tags/headless.md>), [here-s](<https://devfeed.tech/tags/here-s.md>), [insights](<https://devfeed.tech/tags/insights.md>), [layer](<https://devfeed.tech/tags/layer.md>), [practical](<https://devfeed.tech/tags/practical.md>), [structured](<https://devfeed.tech/tags/structured.md>), [website](<https://devfeed.tech/tags/website.md>)

### AI overview

This tutorial explains how to use Craft CMS as a headless CMS through its GraphQL API. It discusses the API's structured data access, its use with separate frontends, and the distinction between Craft CMS's first-party implementation and the CraftQL plugin.

### Source excerpt

Craft CMS 3.3 added a GraphQL layer that gives your website a formalized, structured API out of the box. Here's how to use GraphQL + Craft CMS as a "headless" CMS

[Next page](<https://devfeed.tech/tags/craft.md?cursor=WyIyMDIwLTAxLTIwVDA1OjAwOjAwKzAwOjAwIiwgImQ1MThjMGU2LWZlZTctNDFkNS1hOGY2LTE4NmM2MWY3MGQ0OSJd>)