1. 10 Feb, 2026 1 commit
  2. 06 Feb, 2026 2 commits
  3. 05 Feb, 2026 1 commit
  4. 30 Jan, 2026 2 commits
  5. 29 Jan, 2026 1 commit
  6. 28 Jan, 2026 2 commits
    • ApoloApps's avatar
      Part 2 Extension functions non-allocate intermediate objects (#1140) · 3af0752f
      ApoloApps authored
      This is part 2 of [this
      pr](https://github.com/JetBrains/skiko/pull/1137)
      
      **What has changed?**
      1. Added more extension functions that prevent intermediate object
      allocations from a lot of the Skiko api surface
      2. Migrated EnumClass.values() to entries in a lot of classes (maybe
      some have been missed)
      
      **Next**
      Try (important keyword here :), cause if not wrong there are Skia and
      Compose diffs on how they're treated) doing less copies of Matrix
      
      ## Release Notes
      Added API that can accept primitive values instead of `Rect`, `RRect`, `Offset` to avoid additional object allocation
      3af0752f
    • Ivan Matkov's avatar
      Publish Docker Containers used on CI to GHCR (#1152) · 548fed39
      Ivan Matkov authored
      Fixes [SKIKO-1081](https://youtrack.jetbrains.com/issue/SKIKO-1081) Make
      docker images for building skiko publicly available
      
      The Skiko project previously used a private Docker registry
      (`registry.jetbrains.team/p/ui/skiko-docker`) for build containers,
      which required secrets for authentication. This prevented CI
      verification from fork PRs even after manual approval.
      
      The change migrates to GitHub Container Registry (GHCR), making
      containers publicly accessible and enabling CI to run on fork PRs.
      
      Containers built:
      https://github.com/orgs/JetBrains/packages?repo_name=skiko
      
      Triggers:
      - Push to master: Automatically builds and publishes all Docker images
      - Pull requests: Builds images in dry-run mode (no publishing) for
      verification
      - Manual workflow dispatch: Option to publish or just build
      - File changes: Triggers on changes to `skiko/docker/**` or the workflow
      itself
      548fed39
  7. 27 Jan, 2026 1 commit
  8. 19 Jan, 2026 1 commit
  9. 16 Jan, 2026 1 commit
  10. 08 Jan, 2026 1 commit
  11. 07 Jan, 2026 3 commits
  12. 05 Jan, 2026 1 commit
  13. 10 Dec, 2025 2 commits
  14. 01 Dec, 2025 1 commit
  15. 28 Nov, 2025 1 commit
  16. 27 Nov, 2025 1 commit
  17. 26 Nov, 2025 1 commit
  18. 24 Nov, 2025 3 commits
  19. 21 Nov, 2025 3 commits
    • Ivan Matkov's avatar
      Update GCC version to 10 (#1132) · c2cc37a0
      Ivan Matkov authored
      In 0.9.36, there was a missing symbol that caused
      ```
      libskiko-linux-x64.so: undefined symbol: _ZNSt19_Sp_make_shared_tag5_S_eqERKSt9type_info
      ```
      
      It's because the build attempts to statically link the C++ standard
      library, but:
      - Skia's object files reference newer libstdc++ symbols
      - GCC 7.3's `libstdc++` doesn't contain these symbols
      - The static linking fails to resolve these symbols
      
      GCC was downgraded from 9 to 7 in #1130 during the switch to AL2 to
      provide better GLIBC compatibility.
      Since AL2
      [provides](https://docs.aws.amazon.com/linux/al2/ug/c-cplusplus.html)
      only GCC 7.3 by default and GCC 10, installing GCC 9 is problematic
      there, so it's bumped to 10
      
      However, GCC 10 introduces outline atomics as default for new ARM chips,
      the build might fail due to missing symbols like
      ```
      org_jetbrains_skia_FontMgrWithFallback__1nDefaultWithFallbackFontProvider: error: undefined reference to '__aarch64_ldadd4_relax'
      org_jetbrains_skia_FontMgrWithFallback__1nDefaultWithFallbackFontProvider: error: undefined reference to '__aarch64_ldadd4_acq_rel'
      ```
      so, to keep things compatible with the previous GCC version,
      `-mno-outline-atomics` option was added to disable this new behavior.
      c2cc37a0
    • Ivan Matkov's avatar
      Fix glibc compatibility (#1130) · 49fea5b9
      Ivan Matkov authored
      [SKIKO-1066](https://youtrack.jetbrains.com/issue/SKIKO-1066) Support
      glibc 2.27
      [CMP-9307](https://youtrack.jetbrains.com/issue/CMP-9307) Support glibc
      2.27
      
      - Added `linux-compat` docker image based on #1123. It works on both x64
      and arm64 architectures
      - `multistrap` tool was replaced by installing required packages inside
      `linux-compat` and `linux-amd64` docker images
      - `linux-arm64` uses GCC instead of clang (aligning between
      distributions)
      - GitHub checks now use precompiled docker images to reuse the same
      environment
      - `ci.yml` and `web.yml` were combined into `tests.yml`
      - `publishToMavenLocal` checks are moved to `publish-dry-run.yml`
      - Add building an Android sample as part of CI checks
      
      ---------
      Co-authored-by: 's avatarVladislav.Ertel <vladislav.ertel@jetbrains.com>
      49fea5b9
    • Sebastian Sellmair's avatar
      Lock .skiko directory using lockfile when unpacking the native binary (#1128) · fbb08087
      Sebastian Sellmair authored
      In the compose hot reload project, we have seen races from multiple
      tests trying to unpack skiko into the .skiko directory. Currently, the
      library loading is only synchronized within the project. This MR also
      adds a .lock file, which has to be locked when modifying the dataDir.
      
      Note: This MR also changed the Library.load method from always entering
      a monitor, to resolving an atomic reference, best case.
      
      ## Release Notes
      ### Fixes - Desktop
      - Fixed a race condition that occurred when multiple processes attempted
      to unpack Skiko binary files at startup
      fbb08087
  20. 20 Nov, 2025 1 commit
  21. 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
  22. 05 Nov, 2025 2 commits
  23. 04 Nov, 2025 2 commits
  24. 17 Oct, 2025 1 commit