Getting Started with Accent
This walkthrough takes you from a fresh checkout to your first published edit through the admin UI. The full reference docs live next to it; this page is the canonical 1.0 onboarding.
Install
Download a binary (recommended)
Accent CMS ships as one binary per platform: every download contains the full feature set, and a license key decides which tier is unlocked at runtime. Building a site and running the development server are free and need no key.
On Linux and macOS:
curl -fsSL https://raw.githubusercontent.com/AccentCMS/accent/main/install.sh | sh
On Windows (PowerShell):
irm https://raw.githubusercontent.com/AccentCMS/accent/main/install.ps1 | iex
Or download the archive for your platform manually from the
latest release
(accent-<version>-<target>.tar.gz, or .zip on Windows) and place the
accent binary on your PATH.
Every release is checksummed and GPG-signed. The install script verifies both automatically; to verify a manual download, see Verifying downloads.
Instant preview
Already have a markdown file? You do not need a project at all – point serve straight at it:
accent serve README.md
The file renders at http://localhost:4400/ with a built-in viewer theme. No config.yaml, theme, or content directory has to exist on disk – nothing is written or extracted anywhere. The title comes from the file’s frontmatter title, falling back to the first # heading, then the filename. Images and other files sitting next to it resolve as you would expect, and editing the file refreshes the browser automatically.
Point it at a directory to browse a whole folder of notes with the same viewer theme:
accent serve ./notes/
Each markdown file becomes a page; a default.md, README.md, or index.md in the directory root is the home page. To preview a folder with your own theme instead of the built-in viewer, add --theme-dir ./themes --theme my-theme.
Preview a remote markdown file
The markdown does not even have to be on your machine. Point serve at an http(s) URL and it fetches the document once and renders it the same way:
accent serve https://raw.githubusercontent.com/rust-lang/book/main/README.md
Use the raw file URL (the one that returns plain markdown), not the rendered web page – a code host’s HTML page is rejected with a hint to switch to the raw URL. Because the document is third-party content, two safety rules apply automatically: inline raw HTML is shown as text rather than executed, and relative links and images are rewritten to load from the source origin. The fetch is hardened with a request timeout, a 10 MB size limit, and a redirect cap, and never sends credentials.
By default the document is fetched once at startup. To keep a long-lived preview in sync with a changing source, add --refresh with a polling interval in seconds:
accent serve https://example.com/docs/runbook.md --refresh 60
Each poll only re-downloads when the origin reports a change; when it does, the page cache is refreshed and the browser reloads. A failed poll keeps the last good copy. --refresh is valid only with a URL target.
When you are ready to turn a preview into a real project, accent init scaffolds one.
Initialise a site
accent init my-site cd my-site
init lays out the starter template: a config.yaml, a content/ directory with a homepage, and the default theme under themes/.
Start the dev server
accent serve
Visit http://localhost:4400. The home page is live. Editing any markdown file under content/ triggers a browser refresh in under a second.
Editing your first page in the admin Core+
The admin UI runs alongside the public site at /_admin/. Three gates must be true for the shell to mount: the binary must be built with the admin cargo feature (the default for Standard and Pro editions), a Core+, Standard, or Pro license must be loaded (the admin is a licensed feature in dev and production alike – a Core+ key is the cheapest tier that unlocks it), and admin.enabled in config.yaml must be true.
-
Enable the admin and set a token. Add an admin section to
config.yaml:admin: enabled: true token: "your-secret-admin-token-min-32-bytes"
The token can also be supplied through the
ACCENT_ADMIN_TOKENenvironment variable, which takes precedence over the value inconfig.yaml. In production, use at least 32 bytes of entropy; a startup warning is logged for tokens shorter than 16 characters. -
Start the server:
accent serve
-
Open
http://localhost:4400/_admin/loginand enter your token. It is compared in constant time against the configured token; on success you land on the dashboard. Failed attempts re-render the form with an inline error; only failed attempts count toward the rate limit of 10 per minute, so a burst of legitimate logins never locks you out. -
Browse the dashboard. It lists the five most recently modified pages and a validation summary bucketed by severity, so you can see at a glance what changed and whether anything needs attention.
-
Open a page from the pages list. Click Pages to reach
/_admin/pages– a paginated, filterable list of every page – and open the page you want to edit. The editor opens in edit mode with one input per frontmatter field. -
Edit a field and watch the live preview. As you change a field, the editor re-renders a live preview from your current form values, giving immediate visual feedback before you commit the change.
-
Save the page. The save path validates your input, checks for concurrent edits, writes the file, and appends an entry to the admin audit log. The cache layer invalidates automatically, so the public site reflects your change on the next request.
-
Move the page through the workflow. The editor shows only the transitions legal from the page’s current state, so the available buttons depend on where the page is. New pages start as Published, so to send one into the editorial flow you choose Unpublish (back to Draft) or Archive. From Draft the flow runs Submit for review to Review, then Approve to Published. Published pages are publicly visible (subject to any date constraints); drafts and pages in review stay hidden from the public site.
Shareable by default
Every page the default theme renders ships complete Open Graph and Twitter Card
tags, a build-safe canonical link, and a page-specific description, so links
unfurl as rich cards on Slack, LinkedIn, X, Mastodon, and friends with no extra
work. To make those cards as good as possible, set a few site-wide values in
config.yaml:
site: name: My Site url: https://example.com # required for absolute canonical / og:url description: A short site-wide description used when a page has none. meta: twitter:site: "@mysite" # any platform tag is just a key structured_data: default_image: /assets/social-card.png # branded fallback card image
Per page, set description:, image:, or a meta: block in frontmatter to
override the defaults. See Social Sharing and SEO Metadata
for the full system.
What’s next
- Markdown Guide for content syntax
- Templating Guide for theme customisation
- Admin UI reference for the full admin feature set, including workflow transitions, the source / diff modes, and the publisher role