Add UDP socket support with platform-agnostic interface #5396
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Hi there!
I've been learning more about Effect TS and coded this with Claude.
I thought it might be useful so I decided to open a PR.
Summary
Add comprehensive UDP socket support to the Effect platform with proper platform-agnostic design and implementations for Node.js and Bun.
Key Changes
Platform-agnostic UDP interface (
@effect/platform/UdpSocket
)UdpMessage
with sender address informationsend(data, address)
andrun(handler)
methods matching UDP semanticsaddress
property for symmetry with other platform interfacesNode.js implementation (
@effect/platform-node/NodeUdpSocket
)dgram
moduleacquireRelease
patternBun implementation (
@effect/platform-bun/BunUdpSocket
)dgram
Comprehensive test coverage
Design Journey & Architecture Decisions
Initial Approach: SocketServer Integration
Initially attempted to make UDP compatible with the existing
SocketServer
interface by:UdpAddress
to theAddress
union typeSocket
instances for each UDP messageWhy this felt wrong:
Final Approach: UDP-Specific Interface
Reverted to a dedicated UDP interface that properly represents UDP semantics:
UdpMessage
with discrete datagramssend()
specifies destinationPlatform Support Matrix
platform
platform-node
platform-bun
platform-browser
Usage Example
This implementation demonstrates Effect's platform-agnostic design principles while respecting the fundamental differences between TCP and UDP protocols.
🤖 Generated with Claude Code
Co-Authored-By: Claude [email protected]