Simple Website Framework

Configuration Reference

Monday April 20th, 2026

Written by Scary le Poo

All site-wide configuration lives in config/config.php. This file is loaded at the very start of every request. A copy called config-example.php is included in the repository as a safe starting point — copy it to config.php before making changes.


Core Settings

$enableHTMLCacheServe

Type: bool | Default: false

Enables the server-side HTML cache. When true, rendered pages are saved as static .html files and served directly on subsequent requests until the cache expires.

Set to false during development so you always see your latest changes. Enable it for production to improve performance.

$enableHTMLCacheServe = false;

See the Caching page for full details.


$SSL

Type: bool | Default: false

Tells the framework whether the site is served over HTTPS. Setting this to true causes all internally constructed URLs to use the https:// protocol and triggers a redirect if the visitor arrives over HTTP.

$SSL = true;

$ForceWWW

Type: bool | Default: true

When true, the framework redirects any request that does not include www. to the www. version of the URL (and vice versa when false). This keeps your canonical URL consistent.

$ForceWWW = true;

$WebsiteURL

Type: string

Your domain name, without a protocol prefix and without a trailing slash. The framework combines this with $SSL and $ForceWWW to construct the full canonical URL used in redirects and meta tags.

$WebsiteURL = "example.com";

Site Identity

$WebsiteTitle

Type: string

The name of your site. Appears in browser tab titles (appended after the page title), OpenGraph og:site_name, and the hero banner in the skeleton theme.

$WebsiteTitle = "My Website";

$WebsiteDescription

Type: string

The default meta description for any page that does not define its own pageexcerpt. Also used as the OpenGraph description fallback.

$WebsiteDescription = "A short description of my website.";

$WebsiteAuthor

Type: string

The default author name used in the tag for any page that does not define its own pageauthor.

$WebsiteAuthor = "Jane Smith";

$WebsiteKeywords

Type: string

A comma-separated list of default keywords used in for pages that do not define their own pagekeywords.

$WebsiteKeywords = "website, framework, php, simple";

$WebsiteImage

Type: string

Path to the default image (relative to the site root) used in the OpenGraph og:image tag for pages that do not define their own pageimage. Also used as the default image in the RSS feed.

$WebsiteImage = "images/my-default-image.webp";

Language & Locale

$WebsiteLanguage

Type: string | Example: "en"

The primary language code used in the attribute.

$WebsiteLanguageCountry

Type: string | Example: "US"

The country code used in a secondary lang attribute.

$WebsiteLanguageLocale

Type: string | Example: "en_US"

The locale string used in the OpenGraph og:locale tag.

$WebsiteLanguage = "en";
$WebsiteLanguageCountry = "US";
$WebsiteLanguageLocale = "en_US";

Theme

$theme

Type: string | Default: "skeleton"

The name of the active theme. Must match a folder name inside themes/. Changing this value switches the entire site to a different theme.

$theme = "skeleton";

$showhomepagetitle

Type: bool | Default: true

Controls whether the page title <h1> is shown on the home page. On all other pages the title is always shown. Set to false if your home page design handles the heading itself.

$showhomepagetitle = true;

Plugins

$loadplugins

Type: bool | Default: true

Master switch for the plugin system. When false, plugins/plugins.php is never included and no plugin code runs — including jQuery. Set to false only if you are certain you need nothing from the plugin system.

$loadplugins = true;

$jQuery

Type: bool | Default: true

Loads jQuery 3.7.1 and jQuery Migrate 3.4.0. Setting this to false will break any plugin or page script that depends on jQuery, including the StellarNav navigation system.


$anchorLinkAutoClass

Type: bool | Default: true

Adds the CSS class anchor-top-margin to every anchor link on the page via JavaScript. This is used to apply scroll-margin-top so that anchor targets are not hidden behind the sticky navigation bar. Disabling this will break smooth scroll behaviour.


$anchorLinkCurrentURLRewrite

Type: bool | Default: true

Rewrites all href="#..." anchor links so they include the full current page URL (e.g. /about#section instead of just #section). This is required for anchor links to work correctly when the framework handles routing through index.php. Disabling this will break all in-page anchor links.


$metaInfoBoxRewriteURL

Type: bool | Default: true

When the ?meta=yes debug overlay is active, this option appends ?meta=yes to every link on the page so you can browse the site without losing the overlay. Only activates when ?meta=yes is present in the URL; has no effect otherwise.


$fontAwesome

Type: bool | Default: true

Loads Font Awesome 4.7.0. Set to false if you are not using Font Awesome icons and want to reduce page weight.


$yBox

Type: bool | Default: true

Loads the yBox lightbox plugin. Required if you want clickable image lightboxes on your pages.


Editor Plugin

$editorEnabled

Type: bool | Default: false

Master switch for the optional browser-based page editor. When false, zero editor code runs anywhere on the site and the ?editor query parameter is ignored entirely. See the Editor page for full setup instructions.

$editorEnabled = false;

$editorToken

Type: string

A secret string that must be present in the URL for the editor to appear at all. Anyone without the token sees nothing — not even a login form. Should be a long random string. Generate one with:

php -r "echo bin2hex(random_bytes(16));"
$editorToken = 'a3f8c2d1e4b7906f2a1d3c5e7b9f0d2e';

$editorPasswordHash

Type: string

A bcrypt hash of the editor password. Never store the plaintext password — generate the hash once and paste the result here. See the Editor page for step-by-step instructions on generating the hash.

$editorPasswordHash = '$2y$10$...';

$editorSessionTimeout

Type: int | Default: 1800

How long an authenticated editor session lasts without activity, in seconds. After this period the session expires and the password must be entered again.

$editorSessionTimeout = 1800; // 30 minutes
Simple Website Framework

A lean, flat-file PHP framework with no database, no bloat, and no black boxes. Build something clean and keep control of every part of it.

Contribute on GitHub

Found a bug? Have an idea? The project is open source and contributions are welcome. Find it on GitHub.

Documentation

This site is the living documentation for the framework. Every feature is demonstrated in the place it's meant to be used. Start with the introduction or dive straight into the setup guide.