Invalid project type contribution
project.type, but its contributes.project fragment is unusable.
Q-16-7 — Invalid project type contribution
An extension resolved a custom
project.type, but itscontributes.projectfragment is unusable.
What this means
An extension can define a custom project type, so a project can set
project.type: my-org/my-type and inherit configuration the extension
supplies. The extension declares this under contributes.project in
its _extension.yml.
Quarto found the extension your project.type names, but could not use
what it declares. This stops the render — unlike most extension
problems, there is no sensible way to continue, because the project
type decides how every document in the project is processed.
Four things make the fragment unusable:
contributes.projectis not a mapping.- Its
project.typeis not a string. - It names a base type that is not built-in. Chaining custom types — one extension’s type inheriting from another’s — is not supported.
- It names
manuscript, which Quarto 2 does not implement yet. (Abookbase is fine — see the book projects guide — this restriction no longer applies to it.)
The message names the extension and the path to its _extension.yml.
Why this happens
- A hand-written extension manifest with
contributes.projectas a list rather than a mapping. - An extension built against Quarto 1, where the constraints differ.
- A base type that is itself a custom type, usually an attempt to build a family of related project types by layering them.
- A
manuscript-based extension, which cannot work until Quarto 2 implements the manuscript project type.
How to fix
This is a defect in the extension, not in your project — the fix
belongs in the extension’s _extension.yml. A usable contribution
looks like this:
title: My Project Type
version: 1.0.0
contributes:
project:
project:
type: website
format:
html:
theme: cosmoThe nested project.type names the built-in base type the custom
type builds on: default, website, or book. Everything else in
the fragment is configuration merged into projects that use the type.
If you do not maintain the extension, report the problem to its
author. In the meantime, set project.type to a built-in type and
copy the configuration you need directly into _quarto.yml.