Added
- Birthday import offers "Select all" and "Deselect all". Select every contact
with a birthday that has not already been imported, or clear the selection, with
one button above the list. Large selections are imported in batches. If a later
batch fails, the saved count remains visible in the warning and the list is
refreshed; retrying reports the total across successful batches. - yuvomi.cloud answers the four questions people ask most before they install. "Before you
commit" now also says whether there is an app in the store (no, it installs from the browser and
sends push reminders, with HTTPS), what works without signal (reading the last loaded calendar,
tasks, shopping list, contacts and overview; changes need a connection), whether a CalDAV or
Nextcloud server is still needed (only to keep editing in other apps; Yuvomi syncs with it but is
no CalDAV server itself) and how Home Assistant fits in (ICS feeds, webhooks and the REST API with
per-module tokens, no official integration). Each answer is held against the code by the landing
page tests.
Fixed
- The currency and long time zones are no longer cut off in the appearance settings on a
phone (#2166). A currency read like "AED - United Arab Emirates Dirham" and ended in "…" on
a narrow screen, and so did five time zones such as "North Dakota/New Salem". The currency
now shows its code and symbol ("GBP £"), a time zone its city ("New Salem"), and the hint
below starts with the full name ("Currently British Pound."). The currency list in the loan
dialog of the budget keeps the full names. - A write request without a body gets the route's own answer instead of a server error (#2209).
Since the move to Express 5, a POST, PUT or PATCH without a body left the request body empty
and most routes - meals, tasks, shopping, notes, calendar, budget, reminders, pantry, contacts
and more - answered 500. The server now treats a missing body as an empty one in one place, so
each route says which field is missing (400). The MCP endpoint still answers a call without a
body with a JSON-RPC parse error, and anIdempotency-Keystored before the update keeps
matching its retry. - Creating a recipe through the MCP bridge no longer ends in "Internal error" (#2197). When
an assistant put the recipe fields next tooperation_keyinstead of intopayload,
call_api_operationsent the request without a body and the recipe routes failed on it. The
bridge now answers that the body belongs inpayload, and a required body that is missing goes
out as an empty object, so the route says which field is missing. The recipe routes themselves
answer a request without a body, or with ingredients that are not a list, with 400 instead of
500. Events, shopping items and tasks were not affected because they have MCP tools of their
own; recipes are only reachable through the bridge. - A new event appears at its time in the calendar right away. After adding an event, the
agenda (and every other day list) showed it below all other events of that day until the next
reload, whatever its start time. The same happened when an edit moved an event to another time
of day. The event is now sorted into place as soon as it is saved. - Assigning a synced iCloud event no longer turns its Apple Maps place into plain text. A
place picked through Apple's location search is stored on several lines, and the single-line
location field in Yuvomi dropped the line breaks. Saving the event, even only to assign a
household member, therefore sent a changed location back to iCloud, and the iPhone showed the
address as text without the map link. A location that differs only by line breaks now counts
as unchanged, so the event stays as it is in iCloud; a location you really change is still
sent. - A single occurrence changed on the iPhone keeps the assignment of its series. Editing
one occurrence of a recurring iCloud, CalDAV or Google event in another calendar app ("This
event only") makes it a separate event in Yuvomi. That event only got the calendar's default
person, so the household member assigned to the series in Yuvomi was missing on exactly that
day. It now takes over the series' assignment when it first arrives (the default person still
applies if the series has none), and an assignment you change on it later stays. A series split
with "All future events" gets a new identity in Apple Calendar and is still treated as a new
event. - A planned snack now shows up on the wall and in Today. Since 2.79.0 a paired display
receives every meal of the day, but the choice of which meal to show only looked at breakfast,
lunch and dinner. A day whose only remaining plan was a snack showed no meal at all. The snack
now takes part in that choice at its place in the day, between lunch and dinner (#2206). - Wall mode on older browsers: the footer sits at the bottom again. Without
dvhsupport
(Chrome and Android WebView below 108) the wall was only as tall as its content, so "Updated",
the kitchen timer and "Leave wall mode" floated mid-screen on a quiet day. The wall now takes
its height from the app shell, which works in every browser; current browsers look the same
(#2183). - Browsers without
color-mix()no longer lose buttons, selections and colors. On Chrome
and WebView below 111 and Safari below 16.2, primary buttons (Save, Sign in, Pair) and the
add button had no fill and their label disappeared, toasts and the search overlay were
see-through, holidays showed white text on nothing, and the selected task, contact, document,
filter or search result looked like the rest. These now get a plain color from the design
tokens; note and shift colors show as a colored ring, and empty checklist boxes keep their
edge. Tints elsewhere stay plain, as the browser table in the installation guide describes;
current browsers are unchanged (#2184).
Security
- Updated three production dependencies for published advisories (#2192, #2193, #2194).
body-parser2.4.0 stops a compressed request body with trailing bytes from tying up the
server (denial of service).nodemailer10.1.4 fixes three cases in which its address parser
read part of a quoted name or comment as an extra recipient.ip-address10.7.4 no longer spends quadratic
time on a long IPv6 zone identifier.