| Skip to content | https://github.com/Uncodedtech/nodebestpractices#start-of-content |
|
| https://github.com/ |
|
Sign in
| https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2FUncodedtech%2Fnodebestpractices |
| GitHub CopilotWrite better code with AI | https://github.com/features/copilot |
| GitHub SparkBuild and deploy intelligent apps | https://github.com/features/spark |
| GitHub ModelsManage and compare prompts | https://github.com/features/models |
| MCP RegistryNewIntegrate external tools | https://github.com/mcp |
| ActionsAutomate any workflow | https://github.com/features/actions |
| CodespacesInstant dev environments | https://github.com/features/codespaces |
| IssuesPlan and track work | https://github.com/features/issues |
| Code ReviewManage code changes | https://github.com/features/code-review |
| GitHub Advanced SecurityFind and fix vulnerabilities | https://github.com/security/advanced-security |
| Code securitySecure your code as you build | https://github.com/security/advanced-security/code-security |
| Secret protectionStop leaks before they start | https://github.com/security/advanced-security/secret-protection |
| Why GitHub | https://github.com/why-github |
| Documentation | https://docs.github.com |
| Blog | https://github.blog |
| Changelog | https://github.blog/changelog |
| Marketplace | https://github.com/marketplace |
| View all features | https://github.com/features |
| Enterprises | https://github.com/enterprise |
| Small and medium teams | https://github.com/team |
| Startups | https://github.com/enterprise/startups |
| Nonprofits | https://github.com/solutions/industry/nonprofits |
| App Modernization | https://github.com/solutions/use-case/app-modernization |
| DevSecOps | https://github.com/solutions/use-case/devsecops |
| DevOps | https://github.com/solutions/use-case/devops |
| CI/CD | https://github.com/solutions/use-case/ci-cd |
| View all use cases | https://github.com/solutions/use-case |
| Healthcare | https://github.com/solutions/industry/healthcare |
| Financial services | https://github.com/solutions/industry/financial-services |
| Manufacturing | https://github.com/solutions/industry/manufacturing |
| Government | https://github.com/solutions/industry/government |
| View all industries | https://github.com/solutions/industry |
| View all solutions | https://github.com/solutions |
| AI | https://github.com/resources/articles?topic=ai |
| Software Development | https://github.com/resources/articles?topic=software-development |
| DevOps | https://github.com/resources/articles?topic=devops |
| Security | https://github.com/resources/articles?topic=security |
| View all topics | https://github.com/resources/articles |
| Customer stories | https://github.com/customer-stories |
| Events & webinars | https://github.com/resources/events |
| Ebooks & reports | https://github.com/resources/whitepapers |
| Business insights | https://github.com/solutions/executive-insights |
| GitHub Skills | https://skills.github.com |
| Documentation | https://docs.github.com |
| Customer support | https://support.github.com |
| Community forum | https://github.com/orgs/community/discussions |
| Trust center | https://github.com/trust-center |
| Partners | https://github.com/partners |
| GitHub SponsorsFund open source developers | https://github.com/sponsors |
| Security Lab | https://securitylab.github.com |
| Maintainer Community | https://maintainers.github.com |
| Accelerator | https://github.com/accelerator |
| Archive Program | https://archiveprogram.github.com |
| Topics | https://github.com/topics |
| Trending | https://github.com/trending |
| Collections | https://github.com/collections |
| Enterprise platformAI-powered developer platform | https://github.com/enterprise |
| GitHub Advanced SecurityEnterprise-grade security features | https://github.com/security/advanced-security |
| Copilot for BusinessEnterprise-grade AI features | https://github.com/features/copilot/copilot-business |
| Premium SupportEnterprise-grade 24/7 support | https://github.com/premium-support |
| Pricing | https://github.com/pricing |
| Search syntax tips | https://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax |
| documentation | https://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax |
|
Sign in
| https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2FUncodedtech%2Fnodebestpractices |
|
Sign up
| https://github.com/signup?ref_cta=Sign+up&ref_loc=header+logged+out&ref_page=%2F%3Cuser-name%3E%2F%3Crepo-name%3E&source=header-repo&source_repo=Uncodedtech%2Fnodebestpractices |
| Reload | https://github.com/Uncodedtech/nodebestpractices |
| Reload | https://github.com/Uncodedtech/nodebestpractices |
| Reload | https://github.com/Uncodedtech/nodebestpractices |
|
Uncodedtech
| https://github.com/Uncodedtech |
| nodebestpractices | https://github.com/Uncodedtech/nodebestpractices |
| goldbergyoni/nodebestpractices | https://github.com/goldbergyoni/nodebestpractices |
|
Notifications
| https://github.com/login?return_to=%2FUncodedtech%2Fnodebestpractices |
|
Fork
0
| https://github.com/login?return_to=%2FUncodedtech%2Fnodebestpractices |
|
Star
0
| https://github.com/login?return_to=%2FUncodedtech%2Fnodebestpractices |
| twitter.com/nodepractices/ | https://twitter.com/nodepractices/ |
|
CC-BY-SA-4.0 license
| https://github.com/Uncodedtech/nodebestpractices/blob/master/LICENSE |
|
0
stars
| https://github.com/Uncodedtech/nodebestpractices/stargazers |
|
10.7k
forks
| https://github.com/Uncodedtech/nodebestpractices/forks |
|
Branches
| https://github.com/Uncodedtech/nodebestpractices/branches |
|
Tags
| https://github.com/Uncodedtech/nodebestpractices/tags |
|
Activity
| https://github.com/Uncodedtech/nodebestpractices/activity |
|
Star
| https://github.com/login?return_to=%2FUncodedtech%2Fnodebestpractices |
|
Notifications
| https://github.com/login?return_to=%2FUncodedtech%2Fnodebestpractices |
|
Code
| https://github.com/Uncodedtech/nodebestpractices |
|
Pull requests
0
| https://github.com/Uncodedtech/nodebestpractices/pulls |
|
Actions
| https://github.com/Uncodedtech/nodebestpractices/actions |
|
Projects
0
| https://github.com/Uncodedtech/nodebestpractices/projects |
|
Security
0
| https://github.com/Uncodedtech/nodebestpractices/security |
|
Insights
| https://github.com/Uncodedtech/nodebestpractices/pulse |
|
Code
| https://github.com/Uncodedtech/nodebestpractices |
|
Pull requests
| https://github.com/Uncodedtech/nodebestpractices/pulls |
|
Actions
| https://github.com/Uncodedtech/nodebestpractices/actions |
|
Projects
| https://github.com/Uncodedtech/nodebestpractices/projects |
|
Security
| https://github.com/Uncodedtech/nodebestpractices/security |
|
Insights
| https://github.com/Uncodedtech/nodebestpractices/pulse |
| Branches | https://github.com/Uncodedtech/nodebestpractices/branches |
| Tags | https://github.com/Uncodedtech/nodebestpractices/tags |
| https://github.com/Uncodedtech/nodebestpractices/branches |
| https://github.com/Uncodedtech/nodebestpractices/tags |
| 3,916 Commits | https://github.com/Uncodedtech/nodebestpractices/commits/master/ |
| https://github.com/Uncodedtech/nodebestpractices/commits/master/ |
| .github | https://github.com/Uncodedtech/nodebestpractices/tree/master/.github |
| .github | https://github.com/Uncodedtech/nodebestpractices/tree/master/.github |
| .operations | https://github.com/Uncodedtech/nodebestpractices/tree/master/.operations |
| .operations | https://github.com/Uncodedtech/nodebestpractices/tree/master/.operations |
| assets | https://github.com/Uncodedtech/nodebestpractices/tree/master/assets |
| assets | https://github.com/Uncodedtech/nodebestpractices/tree/master/assets |
| sections | https://github.com/Uncodedtech/nodebestpractices/tree/master/sections |
| sections | https://github.com/Uncodedtech/nodebestpractices/tree/master/sections |
| .all-contributorsrc | https://github.com/Uncodedtech/nodebestpractices/blob/master/.all-contributorsrc |
| .all-contributorsrc | https://github.com/Uncodedtech/nodebestpractices/blob/master/.all-contributorsrc |
| .gitignore | https://github.com/Uncodedtech/nodebestpractices/blob/master/.gitignore |
| .gitignore | https://github.com/Uncodedtech/nodebestpractices/blob/master/.gitignore |
| LICENSE | https://github.com/Uncodedtech/nodebestpractices/blob/master/LICENSE |
| LICENSE | https://github.com/Uncodedtech/nodebestpractices/blob/master/LICENSE |
| README.basque.md | https://github.com/Uncodedtech/nodebestpractices/blob/master/README.basque.md |
| README.basque.md | https://github.com/Uncodedtech/nodebestpractices/blob/master/README.basque.md |
| README.brazilian-portuguese.md | https://github.com/Uncodedtech/nodebestpractices/blob/master/README.brazilian-portuguese.md |
| README.brazilian-portuguese.md | https://github.com/Uncodedtech/nodebestpractices/blob/master/README.brazilian-portuguese.md |
| README.chinese.md | https://github.com/Uncodedtech/nodebestpractices/blob/master/README.chinese.md |
| README.chinese.md | https://github.com/Uncodedtech/nodebestpractices/blob/master/README.chinese.md |
| README.french.md | https://github.com/Uncodedtech/nodebestpractices/blob/master/README.french.md |
| README.french.md | https://github.com/Uncodedtech/nodebestpractices/blob/master/README.french.md |
| README.hebrew.md | https://github.com/Uncodedtech/nodebestpractices/blob/master/README.hebrew.md |
| README.hebrew.md | https://github.com/Uncodedtech/nodebestpractices/blob/master/README.hebrew.md |
| README.indonesian.md | https://github.com/Uncodedtech/nodebestpractices/blob/master/README.indonesian.md |
| README.indonesian.md | https://github.com/Uncodedtech/nodebestpractices/blob/master/README.indonesian.md |
| README.japanese.md | https://github.com/Uncodedtech/nodebestpractices/blob/master/README.japanese.md |
| README.japanese.md | https://github.com/Uncodedtech/nodebestpractices/blob/master/README.japanese.md |
| README.korean.md | https://github.com/Uncodedtech/nodebestpractices/blob/master/README.korean.md |
| README.korean.md | https://github.com/Uncodedtech/nodebestpractices/blob/master/README.korean.md |
| README.md | https://github.com/Uncodedtech/nodebestpractices/blob/master/README.md |
| README.md | https://github.com/Uncodedtech/nodebestpractices/blob/master/README.md |
| README.polish.md | https://github.com/Uncodedtech/nodebestpractices/blob/master/README.polish.md |
| README.polish.md | https://github.com/Uncodedtech/nodebestpractices/blob/master/README.polish.md |
| README.russian.md | https://github.com/Uncodedtech/nodebestpractices/blob/master/README.russian.md |
| README.russian.md | https://github.com/Uncodedtech/nodebestpractices/blob/master/README.russian.md |
| package.json | https://github.com/Uncodedtech/nodebestpractices/blob/master/package.json |
| package.json | https://github.com/Uncodedtech/nodebestpractices/blob/master/package.json |
| README | https://github.com/Uncodedtech/nodebestpractices |
| CC-BY-SA-4.0 license | https://github.com/Uncodedtech/nodebestpractices |
| https://github.com/Uncodedtech/nodebestpractices#nodejs-best-practices |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/banner-2.jpg |
| https://github.com/Uncodedtech/nodebestpractices#-- |
| https://camo.githubusercontent.com/943d7fd1818f45ed04c5dd3d2c0409fd4084161aea041a7b5ffa078ffd33e2e5/68747470733a2f2f696d672e736869656c64732e696f2f62616467652fe29a992532304974656d253230636f756e742532302d253230313032253230426573742532305072616374696365732d626c75652e737667 |
| https://camo.githubusercontent.com/825294ebe2b7c297e408e9a3c2b253917e8099198feb402bdfa7244206b48ac1/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f2546302539462539332538352532304c6173742532307570646174652532302d2532304a616e756172792532303234253243253230323032332d677265656e2e737667 |
| https://camo.githubusercontent.com/43dc6b79e9969b96d37496147403291ce0c69aca98784a6213c028d9c9d87a17/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f2025453225394325393425323055706461746564253230466f7225323056657273696f6e2532302d2532304e6f646525323032322e302e302d627269676874677265656e2e737667 |
| https://twitter.com/nodepractices/ |
| @nodepractices | https://twitter.com/nodepractices/ |
| CN | https://github.com/Uncodedtech/nodebestpractices/blob/master/README.chinese.md |
| FR | https://github.com/Uncodedtech/nodebestpractices/blob/master/README.french.md |
| BR | https://github.com/Uncodedtech/nodebestpractices/blob/master/README.brazilian-portuguese.md |
| RU | https://github.com/Uncodedtech/nodebestpractices/blob/master/README.russian.md |
| PL | https://github.com/Uncodedtech/nodebestpractices/blob/master/README.polish.md |
| JA | https://github.com/Uncodedtech/nodebestpractices/blob/master/README.japanese.md |
| EU | https://github.com/Uncodedtech/nodebestpractices/blob/master/README.basque.md |
| (ES, HE, KR and TR in progress! ) | https://github.com/Uncodedtech/nodebestpractices#translations |
| https://github.com/Uncodedtech/nodebestpractices#-2024-edition-is-here |
| Practica.js | https://github.com/practicajs/practica |
| https://github.com/Uncodedtech/nodebestpractices#welcome-3-things-you-ought-to-know-first |
| writing guidelines here | https://github.com/Uncodedtech/nodebestpractices/blob/master/.operations/writing-guidelines.md |
| https://github.com/Uncodedtech/nodebestpractices#by-yoni-goldberg |
| beyond-the-basics testing course, which is on a π limited-time sale | https://testjavascript.com/ |
| https://github.com/Uncodedtech/nodebestpractices#learn-with-me-as-a-consultant-i-engage-with-worldwide-teams-on-various-activities-like-workshops-and-code-reviews-and-hold-on-ive-just-launched-my-beyond-the-basics-testing-course-which-is-on-a--limited-time-sale-until-august-7th |
| https://github.com/Uncodedtech/nodebestpractices#table-of-contents |
| 1. Project Architecture Practices (6) | https://github.com/Uncodedtech/nodebestpractices#1-project-architecture-practices |
| 1.1 Structure your solution by components #strategic #updated | https://github.com/Uncodedtech/nodebestpractices#-11-structure-your-solution-by-business-components |
| 1.2 Layer your components, keep the web layer within its boundaries #strategic #updated | https://github.com/Uncodedtech/nodebestpractices#-12-layer-your-components-with-3-tiers-keep-the-web-layer-within-its-boundaries |
| 1.3 Wrap common utilities as packages, consider publishing | https://github.com/Uncodedtech/nodebestpractices#-13-wrap-common-utilities-as-packages-consider-publishing |
| 1.4 Use environment aware, secure and hierarchical config #updated | https://github.com/Uncodedtech/nodebestpractices#-14-use-environment-aware-secure-and-hierarchical-config |
| 1.5 Consider all the consequences when choosing the main framework #new | https://github.com/Uncodedtech/nodebestpractices#-15-consider-all-the-consequences-when-choosing-the-main-framework |
| 1.6 Use TypeScript sparingly and thoughtfully #new | https://github.com/Uncodedtech/nodebestpractices#-16-use-typescript-sparingly-and-thoughtfully |
| 2. Error Handling Practices (12) | https://github.com/Uncodedtech/nodebestpractices#2-error-handling-practices |
| 2.1 Use Async-Await or promises for async error handling | https://github.com/Uncodedtech/nodebestpractices#-21-use-async-await-or-promises-for-async-error-handling |
| 2.2 Extend the built-in Error object #strategic #updated | https://github.com/Uncodedtech/nodebestpractices#-22-extend-the-built-in-error-object |
| 2.3 Distinguish operational vs programmer errors #strategic #updated | https://github.com/Uncodedtech/nodebestpractices#-23-distinguish-catastrophic-errors-from-operational-errors |
| 2.4 Handle errors centrally, not within a middleware #strategic | https://github.com/Uncodedtech/nodebestpractices#-24-handle-errors-centrally-not-within-a-middleware |
| 2.5 Document API errors using OpenAPI or GraphQL | https://github.com/Uncodedtech/nodebestpractices#-25-document-api-errors-using-openapi-or-graphql |
| 2.6 Exit the process gracefully when a stranger comes to town #strategic | https://github.com/Uncodedtech/nodebestpractices#-26-exit-the-process-gracefully-when-a-stranger-comes-to-town |
| 2.7 Use a mature logger to increase errors visibility #updated | https://github.com/Uncodedtech/nodebestpractices#-27-use-a-mature-logger-to-increase-errors-visibility |
| 2.8 Test error flows using your favorite test framework #updated | https://github.com/Uncodedtech/nodebestpractices#-28-test-error-flows-using-your-favorite-test-framework |
| 2.9 Discover errors and downtime using APM products | https://github.com/Uncodedtech/nodebestpractices#-29-discover-errors-and-downtime-using-apm-products |
| 2.10 Catch unhandled promise rejections #updated | https://github.com/Uncodedtech/nodebestpractices#-210-catch-unhandled-promise-rejections |
| 2.11 Fail fast, validate arguments using a dedicated library | https://github.com/Uncodedtech/nodebestpractices#-211-fail-fast-validate-arguments-using-a-dedicated-library |
| 2.12 Always await promises before returning to avoid a partial stacktrace #new | https://github.com/Uncodedtech/nodebestpractices#-212-always-await-promises-before-returning-to-avoid-a-partial-stacktrace |
| 2.13 Subscribe to event emitters 'error' event #new | https://github.com/Uncodedtech/nodebestpractices#-213-subscribe-to-event-emitters-and-streams-error-event |
| 3. Code Style Practices (12) | https://github.com/Uncodedtech/nodebestpractices#3-code-patterns-and-style-practices |
| 3.1 Use ESLint #strategic | https://github.com/Uncodedtech/nodebestpractices#-31-use-eslint |
| 3.2 Use Node.js eslint extension plugins #updated | https://github.com/Uncodedtech/nodebestpractices#-32-use-nodejs-eslint-extension-plugins |
| 3.3 Start a Codeblock's Curly Braces on the Same Line | https://github.com/Uncodedtech/nodebestpractices#-33-start-a-codeblocks-curly-braces-on-the-same-line |
| 3.4 Separate your statements properly | https://github.com/Uncodedtech/nodebestpractices#-34-separate-your-statements-properly |
| 3.5 Name your functions | https://github.com/Uncodedtech/nodebestpractices#-35-name-your-functions |
| 3.6 Use naming conventions for variables, constants, functions and classes | https://github.com/Uncodedtech/nodebestpractices#-36-use-naming-conventions-for-variables-constants-functions-and-classes |
| 3.7 Prefer const over let. Ditch the var | https://github.com/Uncodedtech/nodebestpractices#-37-prefer-const-over-let-ditch-the-var |
| 3.8 Require modules first, not inside functions | https://github.com/Uncodedtech/nodebestpractices#-38-require-modules-first-not-inside-functions |
| 3.9 Set an explicit entry point to a module/folder #updated | https://github.com/Uncodedtech/nodebestpractices#-39-set-an-explicit-entry-point-to-a-modulefolder |
| 3.10 Use the === operator | https://github.com/Uncodedtech/nodebestpractices#-310-use-the--operator |
| 3.11 Use Async Await, avoid callbacks #strategic | https://github.com/Uncodedtech/nodebestpractices#-311-use-async-await-avoid-callbacks |
| 3.12 Use arrow function expressions (=>) | https://github.com/Uncodedtech/nodebestpractices#-312-use-arrow-function-expressions- |
| 3.13 Avoid effects outside of functions #new | https://github.com/Uncodedtech/nodebestpractices#-313-avoid-effects-outside-of-functions |
| 4. Testing And Overall Quality Practices (13) | https://github.com/Uncodedtech/nodebestpractices#4-testing-and-overall-quality-practices |
| 4.1 At the very least, write API (component) testing #strategic | https://github.com/Uncodedtech/nodebestpractices#-41-at-the-very-least-write-api-component-testing |
| 4.2 Include 3 parts in each test name #new | https://github.com/Uncodedtech/nodebestpractices#-42-include-3-parts-in-each-test-name |
| 4.3 Structure tests by the AAA pattern #strategic | https://github.com/Uncodedtech/nodebestpractices#-43-structure-tests-by-the-aaa-pattern |
| 4.4 Ensure Node version is unified #new | https://github.com/Uncodedtech/nodebestpractices#-44-ensure-node-version-is-unified |
| 4.5 Avoid global test fixtures and seeds, add data per-test #strategic | https://github.com/Uncodedtech/nodebestpractices#-45-avoid-global-test-fixtures-and-seeds-add-data-per-test |
| 4.6 Tag your tests #advanced | https://github.com/Uncodedtech/nodebestpractices#-46-tag-your-tests |
| 4.7 Check your test coverage, it helps to identify wrong test patterns | https://github.com/Uncodedtech/nodebestpractices#-47-check-your-test-coverage-it-helps-to-identify-wrong-test-patterns |
| 4.8 Use production-like environment for e2e testing | https://github.com/Uncodedtech/nodebestpractices#-48-use-production-like-environment-for-e2e-testing |
| 4.9 Refactor regularly using static analysis tools | https://github.com/Uncodedtech/nodebestpractices#-49-refactor-regularly-using-static-analysis-tools |
| 4.10 Mock responses of external HTTP services #advanced #new #advanced | https://github.com/Uncodedtech/nodebestpractices#-410-mock-responses-of-external-http-services |
| 4.11 Test your middlewares in isolation | https://github.com/Uncodedtech/nodebestpractices#-411-test-your-middlewares-in-isolation |
| 4.12 Specify a port in production, randomize in testing #new | https://github.com/Uncodedtech/nodebestpractices#-412-specify-a-port-in-production-randomize-in-testing |
| 4.13 Test the five possible outcomes #strategic #new | https://github.com/Uncodedtech/nodebestpractices#-413-test-the-five-possible-outcomes |
| 5. Going To Production Practices (19) | https://github.com/Uncodedtech/nodebestpractices#5-going-to-production-practices |
| 5.1. Monitoring #strategic | https://github.com/Uncodedtech/nodebestpractices#-51-monitoring |
| 5.2. Increase the observability using smart logging #strategic | https://github.com/Uncodedtech/nodebestpractices#-52-increase-the-observability-using-smart-logging |
| 5.3. Delegate anything possible (e.g. gzip, SSL) to a reverse proxy #strategic | https://github.com/Uncodedtech/nodebestpractices#-53-delegate-anything-possible-eg-gzip-ssl-to-a-reverse-proxy |
| 5.4. Lock dependencies | https://github.com/Uncodedtech/nodebestpractices#-54-lock-dependencies |
| 5.5. Guard process uptime using the right tool | https://github.com/Uncodedtech/nodebestpractices#-55-guard-process-uptime-using-the-right-tool |
| 5.6. Utilize all CPU cores | https://github.com/Uncodedtech/nodebestpractices#-56-utilize-all-cpu-cores |
| 5.7. Create a βmaintenance endpointβ | https://github.com/Uncodedtech/nodebestpractices#-57-create-a-maintenance-endpoint |
| 5.8. Discover the unknowns using APM products #advanced #updated | https://github.com/Uncodedtech/nodebestpractices#-58-discover-the-unknowns-using-apm-products |
| 5.9. Make your code production-ready | https://github.com/Uncodedtech/nodebestpractices#-59-make-your-code-production-ready |
| 5.10. Measure and guard the memory usage #advanced | https://github.com/Uncodedtech/nodebestpractices#-510-measure-and-guard-the-memory-usage |
| 5.11. Get your frontend assets out of Node | https://github.com/Uncodedtech/nodebestpractices#-511-get-your-frontend-assets-out-of-node |
| 5.12. Strive to be stateless #strategic | https://github.com/Uncodedtech/nodebestpractices#-512-strive-to-be-stateless |
| 5.13. Use tools that automatically detect vulnerabilities | https://github.com/Uncodedtech/nodebestpractices#-513-use-tools-that-automatically-detect-vulnerabilities |
| 5.14. Assign a transaction id to each log statement #advanced | https://github.com/Uncodedtech/nodebestpractices#-514-assign-a-transaction-id-to-each-log-statement |
| 5.15. Set NODE_ENV=production | https://github.com/Uncodedtech/nodebestpractices#-515-set-node_envproduction |
| 5.16. Design automated, atomic and zero-downtime deployments #advanced | https://github.com/Uncodedtech/nodebestpractices#-516-design-automated-atomic-and-zero-downtime-deployments |
| 5.17. Use an LTS release of Node.js | https://github.com/Uncodedtech/nodebestpractices#-517-use-an-lts-release-of-nodejs |
| 5.18. Log to stdout, avoid specifying log destination within the app #updated | https://github.com/Uncodedtech/nodebestpractices#-518-log-to-stdout-avoid-specifying-log-destination-within-the-app |
| 5.19. Install your packages with npm ci #new | https://github.com/Uncodedtech/nodebestpractices#-519-install-your-packages-with-npm-ci |
| 6. Security Practices (25) | https://github.com/Uncodedtech/nodebestpractices#6-security-best-practices |
| 6.1. Embrace linter security rules | https://github.com/Uncodedtech/nodebestpractices#-61-embrace-linter-security-rules |
| 6.2. Limit concurrent requests using a middleware | https://github.com/Uncodedtech/nodebestpractices#-62-limit-concurrent-requests-using-a-middleware |
| 6.3 Extract secrets from config files or use packages to encrypt them #strategic | https://github.com/Uncodedtech/nodebestpractices#-63-extract-secrets-from-config-files-or-use-packages-to-encrypt-them |
| 6.4. Prevent query injection vulnerabilities with ORM/ODM libraries #strategic | https://github.com/Uncodedtech/nodebestpractices#-64-prevent-query-injection-vulnerabilities-with-ormodm-libraries |
| 6.5. Collection of generic security best practices | https://github.com/Uncodedtech/nodebestpractices#-65-collection-of-generic-security-best-practices |
| 6.6. Adjust the HTTP response headers for enhanced security | https://github.com/Uncodedtech/nodebestpractices#-66-adjust-the-http-response-headers-for-enhanced-security |
| 6.7. Constantly and automatically inspect for vulnerable dependencies #strategic | https://github.com/Uncodedtech/nodebestpractices#-67-constantly-and-automatically-inspect-for-vulnerable-dependencies |
| 6.8. Protect Users' Passwords/Secrets using bcrypt or scrypt #strategic | https://github.com/Uncodedtech/nodebestpractices#-68-protect-users-passwordssecrets-using-bcrypt-or-scrypt |
| 6.9. Escape HTML, JS and CSS output | https://github.com/Uncodedtech/nodebestpractices#-69-escape-html-js-and-css-output |
| 6.10. Validate incoming JSON schemas #strategic | https://github.com/Uncodedtech/nodebestpractices#-610-validate-incoming-json-schemas |
| 6.11. Support blocklisting JWTs | https://github.com/Uncodedtech/nodebestpractices#-611-support-blocklisting-jwts |
| 6.12. Prevent brute-force attacks against authorization #advanced | https://github.com/Uncodedtech/nodebestpractices#-612-prevent-brute-force-attacks-against-authorization |
| 6.13. Run Node.js as non-root user | https://github.com/Uncodedtech/nodebestpractices#-613-run-nodejs-as-non-root-user |
| 6.14. Limit payload size using a reverse-proxy or a middleware | https://github.com/Uncodedtech/nodebestpractices#-614-limit-payload-size-using-a-reverse-proxy-or-a-middleware |
| 6.15. Avoid JavaScript eval statements | https://github.com/Uncodedtech/nodebestpractices#-615-avoid-javascript-eval-statements |
| 6.16. Prevent evil RegEx from overloading your single thread execution | https://github.com/Uncodedtech/nodebestpractices#-616-prevent-evil-regex-from-overloading-your-single-thread-execution |
| 6.17. Avoid module loading using a variable | https://github.com/Uncodedtech/nodebestpractices#-617-avoid-module-loading-using-a-variable |
| 6.18. Run unsafe code in a sandbox | https://github.com/Uncodedtech/nodebestpractices#-618-run-unsafe-code-in-a-sandbox |
| 6.19. Take extra care when working with child processes #advanced | https://github.com/Uncodedtech/nodebestpractices#-619-take-extra-care-when-working-with-child-processes |
| 6.20. Hide error details from clients | https://github.com/Uncodedtech/nodebestpractices#-620-hide-error-details-from-clients |
| 6.21. Configure 2FA for npm or Yarn #strategic | https://github.com/Uncodedtech/nodebestpractices#-621-configure-2fa-for-npm-or-yarn |
| 6.22. Modify session middleware settings | https://github.com/Uncodedtech/nodebestpractices#-622-modify-session-middleware-settings |
| 6.23. Avoid DOS attacks by explicitly setting when a process should crash #advanced | https://github.com/Uncodedtech/nodebestpractices#-623-avoid-dos-attacks-by-explicitly-setting-when-a-process-should-crash |
| 6.24. Prevent unsafe redirects | https://github.com/Uncodedtech/nodebestpractices#-624-prevent-unsafe-redirects |
| 6.25. Avoid publishing secrets to the npm registry | https://github.com/Uncodedtech/nodebestpractices#-625-avoid-publishing-secrets-to-the-npm-registry |
| 6.26. 6.26 Inspect for outdated packages | https://github.com/Uncodedtech/nodebestpractices#-626-inspect-for-outdated-packages |
| 6.27. Import built-in modules using the 'node:' protocol #new | https://github.com/Uncodedtech/nodebestpractices#-627-import-built-in-modules-using-the-node-protocol |
| 7. Performance Practices (2) (Work In ProgressοΈ βοΈ) | https://github.com/Uncodedtech/nodebestpractices#7-draft-performance-best-practices |
| 7.1. Don't block the event loop | https://github.com/Uncodedtech/nodebestpractices#-71-dont-block-the-event-loop |
| 7.2. Prefer native JS methods over user-land utils like Lodash | https://github.com/Uncodedtech/nodebestpractices#-72-prefer-native-js-methods-over-user-land-utils-like-lodash |
| 8. Docker Practices (15) | https://github.com/Uncodedtech/nodebestpractices#8-docker-best-practices |
| 8.1 Use multi-stage builds for leaner and more secure Docker images #strategic | https://github.com/Uncodedtech/nodebestpractices#-81-use-multi-stage-builds-for-leaner-and-more-secure-docker-images |
| 8.2. Bootstrap using node command, avoid npm start | https://github.com/Uncodedtech/nodebestpractices#-82-bootstrap-using-node-command-avoid-npm-start |
| 8.3. Let the Docker runtime handle replication and uptime #strategic | https://github.com/Uncodedtech/nodebestpractices#-83-let-the-docker-runtime-handle-replication-and-uptime |
| 8.4. Use .dockerignore to prevent leaking secrets | https://github.com/Uncodedtech/nodebestpractices#-84-use-dockerignore-to-prevent-leaking-secrets |
| 8.5. Clean-up dependencies before production | https://github.com/Uncodedtech/nodebestpractices#-85-clean-up-dependencies-before-production |
| 8.6. Shutdown smartly and gracefully #advanced | https://github.com/Uncodedtech/nodebestpractices#-86-shutdown-smartly-and-gracefully |
| 8.7. Set memory limits using both Docker and v8 #advanced #strategic | https://github.com/Uncodedtech/nodebestpractices#-87-set-memory-limits-using-both-docker-and-v8 |
| 8.8. Plan for efficient caching | https://github.com/Uncodedtech/nodebestpractices#-88-plan-for-efficient-caching |
| 8.9. Use explicit image reference, avoid latest tag | https://github.com/Uncodedtech/nodebestpractices#-89-use-explicit-image-reference-avoid-latest-tag |
| 8.10. Prefer smaller Docker base images | https://github.com/Uncodedtech/nodebestpractices#-810-prefer-smaller-docker-base-images |
| 8.11. Clean-out build-time secrets, avoid secrets in args #strategic #new | https://github.com/Uncodedtech/nodebestpractices#-811-clean-out-build-time-secrets-avoid-secrets-in-args |
| 8.12. Scan images for multi layers of vulnerabilities #advanced | https://github.com/Uncodedtech/nodebestpractices#-812-scan-images-for-multi-layers-of-vulnerabilities |
| 8.13 Clean NODE_MODULE cache | https://github.com/Uncodedtech/nodebestpractices#-813-clean-node_module-cache |
| 8.14. Generic Docker practices | https://github.com/Uncodedtech/nodebestpractices#-814-generic-docker-practices |
| 8.15. Lint your Dockerfile #new | https://github.com/Uncodedtech/nodebestpractices#-815-lint-your-dockerfile |
| https://github.com/Uncodedtech/nodebestpractices#1-project-architecture-practices |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-11-structure-your-solution-by-business-components |
| https://github.com/Uncodedtech/nodebestpractices#-updated |
| Read More: structure by components | https://github.com/Uncodedtech/nodebestpractices/blob/master/sections/projectstructre/breakintcomponents.md |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-12-layer-your-components-with-3-tiers-keep-the-web-layer-within-its-boundaries |
| https://github.com/Uncodedtech/nodebestpractices#-updated-1 |
| 3-Tier pattern | https://en.wikipedia.org/wiki/Multitier_architecture |
| Read More: layer your app | https://github.com/Uncodedtech/nodebestpractices/blob/master/sections/projectstructre/createlayers.md |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-13-wrap-common-utilities-as-packages-consider-publishing |
| Read More: Structure by feature | https://github.com/Uncodedtech/nodebestpractices/blob/master/sections/projectstructre/wraputilities.md |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-14-use-environment-aware-secure-and-hierarchical-config |
| https://github.com/Uncodedtech/nodebestpractices#-updated-2 |
| convict | https://www.npmjs.com/package/convict |
| env-var | https://github.com/evanshortiss/env-var |
| zod | https://github.com/colinhacks/zod |
| Read More: configuration best practices | https://github.com/Uncodedtech/nodebestpractices/blob/master/sections/projectstructre/configguide.md |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-15-consider-all-the-consequences-when-choosing-the-main-framework |
| https://github.com/Uncodedtech/nodebestpractices#-new |
| Nest.js | https://nestjs.com/ |
| Fastify | https://www.fastify.io/ |
| express | https://expressjs.com/ |
| Koa | https://koajs.com/ |
| full considerations guide here | https://github.com/Uncodedtech/nodebestpractices/blob/master/sections/projectstructre/choose-framework.md |
| Read More: Choosing the right framework | https://github.com/Uncodedtech/nodebestpractices/blob/master/sections/projectstructre/choose-framework.md |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-16-use-typescript-sparingly-and-thoughtfully |
| https://github.com/Uncodedtech/nodebestpractices#-new-1 |
| Researches | https://earlbarr.com/publications/typestudy.pdf |
| Read More: TypeScript considerations | https://github.com/Uncodedtech/nodebestpractices/blob/master/sections/projectstructre/typescript-considerations.md |
| β¬ Return to top | https://github.com/Uncodedtech/nodebestpractices#table-of-contents |
| https://github.com/Uncodedtech/nodebestpractices#2-error-handling-practices |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-21-use-async-await-or-promises-for-async-error-handling |
| Read More: avoiding callbacks | https://github.com/Uncodedtech/nodebestpractices/blob/master/sections/errorhandling/asyncerrorhandling.md |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-22-extend-the-built-in-error-object |
| https://github.com/Uncodedtech/nodebestpractices#-updated-3 |
| limitations | https://eslint.org/docs/rules/no-throw-literal |
| Read More: using the built-in error object | https://github.com/Uncodedtech/nodebestpractices/blob/master/sections/errorhandling/useonlythebuiltinerror.md |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-23-distinguish-catastrophic-errors-from-operational-errors |
| https://github.com/Uncodedtech/nodebestpractices#-updated-4 |
| Read More: operational vs programmer error | https://github.com/Uncodedtech/nodebestpractices/blob/master/sections/errorhandling/operationalvsprogrammererror.md |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-24-handle-errors-centrally-not-within-a-middleware |
| Read More: handling errors in a centralized place | https://github.com/Uncodedtech/nodebestpractices/blob/master/sections/errorhandling/centralizedhandling.md |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-25-document-api-errors-using-openapi-or-graphql |
| Read More: documenting API errors in Swagger or GraphQL | https://github.com/Uncodedtech/nodebestpractices/blob/master/sections/errorhandling/documentingusingswagger.md |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-26-exit-the-process-gracefully-when-a-stranger-comes-to-town |
| Read More: shutting the process | https://github.com/Uncodedtech/nodebestpractices/blob/master/sections/errorhandling/shuttingtheprocess.md |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-27-use-a-mature-logger-to-increase-errors-visibility |
| https://github.com/Uncodedtech/nodebestpractices#-updated-5 |
| Pino | https://github.com/pinojs/pino |
| Winston | https://github.com/winstonjs/winston |
| Read More: using a mature logger | https://github.com/Uncodedtech/nodebestpractices/blob/master/sections/errorhandling/usematurelogger.md |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-28-test-error-flows-using-your-favorite-test-framework |
| https://github.com/Uncodedtech/nodebestpractices#-updated-6 |
| Read More: testing error flows | https://github.com/Uncodedtech/nodebestpractices/blob/master/sections/errorhandling/testingerrorflows.md |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-29-discover-errors-and-downtime-using-apm-products |
| Read More: using APM products | https://github.com/Uncodedtech/nodebestpractices/blob/master/sections/errorhandling/apmproducts.md |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-210-catch-unhandled-promise-rejections |
| https://github.com/Uncodedtech/nodebestpractices#-updated-7 |
| Read More: catching unhandled promise rejection | https://github.com/Uncodedtech/nodebestpractices/blob/master/sections/errorhandling/catchunhandledpromiserejection.md |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-211-fail-fast-validate-arguments-using-a-dedicated-library |
| ajv | https://www.npmjs.com/package/ajv |
| zod | https://github.com/colinhacks/zod |
| typebox | https://github.com/sinclairzx81/typebox |
| Read More: failing fast | https://github.com/Uncodedtech/nodebestpractices/blob/master/sections/errorhandling/failfast.md |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-212-always-await-promises-before-returning-to-avoid-a-partial-stacktrace |
| https://github.com/Uncodedtech/nodebestpractices#-new-2 |
| Read More: returning promises | https://github.com/Uncodedtech/nodebestpractices/blob/master/sections/errorhandling/returningpromises.md |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-213-subscribe-to-event-emitters-and-streams-error-event |
| https://github.com/Uncodedtech/nodebestpractices#-new-3 |
| EventTargets | https://nodejs.org/api/events.html#eventtarget-and-event-api |
| β¬ Return to top | https://github.com/Uncodedtech/nodebestpractices#table-of-contents |
| https://github.com/Uncodedtech/nodebestpractices#3-code-patterns-and-style-practices |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-31-use-eslint |
| ESLint | https://eslint.org |
| prettier | https://www.npmjs.com/package/prettier |
| Read More: Using ESLint and Prettier | https://github.com/Uncodedtech/nodebestpractices/blob/master/sections/codestylepractices/eslint_prettier.md |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-32-use-nodejs-eslint-extension-plugins |
| https://github.com/Uncodedtech/nodebestpractices#-updated-8 |
| eslint-plugin-node | https://www.npmjs.com/package/eslint-plugin-node |
| eslint-plugin-mocha | https://www.npmjs.com/package/eslint-plugin-mocha |
| eslint-plugin-node-security | https://www.npmjs.com/package/eslint-plugin-security |
| eslint-plugin-require | https://www.npmjs.com/package/eslint-plugin-require |
| /eslint-plugin-jest | https://www.npmjs.com/package/eslint-plugin-jest |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-33-start-a-codeblocks-curly-braces-on-the-same-line |
| https://github.com/Uncodedtech/nodebestpractices#code-example |
| Read more: "Why do results vary based on curly brace placement?" (StackOverflow) | https://stackoverflow.com/questions/3641519/why-does-a-results-vary-based-on-curly-brace-placement |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-34-separate-your-statements-properly |
| Prettier | https://prettier.io/ |
| Standardjs | https://standardjs.com/ |
| https://github.com/Uncodedtech/nodebestpractices#code-example-1 |
| Read more: "Semi ESLint rule" | https://eslint.org/docs/rules/semi |
| Read more: "No unexpected multiline ESLint rule" | https://eslint.org/docs/rules/no-unexpected-multiline |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-35-name-your-functions |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-36-use-naming-conventions-for-variables-constants-functions-and-classes |
| https://github.com/Uncodedtech/nodebestpractices#36-code-example |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-37-prefer-const-over-let-ditch-the-var |
| shouldn't be used in ES6 | https://hackernoon.com/why-you-shouldnt-use-var-anymore-f109a58b9b70 |
| Read more: JavaScript ES6+: var, let, or const? | https://medium.com/javascript-scene/javascript-es6-var-let-or-const-ba58b8dcde75 |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-38-require-modules-first-not-inside-functions |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-39-set-an-explicit-entry-point-to-a-modulefolder |
| https://github.com/Uncodedtech/nodebestpractices#-updated-9 |
| https://github.com/Uncodedtech/nodebestpractices#39-code-example---avoid-coupling-the-client-to-the-module-structure |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-310-use-the--operator |
| https://github.com/Uncodedtech/nodebestpractices#310-code-example |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-311-use-async-await-avoid-callbacks |
| Read more: Guide to async-await 1.0 | https://github.com/yortus/asyncawait |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-312-use-arrow-function-expressions- |
| Read more: Itβs Time to Embrace Arrow Functions | https://medium.com/javascript-scene/familiarity-bias-is-holding-you-back-its-time-to-embrace-arrow-functions-3d37e1a9bb75 |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-313-avoid-effects-outside-of-functions |
| https://github.com/Uncodedtech/nodebestpractices#-new-4 |
| β¬ Return to top | https://github.com/Uncodedtech/nodebestpractices#table-of-contents |
| https://github.com/Uncodedtech/nodebestpractices#4-testing-and-overall-quality-practices |
| JavaScript testing best practices | https://github.com/goldbergyoni/javascript-testing-best-practices |
| Node.js testing - beyond the basics | https://github.com/testjavascript/nodejs-integration-tests-best-practices |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-41-at-the-very-least-write-api-component-testing |
| Postman | https://www.getpostman.com/ |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-42-include-3-parts-in-each-test-name |
| https://github.com/Uncodedtech/nodebestpractices#-new-5 |
| Read More: Include 3 parts in each test name | https://github.com/Uncodedtech/nodebestpractices/blob/master/sections/testingandquality/3-parts-in-name.md |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-43-structure-tests-by-the-aaa-pattern |
| https://github.com/Uncodedtech/nodebestpractices#-new-6 |
| Read More: Structure tests by the AAA pattern | https://github.com/Uncodedtech/nodebestpractices/blob/master/sections/testingandquality/aaa.md |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-44-ensure-node-version-is-unified |
| https://github.com/Uncodedtech/nodebestpractices#-new-7 |
| nvm | https://github.com/nvm-sh/nvm |
| Volta | https://volta.sh/ |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-45-avoid-global-test-fixtures-and-seeds-add-data-per-test |
| Read More: Avoid global test fixtures | https://github.com/Uncodedtech/nodebestpractices/blob/master/sections/testingandquality/avoid-global-test-fixture.md |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-46-tag-your-tests |
| Mocha | https://mochajs.org/ |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-47-check-your-test-coverage-it-helps-to-identify-wrong-test-patterns |
| Istanbul | https://github.com/istanbuljs/istanbuljs |
| NYC | https://github.com/istanbuljs/nyc |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-48-use-production-like-environment-for-e2e-testing |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-49-refactor-regularly-using-static-analysis-tools |
| Sonarqube | https://www.sonarqube.org/ |
| stars | https://github.com/SonarSource/sonarqube |
| Code Climate | https://codeclimate.com/ |
| stars | https://github.com/codeclimate/codeclimate |
| Read More: Refactoring! | https://github.com/Uncodedtech/nodebestpractices/blob/master/sections/testingandquality/refactoring.md |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-410-mock-responses-of-external-http-services |
| https://github.com/Uncodedtech/nodebestpractices#-new-8 |
| nock | https://github.com/nock/nock |
| Mock-Server | https://www.mock-server.com/ |
| Read More: Mock external services | https://github.com/Uncodedtech/nodebestpractices/blob/master/sections/testingandquality/mock-external-services.md |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-411-test-your-middlewares-in-isolation |
| Read More: Test middlewares in isolation | https://github.com/Uncodedtech/nodebestpractices/blob/master/sections/testingandquality/test-middlewares.md |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-412-specify-a-port-in-production-randomize-in-testing |
| https://github.com/Uncodedtech/nodebestpractices#-new-9 |
| Read More: Randomize a port for testing | https://github.com/Uncodedtech/nodebestpractices/blob/master/sections/testingandquality/randomize-port.md |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-413-test-the-five-possible-outcomes |
| https://github.com/Uncodedtech/nodebestpractices#-new-10 |
| checklist here | https://testjavascript.com/wp-content/uploads/2021/10/the-backend-checklist.pdf |
| Node.js testing - beyond the basics | https://github.com/testjavascript/nodejs-integration-tests-best-practices |
| checklist comes handy | https://testjavascript.com/wp-content/uploads/2021/10/the-backend-checklist.pdf |
| Read More: Test five outcomes | https://github.com/Uncodedtech/nodebestpractices/blob/master/sections/testingandquality/test-five-outcomes.md |
| β¬ Return to top | https://github.com/Uncodedtech/nodebestpractices#table-of-contents |
| https://github.com/Uncodedtech/nodebestpractices#5-going-to-production-practices |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-51-monitoring |
| Read More: Monitoring! | https://github.com/Uncodedtech/nodebestpractices/blob/master/sections/production/monitoring.md |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-52-increase-the-observability-using-smart-logging |
| Read More: Increase transparency using smart logging | https://github.com/Uncodedtech/nodebestpractices/blob/master/sections/production/smartlogging.md |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-53-delegate-anything-possible-eg-gzip-ssl-to-a-reverse-proxy |
| Read More: Delegate anything possible (e.g. gzip, SSL) to a reverse proxy | https://github.com/Uncodedtech/nodebestpractices/blob/master/sections/production/delegatetoproxy.md |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-54-lock-dependencies |
| Read More: Lock dependencies | https://github.com/Uncodedtech/nodebestpractices/blob/master/sections/production/lockdependencies.md |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-55-guard-process-uptime-using-the-right-tool |
| systemd | https://systemd.io/ |
| Read More: Guard process uptime using the right tool | https://github.com/Uncodedtech/nodebestpractices/blob/master/sections/production/guardprocess.md |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-56-utilize-all-cpu-cores |
| Read More: Utilize all CPU cores | https://github.com/Uncodedtech/nodebestpractices/blob/master/sections/production/utilizecpu.md |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-57-create-a-maintenance-endpoint |
| Read More: Create a βmaintenance endpointβ | https://github.com/Uncodedtech/nodebestpractices/blob/master/sections/production/createmaintenanceendpoint.md |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-58-discover-the-unknowns-using-apm-products |
| https://github.com/Uncodedtech/nodebestpractices#-updated-10 |
| Read More: Discover errors and downtime using APM products | https://github.com/Uncodedtech/nodebestpractices/blob/master/sections/production/apmproducts.md |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-59-make-your-code-production-ready |
| Read More: Make your code production-ready | https://github.com/Uncodedtech/nodebestpractices/blob/master/sections/production/productioncode.md |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-510-measure-and-guard-the-memory-usage |
| Walmart | https://www.joyent.com/blog/walmart-node-js-memory-leak |
| Read More: Measure and guard the memory usage | https://github.com/Uncodedtech/nodebestpractices/blob/master/sections/production/measurememory.md |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-511-get-your-frontend-assets-out-of-node |
| Read More: Get your frontend assets out of Node | https://github.com/Uncodedtech/nodebestpractices/blob/master/sections/production/frontendout.md |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-512-strive-to-be-stateless |
| Read More: Be stateless, kill your Servers almost every day | https://github.com/Uncodedtech/nodebestpractices/blob/master/sections/production/bestateless.md |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-513-use-tools-that-automatically-detect-vulnerabilities |
| Read More: Use tools that automatically detect vulnerabilities | https://github.com/Uncodedtech/nodebestpractices/blob/master/sections/production/detectvulnerabilities.md |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-514-assign-a-transaction-id-to-each-log-statement |
| AsyncLocalStorage | https://nodejs.org/api/async_context.html |
| Read More: Assign βTransactionIdβ to each log statement | https://github.com/Uncodedtech/nodebestpractices/blob/master/sections/production/assigntransactionid.md |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-515-set-node_envproduction |
| Read More: Set NODE_ENV=production | https://github.com/Uncodedtech/nodebestpractices/blob/master/sections/production/setnodeenv.md |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-516-design-automated-atomic-and-zero-downtime-deployments |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-517-use-an-lts-release-of-nodejs |
| Read More: Use an LTS release of Node.js | https://github.com/Uncodedtech/nodebestpractices/blob/master/sections/production/LTSrelease.md |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-518-log-to-stdout-avoid-specifying-log-destination-within-the-app |
| https://github.com/Uncodedtech/nodebestpractices#-updated-11 |
| Read More: Log Routing | https://github.com/Uncodedtech/nodebestpractices/blob/master/sections/production/logrouting.md |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-519-install-your-packages-with-npm-ci |
| Read More: Use npm ci | https://github.com/Uncodedtech/nodebestpractices/blob/master/sections/production/installpackageswithnpmci.md |
| β¬ Return to top | https://github.com/Uncodedtech/nodebestpractices#table-of-contents |
| https://github.com/Uncodedtech/nodebestpractices#6-security-best-practices |
| https://camo.githubusercontent.com/06a7004640c6066f8b138350acf4fe351c79d135419d290f7c5ec652004bbcfe/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4f57415350253230546872656174732d546f7025323031302d677265656e2e737667 |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-61-embrace-linter-security-rules |
| https://www.owasp.org/index.php/Top_10-2017_A1-Injection |
| https://www.owasp.org/index.php/Top_10-2017_A7-Cross-Site_Scripting_(XSS) |
| eslint-plugin-security | https://github.com/nodesecurity/eslint-plugin-security |
| Read More: Lint rules | https://github.com/Uncodedtech/nodebestpractices/blob/master/sections/security/lintrules.md |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-62-limit-concurrent-requests-using-a-middleware |
| https://www.owasp.org/index.php/Denial_of_Service |
| rate-limiter-flexible | https://www.npmjs.com/package/rate-limiter-flexible |
| express-rate-limit | https://www.npmjs.com/package/express-rate-limit |
| Read More: Implement rate limiting | https://github.com/Uncodedtech/nodebestpractices/blob/master/sections/security/limitrequests.md |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-63-extract-secrets-from-config-files-or-use-packages-to-encrypt-them |
| https://www.owasp.org/index.php/Top_10-2017_A6-Security_Misconfiguration |
| https://www.owasp.org/index.php/Top_10-2017_A3-Sensitive_Data_Exposure |
| Read More: Secret management | https://github.com/Uncodedtech/nodebestpractices/blob/master/sections/security/secretmanagement.md |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-64-prevent-query-injection-vulnerabilities-with-ormodm-libraries |
| https://www.owasp.org/index.php/Top_10-2017_A1-Injection |
| Sequelize | https://github.com/sequelize/sequelize |
| Knex | https://github.com/tgriesser/knex |
| mongoose | https://github.com/Automattic/mongoose |
| Read More: Query injection prevention using ORM/ODM libraries | https://github.com/Uncodedtech/nodebestpractices/blob/master/sections/security/ormodmusage.md |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-65-collection-of-generic-security-best-practices |
| Read More: Common security best practices | https://github.com/Uncodedtech/nodebestpractices/blob/master/sections/security/commonsecuritybestpractices.md |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-66-adjust-the-http-response-headers-for-enhanced-security |
| https://www.owasp.org/index.php/Top_10-2017_A6-Security_Misconfiguration |
| helmet | https://www.npmjs.com/package/helmet |
| Read More: Using secure headers in your application | https://github.com/Uncodedtech/nodebestpractices/blob/master/sections/security/secureheaders.md |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-67-constantly-and-automatically-inspect-for-vulnerable-dependencies |
| https://www.owasp.org/index.php/Top_10-2017_A9-Using_Components_with_Known_Vulnerabilities |
| npm audit | https://docs.npmjs.com/cli/audit |
| snyk | https://snyk.io/ |
| Read More: Dependency security | https://github.com/Uncodedtech/nodebestpractices/blob/master/sections/security/dependencysecurity.md |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-68-protect-users-passwordssecrets-using-bcrypt-or-scrypt |
| https://www.owasp.org/index.php/Top_10-2017_A2-Broken_Authentication |
| Read More: User Passwords | https://github.com/Uncodedtech/nodebestpractices/blob/master/sections/security/userpasswords.md |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-69-escape-html-js-and-css-output |
| https://www.owasp.org/index.php/Top_10-2017_A7-Cross-Site_Scripting_(XSS) |
| Read More: Escape output | https://github.com/Uncodedtech/nodebestpractices/blob/master/sections/security/escape-output.md |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-610-validate-incoming-json-schemas |
| https://www.owasp.org/index.php/Top_10-2017_A7-Cross-Site_Scripting_(XSS) |
| https://www.owasp.org/index.php/Top_10-2017_A8-Insecure_Deserialization |
| jsonschema | https://www.npmjs.com/package/jsonschema |
| joi | https://www.npmjs.com/package/joi |
| Read More: Validate incoming JSON schemas | https://github.com/Uncodedtech/nodebestpractices/blob/master/sections/security/validation.md |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-611-support-blocklisting-jwts |
| https://www.owasp.org/index.php/Top_10-2017_A2-Broken_Authentication |
| Passport.js | https://github.com/jaredhanson/passport |
| Read More: Blocklist JSON Web Tokens | https://github.com/Uncodedtech/nodebestpractices/blob/master/sections/security/expirejwt.md |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-612-prevent-brute-force-attacks-against-authorization |
| https://www.owasp.org/index.php/Top_10-2017_A2-Broken_Authentication |
| Read More: Login rate limiting | https://github.com/Uncodedtech/nodebestpractices/blob/master/sections/security/login-rate-limit.md |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-613-run-nodejs-as-non-root-user |
| https://www.owasp.org/index.php/Top_10-2017_A5-Broken_Access_Control |
| Read More: Run Node.js as non-root user | https://github.com/Uncodedtech/nodebestpractices/blob/master/sections/security/non-root-user.md |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-614-limit-payload-size-using-a-reverse-proxy-or-a-middleware |
| https://www.owasp.org/index.php/Top_10-2017_A8-Insecure_Deserialization |
| https://www.owasp.org/index.php/Top_10-2017_A1-Injection |
| express body parser | https://github.com/expressjs/body-parser |
| Read More: Limit payload size | https://github.com/Uncodedtech/nodebestpractices/blob/master/sections/security/requestpayloadsizelimit.md |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-615-avoid-javascript-eval-statements |
| https://www.owasp.org/index.php/Top_10-2017_A7-Cross-Site_Scripting_(XSS) |
| https://www.owasp.org/index.php/Top_10-2017_A1-Injection |
| https://www.owasp.org/index.php/Top_10-2017_A4-XML_External_Entities_(XXE) |
| Read More: Avoid JavaScript eval statements | https://github.com/Uncodedtech/nodebestpractices/blob/master/sections/security/avoideval.md |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-616-prevent-evil-regex-from-overloading-your-single-thread-execution |
| https://www.owasp.org/index.php/Denial_of_Service |
| validator.js | https://github.com/chriso/validator.js |
| safe-regex | https://github.com/substack/safe-regex |
| Read More: Prevent malicious RegEx | https://github.com/Uncodedtech/nodebestpractices/blob/master/sections/security/regex.md |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-617-avoid-module-loading-using-a-variable |
| https://www.owasp.org/index.php/Top_10-2017_A7-Cross-Site_Scripting_(XSS) |
| https://www.owasp.org/index.php/Top_10-2017_A1-Injection |
| https://www.owasp.org/index.php/Top_10-2017_A4-XML_External_Entities_(XXE) |
| Eslint-plugin-security | https://www.npmjs.com/package/eslint-plugin-security |
| Read More: Safe module loading | https://github.com/Uncodedtech/nodebestpractices/blob/master/sections/security/safemoduleloading.md |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-618-run-unsafe-code-in-a-sandbox |
| https://www.owasp.org/index.php/Top_10-2017_A7-Cross-Site_Scripting_(XSS) |
| https://www.owasp.org/index.php/Top_10-2017_A1-Injection |
| https://www.owasp.org/index.php/Top_10-2017_A4-XML_External_Entities_(XXE) |
| Read More: Run unsafe code in a sandbox | https://github.com/Uncodedtech/nodebestpractices/blob/master/sections/security/sandbox.md |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-619-take-extra-care-when-working-with-child-processes |
| https://www.owasp.org/index.php/Top_10-2017_A7-Cross-Site_Scripting_(XSS) |
| https://www.owasp.org/index.php/Top_10-2017_A1-Injection |
| https://www.owasp.org/index.php/Top_10-2017_A4-XML_External_Entities_(XXE) |
| Read More: Be cautious when working with child processes | https://github.com/Uncodedtech/nodebestpractices/blob/master/sections/security/childprocesses.md |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-620-hide-error-details-from-clients |
| https://www.owasp.org/index.php/Top_10-2017_A6-Security_Misconfiguration |
| Read More: Hide error details from client | https://github.com/Uncodedtech/nodebestpractices/blob/master/sections/security/hideerrors.md |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-621-configure-2fa-for-npm-or-yarn |
| https://www.owasp.org/index.php/Top_10-2017_A6-Security_Misconfiguration |
| Have you heard about the eslint developer whose password was hijacked? | https://medium.com/@oprearocks/eslint-backdoor-what-it-is-and-how-to-fix-the-issue-221f58f1a8c8 |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-622-modify-session-middleware-settings |
| https://www.owasp.org/index.php/Top_10-2017_A6-Security_Misconfiguration |
| Read More: Cookie and session security | https://github.com/Uncodedtech/nodebestpractices/blob/master/sections/security/sessions.md |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-623-avoid-dos-attacks-by-explicitly-setting-when-a-process-should-crash |
| https://www.owasp.org/index.php/Denial_of_Service |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-624-prevent-unsafe-redirects |
| https://www.owasp.org/index.php/Top_10-2017_A1-Injection |
| Read More: Prevent unsafe redirects | https://github.com/Uncodedtech/nodebestpractices/blob/master/sections/security/saferedirects.md |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-625-avoid-publishing-secrets-to-the-npm-registry |
| https://www.owasp.org/index.php/Top_10-2017_A6-Security_Misconfiguration |
| Read More: Avoid publishing secrets | https://github.com/Uncodedtech/nodebestpractices/blob/master/sections/security/avoid_publishing_secrets.md |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-626-inspect-for-outdated-packages |
| npm-check-updates | https://www.npmjs.com/package/npm-check-updates |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-627-import-built-in-modules-using-the-node-protocol |
| https://github.com/Uncodedtech/nodebestpractices#-new-11 |
| https://owasp.org/Top10/A06_2021-Vulnerable_and_Outdated_Components/ |
| 'prefer-node-protocol' | https://github.com/sindresorhus/eslint-plugin-unicorn/blob/main/docs/rules/prefer-node-protocol.md |
| typosquatting attacks | https://en.wikipedia.org/wiki/Typosquatting |
| β¬ Return to top | https://github.com/Uncodedtech/nodebestpractices#table-of-contents |
| https://github.com/Uncodedtech/nodebestpractices#7-draft-performance-best-practices |
| Would you like to join? | https://github.com/goldbergyoni/nodebestpractices/issues/256 |
| https://github.com/Uncodedtech/nodebestpractices#our-contributors-are-working-on-this-section-would-you-like-to-join |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-71-dont-block-the-event-loop |
| Read More: Do not block the event loop | https://github.com/Uncodedtech/nodebestpractices/blob/master/sections/performance/block-loop.md |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-72-prefer-native-js-methods-over-user-land-utils-like-lodash |
| Read More: Native over user land utils | https://github.com/Uncodedtech/nodebestpractices/blob/master/sections/performance/nativeoverutil.md |
| β¬ Return to top | https://github.com/Uncodedtech/nodebestpractices#table-of-contents |
| https://github.com/Uncodedtech/nodebestpractices#8-docker-best-practices |
| Bret Fisher | https://github.com/BretFisher |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-81-use-multi-stage-builds-for-leaner-and-more-secure-docker-images |
| https://github.com/Uncodedtech/nodebestpractices#example-dockerfile-for-multi-stage-builds |
| Read More: Use multi-stage builds | https://github.com/Uncodedtech/nodebestpractices/blob/master/sections/docker/multi_stage_builds.md |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-82-bootstrap-using-node-command-avoid-npm-start |
| Starting from npm 7, npm claim | https://docs.npmjs.com/cli/v7/using-npm/changelog#706-2020-10-27 |
| Read More: Bootstrap container using node command, avoid npm start | https://github.com/Uncodedtech/nodebestpractices/blob/master/sections/docker/bootstrap-using-node.md |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-83-let-the-docker-runtime-handle-replication-and-uptime |
| Read More: Let the Docker orchestrator restart and replicate processes | https://github.com/Uncodedtech/nodebestpractices/blob/master/sections/docker/restart-and-replicate-processes.md |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-84-use-dockerignore-to-prevent-leaking-secrets |
| Read More: Use .dockerignore | https://github.com/Uncodedtech/nodebestpractices/blob/master/sections/docker/docker-ignore.md |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-85-clean-up-dependencies-before-production |
| eslint-scope | https://eslint.org/blog/2018/07/postmortem-for-malicious-package-publishes |
| Remove development dependencies | https://github.com/Uncodedtech/nodebestpractices/blob/master/sections/docker/install-for-production.md |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-86-shutdown-smartly-and-gracefully |
| Read More: Graceful shutdown | https://github.com/Uncodedtech/nodebestpractices/blob/master/sections/docker/graceful-shutdown.md |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-87-set-memory-limits-using-both-docker-and-v8 |
| Read More: Set memory limits using Docker only | https://github.com/Uncodedtech/nodebestpractices/blob/master/sections/docker/memory-limit.md |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-88-plan-for-efficient-caching |
| Read More: Leverage caching to reduce build times | https://github.com/Uncodedtech/nodebestpractices/blob/master/sections/docker/use-cache-for-shorter-build-time.md |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-89-use-explicit-image-reference-avoid-latest-tag |
| Read More: Understand image tags and use the "latest" tag with caution | https://github.com/Uncodedtech/nodebestpractices/blob/master/sections/docker/image-tags.md |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-810-prefer-smaller-docker-base-images |
| Read More: Prefer smaller images | https://github.com/Uncodedtech/nodebestpractices/blob/master/sections/docker/smaller_base_images.md |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-811-clean-out-build-time-secrets-avoid-secrets-in-args |
| https://github.com/Uncodedtech/nodebestpractices#-new-12 |
| Read More: Clean-out build-time secrets | https://github.com/Uncodedtech/nodebestpractices/blob/master/sections/docker/avoid-build-time-secrets.md |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-812-scan-images-for-multi-layers-of-vulnerabilities |
| Read More: Scan the entire image before production | https://github.com/Uncodedtech/nodebestpractices/blob/master/sections/docker/scan-images.md |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-813-clean-node_module-cache |
| Read More: Clean NODE_MODULE cache | https://github.com/Uncodedtech/nodebestpractices/blob/master/sections/docker/clean-cache.md |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-814-generic-docker-practices |
| Read More: Generic Docker practices | https://github.com/Uncodedtech/nodebestpractices/blob/master/sections/docker/generic-tips.md |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/checkbox-small-blue.png |
| https://github.com/Uncodedtech/nodebestpractices#-815-lint-your-dockerfile |
| https://github.com/Uncodedtech/nodebestpractices#-new-13 |
| Read More: Lint your Dockerfile | https://github.com/Uncodedtech/nodebestpractices/blob/master/sections/docker/lint-dockerfile.md |
| β¬ Return to top | https://github.com/Uncodedtech/nodebestpractices#table-of-contents |
| https://github.com/Uncodedtech/nodebestpractices#milestones |
| milestones | https://github.com/goldbergyoni/nodebestpractices/milestones |
| https://github.com/Uncodedtech/nodebestpractices#translations |
| https://github.com/Uncodedtech/nodebestpractices#completed-translations |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/flags/BR.png |
| Brazilian Portuguese | https://github.com/Uncodedtech/nodebestpractices/blob/master/README.brazilian-portuguese.md |
| Marcelo Melo | https://github.com/marcelosdm |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/flags/CN.png |
| Chinese | https://github.com/Uncodedtech/nodebestpractices/blob/master/README.chinese.md |
| Matt Jin | https://github.com/mattjin |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/flags/RU.png |
| Russian | https://github.com/Uncodedtech/nodebestpractices/blob/master/README.russian.md |
| Alex Ivanov | https://github.com/contributorpw |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/flags/PL.png |
| Polish | https://github.com/Uncodedtech/nodebestpractices/blob/master/README.polish.md |
| Michal Biesiada | https://github.com/mbiesiad |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/flags/JA.png |
| Japanese | https://github.com/Uncodedtech/nodebestpractices/blob/master/README.japanese.md |
| Yuki Ota | https://github.com/YukiOta |
| Yuta Azumi | https://github.com/YA21 |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/flags/EU.png |
| Basque | https://github.com/Uncodedtech/nodebestpractices/blob/master/README.basque.md |
| Ane Diaz de Tuesta | https://github.com/anediaz |
| https://github.com/Uncodedtech/nodebestpractices#translations-in-progress |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/flags/FR.png |
| French | https://github.com/Uncodedtech/nodebestpractices/blob/master/README.french.md |
| Discussion | https://github.com/goldbergyoni/nodebestpractices/issues/129 |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/flags/HE.png |
| Hebrew | https://github.com/Uncodedtech/nodebestpractices/blob/master/README.hebrew.md |
| Discussion | https://github.com/goldbergyoni/nodebestpractices/issues/156 |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/flags/KR.png |
| Korean | https://github.com/Uncodedtech/nodebestpractices/blob/master/README.korean.md |
| Sangbeom Han | https://github.com/uronly14me |
| Discussion | https://github.com/goldbergyoni/nodebestpractices/issues/94 |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/flags/ES.png |
| Spanish | https://github.com/goldbergyoni/nodebestpractices/blob/spanish-translation/README.spanish.md |
| Discussion | https://github.com/goldbergyoni/nodebestpractices/issues/95 |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/flags/TR.png |
| Discussion | https://github.com/goldbergyoni/nodebestpractices/issues/139 |
| https://github.com/Uncodedtech/nodebestpractices#steering-committee |
| GitHub projects | https://github.com/goldbergyoni/nodebestpractices/projects |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/members/yoni.png |
| Yoni Goldberg | https://github.com/goldbergyoni |
| https://twitter.com/goldbergyoni |
| https://goldbergyoni.com |
| goldbergyoni.com | https://goldbergyoni.com |
| @goldbergyoni | https://github.com/goldbergyoni |
| https://github.com/josh-hemphill |
| Josh Hemphill | https://github.com/josh-hemphill |
| https://twitter.com/spooklogical |
| https://www.linkedin.com/in/joshuahemphill/ |
| https://joshuahemphill.com |
| https://github.com/rluvaton |
| Raz Luvaton | https://github.com/rluvaton |
| https://twitter.com/rluvaton |
| https://www.linkedin.com/in/rluvaton/ |
| https://github.com/Uncodedtech/nodebestpractices#contributing |
| contributing docs | https://github.com/Uncodedtech/nodebestpractices/blob/master/.operations/CONTRIBUTING.md |
| https://github.com/Uncodedtech/nodebestpractices#contributors- |
| Kevin Rambaud | https://github.com/kevinrambaud |
| π | https://github.com/Uncodedtech/nodebestpractices#content-kevinrambaud |
| Michael Fine | https://github.com/mfine15 |
| π | https://github.com/Uncodedtech/nodebestpractices#content-mfine15 |
| Shreya Dahal | http://squgeim.github.io |
| π | https://github.com/Uncodedtech/nodebestpractices#content-squgeim |
| Matheus Cruz Rocha | http://matheusrocha89.com |
| π | https://github.com/Uncodedtech/nodebestpractices#content-matheusrocha89 |
| Yog Mehta | https://bityog.github.io/Portfolio/ |
| π | https://github.com/Uncodedtech/nodebestpractices#content-BitYog |
| Kudakwashe Paradzayi | http://kudapara.co.zw |
| π | https://github.com/Uncodedtech/nodebestpractices#content-kudapara |
| t1st3 | https://www.t1st3.com/ |
| π | https://github.com/Uncodedtech/nodebestpractices#content-t1st3 |
| mulijordan1976 | https://github.com/mulijordan1976 |
| π | https://github.com/Uncodedtech/nodebestpractices#content-mulijordan1976 |
| Matan Kushner | https://twitter.com/matchai |
| π | https://github.com/Uncodedtech/nodebestpractices#content-matchai |
| Fabio Hiroki | https://fabiothiroki.github.io |
| π | https://github.com/Uncodedtech/nodebestpractices#content-fabiothiroki |
| James Sumners | http://james.sumners.info/ |
| π | https://github.com/Uncodedtech/nodebestpractices#content-jsumners |
| Dan Gamble | https://twitter.com/_DanGamble |
| π | https://github.com/Uncodedtech/nodebestpractices#content-dan-gamble |
| PJ Trainor | https://github.com/trainorpj |
| π | https://github.com/Uncodedtech/nodebestpractices#content-trainorpj |
| Remek Ambroziak | https://github.com/reod |
| π | https://github.com/Uncodedtech/nodebestpractices#content-reod |
| Yoni Jah | https://ca.non.co.il |
| π | https://github.com/Uncodedtech/nodebestpractices#content-yonjah |
| Misha Khokhlov | https://github.com/hazolsky |
| π | https://github.com/Uncodedtech/nodebestpractices#content-hazolsky |
| Evgeny Orekhov | https://plus.google.com/+ΠΠ²Π³Π΅Π½ΠΈΠΉΠΡΠ΅Ρ
ΠΎΠ²/ |
| π | https://github.com/Uncodedtech/nodebestpractices#content-EvgenyOrekhov |
| - | https://github.com/gediminasml |
| π | https://github.com/Uncodedtech/nodebestpractices#content-gediminasml |
| Isaac Halvorson | http://hisaac.net |
| π | https://github.com/Uncodedtech/nodebestpractices#content-hisaac |
| Vedran KaraΔiΔ | http://www.vedrankaracic.com |
| π | https://github.com/Uncodedtech/nodebestpractices#content-vkaracic |
| lallenlowe | https://github.com/lallenlowe |
| π | https://github.com/Uncodedtech/nodebestpractices#content-lallenlowe |
| Nathan Wells | https://github.com/nwwells |
| π | https://github.com/Uncodedtech/nodebestpractices#content-nwwells |
| Paulo Reis | https://github.com/paulovitin |
| π | https://github.com/Uncodedtech/nodebestpractices#content-paulovitin |
| syzer | https://snap.simpego.ch |
| π | https://github.com/Uncodedtech/nodebestpractices#content-syzer |
| David Sancho | http://sancho.dev |
| π | https://github.com/Uncodedtech/nodebestpractices#content-davesnx |
| Robert Manolea | https://apiforge.it |
| π | https://github.com/Uncodedtech/nodebestpractices#content-pupix |
| Xavier Ho | https://jumptoglide.com |
| π | https://github.com/Uncodedtech/nodebestpractices#content-spaxe |
| Aaron | http://www.ocular-rhythm.io |
| π | https://github.com/Uncodedtech/nodebestpractices#content-ocularrhythm |
| Jan Charles Maghirang Adona | https://septa97.me |
| π | https://github.com/Uncodedtech/nodebestpractices#content-septa97 |
| Allen | https://www.cakeresume.com/allenfang |
| π | https://github.com/Uncodedtech/nodebestpractices#content-AllenFang |
| Leonardo Villela | https://github.com/leonardovillela |
| π | https://github.com/Uncodedtech/nodebestpractices#content-leonardovillela |
| MichaΕ ZaΕΔcki | https://michalzalecki.com |
| π | https://github.com/Uncodedtech/nodebestpractices#content-MichalZalecki |
| Chris Nicola | http://www.wealthbar.com |
| π | https://github.com/Uncodedtech/nodebestpractices#content-chrisnicola |
| Alejandro Corredor | https://twitter.com/aecorredor |
| π | https://github.com/Uncodedtech/nodebestpractices#content-aecorredor |
| cwar | https://github.com/cwar |
| π | https://github.com/Uncodedtech/nodebestpractices#content-cwar |
| Yuwei | https://github.com/keyfoxth |
| π | https://github.com/Uncodedtech/nodebestpractices#content-keyfoxth |
| Utkarsh Bhatt | https://bigcodenerd.org |
| π | https://github.com/Uncodedtech/nodebestpractices#content-utkarshbhatt12 |
| Duarte Mendes | https://github.com/duartemendes |
| π | https://github.com/Uncodedtech/nodebestpractices#content-duartemendes |
| Jason Kim | http://jasonkim.ca |
| π | https://github.com/Uncodedtech/nodebestpractices#content-serv |
| Mitja O. | https://github.com/Max101 |
| π | https://github.com/Uncodedtech/nodebestpractices#content-Max101 |
| Sandro Miguel Marques | http://sandromiguel.com |
| π | https://github.com/Uncodedtech/nodebestpractices#content-SandroMiguel |
| Gabe | https://github.com/GabeKuslansky |
| π | https://github.com/Uncodedtech/nodebestpractices#content-GabeKuslansky |
| Ron Gross | http://ripper234.com/ |
| π | https://github.com/Uncodedtech/nodebestpractices#content-ripper234 |
| Valeri Karpov | http://www.thecodebarbarian.com |
| π | https://github.com/Uncodedtech/nodebestpractices#content-vkarpov15 |
| Sergio Bernal | https://sergiobernal.com |
| π | https://github.com/Uncodedtech/nodebestpractices#content-imsergiobernal |
| Nikola Telkedzhiev | https://github.com/ntelkedzhiev |
| π | https://github.com/Uncodedtech/nodebestpractices#content-ntelkedzhiev |
| Vitor Godoy | https://github.com/vitordagamagodoy |
| π | https://github.com/Uncodedtech/nodebestpractices#content-vitordagamagodoy |
| Manish Saraan | https://www.manishsaraan.com/ |
| π | https://github.com/Uncodedtech/nodebestpractices#content-manishsaraan |
| Sangbeom Han | https://github.com/uronly14me |
| π | https://github.com/Uncodedtech/nodebestpractices#content-uronly14me |
| blackmatch | https://blackmatch.github.io |
| π | https://github.com/Uncodedtech/nodebestpractices#content-blackmatch |
| Joe Reeve | https://simmsreeve.com |
| π | https://github.com/Uncodedtech/nodebestpractices#content-ISNIT0 |
| Ryan Busby | https://github.com/BusbyActual |
| π | https://github.com/Uncodedtech/nodebestpractices#content-BusbyActual |
| Iman Mohamadi | http://jsdecorator.com |
| π | https://github.com/Uncodedtech/nodebestpractices#content-ImanMh |
| Sergii Paryzhskyi | https://github.com/HeeL |
| π | https://github.com/Uncodedtech/nodebestpractices#content-HeeL |
| Kapil Patel | https://github.com/kapilepatel |
| π | https://github.com/Uncodedtech/nodebestpractices#content-kapilepatel |
| θΏ·ζΈ‘ | https://twitter.com/justjavac |
| π | https://github.com/Uncodedtech/nodebestpractices#content-justjavac |
| Hozefa | https://github.com/hozefaj |
| π | https://github.com/Uncodedtech/nodebestpractices#content-hozefaj |
| Ethan | https://github.com/el-ethan |
| π | https://github.com/Uncodedtech/nodebestpractices#content-el-ethan |
| Sam | https://github.com/milkdeliver |
| π | https://github.com/Uncodedtech/nodebestpractices#content-milkdeliver |
| Arlind | https://github.com/ArlindXh |
| π | https://github.com/Uncodedtech/nodebestpractices#content-ArlindXh |
| Teddy Toussaint | https://github.com/ttous |
| π | https://github.com/Uncodedtech/nodebestpractices#content-ttous |
| Lewis | http://ardern.io |
| π | https://github.com/Uncodedtech/nodebestpractices#content-LewisArdern |
| Gabriel Lidenor | https://gabriellidenor.com/ |
| π | https://github.com/Uncodedtech/nodebestpractices#content-GabrielLidenor |
| Roman | https://github.com/animir |
| π | https://github.com/Uncodedtech/nodebestpractices#content-animir |
| Francozeira | https://github.com/Francozeira |
| π | https://github.com/Uncodedtech/nodebestpractices#content-Francozeira |
| Invvard | https://twitter.com/invvard |
| π | https://github.com/Uncodedtech/nodebestpractices#content-Invvard |
| RΓ΄mulo Garofalo | https://romulogarofalo.github.io/ |
| π | https://github.com/Uncodedtech/nodebestpractices#content-romulogarofalo |
| Tho Q Luong | http://thoqbk.github.io/ |
| π | https://github.com/Uncodedtech/nodebestpractices#content-thoqbk |
| Burak Shen | https://github.com/Qeneke |
| π | https://github.com/Uncodedtech/nodebestpractices#content-Qeneke |
| Martin Muzatko | http://www.happy-css.com |
| π | https://github.com/Uncodedtech/nodebestpractices#content-MartinMuzatko |
| Jared Collier | https://github.com/autoboxer |
| π | https://github.com/Uncodedtech/nodebestpractices#content-autoboxer |
| Hilton Meyer | http://hiltonmeyer.com |
| π | https://github.com/Uncodedtech/nodebestpractices#content-bikingbadger |
| ChangJoo Park(λ°μ°½μ£Ό) | http://kr.vuejs.org |
| π | https://github.com/Uncodedtech/nodebestpractices#content-ChangJoo-Park |
| Masahiro Sakaguchi | https://github.com/MasahiroSakaguchi |
| π | https://github.com/Uncodedtech/nodebestpractices#content-MasahiroSakaguchi |
| Keith Holliday | https://github.com/TheHollidayInn |
| π | https://github.com/Uncodedtech/nodebestpractices#content-TheHollidayInn |
| coreyc | https://www.coreycleary.me |
| π | https://github.com/Uncodedtech/nodebestpractices#content-coreyc |
| Maximilian Berkmann | http://maxcubing.wordpress.com |
| π | https://github.com/Uncodedtech/nodebestpractices#content-Berkmann18 |
| Douglas Mariano Valero | https://github.com/DouglasMV |
| π | https://github.com/Uncodedtech/nodebestpractices#content-DouglasMV |
| Marcelo Melo | https://github.com/marcelosdm |
| π | https://github.com/Uncodedtech/nodebestpractices#content-marcelosdm |
| Mehmet Perk | https://twitter.com/mperk_ |
| π | https://github.com/Uncodedtech/nodebestpractices#content-mperk |
| ryan ouyang | https://github.com/ryanouyang |
| π | https://github.com/Uncodedtech/nodebestpractices#content-ryanouyang |
| Shabeer | https://github.com/shabeer-mdy |
| π | https://github.com/Uncodedtech/nodebestpractices#content-shabeer-mdy |
| Eduard Kyvenko | https://github.com/halfzebra |
| π | https://github.com/Uncodedtech/nodebestpractices#content-halfzebra |
| Deyvison Rocha | http://deyvisonrocha.com |
| π | https://github.com/Uncodedtech/nodebestpractices#content-deyvisonrocha |
| George Mamer | http://twitter.com/georgemamer |
| π | https://github.com/Uncodedtech/nodebestpractices#content-georgem3 |
| Konstantinos Leimonis | https://github.com/leimonio |
| π | https://github.com/Uncodedtech/nodebestpractices#content-leimonio |
| Oliver Lluberes | https://github.com/Zybax |
| π | https://github.com/Uncodedtech/nodebestpractices#translation-Zybax |
| Tien Do | https://stackoverflow.com/story/tiendq |
| π | https://github.com/Uncodedtech/nodebestpractices#content-tiendq |
| Ranvir Singh | http://singh1114.github.io/ |
| π | https://github.com/Uncodedtech/nodebestpractices#content-singh1114 |
| Vadim Nicolaev | https://github.com/collierrgbsitisfise |
| π | https://github.com/Uncodedtech/nodebestpractices#content-collierrgbsitisfise |
| π | https://github.com/Uncodedtech/nodebestpractices#translation-collierrgbsitisfise |
| German Gamboa Gonzalez | https://github.com/germangamboa95 |
| π | https://github.com/Uncodedtech/nodebestpractices#content-germangamboa95 |
| Hafez | https://github.com/AbdelrahmanHafez |
| π | https://github.com/Uncodedtech/nodebestpractices#content-AbdelrahmanHafez |
| Chandiran | http://linkedin.com/in/chandiran-dmc |
| π | https://github.com/Uncodedtech/nodebestpractices#content-chandiran-dmc |
| VinayaSathyanarayana | https://github.com/VinayaSathyanarayana |
| π | https://github.com/Uncodedtech/nodebestpractices#content-VinayaSathyanarayana |
| Kim Kern | https://www.kimkern.de |
| π | https://github.com/Uncodedtech/nodebestpractices#content-kiwikern |
| Kenneth Freitas | https://kennethfreitas.github.io/ |
| π | https://github.com/Uncodedtech/nodebestpractices#content-kennethfreitas |
| songe | https://github.com/songe |
| π | https://github.com/Uncodedtech/nodebestpractices#content-songe |
| Kirill Shekhovtsov | http://ksed.dev |
| π | https://github.com/Uncodedtech/nodebestpractices#content-Ksedline |
| Serge | https://github.com/SerzN1 |
| π | https://github.com/Uncodedtech/nodebestpractices#content-SerzN1 |
| keyrwinz | https://github.com/keyrwinz |
| π | https://github.com/Uncodedtech/nodebestpractices#content-keyrwinz |
| Dmitry Nikitenko | https://github.com/nDmitry |
| π | https://github.com/Uncodedtech/nodebestpractices#content-nDmitry |
| bushuai | https://bushuai.cc |
| π | https://github.com/goldbergyoni/nodebestpractices/pulls?q=is%3Apr+reviewed-by%3Abushuai |
| π | https://github.com/Uncodedtech/nodebestpractices#content-bushuai |
| Benjamin Gruenbaum | https://stackoverflow.com/users/1348195/benjamin-gruenbaum |
| π | https://github.com/Uncodedtech/nodebestpractices#content-benjamingr |
| Ezequiel | https://github.com/byeze |
| π | https://github.com/Uncodedtech/nodebestpractices#translation-byeze |
| Juan JosΓ© RodrΓguez | https://github.com/juaoose |
| π | https://github.com/Uncodedtech/nodebestpractices#translation-juaoose |
| Or Bin | https://github.com/OrBin |
| π | https://github.com/Uncodedtech/nodebestpractices#content-OrBin |
| Andreo Vieira | https://twitter.com/andreoav07 |
| π | https://github.com/Uncodedtech/nodebestpractices#content-andreoav |
| Michael Solomon | https://github.com/mikicho |
| π | https://github.com/Uncodedtech/nodebestpractices#content-mikicho |
| Jimmy Callin | https://github.com/jimmycallin |
| π | https://github.com/Uncodedtech/nodebestpractices#content-jimmycallin |
| Siddharth | https://www.linkedin.com/in/siddharthofficial/ |
| π | https://github.com/Uncodedtech/nodebestpractices#content-w01fS |
| Ryan Smith | https://ryansmith.tech/ |
| π | https://github.com/Uncodedtech/nodebestpractices#content-ryan3E0 |
| Tom Boettger | https://de.linkedin.com/in/tom-boettger |
| π | https://github.com/Uncodedtech/nodebestpractices#content-bttger |
| JoaquΓn Ormaechea | https://github.com/jormaechea |
| π | https://github.com/Uncodedtech/nodebestpractices#translation-jormaechea |
| dfrzuz | https://github.com/dfrzuz |
| π | https://github.com/Uncodedtech/nodebestpractices#translation-dfrzuz |
| Victor Homyakov | https://github.com/victor-homyakov |
| π | https://github.com/Uncodedtech/nodebestpractices#content-victor-homyakov |
| Josh | http://joshuahemphill.com |
| π | https://github.com/Uncodedtech/nodebestpractices#content-josh-hemphill |
| π‘οΈ | https://github.com/Uncodedtech/nodebestpractices#security-josh-hemphill |
| Alec Francis | https://github.com/alec-francis |
| π | https://github.com/Uncodedtech/nodebestpractices#content-alec-francis |
| arjun6610 | https://github.com/arjun6610 |
| π | https://github.com/Uncodedtech/nodebestpractices#content-arjun6610 |
| Jan Osch | https://github.com/jan-osch |
| π | https://github.com/Uncodedtech/nodebestpractices#content-jan-osch |
| Thiago Rotondo Sampaio | https://github.com/thiagotrs |
| π | https://github.com/Uncodedtech/nodebestpractices#translation-thiagotrs |
| Alexsey | https://github.com/Alexsey |
| π | https://github.com/Uncodedtech/nodebestpractices#content-Alexsey |
| Luis A. Acurero | https://github.com/13luismb |
| π | https://github.com/Uncodedtech/nodebestpractices#translation-13luismb |
| Lucas Romano | https://lromano97.github.io/ |
| π | https://github.com/Uncodedtech/nodebestpractices#translation-lromano97 |
| Denise Case | https://github.com/denisecase |
| π | https://github.com/Uncodedtech/nodebestpractices#content-denisecase |
| Nick Ribal | http://stackoverflow.com/story/elektronik |
| π | https://github.com/Uncodedtech/nodebestpractices#content-elektronik2k5 |
| π | https://github.com/goldbergyoni/nodebestpractices/pulls?q=is%3Apr+reviewed-by%3Aelektronik2k5 |
| 0xflotus | https://github.com/0xflotus |
| π | https://github.com/Uncodedtech/nodebestpractices#content-0xflotus |
| Jonathan Chen | https://www.dijonkitchen.org/ |
| π | https://github.com/Uncodedtech/nodebestpractices#content-dijonkitchen |
| Dilan Srilal | https://github.com/dilansri |
| π | https://github.com/Uncodedtech/nodebestpractices#content-dilansri |
| vladthelittleone | https://vectree.ru |
| π | https://github.com/Uncodedtech/nodebestpractices#translation-vladthelittleone |
| Nik Osvalds | https://www.nikolaso.com |
| π | https://github.com/Uncodedtech/nodebestpractices#content-nosvalds |
| Daniel Kiss | https://github.com/kdaniel21 |
| π | https://github.com/goldbergyoni/nodebestpractices/commits?author=kdaniel21 |
| Forresst | https://twitter.com/forresst17 |
| π | https://github.com/Uncodedtech/nodebestpractices#content-forresst |
| Jonathan Svenheden | https://github.com/svenheden |
| π | https://github.com/Uncodedtech/nodebestpractices#content-svenheden |
| AustrisC | https://github.com/AustrisC |
| π | https://github.com/Uncodedtech/nodebestpractices#content-AustrisC |
| kyeongtae kim | https://github.com/cisco0808 |
| π | https://github.com/Uncodedtech/nodebestpractices#translation-cisco0808 |
| 007 | https://keybase.io/651z9pz968v2accj |
| π | https://github.com/Uncodedtech/nodebestpractices#content-6gx7iycn53ioq2e8apk1j1ypwov4giui |
| Ane Diaz de Tuesta | http://www.anediaz.com |
| π | https://github.com/Uncodedtech/nodebestpractices#translation-anediaz |
| π | https://github.com/Uncodedtech/nodebestpractices#content-anediaz |
| YukiOta | http://yukioh.net |
| π | https://github.com/Uncodedtech/nodebestpractices#translation-YukiOta |
| Frazer Smith | https://www.yeovilhospital.co.uk/ |
| π | https://github.com/Uncodedtech/nodebestpractices#content-Fdawgs |
| Raz Luvaton | https://github.com/rluvaton |
| π | https://github.com/Uncodedtech/nodebestpractices#content-rluvaton |
| Yuta Azumi | https://github.com/YA21 |
| π | https://github.com/Uncodedtech/nodebestpractices#content-YA21 |
| andrewjbarbour | https://github.com/andrewjbarbour |
| π | https://github.com/Uncodedtech/nodebestpractices#content-andrewjbarbour |
| mr | https://MasujimaRyohei.jp |
| π | https://github.com/Uncodedtech/nodebestpractices#content-MasujimaRyohei |
| Aleksandar | https://github.com/kubanac95 |
| π | https://github.com/Uncodedtech/nodebestpractices#content-kubanac95 |
| Owl | http://vincentjonathan.com |
| π | https://github.com/Uncodedtech/nodebestpractices#content-SuspiciousLookingOwl |
| Yedidya Schwartz | https://github.com/yedidyas |
| π | https://github.com/Uncodedtech/nodebestpractices#content-yedidyas |
| π‘ | https://github.com/Uncodedtech/nodebestpractices#example-yedidyas |
| ari | https://github.com/ariel-diaz |
| π | https://github.com/Uncodedtech/nodebestpractices#content-ariel-diaz |
| Thomas KΓΆnig | http://www.koenigthomas.de/ |
| π | https://github.com/Uncodedtech/nodebestpractices#content-Vispercept |
| Kalle LΓ€msΓ€ | https://github.com/coocos |
| π | https://github.com/Uncodedtech/nodebestpractices#content-coocos |
| Wyatt | http://math.cat |
| π | https://github.com/Uncodedtech/nodebestpractices#content-ZhyMC |
| KHADIR Tayeb | http://libkhadir.fr |
| π | https://github.com/Uncodedtech/nodebestpractices#content-tkhadir |
| Shankar Regmi | https://github.com/shankarregmi |
| π | https://github.com/Uncodedtech/nodebestpractices#content-shankarregmi |
| Shubham | https://github.com/codebyshubham |
| π | https://github.com/Uncodedtech/nodebestpractices#content-codebyshubham |
| Lucas Alves | http://lucalves.me/ |
| π | https://github.com/Uncodedtech/nodebestpractices#content-lucalves |
| Benjamin | https://github.com/benjaminudoh10 |
| π | https://github.com/Uncodedtech/nodebestpractices#content-benjaminudoh10 |
| Yeoh Joer | https://www.yjoer.com |
| π | https://github.com/Uncodedtech/nodebestpractices#content-yjoer |
| Miigon | https://blog.miigon.net |
| π | https://github.com/Uncodedtech/nodebestpractices#content-Miigon |
| Rostislav Bogorad | http://brainstorage.me/Egregor2011 |
| π | https://github.com/Uncodedtech/nodebestpractices#content-Egregor2011 |
| Flouse | https://github.com/Flouse |
| π | https://github.com/Uncodedtech/nodebestpractices#content-Flouse |
| Tarantini Pereira | http://taranttini.com |
| π | https://github.com/Uncodedtech/nodebestpractices#content-taranttini |
| Kazuki Matsuo | https://github.com/kzmat |
| π | https://github.com/Uncodedtech/nodebestpractices#content-kzmat |
| Adam Smith | https://github.com/burkybang |
| π | https://github.com/Uncodedtech/nodebestpractices#content-burkybang |
| Dohyeon Ko | https://codekodo.tistory.com |
| π | https://github.com/Uncodedtech/nodebestpractices#content-k906506 |
| Vladislav Legkov | https://github.com/vlad99902 |
| π | https://github.com/Uncodedtech/nodebestpractices#content-vlad99902 |
| Kerollos Magdy | http://kerolloz.github.io |
| π | https://github.com/Uncodedtech/nodebestpractices#content-kerolloz |
| Erez Lieberman | https://www.linkedin.com/in/erez-lieberman-b90b7219/ |
| π | https://github.com/Uncodedtech/nodebestpractices#content-erezLieberman |
| Breno Macedo | https://www.linkedin.com/in/breno-macedo-ernani-de-s%C3%A1-110223158/ |
| π | https://github.com/Uncodedtech/nodebestpractices#content-breno404 |
| Fernando Flores | https://github.com/JFernando122 |
| π | https://github.com/Uncodedtech/nodebestpractices#translation-JFernando122 |
| Rafael Brito | https://www.linkedin.com/in/rafaelconcept/ |
| π | https://github.com/Uncodedtech/nodebestpractices#translation-rafaelconcept |
| Emiliano Peralta | https://emiliano-peralta-portfolio.vercel.app/ |
| π | https://github.com/Uncodedtech/nodebestpractices#translation-emiperalta |
| Shin, SJ | https://lannex.github.io |
| π | https://github.com/Uncodedtech/nodebestpractices#content-lannex |
| Benjamin Forster | http://www.benjaminforster.com |
| π | https://github.com/Uncodedtech/nodebestpractices#content-e-e-e |
| Daniele Fedeli | https://github.com/DanieleFedeli |
| π | https://github.com/Uncodedtech/nodebestpractices#content-DanieleFedeli |
| djob195 | https://github.com/djob195 |
| π | https://github.com/Uncodedtech/nodebestpractices#content-djob195 |
| antspk | https://github.com/antspk |
| π | https://github.com/Uncodedtech/nodebestpractices#content-antspk |
| μ μ§μ | https://jjy0821.tistory.com/ |
| π | https://github.com/Uncodedtech/nodebestpractices#content-jjy821 |
| kkk-cashwalk | https://github.com/kkk-cashwalk |
| π | https://github.com/Uncodedtech/nodebestpractices#content-kkk-cashwalk |
| apainintheneck | https://github.com/apainintheneck |
| π | https://github.com/Uncodedtech/nodebestpractices#content-apainintheneck |
| Fajar Budhi Iswanda | https://github.com/koyanyaroo |
| π | https://github.com/Uncodedtech/nodebestpractices#content-koyanyaroo |
| μ΄μ£ΌνΈ | https://github.com/jutiger |
| π | https://github.com/Uncodedtech/nodebestpractices#content-jutiger |
| Singh | https://github.com/MisterSingh |
| π | https://github.com/Uncodedtech/nodebestpractices#content-MisterSingh |
| Alex Dumitru | https://github.com/Alex-Dumitru |
| π | https://github.com/Uncodedtech/nodebestpractices#content-Alex-Dumitru |
| Anton Lykhatskyi | https://github.com/lykhatskyi |
| π | https://github.com/Uncodedtech/nodebestpractices#content-lykhatskyi |
| sangwonlee | https://github.com/EverythingAvailable |
| π | https://github.com/Uncodedtech/nodebestpractices#content-EverythingAvailable |
| Eugenio Berretta | https://github.com/euberdeveloper |
| π | https://github.com/Uncodedtech/nodebestpractices#content-euberdeveloper |
| soranakk | https://github.com/soranakk |
| π | https://github.com/Uncodedtech/nodebestpractices#content-soranakk |
| κ³ μ€μ | https://github.com/backend-joonyoung |
| π | https://github.com/Uncodedtech/nodebestpractices#content-backend-joonyoung |
| π» | https://github.com/goldbergyoni/nodebestpractices/commits?author=backend-joonyoung |
| Guilherme Portella | https://github.com/GuilhermePortella |
| π | https://github.com/Uncodedtech/nodebestpractices#content-GuilhermePortella |
| AndrΓ© Esser | https://www.youtube.com/channel/UCBxzOQd2v9wWfiMDrf_RQ7A |
| π | https://github.com/Uncodedtech/nodebestpractices#content-Esser50K |
| Scc | https://github.com/ShiChenCong |
| π | https://github.com/Uncodedtech/nodebestpractices#translation-ShiChenCong |
| Mauro Accornero | https://www.mauroaccornero.it |
| π | https://github.com/Uncodedtech/nodebestpractices#content-mauroaccornero |
| no-yan | https://github.com/no-yan |
| π | https://github.com/Uncodedtech/nodebestpractices#content-no-yan |
| hodbauer | https://github.com/hodbauer |
| π | https://github.com/Uncodedtech/nodebestpractices/blob/master/translation-hodbauer |
| https://github.com/Uncodedtech/nodebestpractices#steering-committee-emeriti |
| Bruno Scheufler | https://github.com/BrunoScheufler |
| https://brunoscheufler.com/ |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/members/kyle.png |
| Kyle Martin | https://github.com/js-kyle |
| https://twitter.com/kylemartin_93 |
| https://www.linkedin.com/in/kylemartinnz |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/members/kevyn.png |
| Kevyn Bruyere | https://github.com/kevynb |
| https://www.linkedin.com/in/kevynbruyere/ |
| https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/members/sagir.png |
| Sagir Khan | https://github.com/sagirk |
| https://twitter.com/sagir_k |
| https://linkedin.com/in/sagirk |
| https://sagirk.com |
| twitter.com/nodepractices/ | https://twitter.com/nodepractices/ |
|
Readme
| https://github.com/Uncodedtech/nodebestpractices#readme-ov-file |
|
CC-BY-SA-4.0 license
| https://github.com/Uncodedtech/nodebestpractices#CC-BY-SA-4.0-1-ov-file |
| Please reload this page | https://github.com/Uncodedtech/nodebestpractices |
|
Activity | https://github.com/Uncodedtech/nodebestpractices/activity |
|
Custom properties | https://github.com/Uncodedtech/nodebestpractices/custom-properties |
|
0
stars | https://github.com/Uncodedtech/nodebestpractices/stargazers |
|
0
watching | https://github.com/Uncodedtech/nodebestpractices/watchers |
|
0
forks | https://github.com/Uncodedtech/nodebestpractices/forks |
|
Report repository
| https://github.com/contact/report-content?content_url=https%3A%2F%2Fgithub.com%2FUncodedtech%2Fnodebestpractices&report=Uncodedtech+%28user%29 |
| Releases | https://github.com/Uncodedtech/nodebestpractices/releases |
| Packages
0 | https://github.com/orgs/Uncodedtech/packages?repo_name=nodebestpractices |
|
| https://github.com |
| Terms | https://docs.github.com/site-policy/github-terms/github-terms-of-service |
| Privacy | https://docs.github.com/site-policy/privacy-policies/github-privacy-statement |
| Security | https://github.com/security |
| Status | https://www.githubstatus.com/ |
| Community | https://github.community/ |
| Docs | https://docs.github.com/ |
| Contact | https://support.github.com?tags=dotcom-footer |