very cool effect usecase today: I wanted to buffer a stream over a period of time- of course there is a function for that: `Stream.groupedWithin(Infinity, "1 seconds")` but then I wanted to dynamically change that period of time, so the first group is the first 100ms, then the…
This Week in Effect - 2024-07-05
Hi Effecters!
Welcome back to This Week In Effect (TWIE), a weekly update to keep you in the loop with all the latest developments in the Effect community and ecosystem.
Effect is a powerful TypeScript library designed to help developers create complex, synchronous, and asynchronous programs. One of the key features that sets Effect apart is how it leverages structured concurrency to provide features such as async cancellation and safe resource management, making it easier to build robust, scalable, and efficient programs.
To get started, below you’ll find links to our documentation as well as our guide for installing Effect. Enjoy!
We want to make it easy for you to find everything you need to fully enjoy your Effect journey and actively engage with the community! In this blog post series, you’ll find all the significant developments from the previous week, such as Discord discussions, noteworthy posts, YouTube content, and technical advancements.
Recent major updates
- Effect is now API stable with the Effect 3.0 release.
- Effect 3.4 has been released.
- Our community on Discord reached 3160+ members!
- Published all talks from Effect Days 2024 on the Effect YouTube channel.
Here are all the technical changes that occurred last week.
- Micro: renaming to align with Effect module (Refactor)
- Support for the tacit usage of external handlers for Match.tag and Match.tagStartsWith functions (Refactor, Bug Fix)
- Use Channel.acquireUseRelease for Channel.withSpan (Refactor)
- Ensure PubSub.publishAll does not increase size while there are no subscribers (Bug Fix)
- Add Stream.filterMapEffectOption function (Feature)
- Refactor(Stream): rename argument names of mergeLeft and mergeRight from self/that to left/right for clarity (Refactor, next-minor)
- Ensure fibers are interrupted in Stream.mergeWith (Bug Fix)
- Allow Stream run fiber to close before trying to interrupt it (Bug Fix)
- Add HttpClient.followRedirects api (Feature)
- Support undefined in http request schema apis (Feature)
- log DevTool’s errors at debug level (Bug Fix)
- Add PersistedCache module to /experimental (Feature)
- Remove console.log from Redis persistence (Bug Fix)
- Drop requirement of PrimaryKey in /experimental Persistence (Improvement)
- Modified JSONSchema.make to selectively ignore the title and `descriptionfields in schema types such asSchema.String, Schema.Number, and Schema.Boolean (Refactor)
- Add support for Union, Suspend, and Refinement as the second argument of extend (Feature)
- Add ReadonlyMapFromRecord and MapFromRecord (Feature)
- README: Recommend using the strict: true option to get better error messages from TypeScript (Documentation Update)
- Optimize JSON Schema output for homogeneous tuples (such as non empty arrays) (Improvement)
- Enhance JSON Schema Support for Refinements in Record Parameters (Improvement)
- Add an example of a transformation where we need to use Schema.typeSchema to define the target schema. (Documentation Update)
- Add PersistedCache module to /experimental (Feature)
- Suppress ajv warnings in tests (Bug Fix)
- Add pick and omit members to Struct interface (Feature)
- Add filterEffect API (Feature)
- Add Serializable docs (Documentation Update)
- README: add FAQ section (Documentation Update)
- Adds a —log-level built-in option to all commands (Feature)
- Add Prompt.file to support path-based options in the CLI’s —wizard mode (Refactor, Feature, Optimization)
- Ensure file selector prompts can traverse parent directories (Bug Fix)
- Refactor vitest (Refactor)
- Add Effect and Micro basic instances (Feature)
- Internal: simplify product implementation (Improvement)
In the last week, we welcomed +50 new Effecters to our Discord community - we’re very excited to have you all on board!
-
Alessandro Maclaine who recently started posting about Effect on dev.to, wrote an article explaining how to use match with Option in Effect.
-
Ethan Niser, Effect educator and instructor at the Effect Days workshop in Vienna, shared a use case where he found Effect to be very useful. Check out the post below for more details.
- Christian Schröte, creator of Park-UI, is rewriting the CLI of his application using Effect and shared some positive feedback on X (Twitter).
Rewriting the CLI in Park UI. The tools today are incredible! @EffectTS_ is a game changer:
- Speaking of, Maxwell Brown gave us a sneak peek of the next version of Effect/CLI, where path-based command-line options will have a file-picker prompt in Wizard Mode.
In the next version of @EffectTS_ CLI ... path-based command-line options will have a file-picker prompt in Wizard Mode! 🧙🪄
- Michael Arnaldi, creator of Effect, joined the JavaScript Jabber podcast for a special episode about Effect.
Learn about effect from Michael Arnald x.com/i/broadcasts/1…
- Tomáš Horáček, Principal Technology Lead at Ciklum gave a talk about Effect, where he showed the benefits of using Effect in creating reliable, reusable, and maintainable applications, including how to start creating a basic Effect application and implementing its core functions.
- The latest episode of Mattia Manzati’s series on Effect Cluster Integration with Effect RPC is now available on the Effect Youtube Channel
- Dillon Mulroy, Software Engineer @ Vercel, went live on Twitch again with his series on Building a Twitch overlay with TypeScript and EffectTS.
That’s all for this week. Thank you for being a vital part of our community. Your feedback is highly valued as we fine-tune this format. Feel free to share your thoughts, and we’ll do our best to tailor it to the needs of our community.
Effect Community Team