This Week in Effect - 2024-04-19
Hi Effecters!
Welcome back to a This Week In Effect (TWIE), our weekly update that aims to help you keep track of everything that is going on inside our Community and the Effect Ecosystem.
If it’s your first time here, 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 begin your Effect journey, take a look at our quick-start guide and documentation below. Enjoy!
Overview of TWIE
If you're new to TWIE, here are a few words on what TWIE is and what it aims for.
We’re happy to see the community growing so fast, with more and more people adopting Effect. At the same time, we understand that it might not be easy keeping up with everything that is going on in the Effect Ecosystem:
- Effect became API stable with the Effect 3.0 release.
- Our Discord server reached 2280+ members a few days ago and the engagement is at an all-time high.
- We've begun publishing the talks from Effect Days every week. Make sure you don't miss any by subscribing to our YouTube channel.
- All projects around Effect are receiving key updates and there has been a lot of activity on GitHub!
We want to make it easy for you to find all the info you need to fully enjoy your Effect journey and actively engage with the community!
And, that’s why we created TWIE – a weekly update to inform you about key events about Effect in the previous week, both from the community (Discord discussions, X posts, YouTube content, etc.) and from a technical standpoint.
Now, back to business!
Technology
We can't beat around the bush, so let's get straight to the big news of the week: we have released Effect 3.0, and the core package of Effect is now stable. This release is the result of five years of hard work by our team, with the support of the community.
Starting with 3.0 the main package effect
will follow semantic versioning:
- major releases will include breaking changes
- minor releases will include new features and new modules
- patch releases will include bug fixes
Our commitment for the future is to also make the other Effect Ecosystem libraries stable.
Read the full Effect 3.0 announcement.
Now, let's take a look to all the changes that occurred last week.
Effect Core
- Ensure correct value is passed to mapping function in mapAccum loop (Bug Fix)
- Change return type of Fiber.joinAll to return an array (Bug Fix)
- Fix UrlParams.makeUrl when globalThis.location is set to undefined (Bug Fix)
- Add FiberHandle module, for holding a reference to a running fiber (Feature, next-minor)
- Rename ReadonlyArray and ReadonlyRecord modules (Refactor)
- Skip running effects in FiberHandle/Map if not required (Improvement)
- Improve the typings of Array.isArray (Refactor)
- Re-enable provenance publishing (Feature)
- Added Stream.fromEventListener (Feature, next-minor)
- Add Effect.timeoutOption (Feature, next-minor)
- Add Match.withReturnType api (Feature)
Effect SQL
- Move sqlfx/sql into the @effect/sql package (Feature)
- Disable provenance for sql packages (Bug Fix)
- Clean up sql Migrator modules (Refactor)
- Rename ReadonlyArray and ReadonlyRecord modules (Refactor)
- Add sqlfx migration notes to /sql (Improvement)
- Update sql.in examples in README (Documentation Update)
- Re-enable provenance publishing (Feature)
- Use op-sqlite for sqlite react native (Feature)
Effect Platform
- Allow http handlers to be uninterruptible (Feature)
- Move uninterruptible to route option (Feature)
- Rename ReadonlyArray and ReadonlyRecord modules (Refactor)
- Allow fs.watch backend to be customized (Feature)
- Fix Command stdin being closed too early (Bug Fix)
- Add no-op FileSystem constructor for testing (Feature)
- Re-enable provenance publishing (Feature)
- Added Stream.fromEventListener (Feature, next-minor)
- Add Http.response.void helper, for creating an http request that returns void (Feature)
- Add more span attributes to http traces (Feature)
Effect RPC
- Ensure context is available in rpc http stream (Feature)
- Rename ReadonlyArray and ReadonlyRecord modules (Refactor)
- Re-enable provenance publishing (Feature)
Effect Typeclass
- Rename ReadonlyArray and ReadonlyRecord modules (Refactor)
- Re-enable provenance publishing (Feature)
- Update README for the typeclass package (Documentation Update)
Effect Opentelemetry
- Rename ReadonlyArray and ReadonlyRecord modules (Refactor)
- Re-enable provenance publishing (Feature)
- Update @opentelemetry/* peer dependencies to ensure allowed versions include used import (Bug Fix)
- Add otel Resource.layerFromEnv, for constructing a resource from env variables (Feature)
Effect Experimental
- Rename ReadonlyArray and ReadonlyRecord modules (Refactor)
- Re-enable provenance publishing (Feature)
Effect Printer
- Rename ReadonlyArray and ReadonlyRecord modules (Refactor)
- Re-enable provenance publishing (Feature)
Effect Schema
- Re-export FastCheck (Bug Fix)
- Introduce LazyArbitrary and new make (Feature)
- Make AST.pick correctly handle key renames (Bug Fix)
- Schema: consolidate schema names (Refactor)
- Add instructions for running the codemod (Documentation Update)
- Rename ReadonlyArray and ReadonlyRecord modules (Refactor)
- Schema: add compose overloads to enable a subtyping relationship in both directions between C and B (Feature)
- Fix transformOrFail and transformOrFailFrom signatures in the exported Class interface by adding the missing annotations optional argument (Bug Fix)
- Schema: refactor test filenames to align with new naming conventions (Refactor)
- Schema: expand the Zod comparison section to include a list of code comparisons that can serve as a useful migration guide (Documentation Update)
- Re-enable provenance publishing (Feature)
- Schema: partial / required: add support for renaming property keys in property signature transformations (Bug Fix)
Effect Vitest
- Re-enable provenance publishing (Feature)
Effect CLI
- Rename ReadonlyArray and ReadonlyRecord modules (Refactor)
- Re-enable provenance publishing (Feature)
General Chores
- Add Effect 3.0 changeset
- Refine package descriptions
- Fix typo in AsyncFiberException
- Update devDependencies
- Remove leftovers
- Update intro video
- Use JSONC for code example language
- Bump pnpm version
Community
In the last week, we welcomed +80 new Effecters to our Discord server! Thank you all for joining the Effect community, we're excited to have you on board!
We'd like to remind our French-speaking members that the first Effect Paris Meetup, hosted by Evryg, will be on Tuesday, April 23, 2024, at 7 p.m.. Thanks again to the Evryg team, in particular Jean-Baptiste Musso and Antoine Coulon for organizing!
Content Update
The release of Effect 3.0 and the incorporation of Effectful Technologies has sparked a wave of excitement within our community, with many of our longstanding partners and community members eager to share their enthusiasm for this announcement.
Amplify Partners led the Seed Round for Effectful Technologies – special thanks to Lenny Pruss and Renee Shah for their invaluable support. We're looking forward to reshaping the future of programming together!
Jean-Baptiste Musso, co-founder of Evryg, and his team have been using Effect in production for 2 years now:
Attila Večerek, Tech Lead & Staff Engineer at Zendesk, has also been using Effect in production for 6 months:
Tobias Lins, Tech Lead of observability related tools at Vercel:
David Peter, founder of Type Driven:
Federico Biccheddu, CTO @ Parcy:
Paul Gray, author of Sift, Mock, CASA node.js:
Petr Huřťák, Software Engineer at StoryBlok and Teacher at the Czech Technical University in Prague:
Moving on, Michael Arnaldi, author of Effect, will be giving a talk at the LambdaConf 2024 on May 6-7, 2024. If you're around, feel free to drop by and say hello!
This week, Milad Vafaeifard dropped a valuable learning tip on how to use Effect. The video below shows how to improve the readability of the repository in your local compiler:
Closing Notes
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 new format. Feel free to share your thoughts, and we'll do our best to tailor it to the needs of our community.
The Effect Community Team