Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
45 changes: 44 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,53 @@
# Lets-Plot Skia Frontend Changelog
# Lets-Plot Compose Frontend Changelog

All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres
to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). All scales should have the 'format' parameter.

## [3.0.0] - 2025-09-19

> [!NOTE]
> The GitHub repository was renamed from `lets-plot-skia` to `lets-plot-compose`.

### Compatibility

All artifacts were built with the following versions of dependencies:
- Compose Multiplatform: [1.8.2](https://github.com/JetBrains/compose-multiplatform/releases/tag/v1.8.2)
- Lets-Plot Kotlin API: [4.11.2](https://github.com/JetBrains/lets-plot-kotlin/releases/tag/v4.11.2)
- Lets-Plot Multiplatform: [4.7.3](https://github.com/JetBrains/lets-plot/releases/tag/v4.7.3)

### Added

- Multiplatform project example, see: [Lets-Plot Compose Demos](https://github.com/JetBrains/lets-plot-compose-demos/tree/main/compose-multiplatform)

### Changed

- [**BREAKING**] `PlotPanel` has been moved to package `org.jetbrains.letsPlot.compose` (from `org.jetbrains.letsPlot.skia.compose`).

#### Android

- Removed dependency on the Skiko library. \
This eliminates Skiko compatibility issues, \
ensures all library artifacts are built with the latest Compose Multiplatform version, \
and simplifies integration of the Lets-Plot Compose Library in Android projects.

#### Desktop

- Pure compose implementation.
- The following artifacts are no longer provided:
- `platf-skia-awt`
- `lets-plot-swing-skia`

### Fixed

- When zooming the page with the mouse, a black layer appears when refreshing [[#12](https://github.com/JetBrains/lets-plot-compose/issues/12)]
- When using a dark theme, white lines appear on the sides of the plot [[#37](https://github.com/JetBrains/lets-plot-compose/issues/37)]
- Plot rendering issues when switching between tabs in the tabbed pane [[#38](https://github.com/JetBrains/lets-plot-compose/issues/38)]
- Display problem of lets-plot-skia when switching pages [[#42](https://github.com/JetBrains/lets-plot-compose/issues/42)]
- Markdown: missing bold and italic text style support [[#44](https://github.com/JetBrains/lets-plot-compose/issues/44)]


## [2.2.1] - 2025-06-11

### Compatibility
Expand Down
93 changes: 35 additions & 58 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,97 +1,74 @@
# Lets-Plot Skia Frontend
# Lets-Plot Compose Frontend

[![Experimental](https://kotl.in/badges/experimental.svg)](https://kotlinlang.org/docs/components-stability.html)
[![JetBrains incubator project](https://jb.gg/badges/incubator.svg)](https://confluence.jetbrains.com/display/ALL/JetBrains+on+GitHub)
[![License MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://raw.githubusercontent.com/JetBrains/lets-plot-skia/master/LICENSE)
[![Latest Release](https://img.shields.io/github/v/release/JetBrains/lets-plot-skia)](https://github.com/JetBrains/lets-plot-skia/releases/latest)
[![License MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://raw.githubusercontent.com/JetBrains/lets-plot-compose/master/LICENSE)
[![Latest Release](https://img.shields.io/github/v/release/JetBrains/lets-plot-compose)](https://github.com/JetBrains/lets-plot-compose/releases/latest)

**Lets-Plot Skia Frontend** is a Kotlin Multiplatform library that allows you to embed \
[Lets-Plot](https://github.com/JetBrains/lets-plot) charts in a [Compose Multiplatform](https://github.com/JetBrains/compose-multiplatform), Java Swing or Android application.
**Lets-Plot Compose Frontend** is a Kotlin Multiplatform library that allows you to embed \
[Lets-Plot](https://github.com/JetBrains/lets-plot) charts in a [Compose Multiplatform](https://github.com/JetBrains/compose-multiplatform) (Desktop, Android) application.

### Supported Targets
- **Compose Desktop** (macOS, Windows, Linux)\
For more information see [Compose multiplatform compatibility and versioning overview](https://www.jetbrains.com/help/kotlin-multiplatform-dev/compose-compatibility-and-versioning.html).
- **Android** (`lets-plot-skia` <= v2.0.0. New versions temporarily don't support Android due to [SKIKO-761](https://youtrack.jetbrains.com/issue/SKIKO-761))
- **Java Swing**

- **Desktop** (macOS, Windows, Linux)
- **Android**

For more details see [Compose multiplatform compatibility and versioning overview](https://www.jetbrains.com/help/kotlin-multiplatform-dev/compose-compatibility-and-versioning.html).


![Splash](img-2.png)

## Dependencies

See release notes for the latest version of the dependencies: [v2.2.1](https://github.com/JetBrains/lets-plot-skia/blob/main/CHANGELOG.md#compatibility)
See release notes for the latest version of the dependencies: [v2.2.1](https://github.com/JetBrains/lets-plot-compose/blob/main/CHANGELOG.md#compatibility)

### Compose Desktop
### Compose Multiplatform for Desktop

```kotlin
dependencies {
...

// Lets-Plot Kotlin API
implementation("org.jetbrains.lets-plot:lets-plot-kotlin-kernel:4.10.0")
// Lets-Plot Kotlin API
implementation("org.jetbrains.lets-plot:lets-plot-kotlin-kernel:4.11.2")

// Lets-Plot Multiplatform
implementation("org.jetbrains.lets-plot:lets-plot-common:4.6.2")
implementation("org.jetbrains.lets-plot:platf-awt:4.6.2")
// Lets-Plot Multiplatform
implementation("org.jetbrains.lets-plot:lets-plot-common:4.7.3")
// Lets-Plot 'image export' (optional - enables exporting to raster formats)
implementation("org.jetbrains.lets-plot:lets-plot-image-export:4.7.3")

// Lets-Plot Skia Frontend
implementation("org.jetbrains.lets-plot:lets-plot-compose:2.2.1")
// Lets-Plot Compose UI
implementation("org.jetbrains.lets-plot:lets-plot-compose:3.0.0")
}
```
See example: [Compose desktop](https://github.com/JetBrains/lets-plot-compose-demos/blob/main/compose-desktop/build.gradle.kts) demo.

### Compose Android

#### Note: the latest supported version is `lets-plot-skia` v2.0.0. The new versions temporarily don't support Android due to [SKIKO-761](https://youtrack.jetbrains.com/issue/SKIKO-761).
### Compose Multiplatform for Android

```kotlin
dependencies {
...

implementation("org.jetbrains.skiko:skiko-android:0.8.4")
// Lets-Plot Kotlin API
implementation("org.jetbrains.lets-plot:lets-plot-kotlin-kernel:4.11.2")

// Lets-Plot Kotlin API
implementation("org.jetbrains.lets-plot:lets-plot-kotlin-kernel:4.10.0")
// Lets-Plot Multiplatform
implementation("org.jetbrains.lets-plot:lets-plot-common:4.7.3")
// Lets-Plot Multiplatform Android-specific dependencies
implementation("org.jetbrains.lets-plot:canvas:4.7.3")
implementation("org.jetbrains.lets-plot:plot-raster:4.7.3")

// Lets-Plot Multiplatform
implementation("org.jetbrains.lets-plot:lets-plot-common:4.6.2")

// Lets-Plot Skia Frontend
implementation("org.jetbrains.lets-plot:lets-plot-compose:2.0.0")
// Lets-Plot Compose UI
implementation("org.jetbrains.lets-plot:lets-plot-compose:3.0.0")
}
```

See example: [Android minimal](https://github.com/JetBrains/lets-plot-compose-demos/blob/main/compose-android-min/build.gradle.kts) demo.

### Java Swing

```kotlin
dependencies {
...

implementation("org.jetbrains.skiko:skiko:0.8.4")
// The host OS and architecture should be specified explicitly.
implementation("org.jetbrains.skiko:skiko-awt-runtime-macos-x64:0.8.4")

// Lets-Plot Kotlin API
implementation("org.jetbrains.lets-plot:lets-plot-kotlin-kernel:4.10.0")

// Lets-Plot Multiplatform
implementation("org.jetbrains.lets-plot:lets-plot-common:4.6.2")
implementation("org.jetbrains.lets-plot:platf-awt:4.6.2")

// Lets-Plot Skia Frontend
implementation("org.jetbrains.lets-plot:lets-plot-swing-skia:2.2.1")
}
```

## Examples

You will find complete examples of using **Lets-Plot Kotlin API** with **Lets-Plot Skia Frontend** in the following\
You will find complete examples of using **Lets-Plot Kotlin API** with **Lets-Plot Compose Frontend** in the following\
GitHub repository: [JetBrains/lets-plot-compose-demos](https://github.com/JetBrains/lets-plot-compose-demos).

## Change Log

See [CHANGELOG.md](https://github.com/JetBrains/lets-plot-skia/blob/master/CHANGELOG.md).
See [CHANGELOG.md](https://github.com/JetBrains/lets-plot-compose/blob/master/CHANGELOG.md).

## Code of Conduct

Expand All @@ -102,5 +79,5 @@ Please make sure you read it.
## License

Code and documentation released under
the [MIT license](https://github.com/JetBrains/lets-plot-skia/blob/master/LICENSE).
Copyright © 2023-2025, JetBrains s.r.o.
the [MIT license](https://github.com/JetBrains/lets-plot-compose/blob/master/LICENSE).
Copyright © 2023, JetBrains s.r.o.
2 changes: 1 addition & 1 deletion build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ if (project.file("local.properties").exists()) {

allprojects {
group = "org.jetbrains.lets-plot"
version = "3.0.0-SNAPSHOT"
version = "3.0.1-SNAPSHOT"
// version = "0.0.0-SNAPSHOT" // for local publishing only

tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile>().all {
Expand Down
4 changes: 2 additions & 2 deletions demo/plot/shared/src/main/kotlin/plotSpec/HyperlinkSpec.kt
Original file line number Diff line number Diff line change
Expand Up @@ -86,8 +86,8 @@ class HyperlinkSpec : PlotDemoFigure {
),
Item(
name = "Lets-Plot\nCompose Multiplatform",
documentationUrl = "https://github.com/JetBrains/lets-plot-skia",
sourcesUrl = "https://github.com/JetBrains/lets-plot-skia",
documentationUrl = "https://github.com/JetBrains/lets-plot-compose",
sourcesUrl = "https://github.com/JetBrains/lets-plot-compose",
x = 80.0, y = 250.0, size = 7.0, shape = 15, angle = 30.0
),
Item(
Expand Down
52 changes: 4 additions & 48 deletions devdocs/DEVELOPMENT.md
Original file line number Diff line number Diff line change
@@ -1,38 +1,3 @@
### Skiko and Compose Multiplatform Versions

| Compose Multiplatform | Skiko |
|--------------------------------------------------------------------------------------------------------|--------|
| [1.7.0](https://repo1.maven.org/maven2/org/jetbrains/compose/ui/ui-desktop/1.7.0/ui-desktop-1.7.0.pom) | 0.8.15 |
| [1.7.1](https://repo1.maven.org/maven2/org/jetbrains/compose/ui/ui-desktop/1.7.1/ui-desktop-1.7.1.pom) | 0.8.18 |
| [1.7.3](https://repo1.maven.org/maven2/org/jetbrains/compose/ui/ui-desktop/1.7.3/ui-desktop-1.7.3.pom) | 0.8.18 |
| [1.8.0](https://repo1.maven.org/maven2/org/jetbrains/compose/ui/ui-desktop/1.8.0/ui-desktop-1.8.0.pom) | 0.9.4 |
| [1.8.1](https://repo1.maven.org/maven2/org/jetbrains/compose/ui/ui-desktop/1.8.1/ui-desktop-1.8.1.pom) | 0.9.4.2 |
| [1.8.2](https://repo1.maven.org/maven2/org/jetbrains/compose/ui/ui-desktop/1.8.2/ui-desktop-1.8.2.pom) | 0.9.4.2 |


Changing the version of `Skiko` or `Compose Multiplatform` may lead to compatibility issues and runtime errors like `MethodNotFound` or `ClassNotFound`.

The safest way to avoid these issues is to use the version of `Skiko` that was used to build your version of `Compose Multiplatform`.

To find the correct `Skiko` version:

1. Open the `.pom` file corresponding to your `Compose Multiplatform` version.
2. Search within the `.pom` file for the `Skiko` version.

For example, if you're using `ui-desktop-1.6.10.pom`, the link will be:
>https://repo1.maven.org/maven2/org/jetbrains/compose/ui/ui-desktop/1.6.10/ui-desktop-1.6.10.pom

At the bottom of the file, you will find the `skiko` version used to build the library.
```xml
<dependency>
<groupId>org.jetbrains.skiko</groupId>
<artifactId>skiko-awt</artifactId>
<version>0.8.4</version>
<scope>compile</scope>
</dependency>
```


### Configuring IntelliJ IDEA for Android Development

- #### Android Plugin
Expand All @@ -52,7 +17,6 @@ For example:
```
sdk.dir=/Users/john/Library/Android/sdk
```

- #### Android Device

From menu `Tools -> Android -> Device Manager` setup Android device.
Expand All @@ -66,25 +30,17 @@ Make sure the Java 11 toolchain is installed. Otherwise, the following error may
>
>No locally installed toolchains match and toolchain download repositories have not been configured.

<a id="building-skiko-for-android"></a>

### Running Android demos
### Running Android Demos

In `Run configurations`
- Select `demo-plot-compose-android-min` or `demo-plot-compose-android-median` application
In IDEA `Run Configurations`
- Select `demo-plot-compose-android-min`, `demo-plot-compose-android-median` or another _Android App Run Configuration_
- Select the `Android` device
- Click `Run`


### See also

[Compose-multiplatform iOS/Android Template](https://github.com/JetBrains/compose-multiplatform-ios-android-template)
[Compose-multiplatform Versioning](https://github.com/JetBrains/compose-multiplatform/blob/master/VERSIONING.md)

### Problems with updating tools and dependencies:


#### Compose Desktop:
Since JetBrains compose version `1.4.1`, `PlotComponentProvider` do not show plot if the `repaintDelay` value is grater than 0.
The reason is yet unknown.


4 changes: 2 additions & 2 deletions devdocs/RELEASE.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,10 +38,10 @@ Check all artifacts were uploaded and validated, then push the "Publish" button.

### Add the GitHub Release:

* Open the link: https://github.com/JetBrains/lets-plot-skia/releases/new
* Open the link: https://github.com/JetBrains/lets-plot-compose/releases/new
* Fill `Tag version` and `Release title` with the released version: "vX.X.X"
* Fill the description field - copy from the CHANGELOG.md

### Update Dependant Projects

- Update the version of the `lets-plot-skia` dependency in the [lets-plot-compose-demos](https://github.com/JetBrains/lets-plot-compose-demos) project.
- Update the version of the `lets-plot-compose` dependency in the [lets-plot-compose-demos](https://github.com/JetBrains/lets-plot-compose-demos) project.
36 changes: 6 additions & 30 deletions future_changes.md
Original file line number Diff line number Diff line change
@@ -1,39 +1,15 @@
## [3.0.0] - 2025-mm-dd

> [!NOTE]
> The GitHub repository was renamed from `lets-plot-skia` to `lets-plot-compose`.
## [3.0.1] - 2025-mm-dd

### Compatibility

All artifacts were built with the following versions of dependencies:
- Compose Multiplatform : [1.8.2](https://github.com/JetBrains/compose-multiplatform/releases/tag/v1.8.2)
- Lets-Plot Kotlin API : [4.11.2](https://github.com/JetBrains/lets-plot-kotlin/releases/tag/v4.11.2)
- Lets-Plot Multiplatform : [4.7.3](https://github.com/JetBrains/lets-plot/releases/tag/v4.7.3)

All artifacts were built with the following versions of dependencies:
- Compose Multiplatform: [1.8.2](https://github.com/JetBrains/compose-multiplatform/releases/tag/v1.8.2)
- Lets-Plot Kotlin API: [4.11.2](https://github.com/JetBrains/lets-plot-kotlin/releases/tag/v4.11.2)
- Lets-Plot Multiplatform: [4.7.3](https://github.com/JetBrains/lets-plot/releases/tag/v4.7.3)

### Added

### Changed

- [ **BREAKING** ] `PlotPanel` has been moved to package `org.jetbrains.letsPlot.compose` (from `org.jetbrains.letsPlot.skia.compose`).


#### Android

- Removed dependency on the Skiko library.
-

#### Desktop

- Pure compose implementation.
- The following artifacts are no longer provided:
- `platf-skia-awt`
- `lets-plot-swing-skia`

### Fixed

- When zooming the page with the mouse, a black layer appears when refreshing [[#12](https://github.com/JetBrains/lets-plot-skia/issues/12)]
- When using a dark theme, white lines appear on the sides of the plot [[#37](https://github.com/JetBrains/lets-plot-skia/issues/37)]
- Plot rendering issues when switching between tabs in the tabbed pane [[#38](https://github.com/JetBrains/lets-plot-skia/issues/38)]
- Display problem of lets-plot-skia when switching pages [[#42](https://github.com/JetBrains/lets-plot-skia/issues/42)]
- Markdown: missing bold and italic text style support [[#44](https://github.com/JetBrains/lets-plot-skia/issues/44)]

1 change: 0 additions & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@ kotlin.mpp.androidSourceSetLayoutVersion=2
org.jetbrains.compose.experimental.uikit.enabled=true

#Android
kotlin.android.version=2.1.0
agp.version=8.6.0
android.useAndroidX=true
android.compileSdk=35
Expand Down
12 changes: 6 additions & 6 deletions lets-plot-compose/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ kotlin {
}

android {
namespace = "org.jetbrains.letsPlot.skia.compose"
namespace = "org.jetbrains.letsPlot.compose"

compileSdk = (findProperty("android.compileSdk") as String).toInt()

Expand Down Expand Up @@ -105,13 +105,13 @@ afterEvaluate {
artifact(tasks.jarJavaDocs)

pom {
name.set("Lets-Plot Skia Frontend")
description.set("Skia frontend for Lets-Plot multiplatform plotting library.")
url.set("https://github.com/JetBrains/lets-plot-skia")
name.set("Lets-Plot Compose Frontend")
description.set("Compose frontend for Lets-Plot multiplatform plotting library.")
url.set("https://github.com/JetBrains/lets-plot-compose")
licenses {
license {
name.set("MIT")
url.set("https://raw.githubusercontent.com/JetBrains/lets-plot-skia/master/LICENSE")
url.set("https://raw.githubusercontent.com/JetBrains/lets-plot-compose/master/LICENSE")
}
}
developers {
Expand All @@ -122,7 +122,7 @@ afterEvaluate {
}
}
scm {
url.set("https://github.com/JetBrains/lets-plot-skia")
url.set("https://github.com/JetBrains/lets-plot-compose")
}
}
}
Expand Down
Loading