Core concepts
The building blocks of a Justflows site: sites, content, blocks, themes, plugins, hooks, and cache.
7 min read
Site
A Justflows process serves one site (created by the installer). Settings, languages, menus, and content all hang off that site id. Multi-site in one process is not the CE model.
Content
The admin API accepts two types today: `post` and `page`. Each row has a title, slug, locale, excerpt, optional fields JSON, a block document, and a status. See Content.
Blocks
A page is a JSON tree { version: 1, blocks: [] }. Core ships 18 block types (paragraph, heading, image, columns, hero, and more). The visual builder at /admin/content/:id/builder edits that tree. See Block editor and Core blocks.
Themes and CSS providers
Themes are .jfpkg packages with templates, patterns, and justflows-theme.json. CSS providers are separate packages (Bootstrap, Pico, Tailwind, or none) activated under Design. The default theme id is justflows.default.
Plugins and hooks
Write a plugin by creating plugins/<name>/ in the CE source (copy plugins/hello-world). Plugins declare a manifest (id, version, their own license, permissions) and an activate(ctx) function. Core is MIT; extensions are not MIT just because they use the SDK. Installed packages must use a GPL-compatible SPDX identifier. They change behaviour through hooks: actions observe, gates can cancel, filters transform. Import types from @justflows/sdk — never from @justflows/core.
Users and capabilities
Five roles: administrator, editor, author, contributor, subscriber. Capabilities such as content:publish and plugins:install are the stable public names; see Users and roles.
Cache
jf-cache is the built-in object cache (memory or filesystem; Redis reserved). Public HTML, published content, menus, theme mods, and CSS provider lists all sit behind it. Plugins get a namespaced ctx.cache.
- .jfpkg
- Zip-based package format for plugins, themes, and CSS providers. Installed from Admin or
justflows plugin install. - Capability vs permission
- Users have capabilities (what a role may do). Plugins declare permissions in the manifest (what the plugin is allowed to hook or call).