2.0.0-RC31
ADDED- Row Duplication — duplicate a table or collection row from the row menu. Choose how many copies to make, place them below the selected row or at the bottom of the table, and optionally include child tables. Also available in code with
rows.duplicate(...). Duplicating several rows sends a single change event - Row Limits — set
maxRowson a table or collection table to cap how many rows it can hold. Adding and duplicating rows stop at the limit. UsecanAddRows()to check whether more rows fit - Bulk Edit Decorators — new
DecoratorConfig.showInBulkFormoption to hide decorators when editing several rows at once. Defaults totrue
- Row Limits —
rows.append()androws.prepend()now throw anIllegalStateExceptionwhen the table is full. CheckcanAddRows()before calling them
- Collection Tables — each table shows its own header, and the current one stays pinned at the top while scrolling. The table title no longer appears twice
- Collection Tables — after closing a row form, the row is no longer hidden behind the pinned header
2.0.0-RC30
CHANGED- Bulk Editing — submitting a bulk edit now sends one change event containing all affected rows and updated cell values
- Bulk Deletion — deleting multiple rows now sends one change event containing all deleted rows
2.0.0-RC29
ADDED- Collection Tables — keep the active table header and row actions visible while scrolling
- Bulk Editing — emit change events after submission, including when default action buttons are hidden
- Inline Bulk Editing — reset submission state for each new bulk edit so Submit and Cancel remain available
- Row Navigation — clear bulk selection when opening a single row
- Addition Formulas — sum numeric text values as numbers
2.0.0-RC28
ADDED- Cell Formulas — Excel-like formulas for table and collection cells. A formula is authored in the cell’s
valueas"=A + B"and evaluated through the same expression engine as field formulas; the computed result is never persisted to the document. A column-level formula fills only empty cells, and an explicit cell formula or literal overrides it - Cell Visibility Logic — table and collection cells can now be hidden or shown per row via conditional logic, including conditions that mix same-row and document-level references
- Finder — new bulk accessor that returns every cell in a row, including hidden ones
- Page Selector Visibility — new API to hide and show the page navigation bar:
editor.pages.hideSelector()/editor.pages.showSelector(), or start hidden viaFormConfig.pages.showSelector = false
- Required Logic — renamed the
requiredLogicaction wire value"unforce"to"unenforce"(breaking)
- Cell Formulas — string literals, camelCase column names and multiSelect values are now preserved instead of being coerced or dropped during evaluation
- Duplicate Page Without Values — pages configured with only
"copyable": ["without-values"]no longer keep entered values when duplicated from the page selector - Grid Columns —
cellsHiddencolumns with nocellVisibilityLogicare no longer rendered
2.0.0-RC27
CHANGED- JSON Schema — synced bundled
joyfill-schemawith upstream: addscolumnTitleTextOverflow,RequiredLogic, and per-cell (schema/column) condition shape
2.0.0-RC26
CHANGED- Field Labels — decorators that cannot fit beside the title now move to their own line beneath it, so a crowded label can be two lines tall
- Field Decorators — a long field title no longer pushes decorator chips off screen
- Field Titles — a label crowded with decorators no longer collapses its title to one character per line
- Decorator Live Updates — a decorator added while a row form is open now appears immediately, instead of only after scrolling the row out of view and back
2.0.0-RC25
ADDED- Field Editability — new schema-level
editabilityproperty on table and collection fields, controlling whether they can be edited through the row form only or through both the row form and the tabular view
- Web Targets — removed the JS/Wasm targets from
component-joyfill(breaking), and enabled Gradle dependency scanning
- Mobile Flow Layout — conditionally-hidden fields now collapse instead of leaving blank space
- Cell Decorators — decorators added to cells with no existing entry now persist after save
2.0.0-RC24
CHANGED- Performance — stabilization and optimization work across validation, formulas, conditional logic, and row deletion
- Date & Signature Fields — layout issues in landscape orientation
- Conditional Logic — regression when duplicating pages
- Formulas — additional correctness fixes uncovered during stabilization
2.0.0-RC23
CHANGED- Public API — grouped related
Form/DocumentEditorparameters into focused config objects (following theDecoratorConfigpattern), aligned parameter names with the iOS SDK, and consolidated everything under a single swappable config instance - Formula Engine — stabilized formula behavior across Android, iOS, and Web SDKs to ensure consistent results on all platforms
2.0.0-RC22
CHANGED- Delete Page Dialog — simplified the confirmation message to “Are you sure you want to delete this page?” to match iOS
- Date Columns — removed automatic local time zone assignment to row data when date columns are present, matching iOS behavior
- Row Creation Change Logs — rows added while a filter is active now report the injected filter values instead of column defaults
- Filter Dialogs — improved IME handling (eliminated UI jitter while typing) and rendering performance for large filter lists
- Multi-Select — refined option spacing and reduced the selected-state corner radius
- Table Preview — improved layout, cell/icon alignment, and divider styling
- Collection Field Validation — nested child table invalidity is now surfaced in the validation output (
RowValidity/ComponentValidity), so consumers can navigate to the failing nested field viagoto(rowId, columnId) - Page Duplication — fixed an out-of-memory crash when duplicating a page with ~11k rows multiple times
- Date Picker — dismissing or clearing the date picker now correctly fires an
onBlurevent - Read-Only Image Field — focus state no longer updates on read-only image fields
- Table Close — focus is now cleared before the table closes, preventing the cell from being blurred after the table
- Image Dialog — fixed mismatched delete/upload button heights by aligning their padding
2.0.0-RC21
FIXED- Page hidden state regression — pages were incorrectly losing their hidden state
2.0.0-RC20
ADDED- JSON Schema — added decorator definitions to the validation schema
- Collection Field — performance optimization
editor.gotowithfocus=truenot focusing cells on table and collection fields
2.0.0-RC19
CHANGED- Row Delete Payload —
rowDeletechange logs now include the deleted row data alongside the existing params - Bulk Edit Change Logs — bulk edits now emit a single change event containing a list of change logs instead of one event per individual change
- Performance — general performance improvements, including a fix for an out-of-memory crash.
- Signature Field Readonly — empty signature fields can no longer be opened or edited when the form/field is in readonly mode
- Row Decorator Column — now appears whenever decorator data exists, even when the
decorateflag is missing
2.0.0-RC18
ADDED- Decorator Icons — added support for two new decorator icons:
pencilandpen-to-square
- Row Decorator Column — improved the UI of inline decorators with horizontal scroll, fixed curvature bugs, and optimized performance
- Chart Blank Coordinates — blank x/y values on chart points are now saved as
nulland displayed as empty in the UI, instead of being coerced to0; schema bumped to 1.0.1 to allow nullable coordinates
- Decorators Visibility & Interaction — decorators are now visible and interactive on readonly forms
- Duplicate Page Without Values — duplicating a page without values now keeps read-only and display-text field values intact
2.0.0-RC17
ADDED — Added support for row and cell-specific decorators in table and collection fields, accessible via scoped path targeting.2.0.0-RC16
ADDEDeditor.validate(path)— validates a specific page, field, row, or cell by path- phases: page → field → row → cell, each level narrows the scope
- Dynamic decorator manipulation —
editor.decoratorsnow supports adding, updating, and removing decorators on fields, rows, and cells via slash-separated paths:
- Date column filter UI now respects the column’s configured format (e.g., time-only columns show only time in the filter UI instead of the full date+time)
onChangeandonFieldChangenow fire correctly for:- clearing date cells
- page focus/blur events
- row actions (delete/move up/move down/insert below)
onFocusnow fires correctly for:- dropdown field and cell
- date cell (on open/clear)
- signature cell
onBlurnow fires correctly for:- dropdown field and cell
- multi-select cell
- signature cell
- Table row form is now visible when a column has a long title
2.0.0-RC15
ADDED- Date column filtering support in table and collection fields
reasonproperty on the validation result returned byfield.validate()— a list of strings describing why the field is invalid (empty list when valid)- Per-page action controls — page objects now support configuration properties that allow disabling deletion and/or duplication on a per-page basis; pages with disabled actions hide the corresponding buttons in the paginator UI
onFieldChangenot being emitted wheninlineFieldsmode was enabled for signature and image fieldsonFieldChangenot being emitted when adding a new row to a table or collection field- Row decorator
onChangeevent now includes theparentPathproperty as expected - Form flickering when the keyboard is open and the user is typing inside a cell of a table or collection field
2.0.0-RC14
ADDED- Decorators: integrators can attach icons or text to fields or rows; tapping them fires a custom event to the host application, enabling custom UI actions
inlineFieldsparameter on theFormcomposable: whentrue, openable fields (table, collection, image, signature, chart) expand inline within the existing view instead of opening a modal or new screen, giving the host application full control of the UI layer- Single field validation via
field.validate()
- Changelog entries now include a
typeproperty (mirrorstarget, e.g."field.update") for consistency with the web SDK
goto()now correctly returns a failure result when a valid row ID is provided but the specifiedcolumnIddoes not exist- Multi-select field options with long text are now displayed in full instead of being truncated
DateFieldclearing now correctly firesonFieldChangefrom the form in addition toonChangefrom theDocumentEditor- Column order in field validation results for table and collection fields now matches the defined column order
2.0.0-RC13
ADDED- Required field validation output now includes rows and cells for validation issues
- Table/collection validation now follows proper hierarchy — validation depends on row validity, not only whether the field is empty or has no rows
- External Navigation Pt.3 — cell navigation and focus highlighting:
gotosupportscolumnIdfor row-form cell targeting andfocus: truefor auto-focus with highlighted border styles - Conditional logic on columns — show and hide table/collection columns based on other field values (same pattern as existing conditional logic)
2.0.0-RC12
ADDED- Row metadata support to link rows to pages, fields, or other rows
- Page navigation events (
page.focus,page.blur) - Row-level navigation via
goto(pageId/fieldPositionId/rowId, { open: true })
- Formula references are now correctly updated when duplicating pages
- Improved stability when navigating between rows
2.0.0-RC11
ADDED- External navigation API — added
goto("pageId/fieldPositionId")function to externally control which page, field is displayed - Page deletion confirmation dialog — when page deletion is enabled, a confirmation dialog is shown before deletion
- Page deletion and duplication configuration options — both features can now be enabled/disabled via configuration
- UI improvements for better user experience
- Fields without associated fieldPosition are now filtered out from validation output
- Crash scenario with conditional logic when duplicating a page
2.0.0-RC10
ADDED- (JF-243) Support for Page Deletion
- Enhanced Page Duplication UI
- Single Click Option to Open Row Form — when enabled, users can open the row form with a single click instead of multiple clicks
- Loaders while filtering for better UX feedback
- Bulk row actions while filtering — users can now select all rows, bulk edit, or delete all filtered rows
- Additional tests for formulas and various components to ensure stability
- Exposed
ErrorFormStatecomposable as public API (was internal) - Refactored hidden state — hidden state will no longer be updated in the JSON when a field changes visibility or a page is modified
- Filter optimization for improved performance
- (JF-230) Duplicated pages not appearing in the correct position and not being saved — duplicated page now inserts directly below the source page
- Formulas not working after duplicating a page
- Conditional logic not working after duplicating a page
- Duplicating Table and Collection fields caused row IDs to be shared across pages, leading to unintended row deletions
- Page duplication for Chart field not working due to duplicated point IDs
- Chart data not being saved after modifications
- Crash when duplicating a page
- Multi-select validation incorrectly showing as valid when all visible options are unselected but a deleted option remains selected
- Multi-select column colors not being acknowledged in Table and Collection fields
2.0.0-RC9
ADDED- Row insertion when filter and sort is active in Table and Collection fields
- “Add after” option in row actions dropdown when filter is active
- Performance improvement on Collection field row actions
- Multi select options being clickable in readonly mode
- Internal functions incorrectly exposed as public API
- Keyboard not appearing after bulk edit
- Parent path calculation corrupted by row action when editing child rows
- Row form submit button showing “Submitted” state after reopening following bulk edit
- “Add Row” button not disabled in readonly mode for Table fields
- Filtered table allowing navigation to hidden rows in row form
- Duplicate page creating image field attachments with same ID, causing unintended deletion across pages
2.0.0-RC8
ADDED- Row navigation now keeps the target row in view when closing the row form in Collection and Table fields.
2.0.0-RC7
ADDED- Row highlighting for selected rows in Table and Collection fields to improve visibility for users
- Support for additional custom time formats
- Required field validation — added page ID to the validation status object for more accurate field tracking
- Crash when adding rows in Table fields caused by invalid default values in columns such as Text, Signature, Date, or Block
- Edge case involving Collection fields and formula calculations
- Multiselect fields not working when a deleted option shared the same value as a non-deleted option
- Formula fields failing to process decimal numbers without a leading zero
2.0.0-RC6
FIXED- Collection field not showing even when the License key has been provided
2.0.0-RC5
ADDED- onFocus event when table field is opened
- onBlur event when table field is closed
- onFocus event when collection field is opened
- onBlur event when collection field is closed
- onBlur event for multi select field
- onFocus event for multi select field
- Removal of date value from fields
- Performance improvement on table when bulk selecting
- Performance improvement on table when scrolling
- Signature field undo button to always show
- Tables without rows should not be selectable
- Submit button when signature field has not be entered or updated
- Hidden rows being selected
- Table without rows not being selectable or clickable
- Image Scaling issue
- Move down should be disabled if the selected row is last
- Move up should be disabled if the selected row is first
- Crash if empty Json is passed into the Form
- Table Column ordering
2.0.0-RC4
FIXED- OnFieldChange get triggered even when no image has been captured in onUpload
- Other misc bug fixes not reported by ST
2.0.0-RC3
FIXED- Crashing when a multi select field has been selected
- Crashing with a class cast exception when dealing with dates
2.0.0-RC2
FIXED- Images uploaded on Android are now visible on all other platforms
- Images uploaded on all other platforms are now visible on Android
2.0.0-RC1
ADDED- (JF-195) Additional params added for upload
- (JF-199) License Key Support for collections
- (JF-193) Schema validation error after image upload
2.0.0-Beta20
CHANGED- Scroll performance on TableField
- Scroll performance on Collection Field
- Filtering performance
- Validation performance
- Template loading performance
- Conditional Logic fixes in collection field
- (JF-136) Performance support for 1000 rows
- (JF-148) Drawing signature out of bounds fixed
- (JF-109) Fix for different ordering of items
2.0.0-Beta19
ADDED- (JF-158) Implemented search and filter on table field
- Table field performance enhancements for 1000 total rows
- (JF-161) Collection field performance enhancements for 1000 total rows
- Data validation and error reporting enhancements
- UI enhancement for fields with really long titles
- Enhanced performance for bulk edit
- (JF-109) Field ordering consistency
- (JF-152) Hidden fields are being displayed
- (JF-154) Making subsequent sort choices causes sort to reset
2.0.0-Beta17
ADDED- (JF-20) Data validation error handling and validateSchema helper
- (JF-22) OnChange handler with live UI refresh
- (JF-94) Detailed changelogs for collection and table fields
- (JF-39) Calculated Fields
- (JF-151) onCapture parameter is missing from RawBarcodeField
Known Issues
- Uploading large images (~30Mb) causes an Out of Memory Error on Android 14
- Validation Schema treats a Joydoc without the files property as valid (it shouldn’t)
2.0.0-Beta15
ADDED- (JF-20) Data validation error handling and validateSchema helper
- (JF-22) OnChange handler with live UI refresh
- (JF-94) Detailed changelogs for onChange handler
- (JF-39) Calculated Fields Beta
- (JF-151) onCapture parameter for RawBarcodeField
2.0.0-Beta13
ADDED- Collection Field Search And Filter (ST:M1.2)
- Performance improvements in the collection field
- Crash when adding row to the table in ‘NFPA 10 -2022’ form (JF-103)
2.0.0-Beta09
ADDED- JF-90: Added support for single image fields
- Changelog emissions for collection fields
- Descriptive error message when image fields fails to load the url
- ImageReplacementSample composable to demonstrate how to replace an image in the ImageField
- Improved the size of the required asterisk on required fields (it was too small)
- Compose Multiplatform: 1.7.3 -> 1.8.1
- JF-35: UI now updates when the underlying image url changes
- JF-84: Field validation was still failing when a new table row was added without fields
- JF-87: Some table fields are still editable when the form is in read-only mode
- Changelog emission for non collection fields
2.0.0-Beta08
FIXED- Block Field with negative padding crashing the app
- Validation always returning FieldsInvalid (again)
1.1.14
FIXED- Empty spaces when there are soo many hidden fields (apparently every single hidden field took 8dpi height)
- Last updated TextArea not persisting
- Last updated NumberField not persisting
1.1.13
CHANGED- Kotlin from 2.0.20 to 2.1.10
- Compose Multiplatform from 1.7.0 to 1.7.3
- Conditional Logic not resolving on a single input
- Date Field Capturing wrong time
- Last text field entry not updating accordingly
1.1.12
ADDED- Table field: Sort a specific column by either ascending or descending order
- Table field: Filter text columns by a certain search phrase
- Table field: Filter multiple cell values from different columns at once
- Table field: Duplicate multiple selected rows
- Table field: Edit multiple selected rows at once
- Kotlin version from 2.0.10 to 2.0.21
- Compose multiplatform version from 1.6.11 to 1.7.0
1.1.11
FIXED- Conditional logic: multiselect fields would occasionally select deleted values
- Conditional logic: Dropdown fields would not trigger for fields with multiple values
- Conditional logic: Less than operation not triggering same time as greater operation
- Conditional logic: is (and in turn is not) check was performing only case sensitive matches
- Conditional logic: empty check was not triggering on null values
- Conditional logic: wrong is filled notation was been used
1.1.7
ADDED- Chart preview
- Chart full view
- Chart coordinate editing
- Chart Line colors
1.1.6
FIXED- Number field crashing on invalid values
1.1.5
FIXED- Conditional logic for choice fields (multiselect and dropdown) now fires correctly when conditions are not met
- Mobile View regression
- Validation now only validates fields in the required view
1.1.4
ADDED- Field tooltips are now supported
- Table row duplication
- Validation Plugin with field validation support
- Validation Plugin with form validation support
- Validation Plugin with document validation support
- Conditional logic for choice fields now works as expected
- Fixed multiselect field showing deleted options
1.1.2
FIXED- Default values on conditional logic are now working as expected
1.1.1
FIXED- Conditional Logic now works as expected
1.1.0
ADDED- Conditional Logic Support
- Fixed crashing issues with the image field when it is open with an invalid value
1.0.6
CHANGED- Capitalise button on the keyboard is not set by default when setting the cursor in text fields and text columns
- Made the asterisk (stars) on required fields red
- Required text fields would not display the asterisk
- Add Row button is no longer display on readonly forms
- Add Row button is no longer displayed on readonly tables (even when the form is in fill mode)
- Tables with long names now have a visible close button
- Radio buttons are now de-selectable
- Undo-Redo on signature fields is hidden when the user types their signature out
- Dropdown field now saves on choice (instead of saving after onBlur event)
- Tables now preview uniformly even when there are few rows to preview
- Number input fields no longer adds an extra zero while deleting
1.0.5
ADDED- rgb color support on rich text field
- text alignment support for rich text field
- calendar icon on DateField
- Enhanced all field labels to be semibold
- Fixed font size issue on block field
- Fixed crashing when pageOrder is null
- Fixed crashing when default date has decimal values
0.1.0-RC1
ADDED- Initial release of Joyfill Kotlin Multiplatform SDK
- Supported Fields: Text, TextArea, Number, DropDown, MultiSelect, Signature, DateTime, Image, Table
- Supported Callbacks: onFocus, onBlur, onChange, onFieldChange, onUpload
- External page Navigation
- Internal page Navigation
- Deleted fields support
- Readonly fields support
- Platform support: Android, Linux (through JVM), Windows (through JVM), MacOs (through JVM)