Downloads, listings and installed packages
Use these features to share files, generate collections of links and add editing tools. Follow downloads and packages for the browser steps.
Downloadable objects
A raw downloadable object pairs an unchanged file with a Markdown description page and optional images. Visitors open the page URL to read the description, then follow the download link. Files up to 50 MiB are delivered as attachments. Viking serves their bytes without executing them.
Replacing a file creates a new asset. Update the object, save and publish; older releases retain the original bytes. Remove file/image references from objects before deleting their assets. Review ordinary page links as well.
Repeated listings
Add Site → Repeat files to a visual page and design its child blocks as a card template. Select a URI branch, a content kind (pages, raw objects or all), and whether to include descendants. The default lists direct URL children; an empty branch uses the current page's URL. Menu hierarchy and visibility do not select listing entries.
Summary length sets a positive whole-number limit, and Summary unit chooses Paragraphs or Words. Existing and new listings default to one nonempty paragraph. Summaries combine the selected paragraphs as plain text; word limits count whitespace-separated words across paragraphs. Headings and shared headers, navigation and footers are excluded. These controls are also available on File carousel, Cover flow, Ring gallery and Masonry grid.
Bind fields for title, page URL, summary, download URL, image or filename.
The image field prefers the page's featured image, then the first related image
of a raw object. Choose featured-image to use only the featured image, with
featured-image-alt as its description. A Featured image block inside the
card template renders each matching page's cover and disappears when unset.
Items sort by title and URI. The branch root and current page are excluded,
and unavailable fields remain empty. Use one repeater level per template.
Save matching content, preview the result and publish. Lists become ordinary
static HTML and refresh with the next publication.
The File carousel, Cover flow, Ring gallery and Masonry grid example plugins add alternative presentations to these same cards. The three moving layouts wrap continuously and provide manual controls, optional autoplay and motion preferences. Their browser behaviour comes from a fixed CMS runtime; packages still contain only declarative blocks and CSS. See file gallery layouts.
Package types
The External link page-type plugin creates menu objects with a destination URL and no page content. They follow ordinary menu visibility, ordering and nesting, and are omitted from public pages, sitemaps and content listings. See external menu links.
| ZIP package | What it adds | How to use it |
|---|---|---|
| Block pack | Reusable visual editor blocks | Insert blocks, edit their content and save the page. |
| Page type | Named types with properties, URI templates and field blocks | Choose the type when creating a page or use its conversion action. |
| Renderer | An additional source-page format | Choose the format, add source and preview its rendered output. |
| Theme | A portable site design | Preview and apply it in Themes. |
Open Plugins and packages to upload a local ZIP. Installation saves to private CMS storage. Select or apply what you need and publish separately to update the public website. Keep packages in your backup alongside the editable project.
Package IDs are unique. Choose a distinct ID for a replacement package and move content to it before removing the old version. A page-type or renderer package cannot be removed while saved pages use it. Blocks already placed in a page remain ordinary page content after their block pack is removed.
Renderers run within a bounded CMS-side WebAssembly environment and return sanitised HTML. If rendering fails, correct the source or package before retrying preview/publication. Themes have separate active/bundled deletion protections; see theme bundles.
For custom packages and integrations, use the separate package-authoring reference.
