YATA v0.90 beta
Pre-release
Pre-release
[0.90 beta] - 2026-08-02
versionCode 12. Upgrades in place over 0.89 beta.
Added
- One backup covers every destination you've set up. Backing up — from the Today sync button,
from Settings, on the periodic schedule, or automatically after a task changes — now writes to
Google Drive, this device, and your own server, whichever of them you've switched on. Each is
attempted independently, so one failing doesn't stop the others, and the result names what
actually failed ("Backed up 1, but failed for your server") rather than a blanket message that
would be wrong for the copies that succeeded. The Today sync button now appears whenever any
destination is configured, not only when Google Drive is. - A single backup schedule replaces the four separate per-destination schedules, so every copy
is the same age instead of one quietly falling days behind another. Your existing frequency
carries over. - Backups to keep is configurable for self-hosted backup (Settings → Self-Hosted Backup),
2–15, matching the Google Drive setting. Was fixed at 5. - Restoring from a server shows what's in the backup first — total tasks, open tasks and
projects — so you can tell a full backup from one taken when there was barely anything in it.
A backup that can't be read (wrong passphrase, truncated file) says so and can't be restored. - Compare with Backup now works for self-hosted backup too. The Self Host tab can compare
current tasks with the latest FTP/FTPS/SFTP backup using the same diff view as Google Drive:
pending/done totals, tasks added since the backup, tasks missing locally, and tasks whose title
or completion state changed. The row is visible in the Self Host tab whenever that destination
is enabled, and stays greyed out with a "Not configured" hint until server details are saved. - A progress spinner on the self-hosted "Back up now", matching the Google Drive one.
- A peek at tomorrow when Today is empty. When there's nothing due today, a "Show upcoming
tasks" button appears below the empty state — tapping it reveals tomorrow's and the day after's
open tasks, dimmed but fully clickable and completable, for that visit only. Settings → Task
Defaults has a toggle to show them automatically every time instead, no button needed. - Self-hosted backup over SFTP or FTP/FTPS. Settings → Self-Hosted Backup connects to any
server you already run (password or private-key auth for SFTP, password for FTP; configurable
remote folder) and schedules the same JSON payload the Google Drive and on-device backups use —
no vendor account, no lock-in to a specific host. A protocol picker switches between the two;
FTP defaults to FTPS (TLS) and only sends plain, unencrypted FTP if you explicitly opt out, with
a warning shown while that's on. An optional backup passphrase encrypts the backup file
itself (AES-256-GCM) before it leaves the device, so it stays private even on a server you don't
fully control — and unlike the on-device encrypted backup, a passphrase you know can be used to
restore onto a different phone. Keep a copy of it: without it the backup can't be restored.
Uploads are verified byte-for-byte against the server after transfer, and a short or interrupted
upload is deleted and reported rather than left sitting there looking like a good backup. Host
key trust is TOFU (trust-on-first-use) for SFTP: the
server's fingerprint is shown and must be explicitly confirmed on first connection, and every
later connection has to present that exact same key or the connection is refused outright — a
changed key surfaces as a clear warning to trust or reject, never a silent downgrade. FTPS
validates the server's certificate against the platform's own trust store, same as a browser.
Password, private key, and passphrase are stored in their own encrypted keystore, separate from
the app's regular settings. - A center crosshair guide (horizontal + vertical) in the profile/avatar crop circle, to help
line up the shot. - White/transparent logo uploads for profile and person photos now get the app-icon treatment.
A picked image that's mostly a white glyph on a transparent background (an SVG re-exported as
PNG, or any icon-style upload — SVG itself can't be decoded directly) is detected automatically
and recolored onto a Material You background instead of rendering invisible white-on-white.
Ordinary photos are left untouched. The crop screen now hints at this so it isn't a surprise.
Changed
- Remote Backup settings are now cohesive. Google Drive and Self Host live under one section
with Material 3 segmented destination tabs, shared frequency/retention/back-up-now controls,
and less duplicated setup. - The remote destination picker now uses a Material 3 segmented control with Drive/Self Host
icons instead of an in-card tab strip, making the two backup destinations read as peers. - Password, private-key passphrase, and backup-encryption passphrase fields now show a masked
placeholder when a saved value exists, while still keeping the actual secret write-only. - Google Drive backup is limited to the test profile email for now; other profiles see the option
disabled with an "Option under limited testing" note, and automatic/manual Drive backup is
skipped at the backup layer for non-test profiles rather than merely hidden in the UI. - "Archive old completed tasks" moved out of the Drive tab and into Backup & Data where it reads
as general backup/data behavior.
Fixed
- New tasks in a project with no due date no longer default to today. Picking (or opening the
sheet already inside) a project with no due date of its own now leaves the new task's due date
empty too, matching the project — it was silently defaulting to today regardless. - Your profile picture now shows on tasks assigned to you. The "You" person used for assignee
avatars everywhere (task rows, person detail, mentions) was seeded once with no photo and never
kept in sync with the picture set in Settings, so it always fell back to "Y" initials. Existing
profile photos are picked up automatically on next launch; new ones sync immediately, including
through backup restore. - FTPS uploads now publish through a temporary
.partfile and rename only after the byte count
matches, so an interrupted transfer cannot leave a half-written file that looks like a valid
backup. - FTPS certificate handling now validates the certificate chain through the platform trust store
without requiring a hostname/SAN match, which keeps secure self-hosted servers with legacy
certificates usable while still rejecting untrusted certificate chains. - FTP/FTPS self-hosted backup comparison now prefers the server's IPv4 address before IPv6/NAT64,
avoiding a connection-denied path some Android networks picked for ranjithj.in.