-
Couldn't load subscription status.
- Fork 344
Add documentation for 3.3.0 and update versions #683
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
* KTOR-8726 Add documentation for custom fallback for static content * document change in the what's new doc --------- Co-authored-by: Mariia Skripchenko <[email protected]>
* document regression and auto-reload limitations in the 3.2 and 3.3 "what's new" topics * add limitations to auto-reload docs
…nsion preview (#679) * Add an entry for OpenAPI spec generation in the "what's new" * Add a new topic * Add links to the relevant plugin topics
WalkthroughRepository-wide version upgrades (Kotlin, Ktor, Gradle/plug-ins), many snippet build files and version catalogs updated; selective snippet modules commented out; new/updated documentation and TOC entries (WebRTC, OpenAPI, 3.3.0 release); static-files snippet adds fallback and caching examples; site metadata/labels and Gradle wrapper updated. Changes
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~30 minutes Possibly related PRs
Suggested labels
Suggested reviewers
Pre-merge checks and finishing touches✅ Passed checks (3 passed)
✨ Finishing touches
🧪 Generate unit tests
📜 Recent review detailsConfiguration used: CodeRabbit UI Review profile: CHILL Plan: Pro 📒 Files selected for processing (1)
🚧 Files skipped from review as they are similar to previous changes (1)
Tip 👮 Agentic pre-merge checks are now available in preview!Pro plan users can now enable pre-merge checks in their settings to enforce checklists before merging PRs.
Please see the documentation for more information. Example: reviews:
pre_merge_checks:
custom_checks:
- name: "Undocumented Breaking Changes"
mode: "warning"
instructions: |
Pass/fail criteria: All breaking changes to public APIs, CLI flags, environment variables, configuration keys, database schemas, or HTTP/GraphQL endpoints must be documented in the "Breaking Change" section of the PR description and in CHANGELOG.md. Exclude purely internal or private changes (e.g., code not exported from package entry points or explicitly marked as internal).Please share your feedback with us on this Discord post. Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 2
🧹 Nitpick comments (8)
codeSnippets/snippets/auth-oauth-google/build.gradle.kts (1)
15-18: Drop the Ktor EAP repo unless strictly needed.3.3.0 artifacts are on Maven Central; keeping EAP increases resolution time and supply‑chain surface.
Apply:
repositories { mavenCentral() - maven { url = uri("https://maven.pkg.jetbrains.space/public/p/ktor/eap") } }codeSnippets/snippets/client-engine-js/build.gradle.kts (1)
9-13: Consider removing the Ktor EAP repository.Unless a snippet truly depends on EAP, prefer stable repos only.
repositories { mavenCentral() maven("https://maven.pkg.jetbrains.space/public/p/kotlinx-html/maven") - maven("https://maven.pkg.jetbrains.space/public/p/ktor/eap") }codeSnippets/snippets/server-sse/build.gradle.kts (1)
15-18: Remove Ktor EAP repo unless required.Keeps dependency resolution deterministic on stable releases.
repositories { mavenCentral() - maven { url = uri("https://maven.pkg.jetbrains.space/public/p/ktor/eap") } }codeSnippets/snippets/client-type-safe-requests/build.gradle.kts (1)
16-19: Prefer stable repos only.Drop the Ktor EAP repository if not strictly needed by the snippet.
repositories { mavenCentral() - maven { url = uri("https://maven.pkg.jetbrains.space/public/p/ktor/eap") } }codeSnippets/snippets/cors/build.gradle.kts (1)
16-19: Remove EAP repo to avoid pre‑release artifacts.Stable 3.3.0 does not require it.
repositories { mavenCentral() - maven { url = uri("https://maven.pkg.jetbrains.space/public/p/ktor/eap") } }codeSnippets/snippets/json-kotlinx-method-override/build.gradle.kts (1)
15-18: EAP repo likely unnecessary.Prefer Central only for release docs/snippets.
repositories { mavenCentral() - maven { url = uri("https://maven.pkg.jetbrains.space/public/p/ktor/eap") } }topics/openapi-spec-generation.md (1)
100-115: Inconsistent tag name for external docs.The table lists Tag “@externalDocs” but Format “@external …”. Make them consistent.
Apply one of:
- Use “@externalDocs href”
- Or rename Tag column to “@external”
-| `@externalDocs` | `@external href` | External documentation links | +| `@externalDocs` | `@externalDocs href` | External documentation links |topics/whats-new-330.md (1)
164-169: Consider consistent list formatting.The static analysis tool flagged inconsistent list formatting (mixing dashes and asterisks) and indentation issues. However, this appears to be intentional nested formatting within the OpenAPI features section and doesn't impact readability.
If you prefer consistent formatting, you could standardize the sub-bullets:
- - Path, query, header, cookie, and body parameters - - Response codes and types - - Security, descriptions, deprecations, and external documentation links + * Path, query, header, cookie, and body parameters + * Response codes and types + * Security, descriptions, deprecations, and external documentation links
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (70)
codeSnippets/gradle.properties(1 hunks)codeSnippets/gradle/wrapper/gradle-wrapper.properties(1 hunks)codeSnippets/settings.gradle.kts(2 hunks)codeSnippets/snippets/auth-form-session-nested/build.gradle.kts(1 hunks)codeSnippets/snippets/auth-form-session/build.gradle.kts(1 hunks)codeSnippets/snippets/auth-jwt-hs256/build.gradle.kts(1 hunks)codeSnippets/snippets/auth-jwt-rs256/build.gradle.kts(1 hunks)codeSnippets/snippets/auth-oauth-google/build.gradle.kts(1 hunks)codeSnippets/snippets/aws-elastic-beanstalk/build.gradle.kts(1 hunks)codeSnippets/snippets/client-auth-oauth-google/build.gradle.kts(1 hunks)codeSnippets/snippets/client-engine-js/build.gradle.kts(1 hunks)codeSnippets/snippets/client-json-kotlinx/build.gradle.kts(1 hunks)codeSnippets/snippets/client-sse/build.gradle.kts(1 hunks)codeSnippets/snippets/client-testing-mock/build.gradle.kts(1 hunks)codeSnippets/snippets/client-type-safe-requests/build.gradle.kts(1 hunks)codeSnippets/snippets/client-validate-2xx-response/build.gradle.kts(1 hunks)codeSnippets/snippets/client-websockets-serialization/build.gradle.kts(1 hunks)codeSnippets/snippets/cors/build.gradle.kts(1 hunks)codeSnippets/snippets/deployment-ktor-plugin/build.gradle.kts(1 hunks)codeSnippets/snippets/engine-main-custom-environment/build.gradle.kts(1 hunks)codeSnippets/snippets/forwarded-header/build.gradle.kts(1 hunks)codeSnippets/snippets/full-stack-task-manager/gradle/libs.versions.toml(1 hunks)codeSnippets/snippets/htmx-integration/build.gradle.kts(1 hunks)codeSnippets/snippets/jetty-war/build.gradle.kts(1 hunks)codeSnippets/snippets/json-kotlinx-method-override/build.gradle.kts(1 hunks)codeSnippets/snippets/json-kotlinx-openapi/build.gradle.kts(1 hunks)codeSnippets/snippets/json-kotlinx/build.gradle.kts(1 hunks)codeSnippets/snippets/legacy-interactive-website/build.gradle.kts(1 hunks)codeSnippets/snippets/migrating-express-ktor/5_send_response/build.gradle.kts(1 hunks)codeSnippets/snippets/migrating-express-ktor/7_receive_request/build.gradle.kts(1 hunks)codeSnippets/snippets/migrating-express-ktor/gradle.properties(1 hunks)codeSnippets/snippets/proguard/build.gradle.kts(1 hunks)codeSnippets/snippets/request-validation/build.gradle.kts(1 hunks)codeSnippets/snippets/resource-routing/build.gradle.kts(1 hunks)codeSnippets/snippets/server-sse/build.gradle.kts(1 hunks)codeSnippets/snippets/server-websockets-serialization/build.gradle.kts(1 hunks)codeSnippets/snippets/server-websockets-sharedflow/build.gradle.kts(1 hunks)codeSnippets/snippets/session-cookie-client/build.gradle.kts(1 hunks)codeSnippets/snippets/session-cookie-server/build.gradle.kts(1 hunks)codeSnippets/snippets/session-header-server/build.gradle.kts(1 hunks)codeSnippets/snippets/static-files/src/main/kotlin/com/example/Application.kt(2 hunks)codeSnippets/snippets/tomcat-war-ssl/build.gradle.kts(1 hunks)codeSnippets/snippets/tutorial-client-kmm/gradle/libs.versions.toml(1 hunks)codeSnippets/snippets/tutorial-full-stack-task-manager/gradle/libs.versions.toml(1 hunks)codeSnippets/snippets/tutorial-server-db-integration/gradle/libs.versions.toml(1 hunks)codeSnippets/snippets/tutorial-server-docker-compose/build.gradle.kts(1 hunks)codeSnippets/snippets/tutorial-server-get-started-maven/pom.xml(1 hunks)codeSnippets/snippets/tutorial-server-get-started/build.gradle.kts(1 hunks)codeSnippets/snippets/tutorial-server-restful-api/build.gradle.kts(1 hunks)codeSnippets/snippets/tutorial-server-routing-and-requests/build.gradle.kts(1 hunks)codeSnippets/snippets/tutorial-server-web-application/build.gradle.kts(1 hunks)codeSnippets/snippets/tutorial-server-websockets/build.gradle.kts(2 hunks)codeSnippets/snippets/tutorial-website-static/build.gradle.kts(1 hunks)help-versions.json(1 hunks)ktor.tree(2 hunks)labels.list(1 hunks)project.ihp(1 hunks)topics/client-server-sent-events.topic(2 hunks)topics/client-webrtc.md(1 hunks)topics/openapi-spec-generation.md(1 hunks)topics/releases.md(1 hunks)topics/server-auto-reload.topic(2 hunks)topics/server-http2.md(1 hunks)topics/server-openapi.md(1 hunks)topics/server-static-content.md(7 hunks)topics/server-swagger-ui.md(1 hunks)topics/server-war.md(1 hunks)topics/whats-new-320.md(2 hunks)topics/whats-new-330.md(1 hunks)v.list(1 hunks)
🧰 Additional context used
🧬 Code graph analysis (1)
codeSnippets/snippets/tutorial-server-restful-api/build.gradle.kts (1)
codeSnippets/snippets/cors/src/main/kotlin/com/example/Application.kt (1)
id(20-21)
🪛 markdownlint-cli2 (0.17.2)
topics/client-webrtc.md
47-47: Link fragments should be valid
(MD051, link-fragments)
topics/whats-new-320.md
21-21: Link fragments should be valid
(MD051, link-fragments)
topics/whats-new-330.md
10-10: Link fragments should be valid
(MD051, link-fragments)
11-11: Link fragments should be valid
(MD051, link-fragments)
12-12: Link fragments should be valid
(MD051, link-fragments)
13-13: Link fragments should be valid
(MD051, link-fragments)
164-164: Unordered list style
Expected: asterisk; Actual: dash
(MD004, ul-style)
165-165: Unordered list style
Expected: asterisk; Actual: dash
(MD004, ul-style)
166-166: Unordered list style
Expected: asterisk; Actual: dash
(MD004, ul-style)
166-166: Unordered list indentation
Expected: 2; Actual: 4
(MD007, ul-indent)
167-167: Unordered list style
Expected: asterisk; Actual: dash
(MD004, ul-style)
167-167: Unordered list indentation
Expected: 2; Actual: 4
(MD007, ul-indent)
168-168: Unordered list style
Expected: asterisk; Actual: dash
(MD004, ul-style)
168-168: Unordered list indentation
Expected: 2; Actual: 4
(MD007, ul-indent)
169-169: Unordered list style
Expected: asterisk; Actual: dash
(MD004, ul-style)
🔇 Additional comments (82)
codeSnippets/snippets/tutorial-server-routing-and-requests/build.gradle.kts (1)
8-8: Version update aligns with project-wide Ktor 3.3.0 upgrade.This is a minor version update that provides backward-compatible new functionality and contains backward-compatible fixes. The update from 3.2.3 to 3.3.0 is part of the repository-wide version alignment documented in the PR objectives.
codeSnippets/snippets/request-validation/build.gradle.kts (1)
8-8: Kotlin serialization plugin version properly updated.The update from 2.1.20 to 2.2.10 aligns with the global Kotlin version upgrade across the repository. This change is consistent with other build files in the PR.
codeSnippets/snippets/tutorial-website-static/build.gradle.kts (1)
8-8: LGTM! Ktor plugin version properly updated.The update from 3.2.3 to 3.3.0 is consistent with the repository-wide upgrade to Ktor 3.3.0 mentioned in the PR objectives.
codeSnippets/snippets/tutorial-server-get-started-maven/pom.xml (1)
11-11: Maven properties properly aligned with repository-wide version upgrades.Both Ktor (3.2.3 → 3.3.0) and Kotlin (2.1.20 → 2.2.10) version updates are consistent with the global version alignment across the repository.
Also applies to: 13-13
help-versions.json (1)
13-13: Documentation version correctly updated to reflect current release.The update from 3.2.3 to 3.3.0 properly aligns the documentation version with the new Ktor release mentioned in the PR objectives.
codeSnippets/snippets/client-auth-oauth-google/build.gradle.kts (1)
9-9: Kotlin serialization plugin version correctly updated.The version bump from 2.1.20 to 2.2.10 matches the repository-wide Kotlin upgrade pattern documented in other files.
codeSnippets/snippets/tutorial-server-docker-compose/build.gradle.kts (1)
11-11: Plugin versions properly synchronized with global upgrades.Both the Ktor plugin (3.2.3 → 3.3.0) and Kotlin serialization plugin (2.1.20 → 2.2.10) updates are consistent with the repository-wide version alignment strategy.
Also applies to: 12-12
codeSnippets/snippets/jetty-war/build.gradle.kts (1)
8-8: Ignore for build — jetty-war module is commented out in settings.gradle.ktsThe org.gretty update in codeSnippets/snippets/jetty-war/build.gradle.kts doesn't affect the multi-module build because settings.gradle.kts has module("snippets", "jetty-war") commented out; topics/server-war.md only references the snippet. Re-enable the module if you intend this change to be built, then verify Gretty 4.1.7 compatibility with Jetty 12.
Likely an incorrect or invalid review comment.
codeSnippets/snippets/auth-form-session-nested/build.gradle.kts (1)
8-8: LGTM! Kotlin serialization plugin version updated consistently.The Kotlin serialization plugin version has been updated to 2.2.10, which aligns with the repository-wide version upgrade as part of this PR.
codeSnippets/snippets/json-kotlinx/build.gradle.kts (1)
8-8: LGTM! Kotlin serialization plugin version updated consistently.The Kotlin serialization plugin version has been updated to 2.2.10, which aligns with the repository-wide version upgrade as part of this PR.
codeSnippets/snippets/client-json-kotlinx/build.gradle.kts (1)
9-9: LGTM! Kotlin serialization plugin version updated consistently.The Kotlin serialization plugin version has been updated to 2.2.10, which aligns with the repository-wide version upgrade as part of this PR.
codeSnippets/snippets/deployment-ktor-plugin/build.gradle.kts (1)
7-7: LGTM! Ktor plugin version updated consistently.The Ktor plugin version has been updated to 3.3.0, which aligns with the repository-wide Ktor version upgrade as part of this PR.
codeSnippets/snippets/forwarded-header/build.gradle.kts (1)
7-7: LGTM! Ktor plugin version updated consistently.The Ktor plugin version has been updated to 3.3.0, which aligns with the repository-wide Ktor version upgrade as part of this PR.
codeSnippets/snippets/session-header-server/build.gradle.kts (1)
8-8: LGTM! Kotlin serialization plugin version updated consistently.The Kotlin serialization plugin version has been updated to 2.2.10, which aligns with the repository-wide version upgrade as part of this PR.
codeSnippets/snippets/session-cookie-server/build.gradle.kts (1)
8-8: LGTM! Kotlin serialization plugin version updated consistently.The Kotlin serialization plugin version has been updated to 2.2.10, which aligns with the repository-wide version upgrade as part of this PR.
codeSnippets/snippets/tutorial-server-db-integration/gradle/libs.versions.toml (1)
5-6: LGTM! Version catalog updated consistently.Both Kotlin and Ktor versions have been updated to 2.2.10 and 3.3.0 respectively, which aligns with the repository-wide version upgrade as part of this PR.
codeSnippets/snippets/client-sse/build.gradle.kts (1)
9-9: Version update looks appropriate for the repository-wide upgrade.The Kotlin serialization plugin version update from 2.1.20 to 2.2.10 aligns with the latest stable Kotlin 2.2.20 release. This is part of a coordinated upgrade across the entire codebase.
codeSnippets/snippets/auth-form-session/build.gradle.kts (1)
8-8: LGTM - consistent version upgrade pattern.This Kotlin serialization plugin version bump to 2.2.10 follows the same pattern as other modules in this PR and aligns with the current stable release.
codeSnippets/snippets/client-websockets-serialization/build.gradle.kts (1)
9-9: Version bump is consistent with repository upgrade.The Kotlin serialization plugin version update to 2.2.10 matches the coordinated upgrade across all modules.
codeSnippets/snippets/engine-main-custom-environment/build.gradle.kts (1)
7-7: Same concern about Ktor 3.3.0 availability.As noted in the proguard build script, please verify that Ktor plugin version 3.3.0 is officially released and available before proceeding with this change.
codeSnippets/snippets/json-kotlinx-openapi/build.gradle.kts (1)
9-9: Kotlin serialization version update is appropriate.The update from 2.1.20 to 2.2.10 is consistent with the Kotlin 2.2.10 bug fix release and maintains alignment across the codebase.
codeSnippets/snippets/htmx-integration/build.gradle.kts (1)
7-7: Potential version availability issue.The Ktor plugin version 3.3.0 update requires verification of availability, similar to other files in this PR. Ensure this version has been officially released.
codeSnippets/snippets/session-cookie-client/build.gradle.kts (1)
8-8: Kotlin serialization version update approved.The version bump to 2.2.10 is consistent with the repository-wide upgrade and represents a stable release.
codeSnippets/snippets/proguard/build.gradle.kts (1)
20-20: Ktor 3.3.0 release verified — OK to keepKtor 3.3.0 was officially released on September 12, 2025 (ktor.io changelog).
id("io.ktor.plugin") version "3.3.0"codeSnippets/snippets/client-engine-js/build.gradle.kts (1)
6-6: Plugin upgrade to 2.2.10 — good. Ensure Kotlin MPP toolchain is on 2.2.10 too.Avoid mixed Kotlin plugin versions between serialization and multiplatform/jvm.
v.list (1)
7-8: Version vars updated to Ktor 3.3.0 / Kotlin 2.2.10 — LGTM. Validate repo‑wide sync.Ensure these values match all snippet properties/libs.versions and release notes.
Use the script shared in the first comment to detect any stale 3.2.3 / 2.1.20 references.
codeSnippets/snippets/server-sse/build.gradle.kts (1)
8-8: Kotlin serialization 2.2.10 — LGTM.No issues spotted.
codeSnippets/snippets/client-type-safe-requests/build.gradle.kts (1)
9-9: Serialization plugin 2.2.10 — looks good.Confirm kotlin("jvm") resolves to the same Kotlin version via pluginManagement.
codeSnippets/snippets/aws-elastic-beanstalk/build.gradle.kts (1)
6-6: Ktor Gradle plugin -> 3.3.0 — LGTM. Verify dependency version alignment.This snippet uses versionless Ktor deps (e.g., ktor-server-core-jvm). Ensure the plugin or a BOM aligns them to 3.3.0; otherwise add an explicit version or configure the plugin’s version property.
Optionally make it explicit:
plugins { application kotlin("jvm") id("io.ktor.plugin") version "3.3.0" } + +ktor { + version.set("3.3.0") +}codeSnippets/snippets/cors/build.gradle.kts (1)
9-9: Kotlin serialization 2.2.10 — approved.All good here.
codeSnippets/snippets/json-kotlinx-method-override/build.gradle.kts (1)
8-8: Serialization plugin version bump — LGTM.No functional risks identified.
codeSnippets/snippets/auth-oauth-google/build.gradle.kts (1)
8-8: Kotlin serialization plugin bumped to 2.2.10 — confirmed; align Kotlin plugin version repo‑wide.Found kotlin("plugin.serialization").version("2.2.10") across codeSnippets/* (e.g. codeSnippets/snippets/auth-oauth-google/build.gradle.kts). No explicit kotlin("jvm"|"multiplatform").version(...) pins detected. pluginManagement blocks exist (e.g. codeSnippets/settings.gradle.kts); confirm pluginManagement resolutionStrategy pins Kotlin to 2.2.10 so kotlin("jvm") resolves to 2.2.10 and avoid mixed Kotlin plugin versions.
codeSnippets/snippets/client-validate-2xx-response/build.gradle.kts (1)
9-9: Kotlin serialization plugin version updated to align with repository-wide upgrade.This change is part of a broader repository-wide upgrade to Ktor 3.3.0 and Kotlin 2.2.10, coordinated across multiple modules. The version update is consistent with the documented compatibility requirements.
codeSnippets/gradle.properties (1)
8-9: Version bumps are consistent with Ktor 3.3.0 release requirements.Ktor 3.3.0 was released on September 11, 2025 and includes support for Kotlin 2.2. The updates to kotlin_version 2.2.10 and ktor_version 3.3.0 are appropriate and align with the release compatibility matrix.
codeSnippets/snippets/legacy-interactive-website/build.gradle.kts (1)
7-7: Ktor plugin version updated correctly for 3.3.0 release.This change aligns with the repository-wide upgrade strategy and maintains consistency across build files.
codeSnippets/snippets/tutorial-server-web-application/build.gradle.kts (1)
8-8: Ktor plugin version consistently updated to 3.3.0.The version update maintains consistency with the broader repository upgrade strategy.
codeSnippets/snippets/tutorial-full-stack-task-manager/gradle/libs.versions.toml (1)
16-16: Kotlin version updated in libs.versions.toml.The Kotlin version update to 2.2.10 is consistent and will affect all references using
version.ref = "kotlin"throughout this module.codeSnippets/snippets/auth-jwt-rs256/build.gradle.kts (1)
8-8: Kotlin serialization plugin version updated consistently.This change aligns with the repository-wide Kotlin version upgrade to 2.2.10.
codeSnippets/snippets/full-stack-task-manager/gradle/libs.versions.toml (1)
19-19: Ktor version updated to 3.3.0 in version catalog.Ktor 3.3.0 was released on September 11, 2025, making this a current and stable version choice. The update will propagate to all Ktor dependencies referenced through
version.ref = "ktor".codeSnippets/settings.gradle.kts (1)
25-26: Confirm WAR modules intentionally disabled — verify compatibility and document reason
- Findings: codeSnippets/snippets/{jetty-war,tomcat-war,tomcat-war-ssl} are present and use Gretty+WAR configs (jetty-war: org.gretty 4.1.7, servletContainer=jetty11; tomcat-war: org.gretty 4.0.3, servletContainer=tomcat10; tomcat-war-ssl: org.gretty 4.1.7, httpsEnabled). No TODO/FIXME notes found; topics/server-war.md and each module README still reference the samples and show ./gradlew ::run / :war commands.
- Action (required): If these modules were commented out for compatibility, add an inline comment in codeSnippets/settings.gradle.kts (lines 25–26) referencing the issue/ticket and either (a) verify the samples build/run with the current Ktor/Gretty versions (:jetty-war:war, :tomcat-war:war, etc.) or (b) align/update Gretty/plugin versions before re-enabling. If there is no compatibility problem, re-enable the modules so docs/examples remain accurate.
codeSnippets/snippets/tutorial-server-get-started/build.gradle.kts (1)
8-8: LGTM! Plugin version update aligns with the repository-wide upgrade.The update to Ktor Gradle plugin version 3.3.0 is consistent with the repository-wide migration to Ktor 3.3.0. This change ensures the build tooling is compatible with the latest Ktor features and improvements.
codeSnippets/snippets/auth-jwt-hs256/build.gradle.kts (1)
8-8: LGTM! Kotlin serialization plugin update aligns with project-wide version upgrade.The update to Kotlin serialization plugin version 2.2.10 is part of the broader repository upgrade to Kotlin 2.2.10. This ensures compatibility with the latest Kotlin language features and improvements.
codeSnippets/snippets/tomcat-war-ssl/build.gradle.kts (1)
8-8: LGTM! Gretty plugin version update is appropriate.The update to Gretty plugin version 4.1.7 aligns with the broader version updates across the repository. This ensures compatibility with the updated Kotlin and Ktor versions being used in the project.
topics/server-war.md (1)
93-97: LGTM! Important compatibility warning for Ktor 3.3.0 users.The warning about Jetty 12 compatibility with Gretty is essential for users who rely on the Gretty plugin. Ktor 3.3.0 includes significant infrastructure changes including LLVM 19 updates, and the recommendation to use Ktor 3.2.3 until Gretty adds Jetty 12 support provides users with a practical workaround.
codeSnippets/snippets/resource-routing/build.gradle.kts (1)
8-8: LGTM! Kotlin serialization plugin version update is consistent.The update to Kotlin serialization plugin version 2.2.10 aligns with the repository-wide upgrade to Kotlin 2.2.10. This ensures compatibility with the latest Kotlin language features and serialization improvements.
codeSnippets/snippets/client-testing-mock/build.gradle.kts (1)
7-7: LGTM! Kotlin serialization plugin version update follows project standards.The update to Kotlin serialization plugin version 2.2.10 is consistent with the repository-wide migration to Kotlin 2.2.10. This maintains version consistency across all build scripts and ensures access to the latest serialization features.
codeSnippets/snippets/tutorial-client-kmm/gradle/libs.versions.toml (1)
3-3: LGTM! Version catalog updates align with repository-wide upgrade.The updates to kotlin = "2.2.10" and ktor = "3.3.0" are consistent with the repository-wide migration. Using version catalogs for dependency management is a best practice that ensures consistency across multi-module projects.
Also applies to: 5-5
codeSnippets/snippets/server-websockets-serialization/build.gradle.kts (1)
8-8: LGTM! Kotlin serialization plugin version update maintains consistency.The update to Kotlin serialization plugin version 2.2.10 is part of the coordinated repository-wide upgrade to Kotlin 2.2.10. This ensures all WebSocket serialization functionality benefits from the latest Kotlin improvements and bug fixes.
codeSnippets/snippets/server-websockets-sharedflow/build.gradle.kts (1)
8-9: LGTM! Version updates are correct.The Ktor plugin version update to 3.3.0 and Kotlin serialization plugin version update to 2.2.10 align with the broader version upgrade across the codebase for the 3.3.0 release.
topics/server-http2.md (1)
79-98: Clear documentation for HTTP/2 cleartext support.The new h2c section provides comprehensive documentation for HTTP/2 without TLS, including proper configuration examples and important constraints. The requirement that
enableHttp2 = truemust be set and the incompatibility with SSL connectors are well-documented.codeSnippets/gradle/wrapper/gradle-wrapper.properties (2)
3-3: Gradle 9.0.0 is a stable release.The upgrade to Gradle 9.0.0 is appropriate as it's a stable major release. This version requires Java 17+ to run, uses Kotlin 2 and Groovy 4, and adopts Semantic Versioning (SemVer).
5-5: Good security practice.Adding
validateDistributionUrl=trueis a security enhancement that validates the Gradle distribution URL, helping prevent supply chain attacks.labels.list (1)
15-15: New server-feature label added appropriately.The addition of the "Server" secondary label with purple color is consistent with the existing labeling scheme and aligns with the new server-related features being documented in 3.3.0.
codeSnippets/snippets/tutorial-server-restful-api/build.gradle.kts (1)
8-9: LGTM! Plugin versions updated correctly.The Ktor plugin update to 3.3.0 and Kotlin serialization plugin update to 2.2.10 are consistent with the version bumps across the entire codebase for the 3.3.0 release.
codeSnippets/snippets/static-files/src/main/kotlin/com/example/Application.kt (2)
6-8: New imports added for enhanced static file handling.The imports for
respond,respondFile, andrespondRedirectare correctly added to support the new fallback functionality.
25-32: Well-implemented custom fallback logic.The new fallback block demonstrates different response patterns:
- Absolute vs relative redirects (
.phpand.ktextensions)- Custom HTTP status codes (HTTP 410 Gone for
.xml)- Default file serving for other cases
The implementation showcases the flexibility of the new custom fallback feature in Ktor 3.3.0.
topics/whats-new-320.md (3)
20-23: Important regression warning properly highlighted.The warning about auto-reload compatibility with blocking function references is appropriately placed and formatted. This helps users understand the limitations introduced with suspend module support.
282-301: Comprehensive regression documentation.The new section clearly explains the auto-reload regression, providing both the technical reason (anonymous inner class wrapping) and practical solutions (suspend functions and configuration references). The code examples effectively demonstrate the supported approaches.
21-21: Fix the link fragment reference.The link fragment
#regressionshould point to a valid section. The target section exists at line 282, so this reference is correct.codeSnippets/snippets/tutorial-server-websockets/build.gradle.kts (2)
7-8: LGTM! Plugin versions updated consistently.The Ktor plugin update to 3.3.0 and Kotlin serialization plugin update to 2.2.10 are aligned with the broader version upgrade across all modules.
23-23: EAP repository added for early access.The addition of the Jetbrains EAP repository allows access to early access builds and preview versions, which is appropriate for a documentation project that may need to showcase upcoming features.
topics/client-server-sent-events.topic (2)
54-67: Reconnection guidance LGTM.Accurate per SSEConfig (maxReconnectionAttempts, reconnectionTime).
78-134: Confirm API names and add a failure-handling snippet.The new buffering section is useful. Please verify the exact type and function names (SSEBufferPolicy, bufferPolicy(...)) against 3.3.0 APIs, and consider adding a short example showing how to read the buffered body on errors.
Apply this minimal doc diff to include a targeted try/catch example:
@@ </chapter> <chapter title="Response buffering" id="response-buffering"> @@ }) { // ... } </code-block> + <p>Example: read buffered response text on failure:</p> + <code-block lang="kotlin"> + try { + client.sse(url) { /* ... */ } + } catch (e: SSEClientException) { + val buffered = e.response?.bodyAsText() + // log buffered + } + </code-block>For reference, SSEConfig exposes reconnection settings and SSEClientException carries an optional HttpResponse you can read via bodyAsText(). (api.ktor.io)
topics/server-openapi.md (1)
22-24: LGTM: clearer positioning with generation-from-specs and link to extension.This aligns the page with the new “spec generation” topic.
topics/server-swagger-ui.md (1)
23-24: LGTM: succinct note to use existing spec or generate via extension.This reduces duplication and points to the right doc.
codeSnippets/snippets/migrating-express-ktor/gradle.properties (1)
1-2: LGTM: version alignment.ktor_version=3.3.0 and kotlin_version=2.2.10 match PR goals.
project.ihp (1)
17-17: LGTM: doc instance version updated to 3.3.0.Consistent with the release notes added in this PR.
codeSnippets/snippets/migrating-express-ktor/7_receive_request/build.gradle.kts (1)
8-8: LGTM: serialization plugin bumped to 2.2.10.Matches gradle.properties and other snippets.
codeSnippets/snippets/migrating-express-ktor/5_send_response/build.gradle.kts (1)
7-9: Version bumps LGTM — local compatibility verified; repo wrappers varymigrating-express-ktor/5_send_response/build.gradle.kts uses kotlin("jvm") and plugin.serialization 2.2.10; the module's gradle.properties sets kotlin_version=2.2.10 and its Gradle wrapper is 7.6.6, which meets KGP 2.2.10's minimum Gradle 7.6.3 (fully supported through 8.14). (kotlinlang.org)
- Repo note: other wrappers include Gradle 8.x and a top-level wrapper at codeSnippets/gradle/wrapper/gradle-wrapper.properties using Gradle 9.0.0; Gradle 9.x is outside the documented fully supported range — verify builds that use wrapper 9.0.0 or align wrappers if you need repo-wide consistency. (kotlinlang.org)
topics/openapi-spec-generation.md (1)
18-22: Align Kotlin version in OpenAPI doc and repo
- topics/openapi-spec-generation.md (lines 18–22) states "The OpenAPI Gradle extension requires Kotlin 2.2.20."
- I found no "2.2.10" references in this branch — confirm whether the PR actually bumps Kotlin to 2.2.10 and verify the minimum Kotlin required by the OpenAPI Gradle extension. Update the note and any sample build files to match (suggestion: "Requires Kotlin 2.2.x (tested with 2.2.20)" if 2.2.20 is only a tested value).
topics/releases.md (1)
36-44: LGTM! Release entry correctly formatted and documented.The 3.3.0 release entry is well-structured with proper date formatting, comprehensive feature highlights, and correct variable declarations. The content aligns with the confirmed release date of September 11, 2025.
ktor.tree (3)
296-296: LGTM! WebRTC client topic correctly placed.The WebRTC client documentation is appropriately placed under the "Setting up a client" section, which is the logical location for client configuration topics.
387-387: LGTM! OpenAPI spec generation correctly categorized.The OpenAPI specification generation topic is properly placed in the "Integrations" section, which is appropriate for tooling and build-time features.
393-393: LGTM! What's new document correctly positioned.The 3.3.0 "What's new" document is appropriately placed in the "Releases" section and positioned before the 3.2.0 entry, maintaining chronological order.
topics/server-auto-reload.topic (2)
43-94: LGTM! Comprehensive documentation of auto-reload regression.The limitations section clearly documents the 3.2.0 regression with auto-reload functionality. The table format effectively communicates the version differences, and the code examples clearly distinguish between supported and unsupported patterns. This is important information for developers upgrading to 3.3.0.
111-111: Improve accessibility with proper code formatting.The system property should be consistently formatted as code throughout the document.
topics/server-static-content.md (2)
181-196: LGTM! Clear documentation of the new fallback feature.The custom fallback section provides comprehensive coverage of the new functionality with clear examples showing various fallback scenarios. The documentation effectively explains the difference between
fallback()anddefault(), and the code examples demonstrate practical use cases.
34-34: Verify snippet include-lines after fallback insertionExecuted the provided script — codeSnippets/snippets/static-files/src/main/kotlin/com/example/Application.kt is present; the fallback block is at lines 25–32 and all include-lines in topics/server-static-content.md that reference this snippet map to existing lines. Other include-lines referencing snippets/static-resources and snippets/static-zip were not inspected.
topics/client-webrtc.md (2)
1-234: LGTM! Comprehensive WebRTC client documentation.This is excellent documentation for the experimental WebRTC client feature. The document covers all essential aspects:
- Clear platform support (JS/Wasm, Android)
- Proper dependency instructions
- Comprehensive API coverage (peer connections, SDP, ICE, data channels, media tracks)
- Clear code examples with platform-specific configurations
- Appropriate limitations section noting experimental status
The documentation structure is logical and the examples are practical and well-explained.
47-47: Fix link fragment reference.The ICE anchor reference
#iceshould point to a valid section. The target section exists at line 108 with id "ice", so this reference is correct.topics/whats-new-330.md (2)
1-207: LGTM! Comprehensive 3.3.0 release documentation.Excellent documentation of the 3.3.0 release features. The document effectively covers:
- Server improvements (custom fallback, auto-reload limitations, h2c support)
- Client enhancements (SSE buffering, WebRTC, OkHttp upgrade)
- Gradle plugin features (OpenAPI generation)
- Infrastructure updates (Jetty upgrade)
The structure is logical, code examples are clear, and cross-references to other documentation topics are properly implemented.
10-13: Link fragments are correctly referenced.The static analysis tool flagged these fragment links, but they correctly reference sections within the same document (custom-fallback, openapi-spec-gen, http2-h2c-support, webrtc-client). These are valid internal document anchors.
Co-authored-by: Mariia Skripchenko <[email protected]>
Co-authored-by: Vik Nikolova <[email protected]>
KTOR-8849 Static resources with caching headers and ETag
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
🧹 Nitpick comments (13)
topics/server-static-content.md (7)
58-61: Hyphenate “up‑to‑date”.Use “up‑to‑date” when used adjectivally.
- up to date without requiring a server restart. + up-to-date without requiring a server restart.
77-78: Tighten wording.Minor clarity tweak.
-In this case, Ktor recursively serves up any file from the `static` package as long as a URL path and a path-to-resource -match. +In this case, Ktor recursively serves any file from the `static` package as long as the URL path matches a resource path.
136-138: Minor phrasing improvement.Optional style tweak.
-By default, Ktor tries to guess the value of the `Content-Type` header from the file extension. You can use +By default, Ktor infers the `Content-Type` header from the file extension. You can use the `contentType()` function to set the `Content-Type` header explicitly.
154-176: Use correct HTTP header casing and wording.Header name is “Last-Modified” (with hyphen). Also small grammar polish.
-When the [`ConditionalHeaders`](server-conditional-headers.md) plugin is installed, Ktor can serve static resources with -`ETag` and `LastModified` headers and process conditional headers to avoid sending the body of content if it hasn't changed +When the [`ConditionalHeaders`](server-conditional-headers.md) plugin is installed, Ktor can serve static resources with +`ETag` and `Last-Modified` headers and process conditional requests to avoid sending the body if the content hasn't changed since the last request:
191-200: Title grammar: “File extension fallbacks”.Plural noun compound reads better without the extra “s” on “extensions”.
-### File extensions fallbacks {id="extensions"} +### File extension fallbacks {id="extensions"}
220-226: Pluralize and simplify phrasing.Minor style fix.
-The `modify()` function allows you to apply custom modification to a resulting response. +The `modify()` function allows you to apply custom modifications to the response.
107-107: Include‑lines are brittle — switch to a contiguous range or named snippetReplace include-lines="17,19,23" (topics/server-static-content.md:107) with include-lines="17-23" or extract a named snippet; lines 17–23 exist in codeSnippets/snippets/static-files/src/main/kotlin/com/example/Application.kt.
topics/whats-new-330.md (6)
26-27: Consistent US English.Use “behavior” for consistency with the rest of the doc set.
-To define custom fallback behaviour, use the `fallback()` function within `staticFiles()`, `staticResources()`, `staticZip()`, or +To define custom fallback behavior, use the `fallback()` function within `staticFiles()`, `staticResources()`, `staticZip()`, or
34-36: Header naming and casing.Use standard HTTP header names and casing.
-### LastModified and Etag headers for static content +### Last-Modified and ETag headers for static content
36-39: Header name fix in body text.Match the corrected header casing.
-Ktor 3.3.0 introduces support for `ETag` and `LastModified` headers for static resources. When the [`ConditionalHeaders`](server-conditional-headers.md) +Ktor 3.3.0 introduces support for `ETag` and `Last-Modified` headers for static resources. When the [`ConditionalHeaders`](server-conditional-headers.md)
97-117: Fix broken SSE doc links (.topic → .md).The links use “client-server-sent-events.topic”; other pages use .md. This likely breaks the link.
-You can configure the buffer globally when installing the [SSE plugin](client-server-sent-events.topic): +You can configure the buffer globally when installing the [SSE plugin](client-server-sent-events.md): @@ -For more information, see [Response buffering](client-server-sent-events.topic#response-buffering). +For more information, see [Response buffering](client-server-sent-events.md#response-buffering).
148-149: Typo: “chanel” → “channel”.Fix spelling in the example output text.
- is Open -> println("Another peer opened a chanel: ${event.channel}") + is Open -> println("Another peer opened a channel: ${event.channel}")
184-189: Fix markdown list style and indentation (MD004/MD007).Use asterisks (as elsewhere) and 2‑space indents for sub‑items.
-It provides the following capabilities: -- Analyze Ktor route definitions and merge nested routes, local extensions, and resource paths. -- Parse preceding KDoc annotations to supply OpenAPI metadata, including: - - Path, query, header, cookie, and body parameters - - Response codes and types - - Security, descriptions, deprecations, and external documentation links -- Infer request and response bodies from `call.receive()` and `call.respond()`. +It provides the following capabilities: +* Analyze Ktor route definitions and merge nested routes, local extensions, and resource paths. +* Parse preceding KDoc annotations to supply OpenAPI metadata, including: + * Path, query, header, cookie, and body parameters + * Response codes and types + * Security, descriptions, deprecations, and external documentation links +* Infer request and response bodies from `call.receive()` and `call.respond()`.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (3)
codeSnippets/snippets/static-files/src/main/kotlin/com/example/Application.kt(3 hunks)topics/server-static-content.md(9 hunks)topics/whats-new-330.md(1 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
- codeSnippets/snippets/static-files/src/main/kotlin/com/example/Application.kt
🧰 Additional context used
🪛 markdownlint-cli2 (0.17.2)
topics/server-static-content.md
22-22: Link fragments should be valid
(MD051, link-fragments)
22-22: Link fragments should be valid
(MD051, link-fragments)
23-23: Link fragments should be valid
(MD051, link-fragments)
topics/whats-new-330.md
10-10: Link fragments should be valid
(MD051, link-fragments)
11-11: Link fragments should be valid
(MD051, link-fragments)
12-12: Link fragments should be valid
(MD051, link-fragments)
13-13: Link fragments should be valid
(MD051, link-fragments)
184-184: Unordered list style
Expected: asterisk; Actual: dash
(MD004, ul-style)
185-185: Unordered list style
Expected: asterisk; Actual: dash
(MD004, ul-style)
186-186: Unordered list style
Expected: asterisk; Actual: dash
(MD004, ul-style)
186-186: Unordered list indentation
Expected: 2; Actual: 4
(MD007, ul-indent)
187-187: Unordered list style
Expected: asterisk; Actual: dash
(MD004, ul-style)
187-187: Unordered list indentation
Expected: 2; Actual: 4
(MD007, ul-indent)
188-188: Unordered list style
Expected: asterisk; Actual: dash
(MD004, ul-style)
188-188: Unordered list indentation
Expected: 2; Actual: 4
(MD007, ul-indent)
189-189: Unordered list style
Expected: asterisk; Actual: dash
(MD004, ul-style)
🔇 Additional comments (9)
topics/whats-new-330.md (4)
84-87: h2c guidance looks good.Clear scope and link to the detailed section.
10-14: No changes needed — link fragments validated.
All listed ids exist in topics/whats-new-330.md: custom-fallback (line 17), http2-h2c-support (79), webrtc-client (119), openapi-spec-gen (177).
5-5: Confirm release date and link target.
- Verified: topics/releases.md contains the anchor
## Release details {id="release-details"}(line 30).- Not verified: no git tag matching v3.3.0 was found in the repository; confirm that "Released: September 11, 2025" in topics/whats-new-330.md (line 5) matches the 3.3.0 tag date or update the date/link to the correct tag.
162-167: Version bump verification.OkHttp 5.1.0 claim — please confirm this version is what the Gradle catalog or dependency definitions now use.
topics/server-static-content.md (5)
22-23: No action required — anchors exist and are unique. IDs #folders, #zipped, and #resources are defined in topics/server-static-content.md at lines 25, 43, and 65; MD051 is a false positive.
202-217: Approve: custom fallback guidance verifiedSnippet codeSnippets/snippets/static-files/src/main/kotlin/com/example/Application.kt (lines 27–34) contains fallback { … } with call.respondRedirect, call.respond(HttpStatusCode.Gone), and call.respondFile — docs match the example.
34-34: Include-lines sanity check — verifiedThe referenced file codeSnippets/snippets/static-files/src/main/kotlin/com/example/Application.kt contains lines 15-16 and 57; the include-range "15-16,57" is intact.
181-190: Include-lines sanity check — resolved.
Application.kt contains the referenced lines: 24 staticFiles("/files", File("textFiles")), 26 exclude { file -> file.path.contains("excluded") }, 47 } — snippet is valid.
123-131: Include-lines (17-18,23) verified — still show default("index.html") usage.
Confirmed: codeSnippets/snippets/static-files/src/main/kotlin/com/example/Application.kt line 18 contains default("index.html"); lines 17 and 23 are the block's opening and closing.
| //module("snippets", "jetty-war") | ||
| //module("snippets", "tomcat-war") |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why are these commented?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Because the examples use Getty which has no support for Jetty 12, so they're not compatible with this version of Ktor.
codeSnippets/snippets/tutorial-server-websockets/build.gradle.kts
Outdated
Show resolved
Hide resolved
| wrapped into anonymous inner classes during casting. This breaks auto-reload, because the function name is no longer | ||
| retained as a stable reference. | ||
|
|
||
| This means that auto-reload in `development` mode only works with suspend function modules and configuration references: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Doesn't it also still work for explicit lambdas? Should we specify that here? cc\ @bjhham
Details:
Preview on staging:
What's new
OpenAPI specification generation
WebRTC client
Releases