2026C1 Cycle Completed: Tuist goes cross-platform: Gradle cache, Linux CLI, flaky test detection, and more

Hola :waving_hand:

We just completed the cycle 2026C1 and thought I’d share with you what we’ve accomplished in this cycle:

Linux CLI support :penguin:

This wasn’t originally planned for this cycle, but it became a priority and we shipped it. The Tuist CLI now builds and runs on Linux, meaning server commands like tuist project create, authentication, and registry operations work natively on Linux CI environments. We built fully static binaries using the Swift Static Linux SDK with Musl, so there are no runtime dependencies to worry about. This is a first step toward making Tuist useful beyond Apple platforms, and it pairs nicely with the Gradle work below.

Blog post: Our Swift CLI now runs on Linux

Gradle remote cache support

As planned, we extended our cache infrastructure to support Gradle builds. This is Tuist’s first step beyond the Apple ecosystem. You can now run tuist init with Gradle projects, and the dashboard shows Gradle builds and build runs alongside Xcode ones. We also restructured our documentation using the Diátaxis framework to serve both Xcod and Android developers, and added dedicated Gradle cache documentation. Cache nodes now support Gradle’s remote build cache protocol, and @cschmatzler deployed a new EU-North cache node to improve latency for European users.

Flaky test detection and quarantine

@marekfort delivered the server-side logic for flaky test detection. Tests that pass and fail inconsistently are now automatically identified and can be quarantined. We shipped new CLI commands (tuist test-case show and tuist test-case run) and a fix-flaky-tests agent skill to help diagnose and resolve flaky tests. The quarantine system prevents flaky tests from blocking CI while still tracking them for resolution. We also fixed several bugs around duplicate quarantined test entries and stale test case handling.

Blog post: Stop Flaky Tests from Blocking Your PRs

Landing page and feature pages

@asmit worked on the landing page redesign, including an updated header, animated company logos, and a grouped feature layout organized by categories. We also shipped a case studies page featuring Monday.com, and Trendyol, and added case study links to the navbar and footer. The changelog now includes related GitHub PRs for better transparency.

Cache infrastructure improvements

The cache service got a lot of attention this cycle. We made the usage of our cache nodes the default for module cache, removed the Cloudflare load balancer, and deployed a South America cache node. On the observability side, we added log forwarding to Loki, OTEL traces, Grafana connectivity, and S3 operation metrics. Performance-wise, we optimized upload paths and removed unnecessary S3.exists? checks from the download hot path. We also added IAM role and IRSA support for S3 authentication, making self-hosted deployments more flexible.

Crash stack traces

We shipped a new feature that captures and displays formatted crash stack traces with source file references, attachments, and download URLs. This makes debugging production crashes from your test runs significantly easier, with all the context available directly in the dashboard.

Bundle size alerts

A new alert rule category for bundle size was added, so you can now set up Slack notifications when your app binary grows beyond a threshold.

tuist.toml configuration

We introduced tuist.toml as a new configuration file format alongside Tuist.swift, with reference documentation. This gives teams a simpler, non-Swift option for project-level Tuist configuration.

Agent skills

We published Tuist’s agent skills (for tools like Claude Code) to the tuist/agent-skills repository, making them installable and updatable. We also added a new debug-generated-project skill to help diagnose project generation issues.

Other notable fixes and improvements

  • Static framework resource handling: Fixed several regressions around SPM dependencies built as static frameworks not properly copying resource bundles, including an App Store rejection (ITMS-90171) caused by stub binaries being embedded in static frameworks with resources.
  • ObjC + Swift static dependencies: Added Swift toolchain library search paths for Objective-C targets linking static Swift dependencies, and resolved static ObjC xcframework search paths without requiring a Package.swift.
  • Mac Catalyst cache fixes: Stopped the cache from building unnecessary Catalyst schemes for external dependencies.
  • Registry fixes: Fixed manifest resolution for apple.swift-collections on Xcode 16.4 and apple.swift-protobuf, and improved compatibility fallback logic.
  • build_runs migration to ClickHouse: Moved the build_runs table from PostgreSQL to ClickHouse for better analytics query performance.
  • Dashboard fixes: Fixed widget card alignment, resolved several BadMapError and FunctionClauseError crashes in LiveView pages, and handled nil form states in alert rule updates.
  • Derived data resolution: Fixed BUILD_DIR and DERIVED_DATA_DIR environment variable resolution in inspect commands, and made the inspect build activity log timeout configurable.
  • Login command: Fixed the TUIST_URL environment variable lookup in the login command.
  • CI environment variables: Fixed CI environment variable filtering.
  • Lint tooling: Updated lint scripts to use mise x for resolving swiftformat and swiftlint.
  • tuist version on Linux: Fixed tuist version producing no output on Linux.
  • Foreign build system dependencies: Added support for declaring dependencies on targets from other build systems (e.g., referencing Gradle modules from Xcode projects).
  • Minimum CLI version bump: The server now requires CLI version 4.118.1 or later.
  • Documentation: Fixed root path redirects, updated skills install commands, and added tuist.toml reference docs.

Let’s meet on the 24th at 15:00 CET

We are doing a community call next week to demo the work that the team has done, and what we are planning to do next :slight_smile: