Releases: srmdn/foliocms
v0.8.0
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/postsno longer returns posts with a futurepublish_dateeven whendraft=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
MailSenderinterface so the mailer is swappable in tests - Added tests:
TestPublicListExcludesFutureDated,TestSendNewsletterInjectsUnsubscribeLink,TestSendNewsletterNoSubscribers,TestSendNewsletterSMTPNotConfigured
v0.7.0
What's Changed
- Sitemap:
GET /sitemap.xmlreturns a standards-compliant XML sitemap of all published posts - RSS feed:
GET /feed.xmlreturns 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.6.0
Bug fixes for the rebuild pipeline.
- Fix:
THEME_SERVICErestart now usessudo systemctlso it works when the backend runs as a non-privileged user - Fix: Astro telemetry no longer blocks the rebuild subprocess;
ASTRO_TELEMETRY_DISABLED=1is injected into the subprocess environment
v0.5.0
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=trueto enable;DEMO_EMAILandDEMO_PASSWDcontrol the demo account (defaults:demo@foliocms.com/demo1234) - Demo reset:
POST /api/admin/demo/resetwipes 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
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
settingskey-value table; readable by themes viaGET /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 atGET /media/* - Tracked in a
mediaSQLite 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
via Milkdown's InsertImage command
Fixes
- Rebuild Site now returns a clear error when
THEME_DIRis not configured, instead of a crypticchdirfailure
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
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
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
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.shOr 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