Skip to content

Merge 3.2.0 release documentation #650

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

Merged
merged 27 commits into from
Jul 7, 2025
Merged

Merge 3.2.0 release documentation #650

merged 27 commits into from
Jul 7, 2025

Conversation

vnikolova
Copy link
Collaborator

@vnikolova vnikolova commented Jul 3, 2025

All changes included have been individually reviewed.

vnikolova and others added 25 commits June 6, 2025 18:25
#634)

* KTOR-8469 Add documentation about wrapWithContent and wrap deprecation

* implementing review comments

* implementing TWr review comments
#634)

* KTOR-8469 Add documentation about wrapWithContent and wrap deprecation

* implementing review comments

* implementing TWr review comments
* add HTMX integration to what's new doc

* add a new HTMX topic, code example, and experimental label
Co-authored-by:  Vik Nikolova <[email protected]>
…king requests and what's new (#644)

* update: unix domain sockets, explained

* update: start with the general request builder, with default request as a special case

* update: adding UDS to what's new 3.2.0

---------

Co-authored-by: Vik Nikolova <[email protected]>
* Add documentation for DI in whats-new-320.md

* Create a new topic for DI
Copy link

coderabbitai bot commented Jul 3, 2025

Walkthrough

This change introduces a new HTMX integration sample module to the codebase, including its Gradle configuration, source code, and documentation. It also expands documentation to cover experimental HTMX support, dependency injection, new features in Ktor 3.2.0, and improvements in dependency management, development mode, and Unix domain socket support. Minor code and documentation updates are made elsewhere for consistency.

Changes

Files/Groups Change Summary
codeSnippets/settings.gradle.kts Added inclusion of the new "htmx-integration" snippet module.
codeSnippets/snippets/htmx-integration/ (README.md, build.gradle.kts, Application.kt, Routing.kt, application.yaml, logback.xml) Introduced new HTMX integration sample project with configuration, source code, and documentation.
codeSnippets/snippets/json-kotlinx/src/test/kotlin/jsonkotlinx/ApplicationTest.kt Modified HTTP client variable usage in a test for improved client management.
ktor.tree Added new documentation TOC entries for server dependency injection, HTMX integration, and 3.2.0 release notes.
labels.list Added new primary "experimental" label with description and color.
topics/htmx-integration.md Added new documentation topic detailing experimental HTMX integration support in Ktor.
topics/server-dependency-injection.md Added comprehensive documentation for the new Ktor Dependency Injection plugin.
topics/whats-new-320.md Added new document summarizing features and changes in Ktor 3.2.0.
topics/server-dependencies.topic Reorganized and expanded server dependency documentation, added logging and version catalog sections, and improved dependency consistency guidance.
topics/client-default-request.md, topics/client-requests.md Updated client documentation to include Unix domain socket support and usage examples.
topics/client-dependencies.md Added section on using Ktor BOM for version consistency and included version catalog usage.
topics/client-responses.md Clarified documentation on response body handling and streaming for large responses.
topics/docker.md, topics/server-fatjar.md Reworded and clarified documentation on using the Ktor Gradle plugin with Kotlin Multiplatform projects.
topics/server-development-mode.topic Clarified and simplified instructions for enabling development mode in different environments.
topics/server-modules.md Added section on concurrent module loading and suspendable application modules.

Suggested reviewers

  • Stexxe
  • osipxd

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.

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Explain this complex logic.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai explain this code block.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and explain its main purpose.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@vnikolova vnikolova requested a review from Stexxe July 3, 2025 12:58
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 5

🧹 Nitpick comments (8)
topics/server-fatjar.md (1)

35-36: Consider adding "please" for politeness.

The documentation improvement is good, but consider adding "please" for a more polite tone: "please let us know by leaving a comment"

-If this workaround does not solve the problem for you, let us know by leaving a comment in [KTOR-8464](https://youtrack.jetbrains.com/issue/KTOR-8464).
+If this workaround does not solve the problem for you, please let us know by leaving a comment in [KTOR-8464](https://youtrack.jetbrains.com/issue/KTOR-8464).
topics/docker.md (1)

55-55: Consider adding "please" for politeness.

Similar to the server-fatjar.md file, consider adding "please" for a more polite tone.

-If this workaround does not solve the problem for you, let us know by leaving a comment in [KTOR-8464](https://youtrack.jetbrains.com/issue/KTOR-8464).
+If this workaround does not solve the problem for you, please let us know by leaving a comment in [KTOR-8464](https://youtrack.jetbrains.com/issue/KTOR-8464).
topics/client-default-request.md (2)

37-37: Fix the link fragment and improve wording.

The wording improvement is good, but there's an invalid link fragment that needs to be fixed.

-Or call the `defaultRequest` function and [configure](#configure) required request parameters:
+Or call the `defaultRequest` function and [configure](#configure) the required request parameters:

Note: Verify that the #configure fragment exists in the document structure.


112-112: Consider more expressive language.

The static analysis suggests using more expressive language instead of "To do that".

-To do that, pass a `unixSocket` call with the path to the socket to the `defaultRequest` function,
+To configure this, pass a `unixSocket` call with the path to the socket to the `defaultRequest` function,
topics/client-requests.md (1)

19-20: Add a trailing period for list-style consistency

All other bullet points in the list terminate with a period, but this one does not.
Keeping punctuation consistent avoids accidental diff churn later.

-* Specify a Unix domain socket
+* Specify a Unix domain socket.
codeSnippets/settings.gradle.kts (1)

165-166: Keep module list alphabetical for easier maintenance

The new htmx-integration entry is appended to the very end of a lexicographically-sorted block.
Placing it next to the other “h***” modules (html, html-templates, …) keeps the file easier to scan.

-// …around existing “html” section
-module("snippets", "html-templates")
+module("snippets", "html-templates")
+module("snippets", "htmx-integration")
 
-// …current tail of the list
-module("snippets", "tutorial-server-docker-compose")
-module("snippets", "htmx-integration")
+module("snippets", "tutorial-server-docker-compose")
codeSnippets/snippets/htmx-integration/build.gradle.kts (1)

21-33: Clean build script with minor dependency optimization needed.

The build configuration is well-structured with appropriate HTMX integration dependencies. However, there's redundancy in the server core dependencies.

Consider removing the redundant dependency:

 dependencies {
     implementation("io.ktor:ktor-server-core-jvm")
     implementation("io.ktor:ktor-server-netty")
     implementation("ch.qos.logback:logback-classic:$logback_version")
-    implementation("io.ktor:ktor-server-core")
     implementation("io.ktor:ktor-server-htmx")
     implementation("io.ktor:ktor-htmx")
     implementation("io.ktor:ktor-htmx-html")
     implementation("io.ktor:ktor-server-html-builder")
     implementation("io.ktor:ktor-server-config-yaml")
     testImplementation("io.ktor:ktor-server-test-host")
     testImplementation("org.jetbrains.kotlin:kotlin-test-junit:$kotlin_version")
 }

The ktor-server-core-jvm already includes the core functionality, making the additional ktor-server-core dependency redundant.

topics/whats-new-320.md (1)

45-47: Duplicate “Ktor Server” heading

A second top-level ## Ktor Server appears a few lines after the first one, fragmenting the section hierarchy.

-## Ktor Server
-
-### Configuration file deserialization
+### Configuration file deserialization

Remove the duplicate heading to keep a single, clear server section.

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 4bd05d7 and aded430.

📒 Files selected for processing (22)
  • codeSnippets/settings.gradle.kts (1 hunks)
  • codeSnippets/snippets/htmx-integration/README.md (1 hunks)
  • codeSnippets/snippets/htmx-integration/build.gradle.kts (1 hunks)
  • codeSnippets/snippets/htmx-integration/src/main/kotlin/Application.kt (1 hunks)
  • codeSnippets/snippets/htmx-integration/src/main/kotlin/Routing.kt (1 hunks)
  • codeSnippets/snippets/htmx-integration/src/main/resources/application.yaml (1 hunks)
  • codeSnippets/snippets/htmx-integration/src/main/resources/logback.xml (1 hunks)
  • codeSnippets/snippets/json-kotlinx/src/test/kotlin/jsonkotlinx/ApplicationTest.kt (1 hunks)
  • ktor.tree (2 hunks)
  • labels.list (1 hunks)
  • topics/client-default-request.md (3 hunks)
  • topics/client-dependencies.md (1 hunks)
  • topics/client-requests.md (3 hunks)
  • topics/client-responses.md (1 hunks)
  • topics/docker.md (1 hunks)
  • topics/htmx-integration.md (1 hunks)
  • topics/server-dependencies.topic (3 hunks)
  • topics/server-dependency-injection.md (1 hunks)
  • topics/server-development-mode.topic (1 hunks)
  • topics/server-fatjar.md (1 hunks)
  • topics/server-modules.md (1 hunks)
  • topics/whats-new-320.md (1 hunks)
🧰 Additional context used
🧬 Code Graph Analysis (1)
codeSnippets/snippets/htmx-integration/src/main/kotlin/Application.kt (1)
codeSnippets/snippets/htmx-integration/src/main/kotlin/Routing.kt (1)
  • configureHtmx (21-83)
🪛 markdownlint-cli2 (0.17.2)
topics/client-dependencies.md

136-136: Unordered list style
Expected: dash; Actual: asterisk

(MD004, ul-style)


137-137: Unordered list style
Expected: dash; Actual: asterisk

(MD004, ul-style)

topics/client-default-request.md

37-37: Link fragments should be valid

(MD051, link-fragments)

🪛 LanguageTool
topics/client-default-request.md

[style] ~112-~112: Consider a more expressive alternative.
Context: ...lt request with a socket parameter. To do that, pass a unixSocket call with the...

(DO_ACHIEVE)

topics/server-fatjar.md

[style] ~36-~36: Consider using polite language here.
Context: ...und does not solve the problem for you, let us know by leaving a comment in [KTOR-8464](htt...

(INSERT_PLEASE)

topics/docker.md

[style] ~55-~55: Consider using polite language here.
Context: ...und does not solve the problem for you, let us know by leaving a comment in [KTOR-8464](htt...

(INSERT_PLEASE)

topics/server-modules.md

[style] ~86-~86: Consider a more expressive alternative.
Context: ...ously when starting the application. To do that, add the suspend keyword: ```ko...

(DO_ACHIEVE)

topics/whats-new-320.md

[uncategorized] ~89-~89: Did you just mean “,” or “)”?
Context: ...String, val password: String? = null, ) fun Application.module() { val datab...

(COMMA_PERIOD)


[style] ~282-~282: ‘Prior to’ might be wordy. Consider a shorter alternative.
Context: ...ilder.skipSavingBody()are deprecated Prior to Ktor 3.2.0, theSaveBodyPlugin` was in...

(EN_WORDINESS_PREMIUM_PRIOR_TO)


[uncategorized] ~284-~284: Possible missing article found.
Context: ...ccessed multiple times. To avoid saving response body, the plugin had to be disabled exp...

(AI_HYDRA_LEO_MISSING_THE)


[formatting] ~318-~318: If the ‘because’ clause is essential to the meaning, do not use a comma before the clause.
Context: ...rent plugins accessing the response body, because the first plugin to read it consumes th...

(COMMA_BEFORE_BECAUSE)

🔇 Additional comments (28)
codeSnippets/snippets/json-kotlinx/src/test/kotlin/jsonkotlinx/ApplicationTest.kt (1)

36-36: LGTM! Correctly uses the new mutable client property.

This change effectively leverages the new ApplicationTestBuilder.client mutable property introduced in Ktor 3.2.0, allowing for cleaner test client configuration and reuse.

labels.list (1)

12-14: LGTM! New experimental label supports HTMX features.

The addition of a primary experimental label properly supports the new experimental HTMX integration features being introduced. The distinction between primary and secondary experimental labels is clear and serves different documentation purposes.

topics/server-fatjar.md (1)

32-32: LGTM! Improved wording for better clarity.

The change from "To use this feature with KMP, you'll need to move the Ktor plugin to a separate project:" to "To be able to use them together:" is clearer and less directive.

topics/docker.md (1)

51-51: LGTM! Consistent documentation improvement.

The wording change maintains consistency with the same improvement made in topics/server-fatjar.md, providing clearer guidance for users.

topics/client-default-request.md (2)

25-26: LGTM! Clear installation instructions.

The wording improvement makes the installation instructions more straightforward and professional.


103-131: Excellent addition of Unix domain socket support documentation.

The new section effectively documents the Unix domain socket feature with clear examples and proper CIO engine restrictions. The content is well-structured and provides both individual request and default configuration examples.

topics/client-requests.md (1)

125-131: ✅ Verified server-configuration-code.topic#cio-code link

  • The file topics/server-configuration-code.topic exists.
  • It defines <chapter title="CIO" id="cio-code"> at line 144.

No changes are needed.

topics/client-responses.md (1)

79-83: LGTM – clear explanation of body caching vs. streaming

The added paragraph succinctly warns about memory usage and cross-links to the streaming section. No issues spotted.

codeSnippets/snippets/htmx-integration/README.md (1)

5-13: Looks good – run command and context are clear

The README is concise and provides the exact Gradle invocation; no corrections needed.

codeSnippets/snippets/htmx-integration/src/main/resources/application.yaml (1)

1-6: Configuration file is valid and minimal

Indentation and keys match Ktor’s expected schema (ktor.application.modules, ktor.deployment.port).
Nothing to change.

codeSnippets/snippets/htmx-integration/src/main/kotlin/Application.kt (1)

1-11: LGTM! Clean and standard Ktor application entry point.

The implementation follows Ktor best practices:

  • Standard main function delegating to EngineMain
  • Proper module extension function structure
  • Clean separation of concerns with configureHtmx() defined in the routing file
topics/client-dependencies.md (1)

108-150: Excellent addition of version consistency guidance.

The new "Ensure Ktor version consistency" section provides comprehensive examples for all major build systems (Gradle Kotlin/Groovy DSL and Maven). The BOM approach simplifies dependency management and reduces version conflicts.

codeSnippets/snippets/htmx-integration/src/main/resources/logback.xml (1)

1-12: Standard and appropriate Logback configuration.

The configuration follows best practices:

  • Comprehensive console appender with detailed pattern
  • Appropriate INFO level for root and framework loggers
  • Clean structure suitable for a sample application
ktor.tree (3)

56-56: Appropriate TOC addition for dependency injection documentation.

The new server-dependency-injection.md entry is well-placed under the server configuration section, aligning with the logical organization of server setup topics.


380-380: Well-positioned HTMX integration documentation.

The htmx-integration.md entry is appropriately placed in the "Integrations" section, making it discoverable alongside other integration topics.


386-386: Logical placement for release notes.

The whats-new-320.md entry is properly positioned in the "Releases" section, following the established pattern for version-specific documentation.

topics/server-development-mode.topic (2)

64-79: Well-structured documentation improvement.

The restructuring of the system property documentation into multiple paragraphs significantly improves readability and clarity. The separation of IntelliJ IDEA and Gradle instructions makes the content easier to follow.


83-99: Clear and practical Gradle configuration options.

The two approaches for enabling development mode in Gradle are well-documented and provide flexibility for different use cases. The distinction between persistent configuration and single-run flag is valuable.

topics/server-modules.md (2)

83-102: Excellent addition of concurrent module loading documentation.

The new section clearly explains the purpose and benefits of suspendable application modules. The example code demonstrates proper usage with the suspend keyword.


105-121: Important clarification about threading model.

The dependency injection examples are well-crafted and the note about single-threaded execution despite the "concurrent" name is crucial for preventing misconceptions about thread safety.

topics/htmx-integration.md (3)

1-33: Comprehensive introduction to HTMX integration.

The documentation structure is excellent, with clear module overview and proper experimental labeling. The three-module approach is well-explained and the experimental nature is appropriately highlighted.


94-116: Excellent HTML DSL extension example.

The code example clearly demonstrates the integration between Kotlin HTML DSL and HTMX attributes. The generated HTML output helps readers understand the transformation.


117-154: Comprehensive server-side routing documentation.

The routing examples cover various HTMX scenarios effectively, showing how to handle different request types and target-specific responses. The progression from basic to advanced usage is well-structured.

codeSnippets/snippets/htmx-integration/src/main/kotlin/Routing.kt (2)

21-53: Excellent HTMX demonstration with practical examples.

The configureHtmx() function provides a comprehensive demonstration of HTMX integration. The HTML structure with HTMX attributes is well-organized and shows real-world usage patterns.


55-83: Well-structured routing examples for different HTMX scenarios.

The routing logic effectively demonstrates how to handle regular requests, HTMX requests, and target-specific HTMX requests. The progression from general to specific handling is logical and educational.

topics/server-dependencies.topic (3)

195-200: Good placement of logging dependency information.

Moving the logging dependency section earlier in the document improves the logical flow and makes this essential information more discoverable.


209-283: Excellent addition of version catalog documentation.

The new version catalog section provides valuable information about centralized dependency management. The benefits are clearly outlined and the examples are practical and easy to follow.


209-209: Smart use of variable for modularity.

The target_module variable enables content reuse across server and client documentation, promoting consistency and maintainability.

call.respondHtml {
head {
// Include HTMX library
script(src = "https://unpkg.com/[email protected]") {}
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Verification agent

🧩 Analysis chain

Consider pinning HTMX version for consistency.

The HTMX library is loaded from a CDN with a specific version (1.9.10). Consider verifying this is the intended version for the sample.


🌐 Web query:

What is the latest stable version of HTMX?

💡 Result:

The latest stable version of HTMX is 2.0.4, released on December 13, 2024. (github.com) This release introduced several improvements and bug fixes. For a comprehensive list of changes, you can refer to the HTMX changelog.

Citations:


Update HTMX version to the latest stable release

The snippet currently pins HTMX at 1.9.10, but the latest stable version is 2.0.4 (released December 13, 2024). Updating to 2.0.4 ensures you pick up the newest features and bug fixes.

• File: codeSnippets/snippets/htmx-integration/src/main/kotlin/Routing.kt
Line: 28

Suggested change:

-    script(src = "https://unpkg.com/[email protected]") {}
+    script(src = "https://unpkg.com/[email protected]") {}
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
script(src = "https://unpkg.com/htmx.org@1.9.10") {}
script(src = "https://unpkg.com/htmx.org@2.0.4") {}
🤖 Prompt for AI Agents
In codeSnippets/snippets/htmx-integration/src/main/kotlin/Routing.kt at line 28,
update the HTMX script source URL from version 1.9.10 to the latest stable
version 2.0.4 by changing the version number in the src attribute to ensure the
application uses the newest features and bug fixes.

@vnikolova vnikolova requested a review from e5l July 4, 2025 13:42
Copy link

@coderabbitai coderabbitai bot left a 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

♻️ Duplicate comments (1)
topics/whats-new-320.md (1)

90-92: Missing type parameter in property() call still breaks compilation

property is generic; omitting the type argument produces a compile-time error.

-  val databaseConfig: DatabaseConfig = property("database")
+  val databaseConfig: DatabaseConfig = property<DatabaseConfig>("database")
🧹 Nitpick comments (1)
topics/whats-new-320.md (1)

360-363: Unified bullet marker style (MD004)

The rest of the document uses *; switch from - to maintain consistency and satisfy markdown-lint.

-- HTMX-aware routing for handling HTMX requests based on headers.
-- HTML DSL extensions to generate HTMX attributes in Kotlin.
-- HTMX header constants and values to eliminate string literals.
+* HTMX-aware routing for handling HTMX requests based on headers.
+* HTML DSL extensions to generate HTMX attributes in Kotlin.
+* HTMX header constants and values to eliminate string literals.
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between aded430 and 68f0365.

📒 Files selected for processing (1)
  • topics/whats-new-320.md (1 hunks)
🧰 Additional context used
🪛 LanguageTool
topics/whats-new-320.md

[uncategorized] ~87-~87: Did you just mean “,” or “)”?
Context: ...String, val password: String? = null, ) fun Application.module() { val datab...

(COMMA_PERIOD)


[style] ~278-~278: ‘Prior to’ might be wordy. Consider a shorter alternative.
Context: ...ilder.skipSavingBody()are deprecated Prior to Ktor 3.2.0, theSaveBodyPlugin` was in...

(EN_WORDINESS_PREMIUM_PRIOR_TO)


[uncategorized] ~280-~280: Possible missing article found.
Context: ...ccessed multiple times. To avoid saving response body, the plugin had to be disabled exp...

(AI_HYDRA_LEO_MISSING_THE)


[formatting] ~314-~314: If the ‘because’ clause is essential to the meaning, do not use a comma before the clause.
Context: ...rent plugins accessing the response body, because the first plugin to read it consumes th...

(COMMA_BEFORE_BECAUSE)

🪛 markdownlint-cli2 (0.17.2)
topics/whats-new-320.md

360-360: Unordered list style
Expected: asterisk; Actual: dash

(MD004, ul-style)


361-361: Unordered list style
Expected: asterisk; Actual: dash

(MD004, ul-style)


362-362: Unordered list style
Expected: asterisk; Actual: dash

(MD004, ul-style)

Comment on lines +214 to +215
val kubernetesConnection = dependencies.resolve() // suspends until provided
}
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

dependencies.resolve() must specify the target type

resolve() is declared with a reified type parameter; calling it without one won’t compile.

-  val kubernetesConnection = dependencies.resolve() // suspends until provided
+  val kubernetesConnection: KubernetesConnection =
+      dependencies.resolve<KubernetesConnection>() // suspends until provided
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
val kubernetesConnection = dependencies.resolve() // suspends until provided
}
val kubernetesConnection: KubernetesConnection =
dependencies.resolve<KubernetesConnection>() // suspends until provided
}
🤖 Prompt for AI Agents
In topics/whats-new-320.md around lines 214 to 215, the call to
dependencies.resolve() is missing the required reified type parameter, causing a
compilation error. Fix this by specifying the target type explicitly in the
resolve() call, for example dependencies.resolve<DesiredType>(), to ensure the
code compiles correctly.

Comment on lines +268 to +269
val connection: Connection = application.property("connection")
```
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Type parameter missing in application.property access

application.property() is also generic. Add the type argument to obtain the correct object.

-val connection: Connection = application.property("connection")
+val connection: Connection = application.property<Connection>("connection")
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
val connection: Connection = application.property("connection")
```
val connection: Connection = application.property<Connection>("connection")
🤖 Prompt for AI Agents
In topics/whats-new-320.md around lines 268 to 269, the call to
application.property() is missing the required generic type parameter. Add the
appropriate type argument inside the angle brackets to application.property to
ensure it returns the correct typed object, for example
application.property<Type>(), replacing Type with the expected type.

@e5l e5l requested a review from bjhham July 7, 2025 06:47
Copy link

@coderabbitai coderabbitai bot left a 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

♻️ Duplicate comments (3)
topics/whats-new-320.md (3)

92-94: property() call missing generic type parameter

The sample won’t compile without specifying the target type.

-  val databaseConfig: DatabaseConfig = property("database")
+  val databaseConfig: DatabaseConfig = property<DatabaseConfig>("database")

215-217: Add type argument to dependencies.resolve()

resolve() is reified; omitting the type parameter causes a compilation error.

-  val kubernetesConnection = dependencies.resolve() // suspends until provided
+  val kubernetesConnection: KubernetesConnection =
+      dependencies.resolve<KubernetesConnection>() // suspends until provided

269-271: Generic type needed for application.property()

Include the type argument so the example compiles:

-val connection: Connection = application.property("connection")
+val connection: Connection = application.property<Connection>("connection")
🧹 Nitpick comments (3)
topics/server-modules.md (2)

110-112: Use accurate code-fence language for Gradle snippets

none disables syntax highlighting and is inconsistent with other Gradle-property examples.
Switch to properties for clearer rendering.

-```none
+```properties
ktor.application.startup = concurrent

94-97: Avoid ambiguity about “independent” vs single-threaded loading

Stating that modules “launch independently” can imply multithreading, but the note on lines 129-132 clarifies the process remains single-threaded.
Consider appending “(still single-threaded)” to this sentence to prevent confusion.

topics/whats-new-320.md (1)

281-283: Simplify wording

“Prior to” is overly formal—“Before Ktor 3.2.0” is shorter and clearer.

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 68f0365 and 32827a6.

📒 Files selected for processing (2)
  • topics/server-modules.md (1 hunks)
  • topics/whats-new-320.md (1 hunks)
🧰 Additional context used
🪛 LanguageTool
topics/whats-new-320.md

[uncategorized] ~89-~89: Did you just mean “,” or “)”?
Context: ...String, val password: String? = null, ) fun Application.module() { val datab...

(COMMA_PERIOD)


[style] ~280-~280: ‘Prior to’ might be wordy. Consider a shorter alternative.
Context: ...ilder.skipSavingBody()are deprecated Prior to Ktor 3.2.0, theSaveBodyPlugin` was in...

(EN_WORDINESS_PREMIUM_PRIOR_TO)


[uncategorized] ~282-~282: Possible missing article found.
Context: ...ccessed multiple times. To avoid saving response body, the plugin had to be disabled exp...

(AI_HYDRA_LEO_MISSING_THE)


[formatting] ~316-~316: If the ‘because’ clause is essential to the meaning, do not use a comma before the clause.
Context: ...rent plugins accessing the response body, because the first plugin to read it consumes th...

(COMMA_BEFORE_BECAUSE)

topics/server-modules.md

[style] ~86-~86: Consider a more expressive alternative.
Context: ...ously when starting the application. To do that, add the suspend keyword: ```ko...

(DO_ACHIEVE)

🪛 markdownlint-cli2 (0.17.2)
topics/whats-new-320.md

362-362: Unordered list style
Expected: asterisk; Actual: dash

(MD004, ul-style)


363-363: Unordered list style
Expected: asterisk; Actual: dash

(MD004, ul-style)


364-364: Unordered list style
Expected: asterisk; Actual: dash

(MD004, ul-style)

@vnikolova vnikolova merged commit 0124a0d into main Jul 7, 2025
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

8 participants