✨ Publier v1 is live — a polished docs platform built for the open web.
Skip to content

full template

All Publier surfaces enabled — docs, blog, company-site sub-pages, and standard pages. The kitchen-sink starting point.

The full template scaffolds every Publier surface at once: a documentation section, a blog, marketing sub-pages, a changelog, a status page, and a knowledge base. Start here when you expect to use most of these surfaces — it’s easier to disable what you don’t need than to add it later.

Scaffold

Terminal window
publier new my-site --template full

Directory layout

my-site/
src/
pages/
index.astro # / — Hero + FeatureGrid + PricingTable + TestimonialCard + CtaBand
components/
CustomWidget.tsx # example custom Qwik component
content/
docs/ # /docs/<slug>
index.mdx
quick-start.mdx
blog/ # /blog/<slug>
welcome-to-the-blog.mdx
v1-architecture.mdx
changelog/ # /changelog entries
v0-9-0.mdx
v1-0-0.mdx
publier.config.yaml
theme.yaml
astro.config.ts
content.config.ts

astro.config.ts

astro.config.ts
import tailwind from '@tailwindcss/vite';
import { defineConfig } from 'astro/config';
import { docsShell } from '@publier/shell/integration';
export default defineConfig({
integrations: [docsShell({ snippets: { directory: 'content/snippets' } })],
vite: { plugins: [tailwind()] },
});

content.config.ts

src/content.config.ts
import { defineCollection } from 'astro:content';
import { blogLoader, contentLoader, docsLoader, pagesLoader } from '@publier/shell/loaders';
import { blogSchema, docsSchema, pagesSchema } from '@publier/shell/schemas';
export const collections = {
docs: defineCollection({ loader: docsLoader(), schema: docsSchema() }),
blog: defineCollection({ loader: blogLoader(), schema: blogSchema }),
pages: defineCollection({ loader: pagesLoader(), schema: pagesSchema }),
press: defineCollection({
loader: contentLoader({ base: './src/content/press' }),
schema: blogSchema,
}),
team: defineCollection({
loader: contentLoader({ base: './src/content/team' }),
schema: blogSchema,
}),
careers: defineCollection({
loader: contentLoader({ base: './src/content/careers' }),
schema: blogSchema,
}),
changelog: defineCollection({
loader: contentLoader({ base: './src/content/changelog' }),
schema: blogSchema,
}),
};

publier.config.yaml

publier.config.yaml
# Publier site configuration for the `full` template.
# All surfaces enabled by default. Set any to `false` to opt out.
name: My Site
url: https://example.com
favicon: /favicon.svg
nav:
title: My Site
links:
- label: Docs
href: /docs
- label: Blog
href: /blog
- label: About
href: /about
- label: Careers
href: /careers
sidebar:
defaultOpenLevel: 1
search:
enabled: true
hotkey: k
theme: theme.yaml
pages:
# Primary content shapes
docs: true
blog: true
# Company-site sub-pages
landing: true
about: true
team: true
careers: true
press: true
contact: true
# Cross-template standard pages
changelog: true
status: true
knowledge-base: true
appearance:
default: system
strict: false

Disabling surfaces

Set any surface to false under pages: and remove the corresponding content directory and/or src/pages/*.astro file:

Surfacepages: keyFiles to remove
Docsdocs: falsesrc/content/docs/ + docs collection from content.config.ts
Blogblog: falsesrc/content/blog/ + blog collection
Landinglanding: falsesrc/pages/index.astro
Changelogchangelog: falsesrc/content/changelog/ + changelog collection
Any sub-pagee.g. team: falsesrc/pages/team.astro (if present)

Custom Qwik components

The template includes src/components/CustomWidget.tsx as a starter. Add your own Qwik component$() components there and import them in any .mdx or .astro file:

import { CustomWidget } from '../components/CustomWidget';
<CustomWidget />