1. 20 Nov, 2025 1 commit
  2. 12 Nov, 2025 5 commits
    • Igor Demin's avatar
      Revert "Fix signKotlinMultiplatformPublication on CI" (#1126) · e4cf12a1
      Igor Demin authored
      Reverts JetBrains/skiko#1125
      
      Fails on CI
      e4cf12a1
    • Igor Demin's avatar
      Fix signKotlinMultiplatformPublication on CI (#1125) · 8d247093
      Igor Demin authored
      Regression after https://github.com/JetBrains/skiko/pull/1119 was added
      on CI
      
      ```
      org.gradle.internal.execution.WorkValidationException: A problem was found with the configuration of task ':signKotlinMultiplatformPublication' (type 'Sign').
        - Gradle detected a problem with the following location: '/mnt/agent/work/381d14fe560aa354/skiko/build/libs/skiko-0.9.33-javadoc.jar.asc'.
      
          Reason: Task ':publishAwtRuntimeElementsPublicationToComposeRepoRepository' uses this output of task ':signKotlinMultiplatformPublication' without declaring an explicit or implicit dependency. This can lead to incorrect results being produced, depending on what order the tasks are executed.
      
          Possible solutions:
            1. Declare task ':signKotlinMultiplatformPublication' as an input of ':publishAwtRuntimeElementsPublicationToComposeRepoRepository'.
            2. Declare an explicit dependency on ':signKotlinMultiplatformPublication' from ':publishAwtRuntimeElementsPublicationToComposeRepoRepository' using Task#dependsOn.
            3. Declare an explicit dependency on ':signKotlinMultiplatformPublication' from ':publishAwtRuntimeElementsPublicationToComposeRepoRepository' using Task#mustRunAfter.
      ```
      
      The fix is blind as we can only test it in master
      8d247093
    • Sebastian Sellmair's avatar
      Publish 'skiko-awt-runtime' (#1119) · f0d0baa1
      Sebastian Sellmair authored
      This publication creates one variant for each native platform. 
      It allows depending (and exposing) a single dependency, which can later
      be resolved to platform-specific artifacts.
      
      <details>
      <summary>skiko-awt-runtime.module</summary>
      
      ```json
      {
        "formatVersion": "1.1",
        "component": {
          "group": "org.jetbrains.skiko",
          "module": "skiko-awt-runtime",
          "version": "1.0-SNAPSHOT",
          "attributes": {
            "org.gradle.status": "integration"
          }
        },
        "createdBy": {
          "gradle": {
            "version": "8.13"
          }
        },
        "variants": [
          {
            "name": "jvmRuntimeElements-macos-x64",
            "attributes": {
              "org.gradle.category": "library",
              "org.gradle.dependency.bundling": "external",
              "org.gradle.jvm.environment": "standard-jvm",
              "org.gradle.libraryelements": "jar",
              "org.gradle.native.architecture": "x86-64",
              "org.gradle.native.operatingSystem": "macos",
              "org.gradle.usage": "java-runtime",
              "org.jetbrains.kotlin.platform.type": "jvm"
            },
            "dependencies": [
              {
                "group": "org.jetbrains.skiko",
                "module": "skiko-awt-runtime-macos-x64",
                "version": {
                  "requires": "1.0-SNAPSHOT"
                }
              }
            ]
          },
          {
            "name": "jvmRuntimeElements-macos-arm64",
            "attributes": {
              "org.gradle.category": "library",
              "org.gradle.dependency.bundling": "external",
              "org.gradle.jvm.environment": "standard-jvm",
              "org.gradle.libraryelements": "jar",
              "org.gradle.native.architecture": "aarch64",
              "org.gradle.native.operatingSystem": "macos",
              "org.gradle.usage": "java-runtime",
              "org.jetbrains.kotlin.platform.type": "jvm"
            },
            "dependencies": [
              {
                "group": "org.jetbrains.skiko",
                "module": "skiko-awt-runtime-macos-arm64",
                "version": {
                  "requires": "1.0-SNAPSHOT"
                }
              }
            ]
          }
        ]
      }
      ```
      
      </details>
      
      
      <details>
      <summary>skiko-awt-runtime.pom</summary>
      
      ```xml
      <?xml version="1.0" encoding="UTF-8"?>
      <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
        <!-- This module was also published with a richer model, Gradle metadata,  -->
        <!-- which should be used instead. Do not delete the following line which  -->
        <!-- is to indicate to Gradle or any Gradle module metadata file consumer  -->
        <!-- that they should prefer consuming it instead. -->
        <!-- do_not_remove: published-with-gradle-metadata -->
        <modelVersion>4.0.0</modelVersion>
        <groupId>org.jetbrains.skiko</groupId>
        <artifactId>skiko-awt-runtime</artifactId>
        <version>1.0-SNAPSHOT</version>
        <packaging>pom</packaging>
        <name>Skiko JVM Runtime</name>
        <description>Kotlin Skia bindings</description>
        <url>https://www.github.com/JetBrains/skiko</url>
        <licenses>
          <license>
            <name>The Apache License, Version 2.0</name>
            <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
          </license>
        </licenses>
        <developers>
          <developer>
            <name>Compose Multiplatform Team</name>
            <organization>JetBrains</organization>
            <organizationUrl>https://www.jetbrains.com</organizationUrl>
          </developer>
        </developers>
        <scm>
          <connection>scm:git:https://www.github.com/JetBrains/skiko.git</connection>
          <developerConnection>scm:git:https://www.github.com/JetBrains/skiko.git</developerConnection>
          <url>https://www.github.com/JetBrains/skiko</url>
        </scm>
      </project>
      ```
      
      </details>
      
      
      
      Simple example usage:
      ```kotlin
      kotlin {
          target.attributes {
              attribute(ARCHITECTURE_ATTRIBUTE, objects.named(DefaultNativePlatform.getCurrentArchitecture().name))
              attribute(OPERATING_SYSTEM_ATTRIBUTE, objects.named(DefaultNativePlatform.getCurrentOperatingSystem().toFamilyName()))
          }
      }
      
      dependencies {
          implementation("org.jetbrains.skiko:skiko-awt:1.0-SNAPSHOT")
          implementation("org.jetbrains.skiko:skiko-awt-runtime:1.0-SNAPSHOT")
      }
      ```
      
      ## Motivation
      This allows 'intermediate' libraries to express that this dependency
      exists (in a single publication) and push down the artifact selection to
      consumers. This is an advanced feature and can be leveraged by more
      complex builds.
      
      ---------
      Co-authored-by: 's avatarIgor Demin <igor.demin@jetbrains.com>
      f0d0baa1
    • Ivan Matkov's avatar
      Use `macos-15` for CI checks (#1122) · 40c0ffb0
      Ivan Matkov authored
      It's due to
      > The macOS-13 based runner images are being deprecated, consider
      switching to macOS-15 (macos-15-intel) or macOS 15 arm64 (macos-latest)
      instead.
      40c0ffb0
    • Sebastian Sellmair's avatar
      [build] Properly mark jvm/awt source sets as optional, respecting the… (#1124) · 0d4b50d0
      Sebastian Sellmair authored
      … 'skiko.awt.enabled' feature flag
      0d4b50d0
  3. 05 Nov, 2025 2 commits
  4. 04 Nov, 2025 2 commits
  5. 17 Oct, 2025 1 commit
  6. 13 Oct, 2025 1 commit
  7. 12 Oct, 2025 1 commit
  8. 09 Oct, 2025 2 commits
    • Igor Demin's avatar
      Revert "Pack ANGLE into a separate jar" (#1114) · 2044a13b
      Igor Demin authored
      Reverts JetBrains/skiko#1082
      
      Sign task failed on CI
      (`publishSkikoJvmRuntimeWindowsX64PublicationToComposeRepoRepository`):
      ```
      
        Some problems were found with the configuration of task ':signSkikoJvmRuntimeWindowsX64Publication' (type 'Sign').
      16:29:09     - Gradle detected a problem with the following location: 'C:\buildagent\work\381d14fe560aa354\skiko\build\libs\skiko-0.9.28+debug-javadoc.jar.asc'.
      
        org.gradle.internal.execution.WorkValidationException: Some problems were found with the configuration of task ':signSkikoJvmRuntimeWindowsX64Publication' (type 'Sign').
          - Gradle detected a problem with the following location: 'C:\buildagent\work\381d14fe560aa354\skiko\build\libs\skiko-0.9.28+debug-javadoc.jar.asc'.
            
            Reason: Task ':publishSkikoJvmRuntimeAngleWindowsX64PublicationToComposeRepoRepository' uses this output of task ':signSkikoJvmRuntimeWindowsX64Publication' without declaring an explicit or implicit dependency. This can lead to incorrect results being produced, depending on what order the tasks are executed.
            
            Possible solutions:
              1. Declare task ':signSkikoJvmRuntimeWindowsX64Publication' as an input of ':publishSkikoJvmRuntimeAngleWindowsX64PublicationToComposeRepoRepository'.
              2. Declare an explicit dependency on ':signSkikoJvmRuntimeWindowsX64Publication' from ':publishSkikoJvmRuntimeAngleWindowsX64PublicationToComposeRepoRepository' using Task#dependsOn.
              3. Declare an explicit dependency on ':signSkikoJvmRuntimeWindowsX64Publication' from ':publishSkikoJvmRuntimeAngleWindowsX64PublicationToComposeRepoRepository' using Task#mustRunAfter.
            
            For more information, please refer to https://docs.gradle.org/8.14.3/userguide/validation_problems.html#implicit_dependency in the Gradle documentation.
          - Gradle detected a problem with the following location: 'C:\buildagent\work\381d14fe560aa354\skiko\build\libs\skiko-0.9.28+debug-sources.jar.asc'.
            
            Reason: Task ':publishSkikoJvmRuntimeAngleWindowsX64PublicationToComposeRepoRepository' uses this output of task ':signSkikoJvmRuntimeWindowsX64Publication' without declaring an explicit or implicit dependency. This can lead to incorrect results being produced, depending on what order the tasks are executed.
            
            Possible solutions:
              1. Declare task ':signSkikoJvmRuntimeWindowsX64Publication' as an input of ':publishSkikoJvmRuntimeAngleWindowsX64PublicationToComposeRepoRepository'.
              2. Declare an explicit dependency on ':signSkikoJvmRuntimeWindowsX64Publication' from ':publishSkikoJvmRuntimeAngleWindowsX64PublicationToComposeRepoRepository' using Task#dependsOn.
              3. Declare an explicit dependency on ':signSkikoJvmRuntimeWindowsX64Publication' from ':publishSkikoJvmRuntimeAngleWindowsX64PublicationToComposeRepoRepository' using Task#mustRunAfter.
            
            For more information, please refer to https://docs.gradle.org/8.14.3/userguide/validation_problems.html#implicit_dependency in the Gradle documentation.
      ```
      2044a13b
    • Igor Demin's avatar
      Pack ANGLE into a separate jar (#1082) · 3e870638
      Igor Demin authored
      An addition to [the feature
      PR](https://github.com/JetBrains/skiko/pull/1017) that allows including
      ANGLE the same way as Skiko native libraries included:
      - unpack it from an additional jar
      `org.jetbrains.skiko:skiko-awt-runtime-angle-$target:$version`
      - find them in `skiko.library.path` directoty (a system property)
      - find them in `java.home`
      
      It reuses the same logic that is used to load `Skiko.dll`.
      
      Currently only Windows supported, the same way as in the original PR.
      
      No CI changes needed, as building of this jar is added as a dependency
      for
      `publishSkikoJvmRuntimeWindowsX64PublicationToComposeRepoRepository`/`publishSkikoJvmRuntimeWindowsArm64PublicationToComposeRepoRepository`
      
      ## Testing
      
      Manually with `skiko.rendering.angle.enabled` true/false on
      SkikoAwtSample.
      
      ## Release Notes (Skiko)
      ### Features - Desktop
      A new experimental renderer is introduced for Windows. It uses [the
      ANGLE library](https://github.com/google/angle) which has proven to be
      stable because it is used inside Chromium, compared to the `DIRECT3D`
      renderer that has issues on a few machines. Note that `ANGLE` still uses
      `DIRECT3D` API under the hood.
      
      1. Add this to the code to enable it:
      ```
      System.setProperty("skiko.rendering.angle.enabled", "true")
      ```
      
      2. Add the ANGLE library into the dependencies:
        - If you use Gradle:
        ```
        if (System.getProperty("os.name").startsWith("Win")) {
      
      implementation("org.jetbrains.skiko:skiko-awt-runtime-angle-$target:$version")
        }
        ```
      - If you set `skiko.library.path`. Extract `libEGL.dll`, `libGLESv2.dll`
      from https://github.com/JetBrains/angle-pack/releases into this
      directory.
      
      ## Release Notes (Compose)
      ### Features - Desktop
      N/A
      
      Until we specify how to match Skiko and Compose versions, or include it
      in Compose, it is a Skiko-only experimental feature. Some projects can
      include Skiko directly, it should work, but not supported as a Compose
      feature.
      3e870638
  9. 08 Oct, 2025 3 commits
  10. 07 Oct, 2025 1 commit
  11. 21 Sep, 2025 1 commit
  12. 17 Sep, 2025 1 commit
    • Igor Demin's avatar
      Fix "ComposePanel doesn't use hardware acceleration with... · 67e0c0b8
      Igor Demin authored
      Fix "ComposePanel doesn't use hardware acceleration with RenderSettings.SwingGraphics on Linux" (#1103)
      
      Fixes https://youtrack.jetbrains.com/issue/CMP-8936
      
      `glXChooseFBConfig` fails to find a config with `GLX_DOUBLEBUFFER,
      False` on my machine, it only has double buffered configs. But
      double/single buffering doesn't matter as we use pixel buffers.
      
      Also choose a correct config that is required by
      https://registry.khronos.org/OpenGL-Refpages/gl2.1/xhtml/glXCreatePbuffer.xml:
      ```
      BadMatch is generated if config does not support rendering to pixel buffers (e.g., GLX_DRAWABLE_TYPE does not contain GLX_PBUFFER_BIT)
      ```
      
      ## Testing
      - manually, in the clocks example
      - the modified test failed before the fix, now it doesn't fail
      
      ## Release Notes (Skiko)
      Fix "SkiaSwingLayer doesn't use hardware acceleration on Linux"
      
      ## Release Notes (Compose)
      ### Fixes - Desktop 
      Fix "ComposePanel doesn't use hardware acceleration with
      RenderSettings.SwingGraphics on Linux"
      67e0c0b8
  13. 16 Sep, 2025 1 commit
  14. 15 Sep, 2025 1 commit
  15. 12 Sep, 2025 2 commits
  16. 11 Sep, 2025 4 commits
  17. 09 Sep, 2025 4 commits
  18. 08 Sep, 2025 1 commit
    • Shagen Ogandzhanian's avatar
      Simplify gradle web wasm build (#1089) · d65ac361
      Shagen Ogandzhanian authored
      Following changes introduced in this PR:
      * jsWasmMain and jsWasmTest sourcesets renamed to webMain and webTest
      (it causes less confusion, regarding the fact that we already have
      wasmJsMain, apart from that, this would be a standard name for this
      sourceset in webMain)
      * remove redunant resource processing (there's yet room for improvement
      though)
         * Simplify wasm task introduction
      * Remove flag for building js separately from wasm (this flag was a lie
      - we can not have separate js target)
      d65ac361
  19. 05 Sep, 2025 1 commit
  20. 26 Aug, 2025 1 commit
  21. 14 Aug, 2025 3 commits
    • Alovchin91's avatar
      Update DEVELOPMENT.md (#1086) · 2260bbe4
      Alovchin91 authored
      Update instructions for VS 2022.
      2260bbe4
    • Igor Demin's avatar
      Update DEVELOPMENT.md (VS 2022 requirement) (#1084) · e7081fad
      Igor Demin authored
      It is now required for development. Tested it locally
      e7081fad
    • Alovchin91's avatar
      ANGLE support (#1017) · eda88cdc
      Alovchin91 authored
      This change adds ANGLE renderer support to Skiko.
      
      [ANGLE project](https://chromium.googlesource.com/angle/angle)
      translates OpenGL ES API calls to the native platform's graphics API.
      This is mostly useful on Windows where ANGLE provides the Direct3D 11
      backend.
      
      Right now, there is a gap in Skiko's graphics support. On Windows ARM,
      Skia doesn't support OpenGL yet. At the same time, some GPUs, like
      Parallels or VMware virtual GPUs, don't support DirectX 12. This means
      Skiko falls back to the slow software rendering on those GPUs. ANGLE
      solves this problem by providing an easy-to-use DirectX 11 backend.
      
      In addition, ANGLE is used by Chromium-based browsers and apps, so we
      expect it to be more stable than Skia's DirectX backend.
      
      ---------
      Co-authored-by: 's avatarIgor Demin <igor.demin@jetbrains.com>
      eda88cdc
  22. 08 Aug, 2025 1 commit