Skip to content

Add ability to emit plain data messages in SSE #2578

Merged
tipsy merged 1 commit into
javalin:masterfrom
1cg:master
Apr 15, 2026
Merged

Add ability to emit plain data messages in SSE #2578
tipsy merged 1 commit into
javalin:masterfrom
1cg:master

Conversation

@1cg

@1cg 1cg commented Apr 7, 2026

Copy link
Copy Markdown
Contributor

This PR makes it possible to emit plain data SSE messages:

  client.sendData("Hello World");

See https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events#examples for more info on this.

This is useful for libraries like htmx where raw data messages are used to transmit HTML to the client.

@tipsy

tipsy commented Apr 15, 2026

Copy link
Copy Markdown
Member

augment review

@augmentcode

augmentcode Bot commented Apr 15, 2026

Copy link
Copy Markdown
🤖 Augment PR Summary

Summary: Adds support for emitting “plain data” Server-Sent Events (SSE) messages (no explicit event: field), which browsers surface as the default message event.

Changes:

  • Allow Emitter.emit to accept a nullable event name and omit the event: line when absent
  • Add SseClient.sendData(...) to send data-only SSE messages (optionally with an id)
  • Refactor shared emission logic into a private helper in SseClient
  • Add test coverage for plain data (string/json/input stream, with/without id, multiline)

🤖 Was this summary useful? React with 👍 or 👎

@augmentcode augmentcode Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Review completed. No suggestions at this time.

Comment augment review to trigger a new review at any time.

@codecov

codecov Bot commented Apr 15, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 86.30%. Comparing base (152f7b3) to head (71805ca).
⚠️ Report is 4 commits behind head on master.

Additional details and impacted files
@@             Coverage Diff              @@
##             master    #2578      +/-   ##
============================================
+ Coverage     86.27%   86.30%   +0.02%     
- Complexity     1539     1542       +3     
============================================
  Files           157      157              
  Lines          4437     4439       +2     
  Branches        539      540       +1     
============================================
+ Hits           3828     3831       +3     
  Misses          374      374              
+ Partials        235      234       -1     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@tipsy

tipsy commented Apr 15, 2026

Copy link
Copy Markdown
Member

Thanks @1cg !

@tipsy tipsy merged commit e0f5458 into javalin:master Apr 15, 2026
15 of 16 checks passed
mergify Bot added a commit to robfrank/linklift that referenced this pull request May 3, 2026
Bumps `javalin.version` from 7.1.0 to 7.2.0.
Updates `io.javalin:javalin-bundle` from 7.1.0 to 7.2.0
Release notes

*Sourced from [io.javalin:javalin-bundle's releases](https://github.com/javalin/javalin/releases).*

> 7.2.0
> -----
>
> What's Changed
> --------------
>
> * [performance] Replace Stream API with List and reduce per-request allocations by [`@​tipsy`](https://github.com/tipsy) in [javalin/javalin#2567](https://redirect.github.com/javalin/javalin/pull/2567)
> * feat: introduce `JavalinJackson3` as an optional `JsonMapper` implementation for Jackson 3 by [`@​yvasyliev`](https://github.com/yvasyliev) in [javalin/javalin#2548](https://redirect.github.com/javalin/javalin/pull/2548)
> * [workflow]: Bump codecov/codecov-action from 5.5.2 to 5.5.3 in the dependencies group by [`@​dependabot`](https://github.com/dependabot)[bot] in [javalin/javalin#2569](https://redirect.github.com/javalin/javalin/pull/2569)
> * Add path role inheritance by [`@​AoElite`](https://github.com/AoElite) in [javalin/javalin#2553](https://redirect.github.com/javalin/javalin/pull/2553)
> * [deps]: Bump the dependencies group across 1 directory with 23 updates by [`@​dependabot`](https://github.com/dependabot)[bot] in [javalin/javalin#2575](https://redirect.github.com/javalin/javalin/pull/2575)
> * [workflow]: Bump codecov/codecov-action from 5.5.3 to 6.0.0 in the dependencies group across 1 directory by [`@​dependabot`](https://github.com/dependabot)[bot] in [javalin/javalin#2570](https://redirect.github.com/javalin/javalin/pull/2570)
> * [workflow]: Bump actions/github-script from 8 to 9 in the dependencies group by [`@​dependabot`](https://github.com/dependabot)[bot] in [javalin/javalin#2581](https://redirect.github.com/javalin/javalin/pull/2581)
> * [cleanup] Remove JavalinTest.class by [`@​vorburger`](https://github.com/vorburger) in [javalin/javalin#2584](https://redirect.github.com/javalin/javalin/pull/2584)
> * [deps] Bump Jetty from 12.1.7 to 12.1.8 by [`@​vorburger`](https://github.com/vorburger) in [javalin/javalin#2585](https://redirect.github.com/javalin/javalin/pull/2585)
> * Add ability to emit plain data messages in SSE by [`@​1cg`](https://github.com/1cg) in [javalin/javalin#2578](https://redirect.github.com/javalin/javalin/pull/2578)
> * fix: sanitize newlines in SSE event and id fields by [`@​eddieran`](https://github.com/eddieran) in [javalin/javalin#2580](https://redirect.github.com/javalin/javalin/pull/2580)
> * [deps] Bump stable deps and sync OptionalDependency.kt by [`@​tipsy`](https://github.com/tipsy) in [javalin/javalin#2588](https://redirect.github.com/javalin/javalin/pull/2588)
>
> New Contributors
> ----------------
>
> * [`@​AoElite`](https://github.com/AoElite) made their first contribution in [javalin/javalin#2553](https://redirect.github.com/javalin/javalin/pull/2553)
> * [`@​vorburger`](https://github.com/vorburger) made their first contribution in [javalin/javalin#2584](https://redirect.github.com/javalin/javalin/pull/2584)
> * [`@​1cg`](https://github.com/1cg) made their first contribution in [javalin/javalin#2578](https://redirect.github.com/javalin/javalin/pull/2578)
> * [`@​eddieran`](https://github.com/eddieran) made their first contribution in [javalin/javalin#2580](https://redirect.github.com/javalin/javalin/pull/2580)
>
> **Full Changelog**: <javalin/javalin@javalin-parent-7.1.0...javalin-parent-7.2.0>


Commits

* [`c67b118`](javalin/javalin@c67b118) [maven-release-plugin] prepare release javalin-parent-7.2.0
* [`b89fdf7`](javalin/javalin@b89fdf7) [deps] Bump stable deps and sync OptionalDependency.kt ([#2588](https://redirect.github.com/javalin/javalin/issues/2588))
* [`a3ad657`](javalin/javalin@a3ad657) [sse] Sanitize newlines in event and id fields
* [`e0f5458`](javalin/javalin@e0f5458) [sse] Add ability to emit plain data messages
* [`fa51869`](javalin/javalin@fa51869) [deps] Bump Jetty from 12.1.7 to 12.1.8 ([#2585](https://redirect.github.com/javalin/javalin/issues/2585))
* [`4bc70e9`](javalin/javalin@4bc70e9) [cleanup] Remove JavalinTest.class ([#2584](https://redirect.github.com/javalin/javalin/issues/2584))
* [`1901feb`](javalin/javalin@1901feb) [workflow]: Bump actions/github-script in the dependencies group ([#2581](https://redirect.github.com/javalin/javalin/issues/2581))
* [`152f7b3`](javalin/javalin@152f7b3) [workflow]: Bump codecov/codecov-action in the dependencies group ([#2570](https://redirect.github.com/javalin/javalin/issues/2570))
* [`2c4d1ef`](javalin/javalin@2c4d1ef) [deps]: Bump the dependencies group across 1 directory with 23 updates ([#2575](https://redirect.github.com/javalin/javalin/issues/2575))
* [`64f3a75`](javalin/javalin@64f3a75) [apibuilder] Refactor role-scoping internals to Kotlin
* Additional commits viewable in [compare view](javalin/javalin@7.1.0...javalin-parent-7.2.0)
  
Updates `io.javalin.community.openapi:javalin-openapi-plugin` from 7.1.0 to 7.2.0
Release notes

*Sourced from [io.javalin.community.openapi:javalin-openapi-plugin's releases](https://github.com/javalin/javalin-openapi/releases).*

> 7.2.0
> -----
>
> **Changes**
>
> * Bumped Javalin to 7.2.0
>
> **Sponsors**
> Thanks to everyone who supported me this month 💜
>
> **Minimal requirements**
>
> * Java 17+ / Kotlin 2.3+
> * Javalin 7.2.0
>
> 7.1.1-rc.1
> ----------
>
> **Changes**
>
> * [javalin/javalin-openapi#275](https://redirect.github.com/javalin/javalin-openapi/issues/275) [Make ClassLoader used for loading resources configurable](javalin/javalin-openapi@de1b6b7)
>
> **Sponsors**
> Thanks to everyone who supported me this month 💜

... (truncated)


Commits

* [`123e727`](javalin/javalin-openapi@123e727) [GH-279](https://redirect.github.com/javalin/javalin-openapi/issues/279) Adjust to Javalin's breaking changed in InternalRouter
* [`3ea0e98`](javalin/javalin-openapi@3ea0e98) [GH-279](https://redirect.github.com/javalin/javalin-openapi/issues/279) Release 7.2.0 (Resolves [#279](https://redirect.github.com/javalin/javalin-openapi/issues/279))
* [`0471f8a`](javalin/javalin-openapi@0471f8a) [GH-277](https://redirect.github.com/javalin/javalin-openapi/issues/277) Release 7.1.1-rc.2
* [`3831f78`](javalin/javalin-openapi@3831f78) [GH-277](https://redirect.github.com/javalin/javalin-openapi/issues/277) Cover handling of complex types in query parameters (Resolves [#277](https://redirect.github.com/javalin/javalin-openapi/issues/277))
* See full diff in [compare view](javalin/javalin-openapi@7.1.0...7.2.0)
  
Updates `io.javalin.community.openapi:javalin-swagger-plugin` from 7.1.0 to 7.2.0
Release notes

*Sourced from [io.javalin.community.openapi:javalin-swagger-plugin's releases](https://github.com/javalin/javalin-openapi/releases).*

> 7.2.0
> -----
>
> **Changes**
>
> * Bumped Javalin to 7.2.0
>
> **Sponsors**
> Thanks to everyone who supported me this month 💜
>
> **Minimal requirements**
>
> * Java 17+ / Kotlin 2.3+
> * Javalin 7.2.0
>
> 7.1.1-rc.1
> ----------
>
> **Changes**
>
> * [javalin/javalin-openapi#275](https://redirect.github.com/javalin/javalin-openapi/issues/275) [Make ClassLoader used for loading resources configurable](javalin/javalin-openapi@de1b6b7)
>
> **Sponsors**
> Thanks to everyone who supported me this month 💜

... (truncated)


Commits

* [`123e727`](javalin/javalin-openapi@123e727) [GH-279](https://redirect.github.com/javalin/javalin-openapi/issues/279) Adjust to Javalin's breaking changed in InternalRouter
* [`3ea0e98`](javalin/javalin-openapi@3ea0e98) [GH-279](https://redirect.github.com/javalin/javalin-openapi/issues/279) Release 7.2.0 (Resolves [#279](https://redirect.github.com/javalin/javalin-openapi/issues/279))
* [`0471f8a`](javalin/javalin-openapi@0471f8a) [GH-277](https://redirect.github.com/javalin/javalin-openapi/issues/277) Release 7.1.1-rc.2
* [`3831f78`](javalin/javalin-openapi@3831f78) [GH-277](https://redirect.github.com/javalin/javalin-openapi/issues/277) Cover handling of complex types in query parameters (Resolves [#277](https://redirect.github.com/javalin/javalin-openapi/issues/277))
* See full diff in [compare view](javalin/javalin-openapi@7.1.0...7.2.0)
  
Updates `io.javalin:javalin-micrometer` from 7.1.0 to 7.2.0
Release notes

*Sourced from [io.javalin:javalin-micrometer's releases](https://github.com/javalin/javalin/releases).*

> 7.2.0
> -----
>
> What's Changed
> --------------
>
> * [performance] Replace Stream API with List and reduce per-request allocations by [`@​tipsy`](https://github.com/tipsy) in [javalin/javalin#2567](https://redirect.github.com/javalin/javalin/pull/2567)
> * feat: introduce `JavalinJackson3` as an optional `JsonMapper` implementation for Jackson 3 by [`@​yvasyliev`](https://github.com/yvasyliev) in [javalin/javalin#2548](https://redirect.github.com/javalin/javalin/pull/2548)
> * [workflow]: Bump codecov/codecov-action from 5.5.2 to 5.5.3 in the dependencies group by [`@​dependabot`](https://github.com/dependabot)[bot] in [javalin/javalin#2569](https://redirect.github.com/javalin/javalin/pull/2569)
> * Add path role inheritance by [`@​AoElite`](https://github.com/AoElite) in [javalin/javalin#2553](https://redirect.github.com/javalin/javalin/pull/2553)
> * [deps]: Bump the dependencies group across 1 directory with 23 updates by [`@​dependabot`](https://github.com/dependabot)[bot] in [javalin/javalin#2575](https://redirect.github.com/javalin/javalin/pull/2575)
> * [workflow]: Bump codecov/codecov-action from 5.5.3 to 6.0.0 in the dependencies group across 1 directory by [`@​dependabot`](https://github.com/dependabot)[bot] in [javalin/javalin#2570](https://redirect.github.com/javalin/javalin/pull/2570)
> * [workflow]: Bump actions/github-script from 8 to 9 in the dependencies group by [`@​dependabot`](https://github.com/dependabot)[bot] in [javalin/javalin#2581](https://redirect.github.com/javalin/javalin/pull/2581)
> * [cleanup] Remove JavalinTest.class by [`@​vorburger`](https://github.com/vorburger) in [javalin/javalin#2584](https://redirect.github.com/javalin/javalin/pull/2584)
> * [deps] Bump Jetty from 12.1.7 to 12.1.8 by [`@​vorburger`](https://github.com/vorburger) in [javalin/javalin#2585](https://redirect.github.com/javalin/javalin/pull/2585)
> * Add ability to emit plain data messages in SSE by [`@​1cg`](https://github.com/1cg) in [javalin/javalin#2578](https://redirect.github.com/javalin/javalin/pull/2578)
> * fix: sanitize newlines in SSE event and id fields by [`@​eddieran`](https://github.com/eddieran) in [javalin/javalin#2580](https://redirect.github.com/javalin/javalin/pull/2580)
> * [deps] Bump stable deps and sync OptionalDependency.kt by [`@​tipsy`](https://github.com/tipsy) in [javalin/javalin#2588](https://redirect.github.com/javalin/javalin/pull/2588)
>
> New Contributors
> ----------------
>
> * [`@​AoElite`](https://github.com/AoElite) made their first contribution in [javalin/javalin#2553](https://redirect.github.com/javalin/javalin/pull/2553)
> * [`@​vorburger`](https://github.com/vorburger) made their first contribution in [javalin/javalin#2584](https://redirect.github.com/javalin/javalin/pull/2584)
> * [`@​1cg`](https://github.com/1cg) made their first contribution in [javalin/javalin#2578](https://redirect.github.com/javalin/javalin/pull/2578)
> * [`@​eddieran`](https://github.com/eddieran) made their first contribution in [javalin/javalin#2580](https://redirect.github.com/javalin/javalin/pull/2580)
>
> **Full Changelog**: <javalin/javalin@javalin-parent-7.1.0...javalin-parent-7.2.0>


Commits

* [`c67b118`](javalin/javalin@c67b118) [maven-release-plugin] prepare release javalin-parent-7.2.0
* [`b89fdf7`](javalin/javalin@b89fdf7) [deps] Bump stable deps and sync OptionalDependency.kt ([#2588](https://redirect.github.com/javalin/javalin/issues/2588))
* [`a3ad657`](javalin/javalin@a3ad657) [sse] Sanitize newlines in event and id fields
* [`e0f5458`](javalin/javalin@e0f5458) [sse] Add ability to emit plain data messages
* [`fa51869`](javalin/javalin@fa51869) [deps] Bump Jetty from 12.1.7 to 12.1.8 ([#2585](https://redirect.github.com/javalin/javalin/issues/2585))
* [`4bc70e9`](javalin/javalin@4bc70e9) [cleanup] Remove JavalinTest.class ([#2584](https://redirect.github.com/javalin/javalin/issues/2584))
* [`1901feb`](javalin/javalin@1901feb) [workflow]: Bump actions/github-script in the dependencies group ([#2581](https://redirect.github.com/javalin/javalin/issues/2581))
* [`152f7b3`](javalin/javalin@152f7b3) [workflow]: Bump codecov/codecov-action in the dependencies group ([#2570](https://redirect.github.com/javalin/javalin/issues/2570))
* [`2c4d1ef`](javalin/javalin@2c4d1ef) [deps]: Bump the dependencies group across 1 directory with 23 updates ([#2575](https://redirect.github.com/javalin/javalin/issues/2575))
* [`64f3a75`](javalin/javalin@64f3a75) [apibuilder] Refactor role-scoping internals to Kotlin
* Additional commits viewable in [compare view](javalin/javalin@7.1.0...javalin-parent-7.2.0)
  
Updates `io.javalin:javalin-testtools` from 7.1.0 to 7.2.0
Release notes

*Sourced from [io.javalin:javalin-testtools's releases](https://github.com/javalin/javalin/releases).*

> 7.2.0
> -----
>
> What's Changed
> --------------
>
> * [performance] Replace Stream API with List and reduce per-request allocations by [`@​tipsy`](https://github.com/tipsy) in [javalin/javalin#2567](https://redirect.github.com/javalin/javalin/pull/2567)
> * feat: introduce `JavalinJackson3` as an optional `JsonMapper` implementation for Jackson 3 by [`@​yvasyliev`](https://github.com/yvasyliev) in [javalin/javalin#2548](https://redirect.github.com/javalin/javalin/pull/2548)
> * [workflow]: Bump codecov/codecov-action from 5.5.2 to 5.5.3 in the dependencies group by [`@​dependabot`](https://github.com/dependabot)[bot] in [javalin/javalin#2569](https://redirect.github.com/javalin/javalin/pull/2569)
> * Add path role inheritance by [`@​AoElite`](https://github.com/AoElite) in [javalin/javalin#2553](https://redirect.github.com/javalin/javalin/pull/2553)
> * [deps]: Bump the dependencies group across 1 directory with 23 updates by [`@​dependabot`](https://github.com/dependabot)[bot] in [javalin/javalin#2575](https://redirect.github.com/javalin/javalin/pull/2575)
> * [workflow]: Bump codecov/codecov-action from 5.5.3 to 6.0.0 in the dependencies group across 1 directory by [`@​dependabot`](https://github.com/dependabot)[bot] in [javalin/javalin#2570](https://redirect.github.com/javalin/javalin/pull/2570)
> * [workflow]: Bump actions/github-script from 8 to 9 in the dependencies group by [`@​dependabot`](https://github.com/dependabot)[bot] in [javalin/javalin#2581](https://redirect.github.com/javalin/javalin/pull/2581)
> * [cleanup] Remove JavalinTest.class by [`@​vorburger`](https://github.com/vorburger) in [javalin/javalin#2584](https://redirect.github.com/javalin/javalin/pull/2584)
> * [deps] Bump Jetty from 12.1.7 to 12.1.8 by [`@​vorburger`](https://github.com/vorburger) in [javalin/javalin#2585](https://redirect.github.com/javalin/javalin/pull/2585)
> * Add ability to emit plain data messages in SSE by [`@​1cg`](https://github.com/1cg) in [javalin/javalin#2578](https://redirect.github.com/javalin/javalin/pull/2578)
> * fix: sanitize newlines in SSE event and id fields by [`@​eddieran`](https://github.com/eddieran) in [javalin/javalin#2580](https://redirect.github.com/javalin/javalin/pull/2580)
> * [deps] Bump stable deps and sync OptionalDependency.kt by [`@​tipsy`](https://github.com/tipsy) in [javalin/javalin#2588](https://redirect.github.com/javalin/javalin/pull/2588)
>
> New Contributors
> ----------------
>
> * [`@​AoElite`](https://github.com/AoElite) made their first contribution in [javalin/javalin#2553](https://redirect.github.com/javalin/javalin/pull/2553)
> * [`@​vorburger`](https://github.com/vorburger) made their first contribution in [javalin/javalin#2584](https://redirect.github.com/javalin/javalin/pull/2584)
> * [`@​1cg`](https://github.com/1cg) made their first contribution in [javalin/javalin#2578](https://redirect.github.com/javalin/javalin/pull/2578)
> * [`@​eddieran`](https://github.com/eddieran) made their first contribution in [javalin/javalin#2580](https://redirect.github.com/javalin/javalin/pull/2580)
>
> **Full Changelog**: <javalin/javalin@javalin-parent-7.1.0...javalin-parent-7.2.0>


Commits

* [`c67b118`](javalin/javalin@c67b118) [maven-release-plugin] prepare release javalin-parent-7.2.0
* [`b89fdf7`](javalin/javalin@b89fdf7) [deps] Bump stable deps and sync OptionalDependency.kt ([#2588](https://redirect.github.com/javalin/javalin/issues/2588))
* [`a3ad657`](javalin/javalin@a3ad657) [sse] Sanitize newlines in event and id fields
* [`e0f5458`](javalin/javalin@e0f5458) [sse] Add ability to emit plain data messages
* [`fa51869`](javalin/javalin@fa51869) [deps] Bump Jetty from 12.1.7 to 12.1.8 ([#2585](https://redirect.github.com/javalin/javalin/issues/2585))
* [`4bc70e9`](javalin/javalin@4bc70e9) [cleanup] Remove JavalinTest.class ([#2584](https://redirect.github.com/javalin/javalin/issues/2584))
* [`1901feb`](javalin/javalin@1901feb) [workflow]: Bump actions/github-script in the dependencies group ([#2581](https://redirect.github.com/javalin/javalin/issues/2581))
* [`152f7b3`](javalin/javalin@152f7b3) [workflow]: Bump codecov/codecov-action in the dependencies group ([#2570](https://redirect.github.com/javalin/javalin/issues/2570))
* [`2c4d1ef`](javalin/javalin@2c4d1ef) [deps]: Bump the dependencies group across 1 directory with 23 updates ([#2575](https://redirect.github.com/javalin/javalin/issues/2575))
* [`64f3a75`](javalin/javalin@64f3a75) [apibuilder] Refactor role-scoping internals to Kotlin
* Additional commits viewable in [compare view](javalin/javalin@7.1.0...javalin-parent-7.2.0)
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.

2 participants