This is an opinionated library for full-stack Effect-TS. (See repositories for more info and discord link, articles, youtube videos, etc).
WIP docs
See https://github.com/effect-ts-app/boilerplate for a sample app use.
effect-app: service contracts and runtime-agnostic base logic.@effect-app/infra: backend / Node adapters.@effect-app/vue: Vue / browser adapters.Migration targets introduced in this repo include:
@effect-app/infra/Emailer/service -> effect-app/Emailer@effect-app/infra/QueueMaker/service -> effect-app/QueueMaker@effect-app/infra/Store/service -> effect-app/Store@effect-app/infra/Model/* -> effect-app/Model/*@effect-app/vue/runtime -> effect-app/runtime@effect-app/vue/toast -> effect-app/toast@effect-app/vue/withToast -> effect-app/withToastrepos/effect is a git subtree of https://github.com/Effect-TS/effect-smol.git.
Recommended (uses the currently pinned effect / @effect/* version from package.json):
pnpm subtree:effect
Or directly via the CLI:
effa sync-effect
Use a different repository URL:
effa sync-effect --url https://github.com/Effect-TS/effect-smol.git
Manual update to a specific ref:
git subtree pull --prefix=repos/effect https://github.com/Effect-TS/effect-smol.git <ref> --squash
Example:
git subtree pull --prefix=repos/effect https://github.com/Effect-TS/effect-smol.git @effect/ai-anthropic@4.0.0-beta.47 --squash
Apps that vendor this repository as repos/libs can sync it to the pinned
effect-app / @effect-app/* version in their package.json:
effa sync-effect-app
The command first tries Changesets package tags such as
effect-app@4.0.0-beta.271 or @effect-app/infra@4.0.0-beta.271. If no
matching tag exists, it fetches https://github.com/effect-app/libs.git into a
local git cache and selects the latest commit on the default branch whose
package manifest still has the pinned version.
Escape hatch for manual refs:
effa sync-effect-app --ref main
effa sync-effect-app --ref latest # latest main
Both sync-effect and sync-effect-app fetch selected commits with
--no-tags, so syncing subtrees does not import upstream package tags into the
app repository.
The clean release convention is to publish git tags for package versions
(effect-app@<version>, @effect-app/infra@<version>, etc.) from the release
workflow. The history scan exists because this repo still has older v* tags
but not current package-version tags.
Uses Changesets
pnpm changesetOn Mac:
Shift + Command + PRun TaskRun Storybook OmegaFormOn Windows:
cd packages/vue-components
pnpm storybook