The single most annoying sentence in team chat is “this message is not available on your plan.” You know the conversation happened. You were in it. You can even remember roughly what was said, which is the worst possible amount of remembering.
Fluid Chat has no history limit on any plan, because it has no plans. Every message you have ever sent stays readable and searchable, whether you self-host it or use the free hosted version.
What the 90-day limit actually does
Slack's free plan gives you access to roughly the last 90 days of messages and files. The older material isn't deleted — that's the important nuance, and also the frustrating one. It's retained, and it's yours, and you can't read it. Upgrading restores access; not upgrading means the archive is a rumour.
The practical effects show up in a fairly predictable order:
- 1Search stops being useful. Search is only valuable in proportion to how far back it reaches. A 90-day window turns your search box into a recent-activity filter.
- 2Onboarding gets worse. New hires can't read how the current architecture was argued into existence, so they ask, and someone senior re-explains it from memory. Every quarter.
- 3Decisions get relitigated. “Didn't we decide this already?” is unanswerable when the deciding happened in April.
- 4Incident history evaporates. The best runbook your team has is the thread from the last time it broke.
- 5People start hoarding. Screenshots in docs, pasted transcripts, a personal folder of “important threads.” This is what an archive looks like when the archive doesn't work.
Unlimited history, and unlimited search over it
Keeping messages is the easy half. A lot of tools will happily store years of chat and then hand you a search box that only really works on the last few weeks. Fluid runs Postgres full-text search across your entire history, with the operators you'd expect:
in:#channel— scope to one channel.from:@person— scope to one human.has:fileandhas:link— find the thing that was attached, not the chat around it.is:pinned— the messages someone already thought were important.before:,after:,during:— date ranges, over all of it, not over a rolling window.- Sort by recency or relevance, depending on whether you're trying to remember or trying to find.
Because search lives in the same Postgres as the messages, there's no separate search cluster to size, fund, or watch fall out of sync. That's a large part of why unlimited history is affordable to give away here.
Side by side
| Fluid Chat | Slack Free | Slack paid | |
|---|---|---|---|
| Message history you can read | All of it | Last ~90 days | Unlimited |
| Search range | Entire history | Same ~90-day window | Entire history |
| Search operators | Yes | Yes | Yes |
| Cost per person | $0 | $0 | Monthly, per seat |
| Custom retention policies | Included | No | Yes |
| Full data export | Included | Limited | Yes |
| Where the archive lives | Your server, or ours | Their cloud | Their cloud |
Slack plan details are summarised from Slack's published plans and can change — check slack.com/pricing for current terms. Slack is a trademark of Salesforce; Fluid Chat is not affiliated with them.
Unlimited history is a retention decision, not a hoarding one
Worth saying plainly: keeping everything forever is a choice, and for some teams it's the wrong one. Legal, HR and regulated environments frequently want the opposite — messages that expire on a schedule.
So Fluid gives you retention policies on the free plan, alongside unlimited storage. Unlimited means the tool doesn't impose a limit; it doesn't mean you can't. The difference between those two sentences is the entire argument, and it's the difference between an archive you designed and a limit you're renting your way around.
- Keep everything indefinitely, if that's your policy.
- Set a retention window per workspace and let the worker enforce it.
- Export the whole archive to JSONL, CSV and a file manifest whenever you want a copy that doesn't depend on us at all.
Stop paying rent on your own conversations.
Unlimited history is in the free plan because there is no other plan. Start a workspace, or run it on your own Postgres.
Moving an existing archive
The honest state of play: there is no Slack importer yet. Fluid exports its own data cleanly — JSONL, CSV and a file manifest — so getting data out is solved. Getting Slack's export in is the open piece, and it's a genuinely good first contribution if you need it.
What most teams do in the meantime is run the export from Slack for safekeeping, start fresh in Fluid, and keep the old archive as a searchable file rather than a live workspace. Not elegant. Considerably better than losing April.