Changelog
User-facing changes to Hearth, in plain language. Internal refactors and
infrastructure are left out on purpose (see the git history for those). This is
the source for the in-app "What's new".
Unreleased
0.30.1 - 2026-09-23
Fixed
- Notifications respect who can see an entry. A notification no longer
shows the title of an entry you can no longer see: one a GM has since hidden,
or in a campaign you have left.
- Images in a private campaign stay private. An image on an entry is shown
only to people who can read that entry, and one in the trash is hidden with
it.
- Images stay with the entry they were uploaded to. Using an image's link in
another entry no longer moves the image there, so it cannot disappear from
the entry that shows it, and emptying one table's trash never touches another
table's pictures.
- Staying signed in. If you use Hearth regularly, you stay signed in. You
used to be signed out thirty days after logging in, however often you
visited.
- A password change or reset signs you out everywhere else, every time. If
your other devices can't be signed out, the change doesn't go through and you
can simply try again. Before, it could succeed and leave an old session
signed in.
- Drafts save every field. Changing only an entry's type, visibility,
session number, gallery, cover or characters now saves your draft and warns
you before you leave, in the composer and the editor alike.
- A refused action tells you why. Deleting, pinning or sharing an entry,
reacting, the Lorekeeper's thread actions, and about twenty other buttons now
show the reason when they can't be done, instead of quietly doing nothing.
- Missing pages say so. A link to an entry, settings page or admin page
that doesn't exist now shows a proper "not found" page.
- Entries posted by an assistant or the API follow the same rules as the
composer. Their images show for the whole table, a Finished campaign takes
no new entries (publishing a draft into one is refused too), and changing an
entry from Session to Fiction no longer fails. An entry needs some words
wherever it's written, and one sent without a title takes it from its first
heading or line, as the composer already did.
- Imported entries follow the same rules too. A Finished campaign takes no
new imports (refreshing an entry already there still works), members
mentioned in an imported entry are notified once, its pictures show for the
whole table, and a file with a title but nothing under it is refused. An
import that fails partway no longer leaves a half-filed entry for the retry
to duplicate.
- The web importer and Discord agree on a document's session number and
date. Both read the title first, then the file's or Google Doc's name, so
the same notes land as the same session wherever you import them.
- Saving a Lorekeeper thread as an entry follows the same rules as writing
one: it's refused in a Finished campaign, mentioned members are notified,
its pictures show for the whole table, and it's announced like any new entry.
- Imports are clearer about size. There is one limit for an entry's text,
checked as soon as a document is read and given in kilobytes, rather than a
document being accepted and then refused after you had reviewed it.
- A document that can't be converted no longer hangs the import.
- "Will update" is right when you add or remove files quickly in the
importer, so publishing never updates an entry you expected to be new.
- The Discord import finds your notes' link inside a tidy masked link like
[Session 9](...) or in parentheses, and its refusals read as plain
sentences.
- Recapping one long session works. A recap is drawn from that session,
rather than coming back empty when the session alone was too long to fit.
- Mentions of names with accents reach the right person.
@Maraña no
longer notifies a member called Mara.
- Wiki links written inside code stay as you typed them, so an example of
[[Title]] isn't turned into a live link, and a title with a backslash no
longer breaks its link.
- Only web, email and relative links are live in entries. Any other kind
of link is shown as plain text.
- Find duplicates keeps working when you trash one half of a pair from
that page, and a cloned campaign keeps every image working.
- The "Connect to your favorite AI" card shows this server's address, and
Copy buttons say "Copied" only once the text is on your clipboard.
- An image too large to upload says so, rather than "Missing or invalid
'kind'".
- Campaign names are 1 to 120 characters however you set them. Creating
or renaming a campaign used to take a blank name or one of any length (only
cloning checked). Name, nickname, comment and feedback boxes now stop at
their limits as you type, and signing up takes the same 100-character name
your account settings allow.
- The entry editor says "Opening the editor…" until it's ready, instead of
showing an empty form that could be typed into and then lose what you typed.
0.30.0 - 2026-09-19
Added
- Import a Discord message into Hearth by right-clicking it. In a channel
that follows a campaign, right-click a message → Apps → Import to Hearth,
confirm the type and who wrote it, and it becomes an entry: a linked Google
Doc, a gist, an attached
.md/.txt/.docx/.pdf, or the message's own
words. Anyone at the table can do it, not just the GM (link your Discord
account in Settings → Account first). Importing the same message again
updates the entry it made instead of duplicating it, so fixing a typo in
Discord fixes it in the archive (an entry you cannot see is never the one
updated). Archived messages get a 📖 so the table can see at a glance what
is in the book.
0.29.5 - 2026-09-17
Changed
- New entries start as Fiction. Tables write far more fiction than session
recaps, so the composer and the import table now start on Fiction instead of
Session. Pick Session when that is what you are writing.
Fixed
- A new entry is always credited to you unless you say otherwise. If a GM
picked someone else under "Written by" and then closed the composer or saved
a draft, the next entry went out under that person's name, even though the
picker showed "Me".
0.29.4 - 2026-09-16
Fixed
- "Previously on…" has more room on long campaigns. Drawing a recap after a
busy stretch of sessions could fail every time with "The chronicler couldn't
compose a recap." The chronicler now has much more room to finish, and if a
recap still runs long, it says so instead of failing with no reason given.
0.29.3 - 2026-09-15
Fixed
-
Importing a second Google Doc could overwrite the first. A Google Doc
has no filename, so the importer used its title to recognise a re-import, and
every doc without a heading at the top was titled "Imported document". Adding
a second such doc updated the entry the first one had made, replacing its
title and text. Each doc is now recognised by its own link, so only the same
document can update its entry, and a doc without a heading is titled with its
name from Google Drive instead of "Imported document".
-
Adding a second Google Doc to an import stopped the page working. The
first doc's row disappeared, and nothing on the page responded afterwards, so
docs had to be imported one at a time. You can now add several docs and
publish them together.
0.29.2 - 2026-09-08
Changed
-
A new entry is searchable straight away. The Lorekeeper used to take up
to half a minute to notice something you had just written; now it picks it up
as you save it.
-
Scheduled account deletion completes within a day of the 14-day grace
period ending, rather than within an hour. Background housekeeping now runs
once a day instead of hourly, so an idle Hearth costs almost nothing to keep
running. Nothing you can do with the account changes -- an expired session or
invite stops working the moment it expires, as it always did; it is only the
tidying-up afterwards that waits for the daily pass.
0.29.1 - 2026-09-06
Fixed
- On a phone, the Lorekeeper couldn't be asked anything. The box you type
into sat just below the bottom of the screen, with no way to scroll to it --
you could open an old conversation and read it, but never continue one, and
if you had cleared out your threads there was no way to start a fresh one
either. It went unnoticed because it only struck when the top menu bar grew
long enough to spill onto a second line.
Changed
- The top menu tucks into a ☰ button on narrow screens. Rather than letting
the menu spill onto a second row -- which is what pushed the Lorekeeper's ask
box off the bottom of the screen -- everything except the wordmark and the
light/dark switch now lives behind a single button, and the menu closes itself
when you follow a link out of it. On a laptop or desktop nothing changes at
all.
0.29.0 - 2026-09-05
Changed
- The Lorekeeper can be pointed at many more AI services. It already spoke
to Anthropic and anything that imitates it; it now also speaks the format
used by OpenAI, OpenRouter, DeepSeek, Groq, Together and xAI, which is most
of the rest of the field. At a table nothing looks different -- the same
Lorekeeper, the same answers -- but whoever runs the server has a far wider
choice of who provides them, and can move without waiting for us.
- Costs are counted from the bill, not from a price list. Where a service
reports what it actually charged for an answer (OpenRouter does), that figure
now feeds the campaign's AI budget directly. Previously every cost was worked
out from prices written down in the server's settings, which quietly went
wrong whenever a provider changed them.
- Self-hosting: the AI settings were renamed and the old names no longer
work.
ANTHROPIC_API_KEY and ANTHROPIC_BASE_URL became AI_API_KEY and
AI_BASE_URL, joined by AI_PROVIDER for picking a service by name. There is
no fallback to the old names, and a missing key means the Lorekeeper reports
itself unavailable rather than erroring -- so update these in the same deploy
or it will simply, silently stop answering. AI_INPUT_CENTS_PER_MTOK and
AI_OUTPUT_CENTS_PER_MTOK are now optional when the service reports its own
costs, and must be set together or not at all. See .env.example.
0.28.1 - 2026-08-29
Fixed
- Setting up the Discord bot could fail before it started. The command that
registers
/hearth with Discord crashed instead of connecting. Nothing a
table would have seen -- it only affected first-time bot setup.
0.28.0 - 2026-08-29
Added
- Discord channels choose what they hear. A subscribed channel can now be
told about replies as well as new entries, and either can be switched off
without unsubscribing:
/hearth comments state:on, /hearth entries state:off, and /hearth status shows where you stand. Nothing changes for
channels already subscribed -- entries stay on, replies stay off until you
ask for them. A busy thread is one message, not fifteen, and replies on a
GM-only entry stay as invisible in Discord as the entry itself.
0.27.0 - 2026-08-29
Fixed
-
Opening notifications no longer marks them all read. A glance at the page
used to clear every highlight, so coming back showed nothing new even if you
had not read a word of it. Now one clears when you tap it, and there is a
"Mark all read" button for the rest.
-
Cloning a campaign no longer produces an empty-looking one. Cloned
entries went somewhere neither the feed nor the Drafts page could show them.
They now land in Drafts, where you'd look for them.
-
Scheduled account deletion could stall indefinitely. If you scheduled
deletion and then made a campaign during the 14-day grace period, the
deletion never completed -- and it quietly held up everyone else's behind it
too. Both are fixed.
Changed
- API:
status is gone from the post schema. Entries have not had a draft
status since 0.22 (drafts are their own thing), and the field has now been
removed from the database and the OpenAPI spec. If you built against the API
and read status, it is no longer returned; if you sent it when creating or
updating an entry, it is ignored.
Added
-
You're told when a conversation you're in moves on. Until now only the
person who wrote an entry heard about replies to it. If you commented and
someone answered afterwards, nothing told you -- which meant the people who
read and comment, rather than write, were the ones the app never spoke to.
Now a reply on a thread you're part of reaches you too. Still at most one
unread nudge per entry, so a busy thread is one thing to go and look at.
-
Notifications take you to the comment, not the top of the entry. Tapping
one lands on the actual reply and lights it up for a moment, instead of
leaving you to scroll a long entry looking for what changed.
-
Entries say who can see them. A GM-only entry is marked as such wherever
you read it, and so is a public one; the ordinary players-only entry stays
quiet, because that's the default. Until now the only place Hearth said it
was the composer, at the moment you chose it.
-
"View as player" on the campaign feed, for GMs: hides everything a
player can't see, so you can check what your table actually sees before
session rather than hoping.
0.26.1 - 2026-08-29
Repairs from a seven-persona sweep of 0.26.0. The one that matters most is the
first: steady typing could lose the words you typed while a save was in
flight.
Fixed
- Typing steadily in the composer or editor no longer risks the words you
typed mid-save. Saves were racing each other and later ones were refused as
"saved somewhere else"; now one save runs at a time and the rest follow.
- Publishing an entry from Drafts now notifies the people you @mentioned in
it, the same as publishing directly did.
- Switching Lorekeeper threads while an answer is still arriving no longer
shows that answer under the wrong thread.
- Deleting a Lorekeeper thread while it is answering no longer charges the
table's pool for an answer nobody can see.
- Reading Emberwake as a guest now says so, and shows the campaign's own
description. A guest no longer sees an invite form or a Leave button on a
table they aren't part of.
- The Lorekeeper is now off by default on a new campaign, as the landing page
has always promised.
- A campaign you can't see no longer sends a signed-out visitor to a login
wall, and no longer hints that it might exist.
0.26.0 - 2026-08-28
First look. A stranger can read a real table before signing up, the Lorekeeper
has a door on every page and remembers its conversations, and you finally hear
when someone answers something you wrote.
Added
-
Guides for bringing your notes with you. A new page walks through moving
a campaign in from Obsidian, Notion, World Anvil or Google Docs, what happens
to each file, and how to fix the dates afterwards so four years of sessions
don't all land on one afternoon.
-
You can see a real table before signing up. The landing page links to
Emberwake, a campaign you can read without an account: five entries across a
season, table talk, a character sheet, and worldbuilding notes. It also shows
four real Lorekeeper answers with the entries they came from, so you can see
what it does before deciding whether you want it.
-
The Lorekeeper has a door on every page. It's a tab beside Feed and
Timeline now, and every entry has "Ask about this", which opens the
Lorekeeper with your question already started and the entry named. Until now
the only way in was a card on the feed, so a question that occurred to you
while reading meant navigating away and retyping what you were looking at.
-
You're told when someone replies to what you wrote. Until now the only
thing that reached your notifications was someone typing @your-name, so you
could write a session recap, have the whole table answer it, and never know.
A reply to your entry now shows up like a mention does, and says which it is.
A busy entry is one notification, not fifteen: once you've read it, the next
reply speaks up again.
-
Your Lorekeeper conversations are yours to keep. Every thread you have
started is now listed under "Threads" on the Lorekeeper page: open an old
one, pick up where you left off, and give it a name that says what it was
about. Starting a new conversation no longer hides the old one forever.
-
Delete a thread you are done with, and put it back if you change your mind.
Deleting is not destroying here either; a thread waits under "Recently
deleted" until you say otherwise. Your threads are private to you, so nobody
else at the table sees them in either list.
-
Your own Lorekeeper conversations now travel with the campaign export, in a
lorekeeper/ folder. Only yours.
Fixed
- Renaming a conversation no longer quietly changes which one the page reopens
next time.
0.25.0 - 2026-08-28
Nothing is lost. Deleting an entry no longer destroys it, a campaign can end
without being deleted, and the export finally contains everything.
Added
- Deleting an entry sends it to the trash instead of destroying it. A new
Trash page (Settings → Trash) lists what's been removed and puts any of it
back, with its comments and reactions intact. Nothing in there expires or is
cleared out on a timer: when you genuinely want something gone you say so, and
that's also when the space it was using is freed. This makes the duplicates
tool safe to experiment with.
- A campaign can be finished, or put on hiatus. A finished table stays fully
readable, searchable and answerable by the Lorekeeper; it just stops taking
new entries and folds away under "Past tables" on your dashboard, so the
campaigns you're still playing come first. You can pick it up again any time.
Changed
- Your export now contains the pictures. They used to be links that only
worked while you were signed in, which made an archive rather less yours than
advertised. The images are in the zip, the entries point at them, and the
whole thing reads the same on a computer that's never heard of Hearth.
- Your export now contains the conversations, kept with the entry they're
about, under a "Table talk" heading. Entries also carry more of their
details: the campaign they came from, when they were last edited, which
pictures belong to them.
- Exports have no size limit. Large campaigns download as they're built
rather than being assembled first, so a table with years of photos exports
the same as a small one.
Fixed
- When someone deletes their account, the entries they leave behind keep their
pictures. Their writing already stayed with the table; the images in it were
being deleted, leaving broken pictures in entries nobody could repair.
- A tab left open while Hearth updates recovers on its own.
0.24.0 - 2026-08-27
A speed release. Hearth downloads less than half of what it used to, and moving
around a campaign no longer reloads the whole app.
Changed
- Hearth loads about twice as fast on a cold visit. The app your browser has
to download shrank from roughly 2.4 MB to about 1 MB, and the page itself from
about 92 KB to 41 KB. Most of the saving is on a phone, on a slow connection,
the first time you open a link someone sent you.
- Switching between Feed, Timeline, Drafts, Members and Settings is instant.
It used to reload the entire app each time, which on a phone was the slowest
thing Hearth did. The links still work exactly as links should, including
opening in a new tab.
- The styling is now cached between visits instead of being re-sent with
every page.
Fixed
- A tab left open while Hearth updates no longer breaks. It used to fail with
a cryptic error in the browser console and need a reload; now it recovers on
its own.
0.23.0 - 2026-08-27
Capture at the table, and repairs to the draft-saving that 0.22.0 introduced.
Added
- Jot a line from tonight. A single field at the top of your campaign adds a
timestamped line to the session note you're building, so keeping notes during
play doesn't mean opening the whole composer. The morning after, open it under
Drafts and tidy it into an entry.
- Series, when you write. Fiction and sessions can be put in a series from
the composer, offering whatever series your table is already running. Before
this you could only set one by editing an entry afterwards.
- Add a picture, in one tap. Its own button beside "New entry", instead of
New entry then choosing the Gallery type.
- Credit a co-writer as you post. A game master can attribute an entry to
whoever actually wrote it while composing it, which matters most when pulling
in someone's Google Doc.
- The Drafts tab shows how many you have.
Fixed
- Several ways unsaved words could be lost. Starting an entry from a link or
a file no longer overwrites what you were already writing. "Save as draft" now
waits for the save to actually happen before saying it did, and shows you the
error if it didn't. Leaving a page or switching away on a phone saves first,
which matters because phones often close a tab without warning. An entry that
is only pictures now saves as a draft too.
- A revision could be deleted while you were restoring it, if the page and
your unsaved edits arrived in an unlucky order.
- Pictures in a pasted Google Doc are no longer dropped in silence. They
still can't come across automatically, but the entry now tells you how many
there were so you can add them, instead of showing blank images.
- Imported Word documents no longer show stray tags like
<u> in the text.
- Revisions of a published entry no longer clutter the Drafts page, where
their Publish button could only fail.
- Switching away from a draft no longer risks a blank page on slow
navigation.
0.22.0 - 2026-08-27
A getting-your-writing-in release: drafts that follow you between devices, and
two new one-step ways to start an entry from something you already wrote.
Added
- Your drafts follow you now. An unfinished entry used to live only in the
browser you started it in, so a session note begun on your phone wasn't there
on your laptop. Drafts are now saved to your table as you write, on the
composer and when revising a published entry alike. They save a couple of
seconds after you stop typing and whenever you leave a field, and a draft you
haven't titled yet is perfectly fine, it will wait under Drafts either way.
If you have the same entry open in two places, the second one is told rather
than quietly overwriting the first.
- Start an entry from a Google Doc link. Paste the link under "New entry"
and Hearth pulls the document into the composer for you to read over and
publish. Anyone who can write in the table can use it, not just the game
master.
- Start an entry from a file. Open a single
.md, .txt, .docx or .pdf
straight into the composer, without going through the bulk importer and its
review table.
- A composer that remembers. It keeps the entry type and visibility you last
used in that campaign, and fills in the next session number for you (until you
type your own).
Fixed
- Pictures on an entry published from a draft are visible to your table.
They were being shown only to whoever uploaded them, and appearing as broken
images to everyone else, until the entry happened to be edited again.
- Unsaved words are no longer dropped when a save is refused. If a save
couldn't go through, what you had typed could be discarded the next time you
opened the composer.
- Publishing no longer leaves a duplicate draft behind that reappeared later
as "picked up where you left off".
- Your game master cannot read your drafts. The drafts page said they could;
they never could, and now it says so.
0.21.1 - 2026-08-27
A first-run repair release: the fixes a brand-new game master and their
players hit in the first five minutes.
Changed
- Invite links now open the whole table by default. The seat picker used to
start on "Single use", which also expires in a week, so a game master who
pasted one link into their group chat found that only the first player could
join. New links are reusable by the whole table unless you choose otherwise,
every link now shows the date it expires, and the full web address is shown
(not just the path) so you can select and copy it anywhere.
- "N new" now means "since you last looked". The dashboard counted entries
since the last session write-up while the campaign feed counted them since
your last visit, so the same table could say "6 new" on one screen and
"nothing new since your last visit" on the next. Both now agree.
- The landing page says what's free, and what leaves with you. Plus a
clearer path to the "Why Hearth?" page, which is where the ownership and AI
stances live.
Fixed
- The verification email is sent when you sign up. It wasn't, which made
asking the Lorekeeper a dead end: it needs a verified email, and the message
told you to send the link "again" when nothing had ever arrived.
- The Lorekeeper card no longer appears where it can't work. On a server
with no AI provider configured, the campaign page still advertised it and
every question failed.
- The drafts page no longer claims your game master can read your drafts.
Drafts are only ever listed to the person who wrote them.
0.21.0 - 2026-07-16
An import-polish release: re-imports update instead of duplicating, a tool to fix
entry dates from your files' real timestamps, and co-writer credit on bulk import.
Added
- Fix imported entry dates from your files' real timestamps. A bulk import
can only guess an entry's date (a browser can't read a file's creation date).
A new tool, linked from the import page, lets you run a one-line command in
your entries' folder, paste what it prints, and set each entry's true date in
one reviewed batch. It only touches dates, nothing else.
- Credit a co-writer when you bulk-import. The import review table now has a
"Written by" column, so you can attribute each entry (or the whole batch, with
the column header) to the member who actually wrote it, instead of everything
landing under your name. (You can still reassign an entry's author later from
its edit page.)
Changed
- Re-importing a file updates its entry instead of making a copy. When you
bulk-import a folder again after editing some files, Hearth recognizes a file
it imported before and updates that entry in place, keeping its date and
session number, rather than creating a duplicate. The import review table
flags each row that "will update" so you can tell corrections from new entries
before publishing.
0.20.0 - 2026-07-16
A trust & hardening release: private images are now actually private, and Hearth
installs to your phone's home screen.
Added
- Install Hearth to your home screen. On a phone, Hearth can now be added as
an app: a home-screen icon that opens full-screen, without browser chrome, for
reading at the table or on the couch. On Android/Chrome, look for "Install
app"; on iPhone, use Share → Add to Home Screen. It still needs a connection
(no offline mode).
Changed
- Private images are now actually private. A picture in a members-only or
GM-only entry (its cover, gallery, or inline images) is served only to people
who can see that entry, instead of being viewable by anyone who has the direct
image link. Public entries' images stay openly viewable, and everything keeps
loading as before, this just closes the gap where a private image could be
opened by its raw URL.
0.19.0 - 2026-07-16
A design & accessibility release: a warm light mode, plus keyboard and
screen-reader improvements.
Added
- Light mode. A warm "candlelit parchment" theme for reading Hearth in
daylight, keeping the same fireside character as the dark theme. Flip it with
the ☀ / 🌙 button in the top bar; Hearth remembers your choice on that device.
It stays dark by default and never follows your system setting, so your pick
is the only thing that changes it.
Changed
- The campaign list shows where you are. The left rail and the Campaigns
menu now highlight the campaign you're currently reading.
- Drafts and Members appear only to members. Someone who isn't in a
campaign (including a logged-out reader of a public one) no longer sees links
to those member-only pages, which used to answer with an error.
Fixed
- Image upload buttons work from the keyboard. "Change photo" and the other
picture pickers can now be reached with Tab and opened with Enter or Space,
so keyboard and screen-reader users can use them.
- Keyboard focus follows the composer. Opening "New entry" moves focus into
the composer, closing it returns focus to the button, and clearing a search
keeps focus in the search box, instead of dropping to the top of the page.
- A clearer prompt when you're signed out. The Drafts page now offers a
"Sign in" button when your session has lapsed, rather than a vague error.
- Phone touch fixes. On a phone, the small version stamp in the corner no
longer sits on top of the Lorekeeper's "Ask" button (tapping Ask sometimes
opened "What's new" instead), the page footer stacks instead of cramming
against the edge, and the campaign switcher's rows are a full touch target.
0.18.1 - 2026-07-16
Fixed
- The campaign sidebar no longer overlaps the dashboard. On mid-width
screens (around a 13" laptop), the left list of campaigns could sit on top of
the "Your campaigns" heading and cards. The sidebar now keeps its own column,
clear of the content, at every window size.
0.18.0 - 2026-07-15
A "writing craft" release: the tools that make writing and reading a campaign's
entries better, mentions and notifications, wiki links between entries, related
reading, comment reactions, and a formatting toolbar.
Added
- Mention people with
@their name, and get notified. Write @ and a
member's name in an entry or a comment and they'll see it in a new
Notifications page (the bell in the top bar, with a count of what's new). You
only ever get mentioned in something you can see, and a mention links straight
to where it happened.
- A formatting toolbar for writing. The entry composer and editor now have a
small row of buttons above the text, bold, italic, heading, quote, code, link,
and a divider, that wrap or insert the Markdown for you, so you don't have to
remember the syntax. The live Preview and the Markdown cheatsheet are still
right there.
- Related entries. The bottom of each entry now suggests a few others in the
campaign that read as most similar, so you can follow a thread across sessions.
It's drawn from the same understanding of your writing the Lorekeeper uses, but
needs no AI call and only ever lists entries you can see.
- Link between entries with
[[double brackets]]. Write [[The Fall of Emberfall]] anywhere in an entry (or a Lorekeeper answer) and it becomes a
link to that entry in the same campaign, matched by title. If nothing matches
yet, the link lands on a gentle "no entry named that here" note. It only ever
links to entries you can already see.
- React to comments. The little reactions you can already leave on an entry
now work on comments too. Each comment has a small "+" to pick one, and the
ones people have added show as a count you can tap to add yours or take it
back.
Fixed
- Campaign pages respond to clicks without a reload. On some pages, buttons
and tabs inside a campaign (opening the composer, switching sections, feed
actions) could stop responding until you reloaded. Those pages now come up
fully interactive.
0.17.0 - 2026-07-15
The archive keeps itself honest: tools to fix miscredited authorship, clear out
duplicate imports, and clean up what comes in from other apps, plus one
consistent way to move around a campaign.
Added
- Find duplicate entries. A campaign's Settings now has a "Find duplicates"
tool that surfaces near-identical entries, closest first, most useful after a
bulk import that brought the same file in twice. Each pair is shown side by
side with the exact lines that differ highlighted, so you can tell which is
the one to keep, then either keep both or delete the extra. GM-only.
- Fix who an entry is credited to. When you edit an entry, you (its author)
or a GM can now reassign it to any member of the campaign, from a "Written by"
picker. Handy after a bulk import, which brings every file in under the
importer's name, so a co-writer's entries can be handed back to them once
they've joined the table.
Changed
- Every campaign page shares one navigation bar. The campaign, timeline,
drafts, members, and settings pages now carry the same row of tabs, with the
page you're on highlighted, instead of a mix of a button cluster on the hub
and a lone "back to the campaign" link everywhere else. Moving around a
campaign is the same everywhere now, and it wraps to fit a phone. Settings
still shows only to GMs.
Fixed
- Sign-in and password-reset emails arrive reliably. Hearth's messages were
going out through a mailer that too often landed them in spam; they now send
through Resend, so verification links, password resets, and invites reach the
inbox.
- Imported files no longer show their metadata block as garbled text. A
markdown file that opens with a
--- frontmatter block (Obsidian notes, and
anything you exported from Hearth) used to keep that block in the entry body,
where it rendered as a stray heading. Import now reads the block, keeps any
tags it lists, and leaves it out of the entry. Exported-then-reimported
entries also recover their original date from the file.
0.16.1 - 2026-07-14
Fixed
- The "Previously on…" recap no longer overlaps the Lorekeeper chat. It lives
only at the top of your campaign feed now — catch up there, then open the
Lorekeeper to ask your questions.
0.16.0 - 2026-07-14
A "delight the pilot" release: warmer moments across the app, a new AI recap,
and full data portability.
Added
- "Previously on…" recaps. At the top of your campaign feed (and on the
Lorekeeper page) you can now have the Lorekeeper draw a short, read-aloud recap
of your last session and everything since, so the whole table can catch up in a
breath before the next game. It's drawn only when you ask for it, shared with
the table (never revealing GM-only notes), and you can refresh it whenever new
entries land. Appears only when the Lorekeeper is lit for your campaign.
- Export your whole campaign. From a campaign's Settings you can now download
the entire archive as a .zip of Markdown files, one folder per entry type,
exactly what you can see. Each entry keeps its title, dates, author, tags, and
visibility in simple frontmatter; images are linked, not bundled. Your words
stay yours, in a format any tool can read.
- Your table name, on your entries. Posts now show who wrote them, by your
per-campaign display name, the one you pick when you join or change anytime on
the members page. Players who go by a character name or handle appear that way
on their own entries, in comments, on the recap and saved Lorekeeper
conversations, and in invite emails, never by the name on their sign-in account.
Changed
- A warmer hearth. Visual touches across the app: publishing an entry lights
a brighter "inscribed in the archive" confirmation; your campaign emoji sit in
a wax-seal medallion on the dashboard; the opening letter of a post catches a
little firelight; hand-drawn line-art illustrations replace the old emoji in
empty and error screens; the timeline threads its entries on a lit cord with a
node for each; and the Lorekeeper shows a gentle ember pulse while it gathers
its thoughts.
- A warmer welcome for new GMs. Your very first campaign is quicker to start,
the create form now opens ready for you on an empty dashboard. Signup says up
front that your campaigns are never publicly listed. The composer reassures you
that a GM-only entry stays hidden from players, right when you choose it. And
the invites page nudges you to mint your first link and drop it in your group
chat.
0.15.0 - 2026-07-14
Added
- Invite your whole table with one link. When you create an invite you can
now choose how many people it seats: a single named seat (as before), up to 10
or 25, or a whole-table link you drop once into your group's chat. The members
page shows how many seats each link has used.
- See what's new since your last session. Your campaigns now carry a small
count of the entries posted since the table last played, on the dashboard
cards, the left rail, and the campaign switcher, so you can tell at a glance
which table has fresh reading before the next game. The dashboard cards also
show a quick digest: how many sessions a campaign has, and how long since the
last one.
Changed
- The dashboard uses your whole screen. On a wide display your campaign cards
now fill the width in more columns instead of a narrow center strip, so a big
roster of tables takes far less scrolling. Reading pages keep their
comfortable column width.
- The feed remembers where you were. Pick a type tab or run a search, open an
entry, and your browser's Back button now returns you to that same tab and
search instead of dumping you at the top of the full feed.
- The sign-in buttons wear their logos. "Continue with Google" and "Continue
with Discord" now show the familiar marks.
Fixed
- Imported titles lost their stray asterisks. Entries brought in from
markdown with a bold heading (
# **Deputies**) no longer keep the literal
** in their title, and titles already imported that way have been cleaned up.
0.14.0 - 2026-07-13
Added
- Connect your campaign to an AI assistant. Your account page has a new
"Connect to your favorite AI" section with step-by-step setup for Claude,
ChatGPT, and Grok. Point a chat assistant at your campaigns, ask it what
happened last session, who a character is, or to catch you up. Connecting is a
quick sign in and approve, with no keys to copy. It's read-only: the assistant
reads and searches only what you can already see at each table, and it can
never post, edit, or delete. The section also lists the assistants you've
connected and lets you disconnect any of them at any time.
0.13.0 - 2026-07-10
Added
- Connect your own tools to Hearth with API tokens. Your account page now
has an "API tokens" section: generate a named token (that you can expire and
revoke any time) and hand it to an integration. A token acts as you, it sees
and writes exactly what you can at each table, nothing more.
- A "Keep the hearth lit" link in the footer. When the site is configured
with a support page, the footer shows a small link to chip in toward Hearth's
running costs. Absent that config, nothing changes.
- Write your campaign from Obsidian. With a token, the new Hearth Obsidian
plugin pulls the posts you can see into your vault as plain markdown, lets you
edit them where you already write, and pushes updates back, with a safety
check so it never overwrites a change made on Hearth since you last pulled.
- The timeline opens on the latest entry. It now shows newest-first by
default (what just happened, up top), with a one-tap toggle to flip back to
oldest-first for a front-to-back read.
- One-click "Add Hearth to Discord." Campaign Settings now has a button
that invites the Hearth bot to your server with the right permissions, so
announcements actually post. (Adding the app by hand can grant only its
slash command and no bot, which silently drops every announcement.)
Fixed
- Discord delivery problems are no longer silent. If Hearth can't post to
a subscribed channel (e.g. the bot was removed), Settings now says so and
tells you how to fix it, instead of quietly dropping announcements. The
warning clears itself on the next successful post; a deleted channel
unsubscribes automatically.
0.12.1 - 2026-07-10
Changed
- The Lorekeeper answers at the right length. Open questions ("who is
X?", "how do these two stand?") now get a focused overview, the throughline
and the moments that matter most, instead of an exhaustive catalogue of
every appearance. Want the full telling? Ask it to "go deeper" or "tell me
more" and it opens up.
Fixed
- The Lorekeeper no longer trails off mid-sentence. When an answer reaches
its length limit, it says so plainly and invites you to ask it to go on,
rather than ending on a broken fragment.
0.12.0 - 2026-07-09
Changed
- The Lorekeeper understands what you mean, not just the words you use.
It now finds the entries that match the idea behind your question, so
asking "what was the archbishop scheming?" surfaces the right session even
when nobody ever wrote the word "scheme." Ask in your own words and it
lands on the right memories.
0.11.0 - 2026-07-09
Changed
- The Lorekeeper reads more carefully. Instead of stuffing the whole
campaign into every question (and dropping the oldest entries when the
archive grew large), it now pulls the recent and pinned spine plus the
passages that best match what you asked. Early-campaign details stay
reachable by name; shopping lists no longer crowd out the answer.
0.10.0 - 2026-07-03
Added
- Sign in with Google or Discord. One click to join or return, no password
to invent. If you already have a Hearth account under the same email, the
new sign-in method links to it: sign up one way, come back another, it's
the same account. (Appears once the server operator configures the
providers.)
0.9.1 - 2026-07-03
Fixed
- Emails to hello@ reliably arrive in full. Fetching an inbound email's
text needs a Resend API key with read access; the ops guide now says so,
and the fetch itself retries its fallback properly on network errors.
0.9.0 - 2026-07-03
Changed
- Discord announcements got richer. Each entry type now posts in its own
accent color (matching the tags in the app), sessions show their number,
the lead emoji matches the entry kind, and the teaser carries a few real
paragraphs instead of a sentence.
0.8.1 - 2026-07-03
Fixed
- Emails to hello@ arrive with their words. The first real inbound email
landed without its body (the notification only carries the envelope; the
text lives one API call away, and now we make it). Plain-text mail is used
as written; HTML-only mail is converted to readable text.
0.8.0 - 2026-07-03
Added
- Save a Lorekeeper conversation. Once a conversation exists, the
Lorekeeper page offers two ways to keep it: download the thread as a
markdown file, or publish it straight into the campaign as a Resource entry
(visible to players, or GM-only if you're a GM), where it joins the archive
and is searchable like anything else.
- Start a fresh Lorekeeper conversation. A "New conversation" button
turns the page (with a confirm, so you can save the old one first). Fresh
conversations also keep the Lorekeeper sharper: it stops dragging the
whole history of an old thread into every new question.
- Email us and a human really does read it. Mail to hello@rpg-hearth.cc
now lands in the same inbox as in-app feedback and reaches the operator
directly, so the promise on the privacy page is wired all the way through.
0.7.0 - 2026-07-03
Added
- Entries can be re-dated. Editing an entry now offers an "Entry date"
field, so stories imported from elsewhere can carry the date they were
actually written instead of the day they were uploaded. The feed, dividers,
and timeline all follow the corrected date.
- Imports guess each file's real date. The import table now has a Date
column, pre-filled from the file itself (a frontmatter date, a date in the
filename, or the file's last-modified time) with a date picker on every row
to correct the guess. Published imports land in the story's order, not the
upload's.
- Step between entries while reading. Every entry now ends with links to
the next and previous entry in the campaign, so reading the story in order
no longer means a round trip through the campaign page each time.
Changed
- A warmer, more bookish look throughout. Entry pages open with an ember
drop cap and a big chapter-style title; scene breaks and dividers carry a
small ember star instead of a bare line; cards wear a whisper of parchment
grain; a low hearth-glow warms the bottom of every page to match the one up
top; dates and labels share one quiet small-caps voice; and the landing
page's promises stand a little taller.
- Entries read like a book page. The entry text column now keeps to a
comfortable reading width with slightly larger, looser type, instead of
stretching the full width of the screen.
- The deletion notice points the right way. The banner on a campaign
scheduled for deletion now links to Settings, where cancel actually lives
(it used to name the members page, which was wrong).
- The campaign feed reads like chapters. Quiet "Session N" divider lines
now mark where each session's era begins in the All view, so scrolling a big
archive has rhythm instead of being one long wall.
- Warmer entry-type colors. The fiction, announcement, resource, gallery,
and character tags are tinted as if lit by the same fire as everything else,
instead of the cooler off-palette shades they had.
Fixed
- The campaign lists in the nav stay fresh. Creating, archiving, or
deleting a campaign now shows up in the left rail and the Campaigns
dropdown right away, instead of waiting for a full reload.
- No more phantom "unsaved words" warnings. A forgotten composer draft
(kept safe by autosave) used to trigger the "unsaved words" warning on every
navigation, about text you couldn't see. Now the warning only fires while
the composer is actually open, and a restored draft opens the composer so
you can see what came back. The entry editor likewise no longer counts
unchanged text as an unsaved edit.
0.6.0 - 2026-07-03
Added
- A public "Why Hearth?" page. The thinking behind the app, in one place:
text-first, plain Markdown, simple on purpose, meets your table in Discord
and Google Docs, the whole table writes, and the Lorekeeper is a librarian,
not an author. Linked from the landing page and the footer.
Changed
- Writing tools moved to the top of the campaign page. "New entry" and
"Import files" used to sit below the entire feed, so in a big campaign you
scrolled past everything to reach them. They now sit right under the campaign
header, and a freshly published entry appears directly beneath the composer.
- "Ask the Lorekeeper" glows like it means it. The Lorekeeper card on the
campaign page wears the hearth's warm ember glow instead of dressing like
fine print, so the eye finds it.
Fixed
- Bigger images upload again. Photos over 2MB were being rejected with an
unhelpful error; the full 20MB limit now works as intended.
- The Lorekeeper opens at the latest message. The conversation used to load
scrolled to the top of its history; it now starts at the end, where the
newest exchange is.
- "What's new" opens at the top. The changelog window used to open scrolled
to the bottom. It now starts at the newest entries, with a close button in the
top corner that stays put while you scroll.
0.5.0 - 2026-07-03
Added
- Clone a campaign for a rerun. Running the same adventure for a new group?
Clone an existing campaign from its settings page: it copies the settings and
lets you pick which entries to carry over (each comes in as a draft), with a
fresh, empty player roster. Any images on the entries are re-copied so the new
table stands on its own.
- A photo for yourself at each table. Set a per-campaign avatar on the
members page, separate from your account picture, so you can look different at
different tables.
Changed
- The Lorekeeper is a proper chatbox now. The ask box stays pinned at the
bottom and the conversation scrolls above it, pinned to the newest reply, the
way every chat app works, especially on a phone.
0.4.3 - 2026-07-03
Fixed
- Signed-in pages load reliably again. Opening or refreshing the app while
logged in could leave it stuck (a blank or unresponsive page, sometimes a
failed sign-in) that a refresh only sometimes cleared. The underlying cause is
fixed, so the dashboard, campaigns, and settings come up every time.
0.4.2 - 2026-07-03
Changed
- Reliable updates without the load penalty. Building on 0.4.1, the app
caches its code again (safely: each release ships a fresh, uniquely-named
bundle), so repeat visits stay fast while always loading the current version.
0.4.1 - 2026-07-03
Fixed
- Updates load reliably. After we shipped an update, some browsers (phones
especially) kept running the old version until you cleared your browsing data,
which could make signing in or moving around the app act stuck. The current
version now always loads.
0.4.0 - 2026-07-03
Added
- Import from more than markdown. The importer now takes Word (.docx) and
PDF files and Google Docs by link, converting each to markdown for the
review table. (Word and PDF conversion needs pandoc and poppler on the server;
a public/link-shared Google Doc needs neither.)
- What's new. Click the version in the corner to see a plain-language list of
recent changes.
0.3.0 - 2026-07-03
Added
- Import a campaign as a table. Bulk-import your markdown or text notes with
a review table: set the type and visibility for every file at once from the
column headers, edit the titles, and auto-number your sessions by date. Files
publish one at a time, so a single bad file never blocks the rest, and your
players get one tidy Discord notice, not one per file.
- Send feedback straight from the footer link. A human reads every note.
- About, Privacy, and Terms pages, plus a footer to reach them. The Privacy
page says plainly what happens to your writing (including the one time the AI
Lorekeeper sends your notes to an AI provider, and how to keep it off).
Changed
- Cleaner Discord announcements. New entries post as a tidy card that names
the entry and who logged it, with a timestamp; a bulk import posts one summary.
- The hearth glow is back, warmer. The lambent firelight around the window
frame is stronger, and it now frames the page without dimming the top bar.
Fixed
- Session numbers are editable. Editing an entry now lets you set or fix its
session number, so imported sessions no longer sort out of order.
- Duplicate campaign names work. Creating a second campaign named like an
existing one (a GM running the same adventure for several tables) no longer
fails; it just gets its own link.
- GM actions work from any link. Managing members, invites, settings, and
the rest now works whether you reached the campaign from your dashboard or
from a shared or Discord link.
0.2.0 - 2026-07-02
The public pilot release.
Added
- Image galleries: multi-image upload with a full-screen lightbox viewer.
- A share button on entries that copies a link (and, on an unlisted campaign,
can make an entry visible first).
- Bulk import of markdown/text notes.
- Discord bot: subscribe a channel and player-visible entries post there with a
rich preview.
- A left-hand campaign rail and switcher for hopping between tables.
- Footnotes in markdown.
Changed
- Restored the warm lambent glow around the window frame.