FYI: a repeating section with hundreds of entries, if there are a lot of fields per field, is going to make your sheet pretty slow. Be warned. What you can do here is use CSS to change the order of things within the section, something like .repcontainer[data-groupname="repeating_foo"] {
display: flex;
flex-flow: column-reverse;
} This will make the entries flow from bottom to top, so new entries should appear a the top. You can probably also do it using CSS grid, but I'm not sure how. And for the outer container, you can use either grid or flex and the order property to put the .repcontrol div for this section before the .repcontainer div, so that the Add and Modify buttons end up at the top. Is there a way to make the sheetworker not do its calculations till a "Process" button is pushed? I ask because any changes made to earlier entries are going to need to be propagated back up to the top. It's going to be super-slow if it re-calculates every entry if a change is made earlier than the most recent entry. Yup, just don't trigger your calculations on a change of the attribute, just listen until the button is clicked using on("clicked:<buttonName>", ...). This means that you should not rely on cascading workers, but compute everything in one go, which will be orders of magnitude faster than cascading for such a large section. By the way, your algorithm sounds potentially quadratic, so you better make sure it's written efficiently... make sure to only use a single getSectionIds(), getAttrs, and setAttrs call each in your function and it should work best.