Skip to main content

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 maxRows on a table or collection table to cap how many rows it can hold. Adding and duplicating rows stop at the limit. Use canAddRows() to check whether more rows fit
  • Bulk Edit Decorators — new DecoratorConfig.showInBulkForm option to hide decorators when editing several rows at once. Defaults to true
CHANGED
  • Row Limits — rows.append() and rows.prepend() now throw an IllegalStateException when the table is full. Check canAddRows() before calling them
FIXED
  • 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
FIXED
  • 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 value as "=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 via FormConfig.pages.showSelector = false
CHANGED
  • Required Logic — renamed the requiredLogic action wire value "unforce" to "unenforce" (breaking)
FIXED
  • 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 — cellsHidden columns with no cellVisibilityLogic are no longer rendered

2.0.0-RC27

CHANGED
  • JSON Schema — synced bundled joyfill-schema with upstream: adds columnTitleTextOverflow, 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
FIXED
  • 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 editability property 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
CHANGED
  • Web Targets — removed the JS/Wasm targets from component-joyfill (breaking), and enabled Gradle dependency scanning
FIXED
  • 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
FIXED
  • 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 / DocumentEditor parameters into focused config objects (following the DecoratorConfig pattern), 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
FIXED
  • 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 via goto(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 onBlur event
  • 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
CHANGED
  • Collection Field — performance optimization
FIXED
  • editor.goto with focus=true not focusing cells on table and collection fields

2.0.0-RC19

CHANGED
  • Row Delete Payload — rowDelete change 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.
FIXED
  • 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 decorate flag is missing

2.0.0-RC18

ADDED
  • Decorator Icons — added support for two new decorator icons: pencil and pen-to-square
CHANGED
  • 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 null and displayed as empty in the UI, instead of being coerced to 0; schema bumped to 1.0.1 to allow nullable coordinates
FIXED
  • 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

ADDED
  • editor.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.decorators now supports adding, updating, and removing decorators on fields, rows, and cells via slash-separated paths:
FIXED
  • 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)
  • onChange and onFieldChange now fire correctly for:
    • clearing date cells
    • page focus/blur events
    • row actions (delete/move up/move down/insert below)
  • onFocus now fires correctly for:
    • dropdown field and cell
    • date cell (on open/clear)
    • signature cell
  • onBlur now 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
  • reason property on the validation result returned by field.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
FIXED
  • onFieldChange not being emitted when inlineFields mode was enabled for signature and image fields
  • onFieldChange not being emitted when adding a new row to a table or collection field
  • Row decorator onChange event now includes the parentPath property 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
  • inlineFields parameter on the Form composable: when true, 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()
CHANGED
  • Changelog entries now include a type property (mirrors target, e.g. "field.update") for consistency with the web SDK
FIXED
  • goto() now correctly returns a failure result when a valid row ID is provided but the specified columnId does not exist
  • Multi-select field options with long text are now displayed in full instead of being truncated
  • DateField clearing now correctly fires onFieldChange from the form in addition to onChange from the DocumentEditor
  • 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: goto supports columnId for row-form cell targeting and focus: true for 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 })
FIXED
  • 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
CHANGED
  • UI improvements for better user experience
FIXED
  • 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
CHANGED
  • Exposed ErrorFormState composable 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
FIXED
  • (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
CHANGED
  • Performance improvement on Collection field row actions
FIXED
  • 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
CHANGED
  • Support for additional custom time formats
  • Required field validation — added page ID to the validation status object for more accurate field tracking
FIXED
  • 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
CHANGED
  • 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
FIXED
  • 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
FIXED
  • (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
FIXED
  • 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
CHANGED
  • 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
FIXED
  • (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)
CHANGED
  • Performance improvements in the collection field
FIXED
  • 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
CHANGED
  • Improved the size of the required asterisk on required fields (it was too small)
  • Compose Multiplatform: 1.7.3 -> 1.8.1
FIXED
  • 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
FIXED
  • 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
CHANGED
  • 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
FIXED
  • 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
  • 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
FIXED
  • 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
CHANGED
  • Enhanced all field labels to be semibold
FIXED
  • 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)