{"id":13596874,"url":"https://github.com/practicajs/practica","last_synced_at":"2025-05-13T20:12:30.133Z","repository":{"id":37743958,"uuid":"453945903","full_name":"practicajs/practica","owner":"practicajs","description":"Node.js solution starter boilerplate that is production-ready, packed with ✅  best practices and built with simplicity in mind","archived":false,"fork":false,"pushed_at":"2025-04-16T08:13:21.000Z","size":52593,"stargazers_count":1578,"open_issues_count":113,"forks_count":143,"subscribers_count":28,"default_branch":"main","last_synced_at":"2025-04-25T17:16:24.328Z","etag":null,"topics":["best-practices","boilerplate","express","fastify","hacktoberfest","mongodb","nodejs","postgresql","starter-kit"],"latest_commit_sha":null,"homepage":"https://practica.dev/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/practicajs.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","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}},"created_at":"2022-01-31T09:31:09.000Z","updated_at":"2025-04-23T06:35:07.000Z","dependencies_parsed_at":"2023-02-04T20:15:29.973Z","dependency_job_id":"87d214f5-fe90-4a3d-a419-e9f41adbb513","html_url":"https://github.com/practicajs/practica","commit_stats":{"total_commits":631,"total_committers":38,"mean_commits":"16.605263157894736","dds":"0.43740095087163233","last_synced_commit":"b62d1fdc1c2775eaba0783487199f6f758487b44"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/practicajs%2Fpractica","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/practicajs%2Fpractica/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/practicajs%2Fpractica/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/practicajs%2Fpractica/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/practicajs","download_url":"https://codeload.github.com/practicajs/practica/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251112943,"owners_count":21538167,"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","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":["best-practices","boilerplate","express","fastify","hacktoberfest","mongodb","nodejs","postgresql","starter-kit"],"created_at":"2024-08-01T16:02:53.506Z","updated_at":"2025-04-28T10:49:40.570Z","avatar_url":"https://github.com/practicajs.png","language":"TypeScript","funding_links":[],"categories":["TypeScript","boilerplate"],"sub_categories":[],"readme":"![Best practices starter](/static/images/practica-logo.png)\n\n\u003cbr/\u003e\n\n### Generate a Node.js app that is packed with best practices AND simplicity in mind. Based off our repo [Node.js best practices](https://github.com/goldbergyoni/nodebestpractices) (96,100 stars)\n\n\u003cbr /\u003e\n\n\n![Twitter](/static/images/twitter-icon.png) [Twitter](https://twitter.com/nodepractices) | ![Site](/docs/static/img/site-icon.png) [Documentation site](https://practica.dev/)\n\n\n\u003cbr/\u003e\n\n# A One Paragraph Overview\n\nAlthough Node.js has great frameworks 💚, they were never meant to be dev \u0026 production ready immediately (e.g., no architecture layers, DB schemas, docker file, etc etc). Practica.js aims to bridge the gap. Based on your preferred framework, we generate example code that demonstrates a full Microservice flow, from API to DB, that is packed with good practices. For example, we include a battle-tested error handler, sanitized API response, hardened dockerfile, thoughtful 3-tier folder structure, great testing templates with DB, and more. This saves a great deal of time and can prevent painful mistakes. All decisions made are [neatly and thoughtfully documented](https://practica.dev/decisions). We strive to keep things as simple and standard as possible and base our work on the popular guide: [Node.js Best Practices](https://github.com/goldbergyoni/nodebestpractices)\n\n**1 min video 👇, ensure audio is activated**\n\n\n\nhttps://user-images.githubusercontent.com/8571500/170464232-43355e43-98cf-4069-b9fc-6bc303a39efc.mp4\n\n\n\u003cbr/\u003e\n\n# `Table of Contents`\n\n- [`Super-Quick Setup`](#super-quick-setup)\n- [`Our Philosophies and Unique Values`](#our-philosophies-and-unique-values)\n- [`Practices and Features`](#practices-and-features)\n- [`The People Behind Practica.js`](#the-people-behind-practicajs)\n- [`Our best practices guide, 78,000 stars ✨`](https://github.com/goldbergyoni/nodebestpractices)\n- [`Contribution guide`](https://github.com/practicajs/practica/blob/main/CONTRIBUTING.md)\n- [`Documentation site`](https://practica.dev/)\n- [`YouTube`](https://www.youtube.com/channel/UCKrSJ0-jm7YVTM_hO7Me9eA)\n- Coming Soon:\n\t- Example Applications\n\t\t- [Express, PostgreSQL, with common best practices](https://github.com/practicajs/practica/blob/main/docs/not-ready-yet.md)\n\t\t- [Express, mongo-db, with common best practices](https://github.com/practicajs/practica/blob/main/docs/not-ready-yet.md)\n\t\t- [Express, PostgreSQL, with all best practices (advanced)](https://github.com/practicajs/practica/blob/main/docs/not-ready-yet.md)\n\t\t- [Minimal with project setup configuration only](https://github.com/practicajs/practica/blob/main/docs/not-ready-yet.md)\n\t\t\u003cdetails\u003e\u003csummary\u003eMore Flavours\u003c/summary\u003e\n\t\t- Fastify, PostgreSQL\n\t\t- Fastify, mongo-db\n\t\t- Generate Your Own Interactively\n\t\t- More coming soon\n\t\t\u003c/details\u003e\n\n\u003cbr /\u003e\n\n# Super-Quick Setup\n\n\u003cbr /\u003e\n\n### Run Practica.js from the Command Line\n\n\nRun practica CLI and generate our default app (you can customize it using different flags):\n\n```bash\nnpx @practica/create-node-app immediate --install-dependencies\n```\n\n✨ And you're done! That's it, the code's all been generated. Our default setup includes Fastify for the web layer, Sequelize for the data access and PostgreSQL\n\nPrefer express and Prisma? Just pass the right flags to the CLI:\n\n```bash\nnpx @practica/create-node-app immediate --install-dependencies --web-framework=express --orm=prisma\n```\n\nPrefer other DB? We use standard ORMs, read its docs and switch DB. This is your code, do whatever you like\n\n\n\u003cbr /\u003e\n\n### Start the Project\n\n```bash\ncd {your chosen folder name}\nnpm install\n```\n\nThen choose whether to start the app:\n\n```bash\nnpm run\n```\n\nor run the tests:\n\n```bash\nnpm test\n```\n\nPretty straightforward, right?\n\nYou just got a Node.js Monorepo solution with one example component/Microservice and multiple libraries. Based on this hardened solution you can build a robust application. The example component/Microservice is located under: *{your chosen folder name}/services/order-service*. This is where you'll find the API and a good spot to start your journey from\n\n\u003cbr /\u003e\n\n### Next Steps\n\n- ✅ Start coding. The code we generate is minimal by design and based on known libraries. This should help you get up to speed quickly.\n- ✅ Read our ['coding with practica'](https://practica.dev/the-basics/coding-with-practica/) guide\n- ✅ Master it by reading our [docs at https://practica.dev](https://practica.dev).\n\n\n\u003cbr /\u003e\n\n# Our Philosophies and Unique Values\n\n### 1. Best Practices _on top of_ known Node.js frameworks\n\nWe don't re-invent the wheel. Rather, we use your favorite framework and empower it with structure and real examples. With a single command you can get an Express/Fastify-based codebase with many thoughtful best practices inside\n\n![Built on top of known frameworks](/static/images/on-top-of-frameworks.png)\n\n### 2. Simplicity, how Node.js was intended\n\nKeeping it simple, flat, and based on native Node/JS capabilities is part of this project's DNA. We believe that too many abstractions, high-complexity or fancy language features can quickly become a stumbling block for the team\n\nTo name a few examples, our code flow is flat with almost no level of indirection, no DI - it's just simple functions calling other functions. Although using TypeScript, almost no features are being used besides types, for modularization we simply use... Node.js modules\n\n![Simplicity!](/static/images/abstractions-vs-simplicity.png)\n\n### 3. Supports many technologies and frameworks\n\nGood Practices and Simplicity is the name of the game with Practica. There is no need to narrow our code to a specific framework or database. We aim to support the popular Node.js frameworks and data access approaches\n\n![Built on top of known frameworks](/static/images/tech-stack.png)\n\n\u003cbr /\u003e\n\n# Practices and Features\n\nWe apply dozens of practices and optimizations. You can opt in or out for most of these features using option flags on our CLI. The following table lists just a few examples out of the [full list of features we provide](https://practicajs.org/features).\n\n| **Feature** | **Explanation** | **Flag** | **Docs** |\n| ----------- | --------------- | -------- | -------- |\n| Monorepo setup | Generates two components (e.g., Microservices) in a single repository with interactions between the two | --mr, --monorepo | [Docs here]() |\n| Output escaping and sanitizing | Clean-out outgoing responses from potential HTML security risks like XSS | --oe, --output-escape | [Docs here]() |\n| Integration (component) testing | Generates full-blown component/integration tests setup including DB | --t, --tests | [Docs here]() |\n| Unique request ID (Correlation ID) | Generates module that creates a unique correlation/request ID for every incoming request. This is available for any other object during the request life-span. Internally it uses Node's built-in [AsyncLocalStorage](https://nodejs.org/api/async_hooks.html#class-asynclocalstorage) | --coi, --correlation-id | [Docs here]() |\n| Dockerfile | Generates dockerfile that embodies \u003e20 best practices | --df, --docker-file | [Docs here]() |\n| Strong-schema configuration | A configuration module that dynamically load run-time configuration keys and includes a strong schema so it can fail fast | Built-in with basic app | [Docs here](https://github.com/bestpractices/practica/blob/main/docs/decisions/configuration-library.MD) |\n\n📗 **See our full list of features [here](https://practica.dev/features)**\n\n\u003cbr /\u003e\n\n# The People Behind Practica.js\n\n## Steering Committee\n\nPractica is a community-driven open-source project. It's being led voluntarily by engineers from many different companies. These companies are just a few who encourage their engineers to contribute and keep this project moving. 💚\n\n![Autodesk](/static/images/autodesk.png)\n\nA Nasdaq 100 company, a world leader in design software\n\n![Cox2m](/static/images/cox2m.png)\n\nLeader IoT provider, part of 'Cox Communication', the 3rd largest cable company in the US\n\n## Core Team\n\n\u003ctable width=\"700px\"\u003e\n  \u003ctr\u003e\n\t\u003ctd align=\"center\"\u003e\u003cimg src=\"./static/images/yoni.jpeg\" width=\"300px\" alt=\"\"/\u003e\u003cbr /\u003e\u003ch3\u003eYoni Goldberg\u003c/h3\u003e\u003cbr/\u003eIndependent Node.js consultant\u003cbr/\u003e\u003ca href=\"https://twitter.com/goldbergyoni\"\u003e\u003cimg src=\"./static/images/twitter-symbol.png\" width=\"16\" height=\"16\"\u003e\u003c/img\u003e\u003c/a\u003e\n\u003ca href=\"https://goldbergyoni.com\"\u003e\u003cimg src=\"./static/images/site-symbol.png\" width=\"16\" height=\"16\"\u003e\u003c/img\u003e\u003c/a\u003e\n\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003cimg src=\"./static/images/michael1.jpg\" width=\"300px\" alt=\"\"/\u003e\u003cbr /\u003e\u003ch3\u003eMichael Solomon\u003c/h3\u003e\u003cbr/\u003eNode.js lead\u003cbr/\u003e\u003ca href=\"https://twitter.com/JMichaelShlomo\"\u003e\u003cimg src=\"./static/images/twitter-symbol.png\" width=\"16\" height=\"16\"\u003e\u003c/img\u003e\u003c/a\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\t\u003ctd align=\"center\"\u003e\u003cimg src=\"./static/images/raz.jpeg\" width=\"300px\" alt=\"\"/\u003e\u003cbr /\u003e\u003ch3\u003eRaz Luvaton\u003c/h3\u003e\u003cbr/\u003eNode.js developer\u003cbr/\u003e\u003ca href=\"https://twitter.com/goldbergyoni\"\u003e\u003cimg src=\"./static/images/twitter-symbol.png\" width=\"16\" height=\"16\"\u003e\u003c/img\u003e\u003c/a\u003e\n\u003ca href=\"https://goldbergyoni.com\"\u003e\u003cimg src=\"./static/images/site-symbol.png\" width=\"16\" height=\"16\"\u003e\u003c/img\u003e\u003c/a\u003e\n\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003cimg src=\"./static/images/daniel.jpeg\" width=\"300px\" alt=\"\"/\u003e\u003cbr /\u003e\u003ch3\u003eDaniel Gluskin\u003c/h3\u003e\u003cbr/\u003eNode.js lead\u003cbr/\u003e\u003ca href=\"https://twitter.com/goldbergyoni\"\u003e\u003cimg src=\"./static/images/twitter-symbol.png\" width=\"16\" height=\"16\"\u003e\u003c/img\u003e\u003c/a\u003e\n\u003ca href=\"https://goldbergyoni.com\"\u003e\u003cimg src=\"./static/images/site-symbol.png\" width=\"16\" height=\"16\"\u003e\u003c/img\u003e\u003c/a\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\t\u003ctd align=\"center\"\u003e\u003cimg src=\"./static/images/ariel.jpeg\" width=\"300px\" alt=\"\"/\u003e\u003cbr /\u003e\u003ch3\u003eAriel Steiner\u003c/h3\u003e\u003cbr/\u003eNode.js developer\u003cbr/\u003e\u003ca href=\"https://twitter.com/goldbergyoni\"\u003e\u003cimg src=\"./static/images/twitter-symbol.png\" width=\"16\" height=\"16\"\u003e\u003c/img\u003e\u003c/a\u003e\n\u003ca href=\"https://goldbergyoni.com\"\u003e\u003cimg src=\"./static/images/site-symbol.png\" width=\"16\" height=\"16\"\u003e\u003c/img\u003e\u003c/a\u003e\n\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003cimg src=\"./static/images/tomer.jpeg\" width=\"300px\" alt=\"\"/\u003e\u003cbr /\u003e\u003ch3\u003eTomer Kohane\u003c/h3\u003e\u003cbr/\u003eFrontend geek\u003cbr/\u003e\u003ca href=\"https://twitter.com/goldbergyoni\"\u003e\u003cimg src=\"./static/images/twitter-symbol.png\" width=\"16\" height=\"16\"\u003e\u003c/img\u003e\u003c/a\u003e\n\u003ca href=\"https://goldbergyoni.com\"\u003e\u003cimg src=\"./static/images/site-symbol.png\" width=\"16\" height=\"16\"\u003e\u003c/img\u003e\u003c/a\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\t\u003ctd align=\"center\"\u003e\u003cimg src=\"./static/images/dan.png\" width=\"300px\" alt=\"\"/\u003e\u003cbr /\u003e\u003ch3\u003eDan Goldberg\u003c/h3\u003e\u003cbr/\u003eNode.js lead\u003cbr/\u003e\u003ca href=\"https://twitter.com/goldbergyoni\"\u003e\u003cimg src=\"./static/images/twitter-symbol.png\" width=\"16\" height=\"16\"\u003e\u003c/img\u003e\u003c/a\u003e\n\u003ca href=\"https://goldbergyoni.com\"\u003e\u003cimg src=\"./static/images/site-symbol.png\" width=\"16\" height=\"16\"\u003e\u003c/img\u003e\u003c/a\u003e\n\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003cimg src=\"./static/images/ron.jpeg\" width=\"300px\" alt=\"\"/\u003e\u003cbr /\u003e\u003ch3\u003eRon Dahan\u003c/h3\u003e\u003cbr/\u003eNode.js expert\u003cbr/\u003e\u003ca href=\"https://twitter.com/goldbergyoni\"\u003e\u003cimg src=\"./static/images/twitter-symbol.png\" width=\"16\" height=\"16\"\u003e\u003c/img\u003e\u003c/a\u003e\n\u003ca href=\"https://goldbergyoni.com\"\u003e\u003cimg src=\"./static/images/site-symbol.png\" width=\"16\" height=\"16\"\u003e\u003c/img\u003e\u003c/a\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\n\n\u003c/table\u003e\n\n\u003cbr /\u003e\n\n# Partners\n\nThese companies are keen for continuous improvement and their engineers to have been known to contribute during work hours.\n\n![Minta](/static/images/minta.png)\n\n\n## Our Amazing Contributors 💚\n\nA million thanks to these great people who have contributed code to our project:\n\n\u003c!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section --\u003e\n\u003c!-- prettier-ignore-start --\u003e\n\u003c!-- markdownlint-disable --\u003e\n\u003ctable\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"25%\"\u003e\u003ca href=\"https://www.clarkio.com\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/6265396?v=4?s=200\" width=\"200px;\" alt=\"Brian Clark\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eBrian Clark\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/practicajs/practica/commits?author=clarkio\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"25%\"\u003e\u003ca href=\"https://github.com/rluvaton\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/16746759?v=4?s=200\" width=\"200px;\" alt=\"Raz Luvaton\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eRaz Luvaton\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"#content-rluvaton\" title=\"Content\"\u003e🖋\u003c/a\u003e \u003ca href=\"https://github.com/practicajs/practica/commits?author=rluvaton\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"25%\"\u003e\u003ca href=\"https://github.com/mikicho\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/11459632?v=4?s=200\" width=\"200px;\" alt=\"Michael Solomon\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eMichael Solomon\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/practicajs/practica/commits?author=mikicho\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"25%\"\u003e\u003ca href=\"https://github.com/itainoam\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/12605830?v=4?s=200\" width=\"200px;\" alt=\"itainoam\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eitainoam\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/practicajs/practica/commits?author=itainoam\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"#projectManagement-itainoam\" title=\"Project Management\"\u003e📆\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"25%\"\u003e\u003ca href=\"https://github.com/shanizlo\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/39856071?v=4?s=200\" width=\"200px;\" alt=\"shanizlo\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eshanizlo\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/practicajs/practica/commits?author=shanizlo\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"25%\"\u003e\u003ca href=\"https://github.com/RonDaha\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/30000700?v=4?s=200\" width=\"200px;\" alt=\"Ron Dahan\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eRon Dahan\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/practicajs/practica/commits?author=RonDaha\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"25%\"\u003e\u003ca href=\"https://github.com/alonkishoni\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/49868301?v=4?s=200\" width=\"200px;\" alt=\"AlonK\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eAlonK\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/practicajs/practica/commits?author=alonkishoni\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"25%\"\u003e\u003ca href=\"https://twitter.com/joseluah53\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/11966345?v=4?s=200\" width=\"200px;\" alt=\"Jose Luis Alvarez Herrera\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eJose Luis Alvarez Herrera\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"#content-jalvar53\" title=\"Content\"\u003e🖋\u003c/a\u003e \u003ca href=\"https://github.com/practicajs/practica/commits?author=jalvar53\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"25%\"\u003e\u003ca href=\"https://github.com/reinaldo-calderon-team\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/60945397?v=4?s=200\" width=\"200px;\" alt=\"reinaldo-calderon-team\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003ereinaldo-calderon-team\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/practicajs/practica/commits?author=reinaldo-calderon-team\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"25%\"\u003e\u003ca href=\"https://github.com/KarelVerschraegen\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/11301291?v=4?s=200\" width=\"200px;\" alt=\"KarelVerschraegen\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eKarelVerschraegen\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/practicajs/practica/commits?author=KarelVerschraegen\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"25%\"\u003e\u003ca href=\"https://github.com/danm\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/6394846?v=4?s=200\" width=\"200px;\" alt=\"Daniel Morrison\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eDaniel Morrison\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"#content-danm\" title=\"Content\"\u003e🖋\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"25%\"\u003e\u003ca href=\"https://github.com/seanlowe\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/35589586?v=4?s=200\" width=\"200px;\" alt=\"Sean Lowe\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eSean Lowe\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"#example-seanlowe\" title=\"Examples\"\u003e💡\u003c/a\u003e \u003ca href=\"#content-seanlowe\" title=\"Content\"\u003e🖋\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"25%\"\u003e\u003ca href=\"https://github.com/idobetesh\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/58806763?v=4?s=200\" width=\"200px;\" alt=\"idobetesh\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eidobetesh\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/practicajs/practica/commits?author=idobetesh\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"25%\"\u003e\u003ca href=\"https://github.com/alejaacosta17\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/89855093?v=4?s=200\" width=\"200px;\" alt=\"Alejandra Acosta\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eAlejandra Acosta\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/practicajs/practica/commits?author=alejaacosta17\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"25%\"\u003e\u003ca href=\"https://github.com/adandanielteamint\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/104020188?v=4?s=200\" width=\"200px;\" alt=\"adandanielteamint\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eadandanielteamint\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"#content-adandanielteamint\" title=\"Content\"\u003e🖋\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"25%\"\u003e\u003ca href=\"https://github.com/rashad612\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/251991?v=4?s=200\" width=\"200px;\" alt=\"Rashad Majali\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eRashad Majali\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/practicajs/practica/commits?author=rashad612\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"25%\"\u003e\u003ca href=\"https://github.com/yohai-zv\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/57675671?v=4?s=200\" width=\"200px;\" alt=\"yohai zvuloon\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eyohai zvuloon\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"#content-yohai-zv\" title=\"Content\"\u003e🖋\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"25%\"\u003e\u003ca href=\"https://yonatankra.com\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/6459899?v=4?s=200\" width=\"200px;\" alt=\"Yonatan Kra\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eYonatan Kra\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"#content-YonatanKra\" title=\"Content\"\u003e🖋\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"25%\"\u003e\u003ca href=\"https://github.com/yoni-rapoport\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/16318253?v=4?s=200\" width=\"200px;\" alt=\"Yoni Rapoport\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eYoni Rapoport\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"#content-yoni-rapoport\" title=\"Content\"\u003e🖋\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"25%\"\u003e\u003ca href=\"https://github.com/perilevy\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/29686391?v=4?s=200\" width=\"200px;\" alt=\"perilevy\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eperilevy\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/practicajs/practica/commits?author=perilevy\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"25%\"\u003e\u003ca href=\"https://github.com/ToMer-K\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/18401157?v=4?s=200\" width=\"200px;\" alt=\"ToMer-K\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eToMer-K\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/practicajs/practica/commits?author=ToMer-K\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"25%\"\u003e\u003ca href=\"https://github.com/henarbel\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/87380400?v=4?s=200\" width=\"200px;\" alt=\"hen arbel\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003ehen arbel\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/practicajs/practica/commits?author=henarbel\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"25%\"\u003e\u003ca href=\"https://github.com/mojcaostir\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/34694446?v=4?s=200\" width=\"200px;\" alt=\"Mojca Ostir\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eMojca Ostir\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/practicajs/practica/commits?author=mojcaostir\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"25%\"\u003e\u003ca href=\"https://github.com/evbambly\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/45696895?v=4?s=200\" width=\"200px;\" alt=\"evbambly\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eevbambly\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"#content-evbambly\" title=\"Content\"\u003e🖋\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"25%\"\u003e\u003ca href=\"https://github.com/AmirAdarGit\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/44618095?v=4?s=200\" width=\"200px;\" alt=\"Amir Adar\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eAmir Adar\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"#content-AmirAdarGit\" title=\"Content\"\u003e🖋\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"25%\"\u003e\u003ca href=\"https://vaucouleur.com\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/12293?v=4?s=200\" width=\"200px;\" alt=\"Sebastien Vaucouleur\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eSebastien Vaucouleur\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"#content-vaucouleur\" title=\"Content\"\u003e🖋\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"25%\"\u003e\u003ca href=\"https://hkdobrev.com\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/506129?v=4?s=200\" width=\"200px;\" alt=\"Harry Dobrev\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eHarry Dobrev\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/practicajs/practica/commits?author=hkdobrev\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"25%\"\u003e\u003ca href=\"https://skippednote.dev\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/2114712?v=4?s=200\" width=\"200px;\" alt=\"Bassam Ismail\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eBassam Ismail\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/practicajs/practica/commits?author=skippednote\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"25%\"\u003e\u003ca href=\"https://github.com/marcosmol204\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/53741892?v=4?s=200\" width=\"200px;\" alt=\"Marcos Molina\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eMarcos Molina\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/practicajs/practica/commits?author=marcosmol204\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"25%\"\u003e\u003ca href=\"https://github.com/isenkasa\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/65561129?v=4?s=200\" width=\"200px;\" alt=\"Isen Kasa\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eIsen Kasa\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/practicajs/practica/commits?author=isenkasa\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"25%\"\u003e\u003ca href=\"https://github.com/vishal-sharma-369\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/106011641?v=4?s=200\" width=\"200px;\" alt=\"Vishal Sharma\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eVishal Sharma\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/practicajs/practica/commits?author=vishal-sharma-369\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\n\u003c!-- markdownlint-restore --\u003e\n\u003c!-- prettier-ignore-end --\u003e\n\n\u003c!-- ALL-CONTRIBUTORS-LIST:END --\u003e\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpracticajs%2Fpractica","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpracticajs%2Fpractica","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpracticajs%2Fpractica/lists"}