{"id":21017758,"url":"https://github.com/typeonce-dev/effect-getting-started-course","last_synced_at":"2025-08-05T10:07:34.266Z","repository":{"id":249415044,"uuid":"827919908","full_name":"typeonce-dev/effect-getting-started-course","owner":"typeonce-dev","description":"Complete effect getting started course: learn how to build production effect applications with error handling, configuration, services, and layers 🚀","archived":false,"fork":false,"pushed_at":"2025-03-12T04:24:30.000Z","size":69,"stargazers_count":47,"open_issues_count":0,"forks_count":2,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-05-15T06:39:13.806Z","etag":null,"topics":["effect","effect-beginner","effect-course","effect-schema","effect-ts","effect-typescript","typescript"],"latest_commit_sha":null,"homepage":"https://www.typeonce.dev/course/effect-beginners-complete-getting-started","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/typeonce-dev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-07-12T17:03:31.000Z","updated_at":"2025-05-01T01:16:39.000Z","dependencies_parsed_at":null,"dependency_job_id":"81751857-941d-44a2-93e1-c210acb24d64","html_url":"https://github.com/typeonce-dev/effect-getting-started-course","commit_stats":null,"previous_names":["typeonce-dev/effect-getting-started-course"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/typeonce-dev/effect-getting-started-course","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeonce-dev%2Feffect-getting-started-course","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeonce-dev%2Feffect-getting-started-course/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeonce-dev%2Feffect-getting-started-course/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeonce-dev%2Feffect-getting-started-course/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/typeonce-dev","download_url":"https://codeload.github.com/typeonce-dev/effect-getting-started-course/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeonce-dev%2Feffect-getting-started-course/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":268875042,"owners_count":24321694,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-05T02:00:12.334Z","response_time":2576,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["effect","effect-beginner","effect-course","effect-schema","effect-ts","effect-typescript","typescript"],"created_at":"2024-11-19T10:21:38.401Z","updated_at":"2025-08-05T10:07:34.183Z","avatar_url":"https://github.com/typeonce-dev.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Effect: Beginners Complete Getting Started\n\nThis repository contains all the code for the course [`Effect: Beginners Complete Getting Started`](https://www.typeonce.dev/course/effect-beginners-complete-getting-started).\n\nThe app is implemented using typescript. You can get started by forking/cloning the repository and installing the dependencies:\n\n```sh\npnpm install\n```\n\nThe project follows the implementation of the app in the course:\n- Entry point inside [index.ts](./src/index.ts)\n- All *Pascal Case* files in [src](./src/) are effect services\n- Testing inside [test](./test/)\n- [[+1]](./src/+1/) contains topic explained inside extra lessons in the course\n\n***\n\n[`effect`](https://effect.website/) is the missing standard library for TypeScript. `effect` provides everything that you need to **build type-safe production typescript applications**.\n\n## Course content\n\nThis course will guide you from 0 knowledge of `effect` to build your first API with `Runtime`, `Layer`, `Config` and more. It shows you *how to implement a single API request* using `effect`.\n\nThis may sound simple, but in reality you need to account for a lot of configurations and possible errors. `effect` makes everything type-safe, maintainable, testable:\n- Error handling\n- Configuration (environmental variables)\n- Mocking and testing (dependency injection)\n- Organizing and composing services\n\n### How the course is organized\n\nThe course is organized in small self-contained lessons. Each lesson introduces 1 single new concept.\n\nWe will explore why using plain `fetch` and `Promise` is not enough. For each problem we explore the solution offered by `effect`, how it works, why it's needed, and how it integrates with the other modules to build a complete app.\n\n## Course outline\n\nThese are some of the concepts you will learn:\n- Creating and running effects (`Effect` type)\n- Type safe error handling\n- How to use `pipe` and `gen` to compose effects\n- How to use `@effect/schema` to parse request responses\n- Manage environmental variables with the `Config` module\n- Testing and mocking using dependency injection\n- Composing services using `Context` and `Layer`\n- How to build your custom runtime using `ManagedRuntime`\n\nWe will learn these step by step. Every new module or API will be introduced only when required, specifically when implementing a missing feature of solving a problem with the app.\n\n***\n\n## Prerequisites\nThe only prerequisite is knowing typescript.\n\nThis does not require being advanced in the language. Nonetheless, the course assumes you know *what types are and how they work*.\n\nHere are some of the typescript concepts we are going to use:\n- Type inference\n- `typeof`\n- `never`\n- `interface`/`type`\n- `readonly`\n- `function*`/`yield*`\n\nWe will briefly review some of these during the course to understand how and why they are used.\n\n### Good to have\nSome patterns and APIs in `effect` derive from functional programming principles.\n\nThose are **not** required, but they may help you better understand some APIs used in `effect`:\n- Piping: `pipe` function in `effect`\n- Pure functions\n- Function composition\n- High-order functions\n- Pattern matching\n- Dependency injection\n\n\u003e We are going to learn more about some of these principles during the course","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftypeonce-dev%2Feffect-getting-started-course","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftypeonce-dev%2Feffect-getting-started-course","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftypeonce-dev%2Feffect-getting-started-course/lists"}