directory structure

autost.toml is where your site settings go, and any directory that contains one is an autost site. create one with autost new <path/to/site/directory>.

/posts/ (PostsPath internally) is where your post sources are stored, as .md or .html files. only files at the top level of this directory are considered when rendering your site, but files in subdirectories can still be replied to (<link rel=references>).

  • 1.html9999999.html for chosts (autost cohost2autost)
    • 1/1.html1/9999999.html for chosts in the thread of chost id 1
  • 10000000.md or 10000000.html and beyond for your other posts
  • imported/1.html and beyond for other imported posts (autost import)

/attachments/ (AttachmentsPath internally), is where your attachments are stored, including attachments cached from chosts or other imported posts.

  • <uuid>/<original filename> for your own attachments and attachments in chosts
  • thumbs/<uuid>/<original filename> for thumbnails of attachments in chosts
  • imported-<id>-<sha256 of url>/file.<ext> for attachments in other imported posts
  • emoji/<id>/file.<ext> for emoji in chosts

/site/ (SitePath internally), or the site output path, is where your site gets rendered to. you can delete this directory whenever you want a clean build.

  • 1.html9999999.html for each of your “interesting” chosts
  • 10000000.html and beyond for your other posts (always “interesting”)
  • index.html and index.feed.xml for all of your “interesting” posts
  • tagged/<tag>.html and tagged/<tag>.feed.xml for each “interesting” tag
  • attachments/ is a mirror of your /attachments/ directory, using hard links
  • plus several static files copied from the program binary or path_to_static
    • deploy.sh uses rsync to upload your “interesting” posts to a web server

settings (autost.toml)

base_url = "/" (required)
relative url your site will be served under in autost server, or any other web server you deploy it to. must end with a slash.
external_base_url = "https://example.com/" (required)
absolute url of the web server you are deploying to, for atom output. must end with a slash.
server_port = 8420 (optional)
port to listen on, for autost server.
site_title = "ao!!" (required)
title of your site as a whole, for both html and atom output.
other_self_authors = ["https://cohost.org/staff"] (required)
author urls whose posts are considered your own, in addition to [self_author].

the settings below control which posts are considered “interesting” and included in the html and atom output by default. this allows you to curate your imported chosts, and linkify meaningful tags.

interesting_tags = [["photography"], ["reading", "watching", "listening"]] (required)
posts with these tags are considered “interesting” and included by default, regardless of author. these tags also generate tag pages, which are linked to in all of the posts in those tags.

this setting must be a list of lists of tags — the grouping controls how they are displayed in the navigation at the top of the html output.

archived_thread_tags_path = "path/to/archived_thread_tags.txt" (optional)
path (relative to autost.toml) to a list of additional tags to add to imported posts. you write this, and the format is:
# <original url> <tag>,<tag>,...
https://cohost.org/project/post/123456-slug tag,another tag
interesting_output_filenames_list_path = "path/to/output_interesting.txt" (optional)
path (relative to autost.toml) to a list of paths relative to your site output directory, representing the “interesting” posts and tag pages. autost render writes this, and you need this to use sites/deploy.sh.
interesting_archived_threads_list_path = "path/to/interesting.txt" (optional)
path (relative to autost.toml) to a list of imported posts that should also be considered “interesting”, regardless of tags or author. you write this, and the format is:
# <original url>
https://cohost.org/project/post/123456-slug
https://nex-3.com/blog/reblogging-posts-with-h-entry/
excluded_archived_threads_list_path = "path/to/excluded.txt" (optional)
path (relative to autost.toml) to a list of imported posts that should not be considered “interesting”, even if your other settings would otherwise consider them interesting. you write this, and the format is:
# <original url>
https://cohost.org/project/post/123456-slug

use the settings below if you want to tinker with static files like style.css and script.js without rebuilding your copy of autost:

path_to_static = "../../static2" (optional)
path (relative to autost.toml) to a directory with your own versions of the files in autost’s static directory. note that if you set this to the actual static directory in your copy of the source code, autost will still get rebuilt whenever you change any files, which may not be what you want.
path_to_static = "../../static2" (optional) (deprecated)
path (relative to autost.toml) to a directory containing a static directory with your own version of the files in autost’s static directory. this doesn’t work as nicely as path_to_static, but it was needed in older versions of autost (< 0.3.0) where static files were not built into the autost binary.

[self_author] (optional)

this section is for your details as an author. it has two effects: new posts are prefilled with this author, and posts by this href are always considered “interesting”.

href = "https://example.com" (required in section)<link rel="author" href>
url for <link> metadata and your name and handle links. uniquely identifies you for the purposes of checking if a post is your own.
name = "eggbug" (required in section)<link rel="author" name>
your name, for atom output.
display_name = "eggbug" (required in section)<meta name="author_display_name" content>
your name, for html output.
display_handle = "eggbug" (required in section)<meta name="author_display_handle" content>
your handle, for html output. since this is a domain name like example.com in other imported posts (autost import), we recommend setting this to a domain name like example.com, but it can be anything really.

[renamed_tags] (optional)

this section is for automatically renaming tags in your posts without editing them. this takes effect before [implied_tags].

"Laptop stickers" = "laptop stickers"
renames any occurrence of “Laptop stickers” to “laptop stickers”.

[implied_tags] (optional)

this section is for automatically adding tags to your posts when they contain a specific tag. this takes effect after [renamed_tags].

you can use this to tag your posts with more general tags (e.g. “photography”) when they have a more specific tag (e.g. “bird photography”). the implied tags (to the right of “=”) are inserted before the specific tag, so the more general tags come first.

"bird photography" = ["birds", "photography"]
when a post is tagged “bird photography”, replace that tag with “birds”, “photography”, and “bird photography”.

[[nav]] (optional)

you can have any number of these sections, or none at all. each of these sections adds a link to the navigation at the top of the html output.

href = "." (required in section)
url of the link. relative urls are relative to base_url, not to the current page.
text = "posts" (required in section)
text to display in the link.

post format

posts are markdown (.md) or html (.html) fragments with html “front matter” for metadata. the front matter includes…

<link rel="archived" href>
link to the original post, for imported posts.
<link rel="references" href>
one for each post being replied to, including the posts that those posts are replying to (these are not resolved recursively).
<meta name="title" content>
title or “headline” of the post.
<meta name="published" content>
date the post was published, as a rfc 3339 timestamp.
<link rel="author" href name>
author of the post. the name here is used in atom output, while the other author metadata is used in html output.
<meta name="author_display_name" content>
name of the author, used in html output.
<meta name="author_display_handle" content>
handle of the author, used in html output. this is @projectName for chosts (autost cohost2autost), or a domain name like example.com for other imported posts (autost import). we recommend setting this to a domain name like example.com, but it can be anything really.
<meta name="tags" content>
one for each tag associated with the post.
<meta name="is_transparent_share">
if present, hide the post content area entirely. this is used by autost cohost2autost to make cohost’s “transparent shares” look nicer.

see also templates/post-meta.html and PostMeta internally.