Existing Post Types:

A "post type" is just a template living in templates/html/components/forms/. Every post picks exactly one of them — it's what the Content Template dropdown selects when you edit a Series.

Create a new Post Type:

This writes a new template into the forms directory currently in use (<: $forms_dir :>) along with a matching .json sidecar describing any custom fields, so that the data model knows to keep them when a post is saved.
Type Name * — letters, numbers, dash and underscore only

Canned Fields

Most post types reuse the same handful of blocks. Tick whichever ones this type needs. The title input, the visibility selector (visibility.tx) and the ACL selector (acls.tx) are always included — every post has all three, and a type whose editor cannot set them produces posts nobody can title, find or restrict.








Title placeholder text

Where the posts come from

A datasource builds this type's posts from somewhere else every time the page is drawn, rather than from posts anybody wrote — and if it says its posts cannot be written, no editor is generated at all, because there would be nothing behind the form to save.
Content Body — this is always the last thing in the editor, and is what carries the post body itself.

Custom Fields

These become extra inputs in the editor, and are available in your display template below as <: $post.your_field_name :>. Uploads aren't supported here — use the Attachment uploader above for those.
A field set to editors only is dropped before the page is rendered for anyone who cannot edit it, so it is safe to refer to in the display template below without guarding it yourself — useful for a connection string or anything else that shouldn't be public.
An Another Post field depends on a different post type. Pick one stores a single post's ID, chosen from a dropdown in the editor, and hands you the whole post as <: $post.your_field_name_post :>. All of them stores nothing and simply hands you every post of that type as <: $post.your_field_name :> to loop over.

Display Template

Kolon markup for how this post type renders when someone looks at it.
<: $tiled :> is true when the series asked for its posts to be tiled, so branch on it if this type wants a compact view — see forms/file.tx for the shape. The wrapper gets the tile class either way. Note that it is only ever true for logged-out visitors: an editor needs the full view. Use <: $post.yourfield :> for your custom fields, and <: render_it($post.data) | mark_raw :> for the post body.