Skip to content

Releases: TemujinCalidius/FediHome

FediHome v1.19.0

Choose a tag to compare

@TemujinCalidius TemujinCalidius released this 23 Jul 08:39
fe8ee09

🔒 Patched a high-severity image vulnerabilitysharp 0.35.3 clears four libvips CVEs that were reachable from remote fediverse media and /_next/image. npm audit is now 0 vulnerabilities, for the first time since June.
📱 Phone notifications now actually work on a fresh install — the 🔔 menu used to offer "Enable" on a server with no push keys, then fail with a cryptic error. It now says Set up phone notifications and does the whole thing in one click.
🔔 Generate your Web Push keys from the admin — no .env editing, no npx web-push generate-vapid-keys. The private key is stored encrypted at rest, and rotating keys correctly re-enrols your devices.
📖 A third theme — "Classic Blog" — a left sidebar of your bio, recent posts and links beside a serif reading column, on warm charcoal with a pine-green accent.
🎨 Themeable text colour — text now resolves through a content-* ramp instead of fixed greys, so themes can move body copy and not just backgrounds. Nothing changes visually; this is the groundwork for light themes and a custom palette.
↔️ Put the sidebar where you want it — left or right, with the blocks in the order you choose (drop one to hide it).
🖼️ Set your avatar and banner during first-run setup — a fresh install lands looking like you, no later trip to the admin panel.
⏱️ Set session and app-token lifetimes from the admin — no more ADMIN_SESSION_TTL_DAYS env editing.
📝 Web Push and theming are properly documented — including the iOS "Add to Home Screen" requirement, which is a hard prerequisite and wasn't written down anywhere.

Upgrading: npm run update. No schema changes, no breaking changes.

Full changelog: https://github.com/TemujinCalidius/FediHome/blob/main/CHANGELOG.md

FediHome v1.18.0

Choose a tag to compare

@TemujinCalidius TemujinCalidius released this 21 Jul 01:08
e79a934

Your data, protected — and your site, yours to shape. This release pairs a batch of durability and security fixes with the biggest step yet on themeable layout.


⚠️ Docker users — one step BEFORE you upgrade

Before v1.18.0 the app container had no volume, so your uploaded media lived inside the container. v1.18.0 adds a bind mount — and a bind mount shadows whatever is already at that path. Copy your files to the host first:

cd /path/to/fedihome
docker compose cp app:/app/public/uploads ./public/uploads
ls public/uploads      # confirm your files are there

Only then git pull and rebuild. One-time step — fresh installs need nothing. Running under pm2/systemd? Nothing to do.


🛟 Durability

  • 💾 Docker installs no longer destroy your uploads (#308) — images, photos, audio and cached feed media lived only in the container's writable layer, so any recreate wiped them: --build, --force-recreate, a prune, even a host reboot. The database always survived and stores paths, so the site came back looking fine with every image and player 404ing. Now bind-mounted to the host.
  • 🔑 A lost federation keypair is no longer silent (#310) — if your ActorKeys row goes missing, FediHome used to quietly mint a new one, rotating your Fediverse identity so followers' cached keys no longer matched. It now warns loudly and raises a dismissible admin alert pointing at recovery.
  • 📦 Backup docs actually describe a complete backup (#309) — the guidance covered pg_dump only, but public/uploads/ isn't in the database. Backup, restore and migration now cover both halves, with ActorKeys flagged as the most important row.
  • 🧰 Setup can't brick an install (#59) — a failed first run used to mark setup complete before writing .env.local, locking you out with no file-free recovery. It now validates first and rolls back on failure.

🔒 Security

  • 🛡️ Two high-severity advisories cleared (#311, #312) — both stale lockfile pins, neither reachable at runtime. The unused gray-matter production dependency was removed outright rather than patched around. npm audit: 0 high.

🎨 Theming (#250)

  • 🧱 Themeable header, footer and page-width regions — Bar / Centered / Minimal headers, Row / Minimal / Columns footers, Normal / Narrow widths.
  • 📐 A sidebar layout — content beside about/bio, recent posts, sections and links: the frame the upcoming "Classic Blog" theme is built on.
  • 🏗️ Public pages moved into their own route group so layouts never touch your admin screens. URLs unchanged.

🌐 Configure from the web (#59)

  • 👤 Edit your profile in the admin — display name, tagline, bio, Fediverse summary, avatar and banner. Your bio previously had no web UI at all.
  • 📊 Set your Tinylytics API key in-app, stored AES-256-GCM-encrypted — the dashboard, kudos and leaderboard now work with no .env editing.
  • 🔗 The setup wizard asks for your public site address (validated) and shows a review step before installing.

🧹 Also

  • Prisma 7.9.0 (client, CLI and adapter in lockstep), @fedify 2.3.3, postcss 8.5.20.
  • npm test no longer runs twice when a worktree lives inside the project (#303).

Full changelog: https://github.com/TemujinCalidius/FediHome/blob/main/CHANGELOG.md

FediHome v1.17.0

Choose a tag to compare

@TemujinCalidius TemujinCalidius released this 19 Jul 01:52
c38649b

Own your instance from the web, and make it yours. This release pushes hard on two fronts — configuring your site without touching .env, and theming it beyond just colour — plus a few things your native apps have been waiting for.

🎨 Theming

  • 🖌️ Set your accent colour from the web adminper theme, so each theme keeps its own identity (#276)
  • 🧱 Themes can vary texture, not just colour — new "feel" tokens (corner rounding, glass blur); the Editorial theme goes crisp and flat (#250)
  • 🪄 Pick your theme during first-run setup — a fresh install lands on the look you chose, no config file (#250)

🌐 Configure from the web (#59)

  • 📇 Contact email + podcast feed settings are now web-editable (title/author/description/email/cover)
  • 📊 Turn on analytics from the admin panel — set your Tinylytics site id, no .env editing

🖼️ Galleries

  • 🏷️ Web-editable photo / video / audio categories — one source of truth; /videos + /audio gained the filter tabs /photography already had; removing a category never hides existing media (#284)
  • 🔌 The resolved lists are exposed to apps on GET /api/micropub?q=config as mediaCategories — clients offer your real categories, not guesses from existing posts

📱 For the apps

  • 🔗 One-paste app sign-in — the token reveal now offers a fedihome://connect link bundling instance + token (#255)
  • 📄 contentHtml on GET /api/posts — a native "My Posts" manager can render a post in full and styled (#292)

🐛 Fixes

  • 📈 Tinylytics now actually collects pageviews when only the numeric site id is set — the embed uid is derived automatically; the admin panel shows whether collection is working; build-time resolution hardened and honestly logged (#288)

Full changelog: https://github.com/TemujinCalidius/FediHome/blob/main/CHANGELOG.md

v1.16.0 — a second theme + a theme picker

Choose a tag to compare

@TemujinCalidius TemujinCalidius released this 17 Jul 23:21
4fa08f3

🎨 FediHome v1.16.0 — your site's whole look is now a theme you can pick, not just a colour.

✨ Added

🖌️ A second theme — "Editorial" — and a theme picker. Editorial is a warm, reading-first counterpoint to the default's cool glassy Cards: sepia surfaces, a terracotta accent, serif body copy under sans headlines, and the compact list feed. Choose your theme (and feed layout) in Admin → Site settings → Appearance — no restart, no file editing. And under the hood this proves out the theming engine that shipped across v1.14–v1.15: adding a theme is now one small file plus one registry line, so more are on the way.

🔧 Fixed

🦋 Bluesky crossposting with an @-prefixed handle. A BLUESKY_HANDLE=@you.bsky.social (or a handle saved before v1.14.0) was silently failing every crosspost, poll and DM sync with a misleading InvalidEmail error. The leading @ is now stripped wherever credentials are read. (#257)

📱 The browser + PWA colour now follows your active theme instead of being pinned to the default's near-black — the address-bar tint and installed-app splash match the theme you picked.

📦 Also

  • Dependency refresh: @atproto/api 0.20.30, tailwindcss 4.3.3.

Upgrade

Pull and rebuild. No schema changes, no migration, no config changes. Default instances render pixel-identically — nothing changes unless you choose a theme.

Full changelog: https://github.com/TemujinCalidius/FediHome/blob/main/CHANGELOG.md

v1.15.0 — Swappable feed layouts + app tokens

Choose a tag to compare

@TemujinCalidius TemujinCalidius released this 17 Jul 09:15
4d263a6

🚀 FediHome v1.15.0 — your site's layout is now yours to pick, and connecting apps no longer means sharing your admin secret.

✨ Added

🗂️ Swappable feed layouts — every feed now renders through a themeable region dispatcher, with two variants: the default Cards (glass cards with cover images) or a new List (a compact, date-led index that fits far more posts per screen). Applies across all your feeds — home, journal, articles, and the public Fediverse feed. Pick it in Admin → Site settings → Appearance, or set LAYOUT_FEED. No restart. (#250 Phase 3)

🔑 Generate scoped app tokens in the admin panelAdmin → Apps → "Generate app token" mints a bearer token with the scopes you pick, and reveals it once (only its hash is stored, exactly as with OAuth tokens). Paste it into any client that takes a token — headless/CI, a read-only reader, or App Store review — without ever sharing your ADMIN_SECRET. Long-lived and revocable from the same screen. (#255)

📝 GET /api/posts returns a body preview — so a native "My Posts" list shows a real snippet for title-less microblog notes instead of "Untitled". (#253)

🔧 Fixed

✍️ Plain-text previews decode HTML entities — search results, link/OG card descriptions and notification bodies now read it's and Tom & Jerry instead of it's and Tom & Jerry. (#267)

📦 Under the hood

This release lands the region×variant contract (resolveLayout + per-theme layout presets) that the rest of the theming system builds on — swappable headers, shells, and full themes are next. Default instances render pixel-identically; nothing changes unless you choose it.

Upgrade: pull and rebuild. No schema changes, no migration, no config changes required.

Full changelog: https://github.com/TemujinCalidius/FediHome/blob/main/CHANGELOG.md

FediHome v1.14.0

Choose a tag to compare

@TemujinCalidius TemujinCalidius released this 16 Jul 09:22
f74b95a

Highlights

  • 🦋 Connect Bluesky + Threads from the admin panel (#254) — no more editing .env.local or SSHing to your server. Set your crossposting accounts at Admin → Integrations; the app password / token is AES-256-GCM-encrypted at rest (key derived from your ADMIN_SECRET, which never touches the database), verified with a live Test before saving, and never shown again. Env vars still work as a fallback.
  • 🎨 Per-instance accent colour (#250) — your chosen accent now themes the whole UI (buttons, links, borders, badges), where before it was stored but applied nowhere. Groundwork for the full theming system that's coming.
  • 🖼️ Images show up everywhere on your own site again (#252, #256, #257) — fixed the broken-image icons in feed previews, post pages, and the photography grid (uploaded media rendered through next/image), and connecting Bluesky with a pasted @handle now works.
  • ⬆️ Dependency refreshes — Fedify, atproto, and others (all sandbox-verified).

Upgrade

No schema change, no database migrationnpm run update is safe.

Full changelog: https://github.com/TemujinCalidius/FediHome/blob/main/CHANGELOG.md

FediHome v1.13.0

Choose a tag to compare

@TemujinCalidius TemujinCalidius released this 13 Jul 23:51
5f7b2a3

Highlights

  • 📥 macOS app download page (#241) — an opt-in /download page, homepage hero CTA, and nav link for the native FediHome macOS app. Tracks GitHub Releases latest (always the newest notarized build); a Mac App Store slot is ready for when the listing lands. Off by default; enable from Admin → Site settings or DOWNLOAD_MACOS_*.
  • 🧭 First-run setup wizard (#59/#239) — now collects your appearance/feature choices (public Fediverse feed, landing-page mode, which nav sections show) straight into the DB-backed config, so a fresh install lands pre-configured with no file editing.
  • 🧹 Retention sweep for cached remote federated data (#240) — an opt-in scheduler job that prunes stale copies of remote posts and reclaims their media, so a long-running instance's disk doesn't grow unbounded. Your own posts, interactions on your posts, follows, threads you're part of, and DMs are never pruned. Configure the window + cadence in /admin/settings.
  • ⬆️ Dependency refreshes (#238, #243) — @atproto/api, marked, eslint, postcss, and more (all sandbox-verified).

Upgrade

No schema change, no database migration — everything is additive (the SiteSetting config overlay + a scheduler job). npm run update is safe.

Full changelog: https://github.com/TemujinCalidius/FediHome/blob/main/CHANGELOG.md

FediHome v1.12.0

Choose a tag to compare

@TemujinCalidius TemujinCalidius released this 12 Jul 06:05
1e14656

FediHome v1.12.0 — crossposts that don't get lost 🔁

Highlights

  • Failed Bluesky/Threads crossposts are now retried automatically instead of silently lost. When you published a post, a crosspost that failed transiently (a network blip, a 5xx, an HTTP/2 GOAWAY) used to be discarded with no log line and no retry — a real incident lost a video post's Bluesky copy with zero evidence. Now every crosspost failure is logged, and Bluesky/Threads failures are persisted and retried by the scheduler with backoff (2 min → 10 min → 1 h → 6 h → 24 h, then it gives up), writing the crosspost marker on success. Because Bluesky/Threads (unlike ActivityPub) don't dedupe a re-sent post, a retry re-reads the post first and skips if it already landed or was deleted — so a crash between a successful crosspost and its bookkeeping can't produce a duplicate. It's a fourth toggle on Instance settings (/admin/settings, SCHEDULER_CROSSPOST_*). (#225)
  • Dependency refresh: @atproto/api → 0.20.27.

Upgrade

npm run update. Additive schema only (new FailedCrosspost table) — no breaking changes.

Full changelog: the 1.12.0 section of CHANGELOG.md

FediHome v1.11.0

Choose a tag to compare

@TemujinCalidius TemujinCalidius released this 08 Jul 07:52
c48886d

FediHome v1.11.0

Highlights

  • Configure your site's appearance & features from the admin panel — no file editing, no restart. A new Site settings screen makes the display/feature config editable in-app: site name & description, the project landing page (on/off + headline/subhead/repo), the public Fediverse feed (on/off + title + hide follower/following lists), which nav sections show, and footer links (webring/badge/funding). Saved values live in the database as overrides on the env defaults — "Use env defaults" reverts — and apply across your site (homepage, nav, footer, /fediverse, RSS, PWA manifest, metadata) within a minute. Identity/secret config (SITE_URL, FEDI_HANDLE, ADMIN_SECRET) stays env-set. Advances the file-editing-free setup (#59).
  • Federation hardening: incoming activities are bound to the actor, not just its host (#209). The inbox verified an HTTP signature and then only checked the signing key's host against the claimed actor — so any account on the same instance as someone you follow could forge activities as that other account. Verification now binds to the key's true owner and requires an exact actor match. Narrow threat model, but genuine hardening; adds the first dedicated signature-verification unit tests.

Upgrade

npm run update. Additive schema only (nullable SiteSettings columns) — no breaking changes.

Full changelog: the 1.11.0 section of CHANGELOG.md

FediHome v1.10.1 — security

Choose a tag to compare

@TemujinCalidius TemujinCalidius released this 07 Jul 04:38
5fd5570

FediHome v1.10.1 — security hotfix 🔒

A security patch for two related draft-content-leak issues (found during the FediHome-macOS edit-post work). Self-hosters should update promptly.

  • Unpublished drafts & scheduled posts could be read without authentication. GET /api/micropub?q=source returned a post's full source — including unpublished drafts and scheduled posts — but, unlike the POST handler, required no token. Anyone who could guess a post's slug (slugs derive from the title, or the first words + a timestamp) could read draft content. It now requires a valid token. q=config (public discovery info) is unchanged. (GHSA-x3j3-ghcw-8r77)
  • Editing an unpublished post federated its content early. Editing a draft or a not-yet-published scheduled post via a token sent a public ActivityPub Update of its content to your followers before it was ever published. Unpublished edits now update silently and federate nothing (the scheduler still delivers a Create at publish time). (#224)

Upgrade

npm run update. No schema change. This is a patch on top of v1.10.0 — no other behaviour changes.

Full changelog: the 1.10.1 section of CHANGELOG.md