Skip to content

Releases: srmdn/foliocms

v0.8.0

23 Apr 23:00

Choose a tag to compare

v0.8.0

New features

Send post as newsletter from the editor
Published posts now have a "Send to subscribers" button in the editor sidebar. Two-step confirm shows the post title before sending. The post title becomes the email subject and the post body becomes the email content.

Unsubscribe link in every newsletter email
Each outgoing newsletter email includes a unique unsubscribe link at the bottom: `{SITE_URL}/api/unsubscribe?token={token}`. Clicking it shows a confirmation page rather than a blank screen.

Fixes

  • GET /api/posts no longer returns posts with a future publish_date even when draft=false
  • Unsubscribe endpoint now returns an HTML confirmation page instead of 204 No Content
  • Mailer now supports implicit TLS (port 465 / SMTPS) in addition to STARTTLS

Internal

  • Extracted MailSender interface so the mailer is swappable in tests
  • Added tests: TestPublicListExcludesFutureDated, TestSendNewsletterInjectsUnsubscribeLink, TestSendNewsletterNoSubscribers, TestSendNewsletterSMTPNotConfigured

v0.7.0

23 Apr 00:48

Choose a tag to compare

What's Changed

  • Sitemap: GET /sitemap.xml returns a standards-compliant XML sitemap of all published posts
  • RSS feed: GET /feed.xml returns an RSS 2.0 feed of the 20 most recent published posts
  • Duplicate post: the post list has a Duplicate button that creates a draft copy with a "Copy of" prefix and opens it in the editor
  • Change password: the Settings page has a Change Password section; a successful change signs the user out immediately

How to Upgrade

Replace the binary. No database migrations required.

Install

See README for full instructions.

Download the binary for your platform below, or build from source:

```
go install github.com/srmdn/foliocms/cmd/server@v0.7.0
```

Full Changelog

v0.6.1...v0.7.0

v0.6.1

06 Apr 15:05

Choose a tag to compare

  • Fix: GET /api/posts/:slug now includes hero_image as a base64 data URI in the response; it was previously only returned by the admin endpoint

v0.6.0

06 Apr 14:12

Choose a tag to compare

Bug fixes for the rebuild pipeline.

  • Fix: THEME_SERVICE restart now uses sudo systemctl so it works when the backend runs as a non-privileged user
  • Fix: Astro telemetry no longer blocks the rebuild subprocess; ASTRO_TELEMETRY_DISABLED=1 is injected into the subprocess environment

v0.5.0

06 Apr 01:05

Choose a tag to compare

What's new

  • demo.foliocms.com: live demo with public credentials, pre-seeded content, and a one-click reset button
  • Demo mode: set DEMO_MODE=true to enable; DEMO_EMAIL and DEMO_PASSWD control the demo account (defaults: demo@foliocms.com / demo1234)
  • Demo reset: POST /api/admin/demo/reset wipes all posts and media, re-seeds sample content, and restores the demo user
  • Login page banner: shows credentials and a "Fill credentials" button when demo mode is active
  • S3Driver: store media in AWS S3, Cloudflare R2, NevaObjects, MinIO, or any S3-compatible provider

New env vars

Variable Default Purpose
DEMO_MODE false Enable demo mode
DEMO_EMAIL demo@foliocms.com Demo account email
DEMO_PASSWD demo1234 Demo account password

Full changelog

See CHANGELOG.md.

v0.4.0

04 Apr 08:50

Choose a tag to compare

What's new

Site settings (M1)

  • New Settings page in the admin dashboard to edit site name, description, and social links (GitHub, Twitter, LinkedIn)
  • Stored in a settings key-value table; readable by themes via GET /api/settings

Media library (M2 + M3)

  • Upload images from the admin (drag-and-drop or file picker), 10 MB limit, image types only
  • Browse uploaded files in a grid view with thumbnails
  • Click any image to copy its URL; delete with confirmation
  • Files stored under content/media/, served publicly at GET /media/*
  • Tracked in a media SQLite table for fast listing and clean deletes
  • New env vars: SITE_URL (base URL for media links), MEDIA_STORAGE (default: local)

Editor image integration (M4)

  • Toolbar button opens a modal to insert an image by URL and alt text
  • Paste or drop an image file directly into the editor: auto-uploads to the media library and inserts the URL
  • Both paths insert standard Markdown ![alt](url) via Milkdown's InsertImage command

Fixes

  • Rebuild Site now returns a clear error when THEME_DIR is not configured, instead of a cryptic chdir failure

Upgrade notes

Add to your .env:

SITE_URL=https://your-domain.com
MEDIA_STORAGE=local

Run migrations on startup (automatic). No schema changes required beyond what the binary applies on first run.

v0.3.0

01 Apr 09:11

Choose a tag to compare

What's Changed

  • Built-in admin dashboard embedded in the Go binary at /admin (no separate service)
  • Post list with draft/published/scheduled filter tabs and delete confirm
  • Post editor: Milkdown WYSIWYG Markdown (headings, lists, code blocks, tables, links), hero image upload, slug auto-generation, description counter, publish date, draft toggle
  • Slug rename on update: content directory and all assets move automatically
  • Subscribers page: list and remove newsletter subscribers
  • Settings page: rebuild trigger with live status polling, build output and error display
  • Collapsible sidebar with mobile drawer, fully responsive (375px/768px/1280px)
  • Cmd/Ctrl+S keyboard shortcut to save in the post editor
  • Security: server now binds to 127.0.0.1 instead of 0.0.0.0
  • Unit tests for storage, auth, and post handlers
  • API reference updated with all endpoints

Install

See the README for full install instructions.

Download the binary for your platform below, or build from source:

go install github.com/srmdn/foliocms/cmd/server@v0.3.0

Upgrade

Replace your existing binary and restart the service. No migration required.

Full Changelog

v0.2.0...v0.3.0

v0.2.0

27 Mar 12:46

Choose a tag to compare

What's new

Webhook rebuild

Trigger a site rebuild from external services (CI, git hooks, etc.):

POST /api/webhook/rebuild
X-Webhook-Secret: <your-secret>

Set WEBHOOK_SECRET in your .env to enable it.

Newsletter

Full subscriber management + SMTP send via API:

Method Path Auth
POST /api/subscribe public
GET /api/unsubscribe?token=xxx public
GET /api/admin/subscribers JWT+CSRF
DELETE /api/admin/subscribers/{id} JWT+CSRF
POST /api/admin/newsletter/send JWT+CSRF

Configure SMTP via env vars: SMTP_HOST, SMTP_PORT, SMTP_USERNAME, SMTP_PASSWORD, SMTP_FROM.

Landing page

foliocms.com is live with a full landing page.

Binaries

Pre-built binaries for Linux and macOS (amd64 + arm64).

v0.1.0

27 Mar 03:44

Choose a tag to compare

What's in this release

First usable release of FolioCMS — a lightweight, self-hostable CMS.

  • Single Go binary, SQLite, no Docker
  • Post CRUD with Markdown + YAML frontmatter
  • JWT auth (cookie + Bearer) with stateless CSRF
  • Migration runner with version tracking
  • First-run setup wizard (--setup)
  • install.sh — one-command installer (clones, builds, configures)
  • Ships with foliocms-theme-default — an Astro 6 SSR theme

Install

curl -O https://raw.githubusercontent.com/srmdn/foliocms/main/install.sh
bash install.sh

Or download the binary for your platform below and follow README.

Requirements

  • Go 1.21+ (only needed if building from source)
  • Node.js 22+ and npm
  • Git
  • Linux or macOS

Full Changelog

https://github.com/srmdn/foliocms/commits/v0.1.0