v20.0 Release Notes

  • CMS: Improved the Short Link Detail page to display a QR code preview and added options to download the QR code in PNG or SVG format.

  • CMS: Added caching for Content Channel Items to improve performance when retrieving content. This reduces repeated data requests by temporarily storing frequently accessed items, improving response times across Content Channel features.

  • Communication: Improved SMS opt-out tracking by identifying which Communication triggered a Recipient to unsubscribe, allowing for more accurate reporting and troubleshooting of SMS engagement.

  • Check-in: Improved next-gen check-in to exclude schedules without a name from the schedule selection list, preventing empty checkbox options and reducing confusion during check-in.

  • Finance: The unused legacy TextToGiveSettings block has been removed. To learn more, please read the Tech Bulletin item on this topic.

  • CMS: Added an Obsidian version of the Content Channel Item View block. View and intent interactions are now recorded after the page renders in the browser so bots and JavaScript-disabled clients are no longer logged.

  • Lava: Fixed an issue where Lava statements nested inside entity command blocks within {% lava %} tags executed as raw strings instead of processing. Nested Lava logic inside a {% lava %} tag now evaluates correctly.

  • Connection: Added Connection Request Attribute filters to the Connections Hub Block.

  • Core: Updated detail block panel labels to display the icon and title together when both are provided instead of dropping the icon.

  • Event: Added a Registration Template setting to require registrants to pay in full or set up a payment plan covering the remaining balance before completing registration.

  • Group: Improved performance of the Group Sync job when syncing to security roles. Previously the authorization cache was flushed on every group member update, now it happens a single time at the end of processing.

  • Workflow: Updated the Form Builder Detail UI, converted the Form Submission List and Form Analytics blocks to Obsidian and added Confirmation Email Both, Notification Email multi-address and Connection Requests automations.

  • CRM: Added a Smarty Streets International location service for non-US address verification and optional geocoding. Requires a Smarty subscription for 'International Address Verification' or, if using geocoding, 'International Geocoding'.

  • Group: Added a Photo field to groups so a group can have its own photo.

  • CMS: Added a Status field to Persisted Datasets that records the result of the most recent build attempt. This Status is now displayed as a column in the Persisted Dataset List block, allowing administrators to quickly identify datasets that failed to build and may need attention.

  • Mobile: Updated the default layouts for new mobile applications with a simplified "Homepage" layout and a new "Full" layout that does not scroll.

  • Communication: Added a Create Connection Request SMS pipeline action and converted the SMS Pipeline Detail block to Obsidian.

  • Finance: Added per-account allocations to payment information so financial gateways can route a transaction to the correct funds.

  • Connection: Added a "My Connections" view to the Connections Hub Block.

  • CRM: Fixed an error that prevented person profile views from being logged when the viewer connected over IPv6.

  • Core: Added a Days field to the Schedule Builder duration so multi-day events like camps, retreats, and mission trips can be entered as days rather than total hours.

  • Core: Added a daily summary of Interaction counts per Interaction Component to improve reporting performance on high-volume Interaction data. Each day, the Rock Cleanup job populates the InteractionComponentDailyCount database table with the previous day's counts, which can then be used when building SQL-based reports. This feature is opt-in and is controlled per Interaction Channel using the new Enable Component Daily Counts setting. When a new Interaction Channel is created, that setting is initialized from the Default Component Daily Counts attribute on its Interaction Medium.

  • CRM: Updated Bulk Update to the newer Obsidian UI and completely rewrote the Bulk Update processor to improve reliability, error handling, and result reporting. This update also adds the ability to bulk update Record Source.

  • Prayer: Added a Comments column to the Prayer Request List block to display the number of comments associated with a prayer request.

  • Check-in: Updated next-gen supervisor screens to display soft and firm threshold limits alongside location counts.

  • Check-in: Fixed an issue in next-gen check-in that caused groups filtered by ability level to not be available during an override check-in.

  • Check-in: Updated the next-gen Check-in override feature to allow directly checking into overflow locations.

  • Communication: Added Communication List selection to the simple Communication Entry block.

  • LMS: Added the ability to require students to retake a learning activity when they don't earn a high enough score. The retake can be assigned automatically for activities the system auto-grades, or manually for those graded by the facilitator.

  • Connection: Added the Connection Request Entry block. This public form allows visitors to match or create their person record and request multiple connection opportunities.

  • Core: Updated Reminder List block to the newer Obsidian UI.

  • CMS: Fixed an issue where browser tab titles set by Obsidian blocks (Person Bio, Registration Entry, Communication Detail and others) were never displayed, leaving the page's default name in the tab instead.

  • Check-in: Improved SMS sending from the Check-in Manager person profile so messages to a parent are delivered reliably. Rock now enables SMS on the recipient's mobile number, clears any prior SMS opt-out and reactivates an inactive person record. Each change is recorded in the person's history.

  • Event: Added a Long Answer question type to Interactive Experiences. It gives people a larger text area for multi-line answers than the Short Answer type allows.

  • Lava: Added a new ToMarkdown filter that converts a string of HTML to Markdown. This complements the existing FromMarkdown filter.

  • Core: Updated the Background Check administration by retiring the legacy Protect My Ministry (v1) component. Historical background check documents remain viewable on the person profile. To learn more, please read the Tech Bulletin item on this topic.

  • CMS: Fixed page routes saved from the Page Properties block not taking effect until an app restart.

  • Finance: Added a block setting to set the Record Source of a Person created within the Benevolence Request Detail block.

  • Connection: Added a Celebrations Report, a single place to review and manage connection request celebrations. From there, review submitted stories, update celebration details, and keep celebration content consistent.

  • Check-in: Added Obsidian versions of the Check-in Configuration List, Check-in Configuration Settings, Check-in Schedule Builder and Check-in Areas and Group Detail blocks.

  • Check-in: Fixed Next-gen check-in to not allow printing labels for mobile check-in QR codes after check-in period has ended.

  • Mobile: Fixed the mobile Workflow Entry block ignoring its Completion Action setting, causing the workflow's own message to display instead of the configured completion XAML or page redirect.

  • Group: Added the Group Finder Obsidian block.

  • CMS: Added the Content Channel Item Metrics page and block.

  • Check-in: Fixed an issue that prevented Override mode from saving attendance beyond the location soft threshold when doing family auto-mode check-in.

  • Mobile: Fixed a PlaceholderColor set in page XAML being ignored on Entry, BorderlessEntry and TextEditor controls.

  • Core: Fixed an issue that could allow a single job to be executed multiple times concurrently. Rock now coordinates through a shared locking system across all node instances.

  • Mobile: Fixed push notifications from a communication not navigating to the target page when the Android app was in the background.

  • Check-in: Fixed Next-gen check-in so labels can no longer be printed from a mobile check-in QR code after the check-in period has ended.

  • Core: Updated the core icon set and icon picker to use Tabler v3.46.0.

  • AI: Improved AI agent tool results to include each entity's unique identifier and, for attributes, the description, field type and allowed values so agents can reference entities Rock stores by GUID rather than by ID.

  • AI: Added a Core Administration AI agent skill that gives agents read access to Rock's core configuration, including Defined Types and values, entity types, categories, field types, attributes and system communications.

  • AI: Added a GetSystemPhoneNumber AI agent tool that returns a system phone number's full details, including the unique identifier that workflow action settings store it by.

  • AI: Added a Workflow Builder AI agent skill. It discovers the installed workflow action components and their settings and can create, edit and remove workflow types, attributes, activities, actions and forms.

  • AI: Added a Community Knowledge Base AI agent skill that searches Rock documentation and community content, searches the Rock source code and surfaces curated topic guides.

  • Connection: Fixed opportunity-level "Activity Added" connection workflows never launching when a specific activity type was selected, and repaired existing broken triggers.

  • Event: Fixed the Calendar Event Item Occurrence List block so registration and group links use the page's friendly route when one is configured (for example /RegistrationInstance/XYZ instead of /page/404?RegistrationInstanceId=XYZ).

  • Engagement: Fixed an issue where system-level Step Type attributes (such as "Baptized Here") could be deleted from the Step Type editor.

  • Finance: Fixed the Fundraising Matching block so saving no longer clears a transaction's group or group member link when the linked group has been made inactive.

  • Event: Fixed an error that occurred when copying an Event Occurrence whose linked group was set to "No Registration Required." Previously, saving the copy would fail and require manually deleting and re-linking the group as a workaround. Copying an Event Occurrence now also clears the URL Slug on the new Linkage, so saving the copy without editing the Linkage no longer silently saves a duplicate slug.

  • Core: Fixed bot traffic being recorded as page view interactions. Crawlers are now identified before an Anonymous Visitor record is created, crawler detection uses a maintained pattern list instead of a short keyword list and prefetched or prerendered pages are no longer counted. A one-time job removes the Anonymous Visitor records bots already created.

  • Core: Improved the performance of the Exception List, Exception Occurrence List and Exception Detail blocks.

  • Connection: Added the Connection Board and Grid View to the Connections Hub block, giving users more flexible and engaging ways to view and manage connection requests.

  • AI: Improved AI agent Lookup and List tool results to include each record's unique identifier, so an agent can reference an entity that Rock stores by GUID without a second call.

  • CMS: Added a CMS AI agent skill that lets agents explore and manage sites, pages and blocks.

  • Core: Added a flexible document store that lets Rock save structured JSON records with their own document types, security and searchable fields.

  • Core: Fixed plugin loading so that a single incompatible plugin component is skipped and logged instead of preventing Rock from starting.

  • Mobile: Fixed the Giving block's default success screen claiming a confirmation email was sent when no Receipt Email is configured or the gift was scheduled.

  • CRM: Fixed an issue where the legacy Person History block was not properly chopped.

  • CRM: The Obsidian Bulk Update block now only displays Group Member Attributes with 'Show on Bulk' enabled. Since this setting defaults to off, review your Group Member Attributes after upgrading to v20 and enable 'Show on Bulk' for any attributes you want to bulk update.

  • Connection: Fixed the Connections Hub docked panel reopening on a previously drilled-into Additional Request after being closed and the same row re-selected.

  • Connection: Added a Workflows panel to the Connections Hub docked view that lists the persisted workflows launched from the selected connection request, including trigger, current activity, start date, and status, with row click opening the workflow entry form or detail page.

  • Connection: Fixed the Connections Hub Additional Requests list so requests are ordered newest first instead of in arbitrary database order.

  • AI: Fixed the MCP endpoint failing when a client sends a string JSON-RPC identifier instead of a number.

  • CRM: Fixed the Reminder List Reassign flyout dismissing when a person was selected.

  • CMS: Fixed the Content Channel Item List taking minutes to load channels with many items.

  • AI: Improved the AI workflow builder to surface each field type's stored value format, so a Person attribute reports that it stores a person alias guid rather than the person's own guid.

  • AI: Added a warning when a workflow form shows a Person field, since its picker searches the entire person database and can expose people on a public form.

  • Group: Fixed the Group Detail block showing an empty Location field when editing a group location whose location has map coordinates or a geofence.

  • CRM: Fixed Bulk Update so the Individuals "N more" pill expands the full list of people on the entry step.

  • AI: Added the Workflow Composer (Experimental), an AI agent for chat and MCP that builds workflow types, on a new page at /ai/workflow-composer. The Code Composer page is now also available at /ai/code-composer.

  • Finance: Fixed custom columns in the Transaction List block showing blank values when they used Row merge fields.

  • Group: Fixed the Group Detail block showing raw HTML tags instead of a list of dates for schedules with specific dates.

  • Core: Fixed the Category Detail block so Edit permission on a parent category allows creating child categories under it.

  • Lava: Fixed an issue where attribute values saved by the entity modify commands were not rolled back when used inside a dbtransaction block.

  • AI: Improved the AI agent personalization segment tools to better match the behavior of the Personalization Segment blocks.

  • Group: Fixed an issue where the Group Attendance List block did not display notes as plain text.

  • Core: Updated Rock by removing the old internal "Rock" theme and the V1 person profile pages. See https://www.rockrms.com/tech-bulletin/removal-of-old-internal-rock-theme-and-v1-person-profile-pages for details.

  • CMS: Added the Obsidian Content Channel View Block.

  • Check-in: Added the search group, search type, and search value used during check-in to the Check-in Manager person and attendance detail screens.

  • Core: Added a daily summary of Interaction counts per Interaction Component to speed up reporting on high-volume Interaction data. The collection into [InteractionComponentDailyCount] is opt-in and can be enabled per Interaction Channel.

  • AI: Fixed the LookupCampuses tool so it returns the correct geo location values for latitude and longitude.

  • Finance: Fixed the 'Print Statement' button on contribution statements failing silently by restoring print support in the statement display.

  • CRM: Fixed the Photo Upload block so the server enforces whose photos an individual may upload.

  • CMS: Fixed the Public Profile Edit block so a save is limited to the individual's own families instead of any group they share with the person being edited.

  • CMS: Fixed the Public Profile Edit block so the server blocks email changes to a family member whose account protection is High or Extreme.

  • Finance: Fixed the v20 Scheduled Transaction Edit migration failing on startup with a duplicate attribute GUID when an older database still had the legacy Finish Lava Template attribute.

  • Communication: Fixed the Internal Communication View block so the Previous button pages through all older items instead of stopping at the second-newest and hiding the Previous arrow.

  • Communication: Fixed an issue where Communications with no Recipients were missing from the Communication List block, leaving a draft that was saved before any Recipients were added with no way to return to it.

  • Workflow: Fixed an issue where the SMS Opt-In consent checkbox still appeared on the Person Entry block in Obsidian Workflow Entry, even when that setting was set to Hide. When SMS Opt-In is set to Hide, new mobile numbers are now saved with messaging enabled, matching the WebForms block.

  • Core: Fixed the Obsidian Grid's Merge Template and other Entity Set actions ignoring the grid's displayed row order. Merged output now matches the order shown in the grid.

  • Workflow: Fixed the Campus dropdown on the Obsidian Workflow Entry block's Person Entry step so campuses list in their configured order instead of by ID.

  • CMS: Fixed missing source map (.map) file requests redirecting to the site's Page Not Found page, which could add a large number of unwanted entries to the Interaction and Exception Logs.

  • Lava: Fixed the Defined Value Picker and Campus Picker Lava shortcodes truncating any value that contains an apostrophe.

  • Lava: Fixed an error that prevented non-administrators from running a Lava Application endpoint when the "RSR - Lava Application Developer" security role was inactive. Previously, an inactive role caused an error before permissions were even checked, blocking access for everyone except Rock Administrators.

  • Engagement: Fixed an issue that could cause Sign-Up pages to show an error screen instead of loading. This happened when a group's schedule was set to repeat with no end date and was also marked inactive, which left Rock trying to look ahead through an endless series of dates. These pages now load correctly for those schedules.

  • Communication: Fixed Mailgun HTTP sending "System.Net.Mail.AlternateView" as the plain-text body of emails, which caused blank inbox previews in iOS Apple Mail.

  • Communication: Fixed the Communication Entry Wizard so the medium picker honors the "Communication Types" block setting and no longer offers a standalone SMS option when that medium is excluded.

  • Check-in: Fixed a bug that could silently remove Check-in Areas from a shared Next-Gen Check-in saved kiosk template when it was saved from a campus that didn't use those Areas. Now, when editing a template, the Primary and Secondary Areas lists show every Area the template includes, even Areas the current kiosk's campus doesn't use. Those Areas appear grayed out with a tooltip explaining why they're shown, so administrators can knowingly keep or remove them as needed.

  • Workflow: Fixed the Obsidian Workflow Entry block so it preserves the page's friendly named route (for example /my-custom-route) after a form submission, instead of replacing the address bar with /page/{id} and losing the route.

  • Lava: Fixed a bug where placing a Lava "comment" ... "endcomment" block inside a {% lava %} block caused an error and prevented the page from displaying properly. The "comment" and "capture" blocks inside {% lava %} tags now work correctly again.

  • Group: Fixed the Group Placement block not updating the screen after removing a group member when the destination group type had Group History enabled.

  • CRM: Fixed an issue where the Calculate Person Duplicates job could run for hours, or fail to finish, on larger databases with many blank Birthdate, Marital Status, or Suffix values. The job now skips those blank values up front and finishes quickly. Duplicate results are unchanged.

  • CMS: Fixed an issue where saving a Content Channel Item could take an unusually long time when many items shared a similar title or slug.

  • Core: Fixed an issue where the previously persisted display values on Single Select and Multi Select attributes were not refreshed in Obsidian grids after the attribute's Values configuration was edited.

  • Group: Fixed the Group Attendance Detail block so inactive schedules no longer appear in the "Attendance For" drop-down when the Date Selection Mode is set to Pick From Schedule.

  • Communication: Fixed the Chat Channel Message Send and Chat Direct Message Send workflow actions failing with "Value cannot be null" when no attachment was configured.

  • Workflow: Fixed the Obsidian Workflow Entry block so Electronic Signature and Payment steps in a workflow no longer fail with a "Captcha was not valid" error when Captcha is enabled on the block.

  • CMS: Fixed the Person Profile sub-navigation so the "More" menu no longer duplicates as you work on the page, and no longer disappears when the window is resized while the menu is open.

  • Workflow: Fixed Form Builder so that submitted field values are included when using the Notification Email template.

  • CRM: Fixed the Person Edit block so that changing the Giving Envelope Number now works when the person's name contains an apostrophe.

  • Finance: Fixed the Obsidian Business Detail block so former addresses can be saved as previous more than once without a duplicate key error.

  • CMS: Fixed newly created website interaction channels to enable Uses Session by default.

  • Core: Fixed a race condition that could cause Rock to become unresponsive in rare situations. This showed up as high CPU usage and certain pages not rendering until Rock was restarted.

  • API: Fixed an issue that caused the Group Locations v2 search endpoint to return an error when trying to retrieve the full objects.

  • Workflow: Fixed an issue where a misconfigured workflow could get stuck in an endless loop and quietly stop other background tasks until Rock was restarted. These workflows are now stopped automatically and marked as failed.

  • LMS: Fixed the course navigation menu not displaying on mobile for a completed course when historical access is enabled.

  • CMS: Updated PageViews Block to display data when loaded with a non predictable id.

  • Group: Fixed a misspelling in the Maximum Zoom Level setting label on the Group Finder block.

  • Connection: Fixed workflows launched from the Connections Hub doing nothing when they used a Redirect to Page action.

  • Connection: Fixed the security button on the Connection Type and Connection Opportunity attribute grids so it now opens the security settings.

  • Core: Fixed an issue where a scheduled job would silently stop running until Rock was restarted if an internal error occurred while recording the job's run status, writing its job history record, or sending its notification email.

  • Core: Fixed an issue where Jobs finishing in under a second could produce duplicate Service Job History records, a false "Incomplete" status, and exaggerated run times in the job's history.

  • Prayer: Fixed the Prayer Request List block to restore the "Expires After (days)" setting and other block settings and behaviors that were missed during its conversion to Obsidian.

  • Finance: Fixed the Giving Configuration block where saved payment methods and scheduled transactions showed a stray "| Exp:" for ACH, PayPal, and Venmo, and displayed Apple Pay and Google Pay as regular credit cards instead of digital wallets.

  • API: Fixed an issue where creating or updating certain records through the API caused the server to perform unnecessary validation work, making those requests take over a minute to complete.

  • Farm: Fixed a Web Farm issue where a difference in capitalization between a node's saved name and its actual name caused an error and made the node appear unresponsive.

  • Workflow: Fixed several display issues on the Payment Entry workflow action. Spacing below the Amount field is now consistent when the Amount Entry Label is blank, a custom Amount Entry Label no longer stacks with the default "Amount: ..." line and the credit card form is no longer centered under the Amount field when using the test gateway.

  • Lava: Fixed an issue where rendering Lava debug output (via the Debug filter or admin help panels that list available merge fields) silently created impersonation tokens (PersonToken records) for the current person and, in some cases, other people reachable through navigation properties.

  • CRM: Fixed an issue where inactive phone types continued to appear on the person profile Bio, the Edit Person form, the Check-in Manager Person Profile panel, and the Rapid Attendance Entry header. Inactive phone types are now hidden from these views.

  • CRM: Fixed an issue where User Login history entries disappeared from a person's History tab after the User Login was deleted. The History Log block now shows this history even after the login is gone.

  • Core: Fixed an issue where downloading or viewing a Signature Document returned an error when using impersonation. Direct downloads of signed documents now honor the Signature Document Template's security settings, and Rock corrects existing records automatically.

  • Group: Fixed an issue where the Group Scheduler block showed an error when attempting to schedule a Group that has no parent Group.

  • Event: Fixed a confusing "Information" alert that appeared with no message when an individual without Edit permission selected a Registration Template.

  • Core: Fixed the Geo Picker so it continues to work after Google removed the Drawing Library from the Maps JavaScript API. The picker now uses its own drawing toolbar, has a tighter on-map layout and no longer errors when Done is clicked with a partially drawn polygon.

  • CMS: Fixed the Content Channel Item List block so that duplicate item attribute Keys defined on both the Content Channel Type and Content Channel no longer prevent the list from loading.

  • Finance: Fixed the Financial Account List block so that when no page parameters are provided, all accounts are listed instead of only top-level accounts.

  • Workflow: Fixed an issue where viewing a previously completed workflow would reset the completed date on the workflow and all of its activities to the current time.

  • Core: Fixed an issue in the Group Member field type where the current selection could be lost when it was configured to allow multiple selections but only one item was selected.

  • CRM: Fixed an issue where the Family Analytics job could incorrectly remove people from eRA and miscalculate the First/Last Gift, First/Last CheckIn, and gift/attendance count attributes when check-ins or gifts occurred on the boundary Sunday of the evaluation window.

  • Finance: Fixed an issue where individuals in the RSR - Finance Administration or RSR - Finance Worker roles could not edit Financial Transaction Details using the ModifyEntity Lava command.

  • Core: Fixed the Process BI Analytics job failing on large systems when the person statistics count query timed out.

  • Group: Fixed an issue where copying a group also copied its chat channel key, causing both groups to share one chat conversation and send new members to the wrong group's roster. This caused the Chat Sync job to report an error each time it ran. Affected copies will have their chat channel keys cleared automatically during the update. See this Tech Bulletin for more details.

  • Group: Fixed the Group Schedule Toolbox throwing an error and not saving unavailability when the notes were longer than 100 characters.

  • Connection: Fixed new connection requests using the opportunity's Due Soon Window instead of its Request Due Duration for the due date when the connection type uses Fixed Days From Start (Opportunity Level).

  • Lava: Fixed an issue with the Lava modify commands that prevented Guid values from being parsed correctly when updating property values.

  • Group: Fixed the Group Schedule Status Board and the WebForms Registration Group Placement block rendering without their layout styles after the old Rock theme was removed.