Track your habits.
Own your data.

Gather sends you a daily prompt through XMPP, WhatsApp, or Signal. You reply with a number. It saves on your server. No app to break. No streak that can be taken from you.

← try the demo. this is exactly how the real thing works.

protocol XMPP · WhatsApp · Signal
hosting your server
licence open source · git.zm.is/XF
status pre-launch · early access open
gather · Pushups · Integer · daily 09:00
>
quick:
get early access → this is exactly how the real product works
XMPP  ·  WhatsApp  ·  Signal  ·  self-hosted  ·  open source  ·  your server  ·  no app required
What is Gather

A prompt with memory.

A Gatherer is a structured input with a type and an optional schedule. You give it a name, pick a type — integer, string, float — and optionally set when it fires.

After that it runs itself. Every morning at 09:00 a message arrives on whatever protocol you chose. You reply with a number. It saves. Six months later you have 180 data points you actually own.

Plot them. Export them. Overlay them against your sleep data, your heart rate, your mood. Ask questions no single-purpose app would let you ask, because the data is all in one place and it is yours.

How a Gatherer works

Three decisions.
Then nothing to think about.

01

Pick a type

Integer, string, float, boolean. The type controls what the Gatherer accepts and how it validates your reply. A pushup count is an integer. A trip report is a string.

02

Set a schedule (optional)

Daily at 09:00. Every Monday. On demand only. If you set a schedule, Gather sends you a prompt at that time. If you do not, it waits for you to start it manually.

03

Reply when prompted

One message. Gather validates the type and saves the entry with a timestamp. Confirmation comes back immediately. That is the entire interaction.

04

Your data, your server

Entries live on the server you control. Exportable in formats you can query without asking permission. Overlay multiple gatherers to ask questions no siloed app would let you ask.

Protocols

Works through messages you already use.

XMPP

The native protocol. End-to-end encrypted with OMEMO. Works from any XMPP client including ones on borrowed devices. Nothing app-dependent.

WhatsApp

Connected via the official Cloud API. Your Gather replies land in your existing WhatsApp thread. No new app to install or maintain.

Signal

For those who will not compromise on privacy. Gather connects to Signal and your prompts arrive in your existing Signal app, as any other message.

Why it exists

I lost my phone.
I lost two years of data.

A phone broke. A fitness app I had used consistently for two years was gone. Not backed up in any way I could actually use. A journaling streak, gone. Numbers I had tracked and cared about, gone.

The problem was not losing the phone. The problem was that my data had been stored in a way that was convenient for the app and fragile for me.

I wanted something that would still work from a library computer. Send a message to an XMPP address, log a number, write a note, and have it land somewhere I controlled regardless of what device I was on.

That is a low bar. We should not need a custom app to clear it. Gather is the answer I built for myself.

Fit

Not for everyone.
By design.

For you if
  • You run your own server or are comfortable doing so
  • You track habits and keep losing data when devices or apps change
  • You use XMPP, or are willing to
  • You have messaging sprawl across WhatsApp, Signal, and XMPP
  • You care where your data lives and want to actually own it
Probably not for you if
  • You want a polished mobile app with a support team behind it
  • You are not comfortable with pre-launch software
  • You would rather not think about where your data lives
  • You need everything to just work with zero setup
What is included

The full picture.

Gatherers
Structured inputs with types, schedules, and server-side storage. Integer, string, float, boolean. Optional persistence between sessions.
Unified inbox
WhatsApp, Signal, and XMPP threads in one view. Reply without switching apps. Per-chat features for routing and automation.
Graphs
Plot numeric gatherers over any time window. Overlay multiple series. Compare sleep with exercise. Ask questions apps can not.
Behavioral data
Message-state signals per contact: delivery time, read time, reply time, typing patterns, presence cycles.
OMEMO
End-to-end encryption for XMPP channels. Configurable per conversation.
AI summaries
Optional catch-up summaries. Runs on a model you control. Not a third-party service with your messages.
Self-hosted
Your infrastructure. No accounts required on our servers. You run it, you own it.
Export
Your data in formats you can query and move without asking. No lock-in by design.
Pre-launch
Early access: hub.zm.is

Gather is not finished. If you want to run it, test it, or tell us what is broken, sign up.
Source at git.zm.is/XF.