Configuration reference¶
The root sciastro.yaml is validated against configSchema. Unknown fields are
rejected; indentation and field names are case-sensitive. The current content
schema is schemaVersion: 1, independent of the npm package's version.
A localized value is a nonempty string shared by all languages, or a mapping with
a value for every enabled locale: { pt: Pesquisa, en: Research }.
Identity and generation¶
| Field | Required / default | Meaning |
|---|---|---|
schemaVersion |
Required: 1 |
Content contract version |
kind |
Required: individual, group or course |
Site profile and automatic page labels; the course starter uses explicit pages |
name |
Required | Researcher, group or course name |
description |
Required, localized | Site description and fallback page metadata |
affiliation |
Optional, localized | Institution(s) |
url |
Required | HTTP(S) origin only; no path, query or fragment |
base |
/ |
Deployment prefix, e.g. /lab/ or /~username/; must start and end with / |
locales |
[pt] |
Nonempty unique subset of [pt, en] |
defaultLocale |
pt |
Must be included in locales |
contentDir |
content |
Directory inside the website root |
home.body |
Required in automatic mode | Localized Markdown filename relative to contentDir |
home.photo |
No portrait | Optional automatic About/Home image: src, localized alt, shape: rectangle (default) or circle, optional position: [x, y] percentages and original width/height. For composed pages, use profile.image; see profile photographs |
pageFiles |
Optional nonempty list | YAML pages or Markdown pages with YAML front matter, relative to contentDir; replaces automatic pages |
navigation |
Optional list | Existing top-level page IDs, in menu order; descendants retain their own order |
navigationDepth |
2 |
Menu levels displayed, from 1 to 10; deeper pages retain their routes and index links |
numberSections |
false |
Number Markdown headings ## through ###### in article bodies, including notebook Markdown cells; each page can override this boolean |
routes |
{} |
Automatic-page ID → localized path overrides |
notice |
Optional, localized | Short site notice |
structuredData |
Optional object | Additional JSON-LD fields; author is responsible for correctness |
SITE_URL and BASE_PATH override url and base in the CLI and Astro integration.
These are process environment variables; SciAstro does not automatically load
them from .env. Set them in the shell or CI environment before checking,
building or previewing, using the same destination for each command. The
lower-level loadSite API takes explicit overrides instead of reading the
environment.
For https://institute.example/~username/, use url: https://institute.example
and base: /~username/. The tilde is literal; do not use %7E. The prefix is a
public URL path, not a filesystem directory. Apart from the root /, each
slash-separated segment must be nonempty and contain only ASCII letters, digits,
-, _ or ~. Dots, percent escapes, query strings and fragments are rejected.
Keep content paths such as
/images/portrait.jpg free of the deployment prefix. See
deployment for a complete build and upload workflow.
Navigation layout¶
| Field | Default | Meaning |
|---|---|---|
layout.navigation |
Theme convention | top or sidebar; when omitted, LNCC uses a sidebar and Classic/Modern use top navigation |
layout.subnavigation |
inline |
inline, right or none; the right panel provides parent/child/sibling links and page headings |
These settings work with all profiles and themes. The panel adapts to narrow
screens; navigationDepth continues to control the main menu only. See
layouts and motion.
Article section numbering¶
Set numberSections: true in sciastro.yaml to enable numbering for all
layout: article pages. Set numberSections: false in an individual page's YAML
or Markdown front matter to disable it there. A page can also opt in with true
while the global default remains false.
Numbers appear in the body and its contents list; heading anchors and page titles stay unchanged. This does not number composed YAML section titles, card titles or the references list. See section numbering.
Article downloads¶
| Field | Default | Meaning |
|---|---|---|
downloads.notebook |
false |
Offer a .ipynb download for article pages with a nonempty Markdown or notebook body |
downloads.pdf |
false |
Offer the browser's print dialog for article pages, allowing Save as PDF |
A page's downloads mapping overrides either field independently. PDF is a
print action, not a prebuilt file. Notebook source exports do not execute code
or bundle local data/assets. See downloads for source
preservation, metadata and rendering limitations.
Analytics¶
See the analytics guide for setup and complete examples.
| Field | Default | Meaning |
|---|---|---|
analytics |
false |
Disabled, or one provider configuration |
analytics.provider |
Required when enabled | cloudflare or umami |
analytics.token |
Required for Cloudflare | Public 32-character hexadecimal Web Analytics token |
analytics.websiteId |
Required for Umami | Public website UUID |
analytics.scriptUrl |
https://cloud.umami.is/script.js |
Umami tracker HTTPS URL; override for self-hosting |
analytics.events.downloads |
false |
Umami file-link clicks |
analytics.events.externalLinks |
false |
Umami external HTTP(S) link clicks |
analytics.events.custom |
false |
Umami names from analyticsEvent on links |
Provider fields cannot be mixed; Cloudflare rejects events. Production tracking
is limited to url and base. Set SCIASTRO_ANALYTICS=false in the build environment
to disable injection temporarily. Settings are public, never secret API credentials.
Link previews and sharing¶
See link previews for full examples and format limitations.
| Field | Default | Meaning |
|---|---|---|
social.image |
Omitted | Global sharing image: local PNG/JPEG src, localized alt, optional original width/height |
social.fallback |
logo |
Independent fallback: reuse the configured site logo, provide an image object with the same fields, or use false to omit the fallback |
An explicit image takes priority. The logo is reused in full, without viewBox
or styling. Unsupported logo formats produce an Astro warning and no image tags;
missing explicit files fail validation. Sharing does not use people fallbacks,
favicons or a generic symbol. Titles and descriptions are preserved without an image.
Appearance¶
| Field | Default | Meaning |
|---|---|---|
theme |
classic |
classic, modern or lncc |
logo |
Built-in mark | src, localized alt, optional viewBox, width, height, monochrome |
favicon |
Optional | Asset path under public/ |
appearance.palette |
Theme colors | violet, ocean, forest, amber, slate, or { base: <name>, accent: <name> }; five bases × five accents |
appearance.light, .dark |
Named palette or theme colors | paper, surface, ink, muted, accent, line; six-digit hex overrides take precedence |
appearance.typography |
Theme fonts | editorial (Newsreader headings / Manrope body), humanist (Manrope both), technical (system UI both / monospace metadata) |
appearance.contentWidth |
1160 when appearance configured |
Content width, 720–1600 px |
appearance.bodyFont, .headingFont |
Typography profile or theme fonts | Font-family strings override the selected profile; does not download fonts |
appearance.icons.style |
plain when icons appearance configured |
plain, accent or soft; treatment of navigation page icons, independently of their glyphs |
appearance.icons.weight |
regular when icons appearance configured |
light, regular or bold; supported icon strokes, including controls; flags/logos are unchanged |
appearance.gradient |
Disabled | false or a configuration mapping; see fields below |
appearance.gradient.style |
linear when enabled |
linear, radial or mesh |
appearance.gradient.colors |
[violet, ocean] when enabled |
Exactly two named palettes; uses their light/dark accent colors |
appearance.gradient.targets |
[hero] when enabled |
Nonempty unique list containing hero, headings, or both |
appearance.gradient.angle |
135 when enabled |
−360 to 360 degrees; affects linear gradients only |
appearance.navigation |
Existing solid treatment | solid or glass; glass adds a translucent, sticky top menu and is ignored with sidebar navigation |
appearance.motion |
none |
none, subtle or expressive; decorative motion respects reduced-motion and touch preferences |
appearance.captions.figures |
center |
Figure caption alignment: left, center, right or justify; covers composed images, Markdown figures and notebook image outputs |
appearance.captions.tables |
center |
Table caption alignment: left, center, right or justify; covers Markdown table captions and saved HTML table captions |
themeStorageKey |
sciastro-theme |
Browser storage key for saved theme |
copyright |
Site name | Localized Markdown beside the framework credit |
footer |
Optional | Localized Markdown below the copyright row |
icons |
Defaults enabled | false, or navigation and languages settings |
An icon can be lucide:name, circle-flags:code, { src: /icons/name.svg }, or
false. Local image icons also accept monochrome: true. See icons
and theme customization.
Palette, typography, icon treatment and gradient options are opt-in and work with
all three themes and all site profiles. palette.base supplies paper/surface,
foregrounds and borders; palette.accent supplies the accent. Existing light/dark
hex overrides and font-family overrides retain priority. Built-in contrast checks
cover normal foreground text on base paper/surface colors in both modes; custom
colors and decorative backgrounds need their own contrast review.
Gradient hero decoration is limited to introductions, profiles and page headers;
headings affects only main H1 titles, not article body headings. Neither paints a
gradient behind long body text. Gradients are disabled in print and forced-colors
modes. See the appearance guide for complete recipes,
scope and precedence.
Glass navigation requires the top layout. Classic/Modern use it by default; set
layout.navigation: top explicitly for LNCC or a configured sidebar. Its mobile
menu remains natively collapsible. Backdrop-blur support, reduced-transparency
preferences and forced-colors mode determine whether the surface is translucent
or uses its solid fallback. See translucent top menus.
Per-image captionAlign and Markdown directive caption-align override the
corresponding site default. Notebook image outputs accept
metadata.sciastro.captionAlign; saved HTML table captions retain their own
inline styles when supplied. These settings align caption text independently of
the figure/table block. See caption alignment.
Bibliography and people¶
| Field | Default | Meaning |
|---|---|---|
bibliography |
Omitted | Enables a local reference library |
bibliography.file |
references.bib |
Relative to contentDir |
bibliography.style |
apa |
apa or vancouver |
bibliography.publications |
[] |
Keys explicitly selected as the site's publications |
studentLevels |
Undergraduate, masters, phd, postdoc | Ordered objects with id and localized label; replaces the whole list |
people.file |
team.yaml |
People records, relative to contentDir; an explicitly configured file must exist |
people.avatarFallback |
Built-in fictional symbol | Shared fallback for people without a photo: src, localized alt, optional viewBox, width, height; separate from the header logo |
links |
[] |
Profile links with string label, HTTP(S) url and optional analyticsEvent (name or false) |
The content guide covers research.yaml, team.yaml and
pages.yaml. The composition guide specifies
page fields, all ten section types and shared item/image/link contracts.
See portraits and fallback symbols
for per-person overrides, circular photo framing and cropping the lettering out of a logo.
Interface labels¶
ui maps an existing label key to localized text. Built-in keys are:
home about research team supervision publications faculty researchers students
alumni references areas details skip theme navigation menu languages built
emptyReferences notFound back since
For a composed page, edit its title/heading to change that page's name.
These labels control shared interface elements, not your editorial content.
Validation boundaries¶
sciastro check loads content, validates translations and relationships, checks
local images/icons, parses citations and detects conflicting routes/identifiers.
It does not crawl external links, run browser interaction tests, validate scientific
claims or infer permissions to redistribute images. The package's own test suite
adds installed-site link/anchor and browser checks.