An IndieWeb-ready blog platform for Cloudron. Deploy your own IndieWeb site with full Micropub support, webmentions, and syndication to Mastodon/Bluesky.
- Micropub - Post from any Micropub client (Quill, Indigenous, iA Writer, etc.)
- Webmentions - Receive and display likes, reposts, and replies
- IndieAuth - Sign in with your domain
- Microformats2 - Full h-entry, h-card, h-feed, h-cite markup
- POSSE - Syndicate to Mastodon and Bluesky
- Bridgy - Content classes for cross-posting
- Articles (long-form)
- Notes (short posts)
- Photos
- Bookmarks
- Likes
- Replies
- Reposts
- Events, RSVPs, Jams, Audio, Video
- Responsive design with dark mode
- Tailwind CSS styling
- RSS and JSON feeds
- Sitemap generation
- Image optimization
- Social embeds (YouTube, Mastodon, Bluesky)
- Reply context display (h-cite)
- Interactions pages (likes, replies, reposts)
- GitHub - Display activity, starred repos, contributions
- Funkwhale - Show listening history
- YouTube - Display channel activity
- CV/Resume - Optional homepage sections
A pre-built image is automatically published on every commit to both Docker Hub and GitHub Container Registry:
| Registry | Image |
|---|---|
| Docker Hub | rmdes/indiekit-cloudron |
| GHCR | ghcr.io/rmdes/indiekit-cloudron |
Images are tagged :latest, :VERSION (e.g. 1.0.0-beta.25), and :sha-SHORT.
To install on Cloudron without building locally:
cloudron install --image rmdes/indiekit-cloudron:latest --app yourdomain.comTo update an existing installation:
cloudron update --image rmdes/indiekit-cloudron:latest --app yourdomain.comTo pin a specific version:
cloudron install --image rmdes/indiekit-cloudron:1.0.0-beta.25 --app yourdomain.comIf you want to customize the image before deploying:
-
Clone this repository:
git clone https://github.com/rmdes/indiekit-cloudron.git cd indiekit-cloudron -
Build and install:
make deploy APP=yourdomain.com # Or without Makefile: # cloudron build && cloudron install --app yourdomain.com
- SSH into the container:
cloudron exec --app yourdomain.com - Edit
/app/data/config/env.shwith your API tokens and site settings - Restart the app:
cloudron restart --app yourdomain.com
All configuration is done via environment variables in /app/data/config/env.sh. Copy env.example as a reference.
| Variable | Description | Example |
|---|---|---|
SITE_URL |
Your site URL (no trailing slash) | https://example.com |
SITE_NAME |
Site name | My Blog |
AUTHOR_NAME |
Your name | Jane Doe |
See env.example for all options:
- Author details (bio, avatar, location, email)
- Social links (for rel="me" verification)
- Syndication (Mastodon, Bluesky credentials)
- Webmentions (webmention.io token)
- Integrations (GitHub, Funkwhale, YouTube)
If migrating from another platform (micro.blog, Known, WordPress), you can set up redirects in redirects.map:
/2023/01/15/old-post.html /content/notes/2023-01-15-new-slug/;
The nginx.conf.template includes example patterns for common legacy URL formats.
Use any Micropub client:
- Web: Quill
- iOS: Indigenous
- macOS: iA Writer, Ulysses (with Micropub)
Or use the built-in editor at /create on your site.
Access /admin or /dashboard on your site to:
- View recent posts
- Check syndication status
- Manage content
- Sign up at webmention.io
- Add your token to
WEBMENTION_IO_TOKENin env.sh - Webmentions will appear on your posts automatically
To syndicate and receive responses from Mastodon/Bluesky:
- Connect your accounts at brid.gy
- The theme includes Bridgy-compatible content classes
make help # Show all available commands
make build # Build Docker image (no cache)
make build-cached # Build Docker image (with cache)
make deploy # Build + deploy to Cloudron
make update # Deploy without rebuild (use existing image)
make logs # View Cloudron logs
make shell # SSH into Cloudron container
make ci # Trigger GitHub Actions build
make ci-status # Show recent CI workflow runs# First time or after changing Dockerfile/dependencies
make deploy APP=yourdomain.com
# Quick update (reuse existing image)
make update
# Change target app
make deploy APP=mysite.example.comcd eleventy-site
npm install
npm run build:css # Build Tailwind CSS
npm run build # Build site
npm run serve # Development server with watch# Build app image
cloudron build
# Build without cache (after Dockerfile or dependency changes)
cloudron build --no-cache
# Deploy to Cloudron
cloudron update --app yourdomain.com
# View logs
cloudron logs -f --app yourdomain.com
# SSH into container
cloudron exec --app yourdomain.com┌─────────────────────────────────────────────────────┐
│ nginx (port 3000) │
│ Static files + Proxy to Indiekit │
└─────────────────┬───────────────────────────────────┘
│
┌───────────┴───────────┐
│ │
▼ ▼
┌─────────────┐ ┌─────────────┐
│ Eleventy │ │ Indiekit │
│ (watcher) │ │ (port 8080) │
│ │ │ │
│ Builds HTML │ │ Micropub │
│ from content│◄──────│ IndieAuth │
│ │ │ Syndication │
└─────────────┘ └─────────────┘
│ │
▼ ▼
┌─────────────────────────────────────────────────────┐
│ /app/data (persistent) │
│ content/ site/ config/ images/ uploads/ │
└─────────────────────────────────────────────────────┘
/app/pkg (read-only, Docker image)
├── eleventy-site/ # Theme and build tools
│ ├── _data/ # Site data (env-configured)
│ ├── _includes/ # Nunjucks templates
│ ├── css/ # Compiled Tailwind CSS
│ └── node_modules/ # Eleventy dependencies
├── start.sh # Entry point
├── nginx.conf # nginx config
├── indiekit.config.js.template
├── redirects.map # Legacy URL redirects
└── old-blog-redirects.map
/app/data (persistent, backed up)
├── config/ # Runtime config (env.sh, indiekit.config.js)
├── content/ # User posts (notes/, articles/, etc.)
├── site/ # Generated static HTML
├── cache/ # Eleventy cache
├── images/ # User images
└── uploads/ # Media uploads
- Set
AUTHOR_AVATARin env.sh to your image path - Place your avatar in
eleventy-site/images/(or use/images/user/for runtime uploads)
To display CV sections on the homepage:
- Edit
eleventy-site/_data/cv.jswith your experience, projects, skills, education - Rebuild — sections only appear when data exists
Edit files in eleventy-site/:
_includes/layouts/- Page layouts_includes/components/- Reusable componentscss/tailwind.css- Custom stylestailwind.config.js- Tailwind configuration
This deployment includes these Indiekit plugins:
@rmdes/indiekit-preset-eleventy- Eleventy content paths (permalink fix)@indiekit/store-file-system- Local file storage@rmdes/indiekit-syndicator-mastodon- Mastodon syndication@rmdes/indiekit-syndicator-bluesky- Bluesky syndication@rmdes/indiekit-endpoint-syndicate- Syndication endpoint@indiekit/endpoint-json-feed- JSON feed@rmdes/indiekit-endpoint-webmention-io- Webmention.io integration@rmdes/indiekit-endpoint-github- GitHub activity@rmdes/indiekit-endpoint-funkwhale- Funkwhale integration@rmdes/indiekit-endpoint-lastfm- Last.fm scrobbles@rmdes/indiekit-endpoint-youtube- YouTube integration@rmdes/indiekit-endpoint-rss- RSS feed reader@rmdes/indiekit-endpoint-microsub- Microsub social reader@rmdes/indiekit-endpoint-blogroll- Blog aggregator@rmdes/indiekit-endpoint-podroll- Podcast aggregator@rmdes/indiekit-endpoint-webmention-sender- Webmention sender@rmdes/indiekit-syndicator-indienews- IndieNews syndication@rmdes/indiekit-syndicator-linkedin- LinkedIn syndication@rmdes/indiekit-endpoint-linkedin- LinkedIn OAuth@rmdes/indiekit-endpoint-homepage- Homepage customization@rmdes/indiekit-endpoint-cv- CV/Resume sections
- Indiekit by Paul Robert Lloyd
- Eleventy static site generator
- Cloudron app platform
- IndieWeb community
MIT License