Skip to content
Crease
Esc
↑↓navigate↵open⌘Jpreview
On this page

Changelog

Every release of Crease, newest first.

The current version is 1.3.0. This page is copied from CHANGELOG.md in the repository at build time.

All notable changes to io.github.jantursky:crease are listed here. The format follows Keep a Changelog, and versions follow Semantic Versioning.

Unreleased

1.3.0 - 2026-10-28

Added

  • rememberFoldStateFlow() returns the fold state as a StateFlow for view-models and other code outside composition, StateFlow<FoldState>.postures() emits the posture only when it changes, and rememberPostureTransition() gives the posture before the latest change and the current one. kotlinx-coroutines-core is now an api dependency.

1.2.0 - 2026-10-28

Added

  • crease-test, a third artifact (io.github.jantursky:crease-test) for tests: ComposeUiTest.setContentWithFold() composes content under a fold state and returns a FoldController, whose update, moveTo and play change the state while the composition stays alive, so remembered state survives. FoldStatePresets.Seamless and FoldStatePresets.Divided build a state for every posture.

1.1.0 - 2026-10-24

Added

  • crease-cover, a second artifact (io.github.jantursky:crease-cover): rememberCoverDisplayState() reports whether the outer display of a foldable can show content (Unsupported, Unavailable, Available, Active), and CoverDisplay shows a composable there. On iOS 27.1 it registers a camera capture scene accessory, which the system presents only with an active camera session. On Android it presents on the rear display area through WindowManager. ProvideCoverDisplayState feeds a fixed state to previews and tests. rememberCameraDirections() reports which cameras face the viewer on the current display, through AVCaptureDeviceDirectionCoordinator on iOS 27.1, and null elsewhere. The iOS and Android presentation and the camera directions are not tested on a device.

1.0.0 - 2026-10-23

Added

  • Hinge state on Android foldables and iPhone Duo: rememberHinge() and rememberFoldState() give a Hinge with its HingeStatus (Closed, PartiallyOpen, FullyOpen) and, where the device has a sensor, its angle in degrees.
  • Fold geometry: a Fold has bounds in window pixels, an orientation, and flags for whether it separates content and whether it occludes it. FoldState lists the folds and the camera cutouts, and gives the Posture (Closed, Flat, Book, Tabletop).
  • FoldState.closed(), FoldState.flat(), FoldState.book() and FoldState.tabletop() build a state for previews and tests, and ProvideFoldState supplies one to a part of the composition tree.
  • FoldAwareTwoPane splits its content at a separating fold, with a TwoPaneFallback (FirstOnly, SideBySide, Stacked) for when there is no fold.
  • TabletopLayout shows its top and bottom content above and below a tabletop fold, and a flat layout otherwise.
  • Modifier.avoidFold() keeps an element’s content on the larger side of a separating fold.
  • Targets: Android, iOS (iPhone Duo), JVM and wasmJs. JVM and wasmJs report no hinge unless a state is provided.

Last updated on

Was this page helpful?