Repository navigation
Releases: imetn/calends
Release list
Calends 1.12.1
Calends 1.12.1 is the first official release in the 1.12 series, including all changes since 1.11.0. It redesigns shared-plan member collections and people profiles, adds lifecycle reports for selections, and makes incomplete currency conversions explicit.
Highlights
- Shared-plan member sheet. Every member opens the same sheet, with identity, collection and seat details in order. A monthly period grid joins multi-month periods and highlights the full period on hover. Tap a settled cell for receipt details, editing, deletion or copying; collect an unpaid period directly, prepay the next period, or use the Waive action.
- People profiles and custom colors. Profile details come first, with compact linked-plan rows showing status and collections. Choose one of eight colors or any custom
#RRGGBBcolor; avatars, lists andsave_person.colorsupport it. - Selection lifecycle reports. See lifetime spending, duration, stops and losses alongside a mini timeline, cash chart and events, and copy the report as an image. Timelines fit the selected subscriptions and stop active tracks at the next period end.
- Missing exchange rates. Unconverted amounts stay in their original currency; totals retain the known portion alongside unconverted amounts, and unavailable ratios stay hidden. MCP and reminders return
nullwith an incomplete marker instead of treating missing rates as zero.
Fixes
- Opening a member who owes now places the automatic collection form above the member sheet, with working controls and focus; closing returns to the member sheet.
- Changing a plan's collection date preserves existing members' historical anchor and receipts, then starts their new rhythm from the new date.
- Collections starting on days 29–31 return to the original day after short months instead of drifting permanently to the 28th.
- Removing a member's exemption waives unsettled periods before the fee's effective date, avoiding retroactive billing of the exempt span.
- Paused shared plans stop generating dues from the pause date, keeping grids, status and expected income consistent.
- First-period exit refunds are capped at actual overcollection; departed members' paid-through dates consistently retain the coverage paid for.
- Receipt copying rejects incompatible member billing periods before saving.
- Hardened one-time challenges, visitor rate limiting, calendar-token comparisons, ICS text and remote-image URL checks, including encoded private addresses. Docker disables the local explorer and blocks
/cdn-cgi/. - Backup restores and roster writes are transactional; reminder delivery uses a ten-minute lease. Failed client writes reload the server snapshot, errors and uncached offline states show a recoverable page, and Worker language state is isolated per request.
- Interrupted assistant replies can be retried, leaving the page stops streaming, and conversations are limited by byte size. MCP batches run in order and destructive tools require an ID or full name.
Upgrading
1.12.0 images were published briefly with a dialog-stacking bug when opening a member who owes; use 1.12.1.
There are no new SQL migrations (the latest remains 0007). There is one automatic read-time data conversion: recorded receipt, waiver and opening-settlement period keys for shared-plan members with collection anchors on days 29–31 are aligned to the corrected month-end schedule and written back when the ledger loads. No manual action is required; back up your ledger before upgrading and retain your existing configuration and data volume.
Refresh browser tabs already open after upgrading. External MCP clients should account for the changed set_share.collect_from behavior: existing members retain their original anchor and begin the new rhythm from the new date. save_person.color now also accepts #RRGGBB. Read tools expose calendar-month and list-selection reports, and set_status supports edit for existing stop details. The catalogue still contains 34 tools.
Images
Multi-architecture images (linux/amd64, linux/arm64) are available from Docker Hub and GitHub Container Registry:
docker pull xizozhe/calends:1.12.1
docker pull ghcr.io/imetn/calends:1.12.1The 1.12 tags follow this release series; latest follows main.
Calends 1.11.0
Calends 1.11 adds second-hand transfers, split payments and stops with an unknown date, with fuller MCP editing and a refreshed subscription history.
Highlights
- Transfers and net cost. Record what you paid to take over a subscription or received when reselling it, in any currency at the cash-date exchange rate. Net cost combines service payments and takeovers minus resale receipts; detail averages use the actual holding period. Transfers enter monthly and annual cash flow, while MRR, renewal forecasts, wallet balances and charge counts keep their existing scope. Transfer records remain private, and resold remaining service no longer appears as unused loss.
- Split payments. Fund one charge with several payment methods whose parts total the charge. Payment tables show the sources; method composition, annual reviews and method-grouped spending allocate each part. Deleting or merging methods migrates split references.
- Unknown stop dates. Mark a subscription cancelled or provider-terminated without inventing an end date. Details disclose the unknown date, omit exact duration and averages, and limit the chart to known payment coverage.
- More complete MCP editing. The 34-tool server adds
save_subscriptionfor complete records with phases and historical payments, field-level changes and calculated before/after previews, plusrecord_transferfor adding, replacing and deleting takeovers/resales. Historical payment inputs supportfunding; new subscriptions can start as cancelled or terminated, andmethod: nullskips the default method. Write previews, token permissions and in-app confirmation remain intact. - Clearer history and records. Event history uses icons and aligned dates, receipt and payment tables share titled cards, and paid-for-others records group by year. Common service icons have been checked and updated.
Fixes
- Wallet balances now deduct a recorded charge from its actual payment source, including one-off method overrides and split shares.
- Ended subscriptions stop their detail chart on the actual end date; the today marker appears only when today is in range.
Upgrading
No new SQL migrations (the latest remains 0007) and no new data conversion are required when upgrading from 1.10.0. Transfers and payment funding are optional fields; existing records remain readable with the same configuration and data volume. Refresh already-open browser tabs after upgrading.
External MCP clients: for set_status actions cancel and terminate, explicitly supply at when the subscription started or has payments before today. The tool no longer assumes today in those cases. Use at: null when the stop date is unknown.
Images
Multi-architecture images (linux/amd64, linux/arm64) are available from Docker Hub and GitHub Container Registry:
docker pull xizozhe/calends:1.11.0
docker pull ghcr.io/imetn/calends:1.11.0The 1.11 tags follow this release series; latest follows main.
Calends 1.10.0
Calends 1.10 brings per-period receivables to shared plans and payments on behalf of others, with flexible collection, waivers and prepayments.
Highlights
- Per-period receivables. Select exactly which periods a receipt settles, including nonconsecutive periods while earlier ones remain owed. One receipt can cover several periods, with its amount allocated in proportion to each period's dues.
- Waivers and prepayments. Waive periods without counting them as income, or collect future periods early. Proxy prepayments enter recovered income and profit only once their charge date arrives. Upcoming periods expand progressively through Show more.
- Unified member and receipt forms. Shared plans use one member form and one receipt form, with common fee, next-collection and seat controls. A period strip shows settled and unpaid periods and opens their receipt directly.
- Clearer presentation. The date picker centers its month and year, uses one pair of month arrows and follows the interface language. Former shared-plan members collapse beneath a centered footer.
Fixes
- The image proxy now fetches only public HTTPS addresses and checks every redirect hop, preventing access to private networks, including on Docker installations. Thanks to Vic Liu (@iamvicliu) for the address-checking work in PR #5.
- Break-even proxy payments no longer show an average of negative zero per period.
- Focus rings appear for keyboard navigation rather than mouse clicks or typing.
- Privacy mode also masks member avatars in receipt tables.
Upgrading
- Export a backup before upgrading. There are no new SQL migrations (the latest remains 0007), but the first ledger load converts legacy member receipts and proxy entries in place to per-period records and writes them back. Existing receipt amounts are retained; legacy collection restarts preserve the previous next-collection date and amount.
- Refresh browser tabs that were already open after upgrading. If you restore an older backup, its legacy receivables are converted automatically on the next load.
- Breaking change for external MCP clients:
record_receivableno longer acceptsindex,entry,from/untilorpaid_until. Select periods withperiodsorcount, and update/delete receipts or waivers byid. The existing tool also supportswaiveand proxy charge overrides throughcharged.save_share_member.paid_untilnow sets the opening settlement before record-keeping; use receipts for actual money. The tool catalogue remains at 32, with unchanged scopes and write-preview behavior.
Images
Multi-architecture images (linux/amd64, linux/arm64) are available from Docker Hub and GitHub Container Registry:
docker pull xizozhe/calends:1.10.0
docker pull ghcr.io/imetn/calends:1.10.0The 1.10 tags follow this release series; latest follows main.
Calends 1.9.0
Calends 1.9 adds browser-based ledger imports, redesigned subscription details, per-charge payment methods and table views for shared plans and payments on behalf of others.
Highlights
- Import external ledgers. Preview and import CSV files, ZIP backups and databases from Wallos and other services, with parsing in your browser and editable currencies and cycles before confirmation. External imports retain a history boundary: Calends does not infer charges before the import date. Existing Calends and iOS Subscriptions CSV imports retain their historical estimates. Small embedded logos are supported.
- Subscription details. A single-column dialog brings together status-aware metrics, current-period progress, a charge timeline with month/quarter/year aggregation, original/base-currency switching and a list-price reference, yearly charge records, sharing and event history.
- Per-charge payment methods. Assign or clear a payment method for one charge, or update the whole plan period. Reports, calendars, reminders, ICS and MCP use the charge's effective method. The existing
record_paymenttool accepts optionalmethod; omitting it when editing preserves the recorded override. - Shared plans and payments for others. Desktop table views provide three-state column sorting that also orders cards. Shared plans show yearly and cumulative profit/loss, plan price and yearly cost. Open a member once to view details or record an overdue receipt; edit people separately from plan seats. Lifetime shared plans use one-time collection.
- Easier entry and discovery. Select an App Store in-app purchase to prefill amount and billing cycle. The date picker supports month/year dropdowns and manual entry. Optional catalogue packs include high-resolution local brand icons and more Chinese subscription services; editor history appears before More options.
- MCP account context. Distinguish same-name subscriptions by login account and search by account. Connection information includes caller scope, local date and available tools. The catalogue remains 32 tools with unchanged permissions and write previews.
- Consistent, faster views. Inactive wallet subscriptions sort last; pending charges, links, table dividers, flags and shared-plan cards have consistent presentation. Shared-plan calculations are reused within the page, and MCP initialization reads only settings.
Thanks to @iamvicliu (Vic Liu) for sortable subscription columns in #2 and catalogue icons and date-picker improvements in #3.
Fixes
- Moving a service start earlier now infers the added billing cycles along the original billing anchor while preserving recorded payments.
- Corrected billing-period and refund-limit calculations for imported subscriptions before their first charge.
- Fixed lifetime shared plans causing page errors.
- Restored dropdown arrows, prevented date-picker year truncation and removed rounded clipping from country flags.
Upgrading
Upgrade directly from 1.8.x using the same configuration and data volume. There are no new database migrations (the latest remains 0007). Ledger imports are optional; existing data and historical payments remain compatible.
Images
Multi-architecture images (linux/amd64, linux/arm64) are available from Docker Hub and GitHub Container Registry:
docker pull xizozhe/calends:1.9.0
docker pull ghcr.io/imetn/calends:1.9.0The 1.9 tags follow this release series; latest follows main.
Calends 1.8.0
Calends 1.8 adds pinyin search, exit refunds for shared plans, easier receipt editing and image copying, with faster navigation and timelines.
Highlights
- Pinyin search. Find Chinese names by full pinyin, initials or mixed syllables in subscription search, the command palette and pickers. The dictionary loads on demand in Chinese interfaces; literal search remains available.
- Shared-plan timelines and settlements. The host occupies a seat, full plans are marked clearly, vacant rows add members, and former members collapse without losing their receipts. Pan member timelines to inspect coverage. Record an exit refund using a prorated suggestion or the actual amount; receipts and historical billing remain intact. The existing
save_share_memberMCP tool acceptsleave_refund, retaining previews, permissions and assistant confirmation. - Clearer collections. Edit a recorded receipt directly from its row. List cards show yearly cost, income and net figures; details lead with paid, received, profit/loss and pending collections. Sort plans by dues, yearly net, next charge or name, and mask private identities before copying a plan image.
- Reports for completed subscriptions. Selections with no current monthly spend use Total mode with cumulative spending, composition and a top-ten ranking. Reports put cash vs. true cost and composition before monthly changes and checkup; unpaired half-width cards fill the row.
- Copy cards as images. Supported Overview and Reports cards reveal image-copy actions on hover or keyboard focus. Dialog actions and copy feedback share a consistent header workflow.
- Navigation and presentation. Use Command/Control+B to toggle the sidebar, sort subscriptions by category, and move between calendar month and year views with view transitions. Tables, tooltips and SIM cards have refreshed layouts.
- Faster everyday use. Cached formatters, a translated timeline panning layer, a windowed overview timeline and lazy-loaded calendar, wallet, assistant and review views reduce repeated work.
Fixes
- Inferred charges after the last recorded payment in an ended phase can now be edited or deleted. Deleting the last such charge no longer causes it to be inferred again.
- Corrected shared-plan seat counts to include the host, with consistent full-plan and vacancy displays.
- Fixed missing space beside an unpaired report card and improved compact receipt tables, calendar charge markers and narrow-screen layouts.
- Fixed assistant rendering keys for tool outputs and confirmation drafts, payment-card flag clipping and subscription-card content alignment.
Upgrading
There are no breaking changes and no new database migrations (the latest remains 0007). Upgrade directly from 1.7.x using the same configuration and data volume. Exit refunds are optional fields; existing shared plans and historical receipts remain compatible.
Images
Multi-architecture images (linux/amd64, linux/arm64) are available from Docker Hub and GitHub Container Registry:
docker pull xizozhe/calends:1.8.0
docker pull ghcr.io/imetn/calends:1.8.0The 1.8 tags follow this release series; latest follows main.
Calends 1.7.2
Calends 1.7.2 fixes mobile overlay sizing and timeline loss amount alignment.
Fixes
- Size mobile bottom-sheet pickers and the search panel against the visible viewport with
dvh, retaining avhfallback for older browsers. Global style checks now guard viewport fallbacks and alignment resets in grids that stack on narrow screens. - Vertically center loss amounts in the gray unused segment of terminated subscriptions on the timeline.
Upgrading
Upgrade directly from your current installation. No new migrations or breaking changes.
Images
- Docker Hub:
xizozhe/calends:1.7.2 - GHCR:
ghcr.io/imetn/calends:1.7.2
Both images support linux/amd64 and linux/arm64.
Calends 1.7.1
Calends 1.7.1 fixes mobile dialogs and carpool card layout on narrow screens.
Fixes
- Keep dialog titles and close buttons visible when the iOS Safari toolbar is shown by sizing dialogs to the dynamic viewport, with safe-area spacing.
- Make carpool cards fill the available width on narrow screens.
Upgrading
Upgrade directly from 1.7.0. No database migrations or breaking changes.
Images
xizozhe/calends:1.7.1ghcr.io/imetn/calends:1.7.1
Both images support linux/amd64 and linux/arm64.
Calends 1.7.0
Calends 1.7 brings shared-plan billing rules into one place, makes member collections easier to manage, and adds renewal rules for advance charges and cancellation deadlines.
Highlights
- One collection rule for each shared plan. Set the fee, currency, cycle and common collection date once. Members can follow the plan, use a custom rate or take an exempt seat. Dated changes preserve earlier coverage and receipts.
- A clearer member and collection workflow. Shared-plan details show each member’s fee, follow/custom label, current coverage, collection status and days overdue. Open a member to adjust billing or choose a paid-period start and derive its end. Record receipts against independent member periods; received payments collapse by coverage and outgoing charges by year.
- People and plan-specific accounts. Add private avatars, keep a separate member account for each plan, and use the compact people table with collection filters and sorting. Subscription editors show member billing summaries and overdue status.
- Renewal rules. Track advance charging and cancellation deadlines separately from service coverage. Common-service presets help with setup; dated changes preserve earlier payments and feed the calendar, forecasts and reminders.
- Editable price history. Correct effective dates and amounts or remove later price points in place. Actual payments stay intact, with confirmation when past estimates change.
- 32 MCP tools. Manage shared-plan rules and member following, inspect overdue days, and maintain wallets, categories, people and ledger settings. Category assignments are validated; creating a missing category requires an explicit request. Writes retain scoped permissions and
dry_runpreviews. - Isolated MCP release checks. The new
scripts/mcp-release-check.mjsexercises real Worker requests with fictional data, covering schemas, permissions, previews, dated member fees and receipts, with optional provider-backed assistant checks.
Fixes
- Kept shared-plan receipt amounts, currencies, notes and historical coverage intact when changing billing rules; hid first-period labels once that period was paid.
- Fixed MCP member-fee handling at its effective date, preserved earlier fee history when switching back to the shared-plan rule, and kept former members unchanged when editing that rule. Members without a pending collection no longer appear overdue; MCP and assistant responses now use explicit collection dates and preview summaries.
- Timeline loss labels now measure the actual text width and fall back to rounded amounts when the full amount does not fit.
- Unified zero-decimal currency formatting and amount-input validation across the app.
- Improved subscription details, calendar day cards, member tables and narrow-screen dialogs, with less repeated information and consistent keyboard focus rings. Inline delete actions now expand into an explicit confirmation step.
- Kept the assistant welcome screen stable after history loads and restored subscription details when closing their editor.
Upgrading
There are no breaking changes and no new database migrations (the latest remains 0007). Upgrade directly from 1.6.0 using the same configuration and data volume. Existing shared plans remain compatible; stored collection rules, avatars and renewal settings are optional.
Images
The release workflow publishes multi-architecture images (linux/amd64, linux/arm64) to Docker Hub and GitHub Container Registry:
docker pull xizozhe/calends:1.7.0
docker pull ghcr.io/imetn/calends:1.7.0Calends 1.6.0
Calends 1.6 makes focused reports easier to use, brings day details back to the calendar, and aligns shared-plan collections around a common billing date.
Highlights
- Reports for a selection. Generate a report from filtered or searched subscriptions using the dashed entry below the results. Report cards sit directly on the page, with copy and collapse actions in the first card and icons linking rows to subscription details.
- Day details and monthly reports. The calendar starts with today selected. A compact report at the upper right shows the month’s total, comparisons and a six-month chart; expand it for the full report, then collapse to return to day details.
- Aligned shared-plan collections. Set a common collection date and choose how a member joining mid-period pays for the first period: prorated by actual days, the full fee, or free. Receipt defaults follow the earliest unpaid period. MCP tools support the same settings and previews.
- Clearer everyday controls. A clear-filters pill restores the default selection. Horizontal scrolling stays inside the subscription timeline, and the report footer cards align in height.
Fixes
- Removed repeated figures and aligned spending, monthly changes, historical losses and shared-plan totals across pages.
- Kept manually edited receipt amounts, currencies, dates and notes when switching collection periods.
- Corrected loss signs, gift-card face values, stopped-subscription endings and receipt captions.
- Fixed public-page theme updates and cash-flow signs, reminder date grouping, and narrow-screen statistics across all 14 languages.
Upgrading
There are no breaking changes and no new database migrations. Upgrade directly from 1.5.0 using the same configuration and data volume. Existing shared plans remain compatible; the new collection and first-period settings are optional.
Images
Multi-architecture images (linux/amd64, linux/arm64) are available from Docker Hub and GitHub Container Registry:
docker pull xizozhe/calends:1.6.0
docker pull ghcr.io/imetn/calends:1.6.0Calends 1.5.0
Calends 1.5 turns subscription selections and calendar months into focused reports you can explore, fold away and copy as images.
Highlights
- Reports for the current selection. Generate a report below filtered or searched subscriptions in Cards, List or Timeline view. Changing the selection hides the old report; generation and disclosure preferences stay in sync across devices.
- Monthly calendar reports. The month view starts without a selected day, and clicking a selected day clears it. With no day selected, or when the selected day has no charges, the calendar shows that month's report. The year view stays focused on the calendar.
- Figures that follow the data. Reports include spending comparisons, changes, composition, top charges, upcoming payments, subscription events, losses, refunds and shared-plan collections when relevant. Monthly comparisons use full calendar months and the same net, my-share cash basis as Reports.
- Copy the whole report. Copy either report as a PNG, including while collapsed or on a narrow screen, without changing its saved disclosure state. Assembly animations respect reduced-motion preferences.
- Reliability fixes. Calendar reports fit narrow screens, historical assistant conversations no longer trigger a layout update loop, and subscription details can export images containing external site icons.
Upgrading
There are no breaking changes and no new database migrations. Upgrade directly from 1.4.1 using the same configuration and persistent data volume.
Images
Multi-architecture images (linux/amd64, linux/arm64) are available from Docker Hub and GitHub Container Registry:
docker pull xizozhe/calends:1.5.0
docker pull ghcr.io/imetn/calends:1.5.0