⚠️ Portosaur & This docs is Work In Progress!
Skip to content

Dynamic Variables ​

Portosaur allows you to use placeholders in your config.yml, templates that are resolved at build time. The resolution engine is recursive, allowing for complex data re-use.

Syntax ​

Use double curly braces to reference a variable: {​{variable_path}​}. Paths can be nested using dots (e.g., {​{site.title}​}).

Available Variables ​

System Variables ​

These variables are automatically provided by the engine during the build process:

  • {​{porto_version}​} — Current Portosaur version.
  • {​{compile_year}​} — Year at build time (useful for copyright notices).
  • {​{compile_date}​} — Date at build time.
  • {​{site_url}​} — The fully resolved URL of your site.
  • {​{base_url}​} — The base path of your site (e.g., /my-portfolio/).
  • {​{last_updated}​} — The timestamp of the last git commit.
  • {​{is_prod}​} / {​{is_dev}​} — Booleans indicating the current build environment.
  • {​{site_root}​} — The absolute path to your local project directory.
  • {​{porto_static}​} — The absolute path to the @Portosaur/theme static assets directory.

Configuration References ​

You can reference any value from your config.yml within other parts of the configuration:

  • {​{site.title}​} — Resolves to the site title.
  • {​{site.tagline}​} — Resolves to the site tagline.

Environment Variables ​

Access any system environment variable using the env. prefix:

yaml
site:
  token: "{​{env.MY_SECRET_TOKEN}​}"

Custom Variables ​

You can define your own variables in the vars: block of your config.yml and reference them elsewhere:

yaml
vars:
  twitter_handle: "@myname"

hero_section:
  desc: "Follow me on Twitter: {​{vars.twitter_handle}​}"

Recursive Resolution ​

The resolution engine supports deep nesting. A variable can reference another variable which in turn references a system or environment key.

yaml
# config.yml
vars:
  name: "John Doe"
  intro: "Hello, I am {​{vars.name}​}"

site:
  tagline: "{​{vars.intro}​} and this is my site."

Literals & Escaping ​

If you want to display the literal {​{variable_name}​} without it being resolved, prefix the first brace with a backslash: \{​{variable_name}​}.

NOTE

In config.yml, you should use \{​{ to escape the tag. The backslash will be removed and the braces will be preserved in the final output.