RenΓ©'s URL Explorer Experiment


Title: GitHub - Uncodedtech/nodebestpractices: :white_check_mark: The Node.js best practices list (June 2021)

Open Graph Title: GitHub - Uncodedtech/nodebestpractices: :white_check_mark: The Node.js best practices list (June 2021)

X Title: GitHub - Uncodedtech/nodebestpractices: :white_check_mark: The Node.js best practices list (June 2021)

Description: :white_check_mark: The Node.js best practices list (June 2021) - Uncodedtech/nodebestpractices

Open Graph Description: :white_check_mark: The Node.js best practices list (June 2021) - Uncodedtech/nodebestpractices

X Description: :white_check_mark: The Node.js best practices list (June 2021) - Uncodedtech/nodebestpractices

Mail addresses
me@goldbergyoni.com

Opengraph URL: https://github.com/Uncodedtech/nodebestpractices

X: @github

direct link

Domain: github.com

route-pattern/:user_id/:repository
route-controllerfiles
route-actiondisambiguate
fetch-noncev2:4d2cedca-4848-3024-1e0f-d0a056f36313
current-catalog-service-hashf3abb0cc802f3d7b95fc8762b94bdcb13bf39634c40c357301c4aa1d67a256fb
request-id81C2:4DECD:D3DBE9:10D0CF6:69747680
html-safe-noncec0c2bf9a01ab300ecd36ebfc7f9ad1360e6ad6f662ecc8a277c06fd2689f1a39
visitor-payloadeyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiI4MUMyOjRERUNEOkQzREJFOToxMEQwQ0Y2OjY5NzQ3NjgwIiwidmlzaXRvcl9pZCI6IjUyMjA1MDE5ODUyMDY0OTg5NDQiLCJyZWdpb25fZWRnZSI6ImlhZCIsInJlZ2lvbl9yZW5kZXIiOiJpYWQifQ==
visitor-hmac566834de835bc40368f593b880ed0bff1ca405e7f8549c7b97c4d699e9a94e91
hovercard-subject-tagrepository:372685593
github-keyboard-shortcutsrepository,copilot
google-site-verificationApib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I
octolytics-urlhttps://collector.github.com/github/collect
analytics-location//
fb:app_id1401488693436528
apple-itunes-appapp-id=1477376905, app-argument=https://github.com/Uncodedtech/nodebestpractices
twitter:imagehttps://opengraph.githubassets.com/2f9b865cbf9e6cd19c45e47b7217db0665d2f74f08a4f3f7167199f912e7175c/Uncodedtech/nodebestpractices
twitter:cardsummary_large_image
og:imagehttps://opengraph.githubassets.com/2f9b865cbf9e6cd19c45e47b7217db0665d2f74f08a4f3f7167199f912e7175c/Uncodedtech/nodebestpractices
og:image:alt:white_check_mark: The Node.js best practices list (June 2021) - Uncodedtech/nodebestpractices
og:image:width1200
og:image:height600
og:site_nameGitHub
og:typeobject
hostnamegithub.com
expected-hostnamegithub.com
Nonee0b95d743b7672c9ac0e1032d5f117950182dc164a83434a7db86510e8f0b37c
turbo-cache-controlno-preview
go-importgithub.com/Uncodedtech/nodebestpractices git https://github.com/Uncodedtech/nodebestpractices.git
octolytics-dimension-user_id69833530
octolytics-dimension-user_loginUncodedtech
octolytics-dimension-repository_id372685593
octolytics-dimension-repository_nwoUncodedtech/nodebestpractices
octolytics-dimension-repository_publictrue
octolytics-dimension-repository_is_forktrue
octolytics-dimension-repository_parent_id103633984
octolytics-dimension-repository_parent_nwogoldbergyoni/nodebestpractices
octolytics-dimension-repository_network_root_id103633984
octolytics-dimension-repository_network_root_nwogoldbergyoni/nodebestpractices
turbo-body-classeslogged-out env-production page-responsive
disable-turbofalse
browser-stats-urlhttps://api.github.com/_private/browser/stats
browser-errors-urlhttps://api.github.com/_private/browser/errors
release56fe7e2e8de6e57740bca50402351ea656f7a4bf
ui-targetfull
theme-color#1e2327
color-schemelight dark

Links:

Skip to contenthttps://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 AIhttps://github.com/features/copilot
GitHub SparkBuild and deploy intelligent appshttps://github.com/features/spark
GitHub ModelsManage and compare promptshttps://github.com/features/models
MCP RegistryNewIntegrate external toolshttps://github.com/mcp
ActionsAutomate any workflowhttps://github.com/features/actions
CodespacesInstant dev environmentshttps://github.com/features/codespaces
IssuesPlan and track workhttps://github.com/features/issues
Code ReviewManage code changeshttps://github.com/features/code-review
GitHub Advanced SecurityFind and fix vulnerabilitieshttps://github.com/security/advanced-security
Code securitySecure your code as you buildhttps://github.com/security/advanced-security/code-security
Secret protectionStop leaks before they starthttps://github.com/security/advanced-security/secret-protection
Why GitHubhttps://github.com/why-github
Documentationhttps://docs.github.com
Bloghttps://github.blog
Changeloghttps://github.blog/changelog
Marketplacehttps://github.com/marketplace
View all featureshttps://github.com/features
Enterpriseshttps://github.com/enterprise
Small and medium teamshttps://github.com/team
Startupshttps://github.com/enterprise/startups
Nonprofitshttps://github.com/solutions/industry/nonprofits
App Modernizationhttps://github.com/solutions/use-case/app-modernization
DevSecOpshttps://github.com/solutions/use-case/devsecops
DevOpshttps://github.com/solutions/use-case/devops
CI/CDhttps://github.com/solutions/use-case/ci-cd
View all use caseshttps://github.com/solutions/use-case
Healthcarehttps://github.com/solutions/industry/healthcare
Financial serviceshttps://github.com/solutions/industry/financial-services
Manufacturinghttps://github.com/solutions/industry/manufacturing
Governmenthttps://github.com/solutions/industry/government
View all industrieshttps://github.com/solutions/industry
View all solutionshttps://github.com/solutions
AIhttps://github.com/resources/articles?topic=ai
Software Developmenthttps://github.com/resources/articles?topic=software-development
DevOpshttps://github.com/resources/articles?topic=devops
Securityhttps://github.com/resources/articles?topic=security
View all topicshttps://github.com/resources/articles
Customer storieshttps://github.com/customer-stories
Events & webinarshttps://github.com/resources/events
Ebooks & reportshttps://github.com/resources/whitepapers
Business insightshttps://github.com/solutions/executive-insights
GitHub Skillshttps://skills.github.com
Documentationhttps://docs.github.com
Customer supporthttps://support.github.com
Community forumhttps://github.com/orgs/community/discussions
Trust centerhttps://github.com/trust-center
Partnershttps://github.com/partners
GitHub SponsorsFund open source developershttps://github.com/sponsors
Security Labhttps://securitylab.github.com
Maintainer Communityhttps://maintainers.github.com
Acceleratorhttps://github.com/accelerator
Archive Programhttps://archiveprogram.github.com
Topicshttps://github.com/topics
Trendinghttps://github.com/trending
Collectionshttps://github.com/collections
Enterprise platformAI-powered developer platformhttps://github.com/enterprise
GitHub Advanced SecurityEnterprise-grade security featureshttps://github.com/security/advanced-security
Copilot for BusinessEnterprise-grade AI featureshttps://github.com/features/copilot/copilot-business
Premium SupportEnterprise-grade 24/7 supporthttps://github.com/premium-support
Pricinghttps://github.com/pricing
Search syntax tipshttps://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax
documentationhttps://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
Reloadhttps://github.com/Uncodedtech/nodebestpractices
Reloadhttps://github.com/Uncodedtech/nodebestpractices
Reloadhttps://github.com/Uncodedtech/nodebestpractices
Uncodedtech https://github.com/Uncodedtech
nodebestpracticeshttps://github.com/Uncodedtech/nodebestpractices
goldbergyoni/nodebestpracticeshttps://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
Brancheshttps://github.com/Uncodedtech/nodebestpractices/branches
Tagshttps://github.com/Uncodedtech/nodebestpractices/tags
https://github.com/Uncodedtech/nodebestpractices/branches
https://github.com/Uncodedtech/nodebestpractices/tags
3,916 Commitshttps://github.com/Uncodedtech/nodebestpractices/commits/master/
https://github.com/Uncodedtech/nodebestpractices/commits/master/
.githubhttps://github.com/Uncodedtech/nodebestpractices/tree/master/.github
.githubhttps://github.com/Uncodedtech/nodebestpractices/tree/master/.github
.operationshttps://github.com/Uncodedtech/nodebestpractices/tree/master/.operations
.operationshttps://github.com/Uncodedtech/nodebestpractices/tree/master/.operations
assetshttps://github.com/Uncodedtech/nodebestpractices/tree/master/assets
assetshttps://github.com/Uncodedtech/nodebestpractices/tree/master/assets
sectionshttps://github.com/Uncodedtech/nodebestpractices/tree/master/sections
sectionshttps://github.com/Uncodedtech/nodebestpractices/tree/master/sections
.all-contributorsrchttps://github.com/Uncodedtech/nodebestpractices/blob/master/.all-contributorsrc
.all-contributorsrchttps://github.com/Uncodedtech/nodebestpractices/blob/master/.all-contributorsrc
.gitignorehttps://github.com/Uncodedtech/nodebestpractices/blob/master/.gitignore
.gitignorehttps://github.com/Uncodedtech/nodebestpractices/blob/master/.gitignore
LICENSEhttps://github.com/Uncodedtech/nodebestpractices/blob/master/LICENSE
LICENSEhttps://github.com/Uncodedtech/nodebestpractices/blob/master/LICENSE
README.basque.mdhttps://github.com/Uncodedtech/nodebestpractices/blob/master/README.basque.md
README.basque.mdhttps://github.com/Uncodedtech/nodebestpractices/blob/master/README.basque.md
README.brazilian-portuguese.mdhttps://github.com/Uncodedtech/nodebestpractices/blob/master/README.brazilian-portuguese.md
README.brazilian-portuguese.mdhttps://github.com/Uncodedtech/nodebestpractices/blob/master/README.brazilian-portuguese.md
README.chinese.mdhttps://github.com/Uncodedtech/nodebestpractices/blob/master/README.chinese.md
README.chinese.mdhttps://github.com/Uncodedtech/nodebestpractices/blob/master/README.chinese.md
README.french.mdhttps://github.com/Uncodedtech/nodebestpractices/blob/master/README.french.md
README.french.mdhttps://github.com/Uncodedtech/nodebestpractices/blob/master/README.french.md
README.hebrew.mdhttps://github.com/Uncodedtech/nodebestpractices/blob/master/README.hebrew.md
README.hebrew.mdhttps://github.com/Uncodedtech/nodebestpractices/blob/master/README.hebrew.md
README.indonesian.mdhttps://github.com/Uncodedtech/nodebestpractices/blob/master/README.indonesian.md
README.indonesian.mdhttps://github.com/Uncodedtech/nodebestpractices/blob/master/README.indonesian.md
README.japanese.mdhttps://github.com/Uncodedtech/nodebestpractices/blob/master/README.japanese.md
README.japanese.mdhttps://github.com/Uncodedtech/nodebestpractices/blob/master/README.japanese.md
README.korean.mdhttps://github.com/Uncodedtech/nodebestpractices/blob/master/README.korean.md
README.korean.mdhttps://github.com/Uncodedtech/nodebestpractices/blob/master/README.korean.md
README.mdhttps://github.com/Uncodedtech/nodebestpractices/blob/master/README.md
README.mdhttps://github.com/Uncodedtech/nodebestpractices/blob/master/README.md
README.polish.mdhttps://github.com/Uncodedtech/nodebestpractices/blob/master/README.polish.md
README.polish.mdhttps://github.com/Uncodedtech/nodebestpractices/blob/master/README.polish.md
README.russian.mdhttps://github.com/Uncodedtech/nodebestpractices/blob/master/README.russian.md
README.russian.mdhttps://github.com/Uncodedtech/nodebestpractices/blob/master/README.russian.md
package.jsonhttps://github.com/Uncodedtech/nodebestpractices/blob/master/package.json
package.jsonhttps://github.com/Uncodedtech/nodebestpractices/blob/master/package.json
READMEhttps://github.com/Uncodedtech/nodebestpractices
CC-BY-SA-4.0 licensehttps://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/
@nodepracticeshttps://twitter.com/nodepractices/
CNhttps://github.com/Uncodedtech/nodebestpractices/blob/master/README.chinese.md
FRhttps://github.com/Uncodedtech/nodebestpractices/blob/master/README.french.md
BRhttps://github.com/Uncodedtech/nodebestpractices/blob/master/README.brazilian-portuguese.md
RUhttps://github.com/Uncodedtech/nodebestpractices/blob/master/README.russian.md
PLhttps://github.com/Uncodedtech/nodebestpractices/blob/master/README.polish.md
JAhttps://github.com/Uncodedtech/nodebestpractices/blob/master/README.japanese.md
EUhttps://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.jshttps://github.com/practicajs/practica
https://github.com/Uncodedtech/nodebestpractices#welcome-3-things-you-ought-to-know-first
writing guidelines herehttps://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 salehttps://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 #updatedhttps://github.com/Uncodedtech/nodebestpractices#-11-structure-your-solution-by-business-components
1.2 Layer your components, keep the web layer within its boundaries #strategic #updatedhttps://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 publishinghttps://github.com/Uncodedtech/nodebestpractices#-13-wrap-common-utilities-as-packages-consider-publishing
1.4 Use environment aware, secure and hierarchical config #updatedhttps://github.com/Uncodedtech/nodebestpractices#-14-use-environment-aware-secure-and-hierarchical-config
1.5 Consider all the consequences when choosing the main framework #newhttps://github.com/Uncodedtech/nodebestpractices#-15-consider-all-the-consequences-when-choosing-the-main-framework
1.6 Use TypeScript sparingly and thoughtfully #newhttps://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 handlinghttps://github.com/Uncodedtech/nodebestpractices#-21-use-async-await-or-promises-for-async-error-handling
2.2 Extend the built-in Error object #strategic #updatedhttps://github.com/Uncodedtech/nodebestpractices#-22-extend-the-built-in-error-object
2.3 Distinguish operational vs programmer errors #strategic #updatedhttps://github.com/Uncodedtech/nodebestpractices#-23-distinguish-catastrophic-errors-from-operational-errors
2.4 Handle errors centrally, not within a middleware #strategichttps://github.com/Uncodedtech/nodebestpractices#-24-handle-errors-centrally-not-within-a-middleware
2.5 Document API errors using OpenAPI or GraphQLhttps://github.com/Uncodedtech/nodebestpractices#-25-document-api-errors-using-openapi-or-graphql
2.6 Exit the process gracefully when a stranger comes to town #strategichttps://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 #updatedhttps://github.com/Uncodedtech/nodebestpractices#-27-use-a-mature-logger-to-increase-errors-visibility
2.8 Test error flows using your favorite test framework #updatedhttps://github.com/Uncodedtech/nodebestpractices#-28-test-error-flows-using-your-favorite-test-framework
2.9 Discover errors and downtime using APM productshttps://github.com/Uncodedtech/nodebestpractices#-29-discover-errors-and-downtime-using-apm-products
2.10 Catch unhandled promise rejections #updatedhttps://github.com/Uncodedtech/nodebestpractices#-210-catch-unhandled-promise-rejections
2.11 Fail fast, validate arguments using a dedicated libraryhttps://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 #newhttps://github.com/Uncodedtech/nodebestpractices#-212-always-await-promises-before-returning-to-avoid-a-partial-stacktrace
2.13 Subscribe to event emitters 'error' event #newhttps://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 #strategichttps://github.com/Uncodedtech/nodebestpractices#-31-use-eslint
3.2 Use Node.js eslint extension plugins #updatedhttps://github.com/Uncodedtech/nodebestpractices#-32-use-nodejs-eslint-extension-plugins
3.3 Start a Codeblock's Curly Braces on the Same Linehttps://github.com/Uncodedtech/nodebestpractices#-33-start-a-codeblocks-curly-braces-on-the-same-line
3.4 Separate your statements properlyhttps://github.com/Uncodedtech/nodebestpractices#-34-separate-your-statements-properly
3.5 Name your functionshttps://github.com/Uncodedtech/nodebestpractices#-35-name-your-functions
3.6 Use naming conventions for variables, constants, functions and classeshttps://github.com/Uncodedtech/nodebestpractices#-36-use-naming-conventions-for-variables-constants-functions-and-classes
3.7 Prefer const over let. Ditch the varhttps://github.com/Uncodedtech/nodebestpractices#-37-prefer-const-over-let-ditch-the-var
3.8 Require modules first, not inside functionshttps://github.com/Uncodedtech/nodebestpractices#-38-require-modules-first-not-inside-functions
3.9 Set an explicit entry point to a module/folder #updatedhttps://github.com/Uncodedtech/nodebestpractices#-39-set-an-explicit-entry-point-to-a-modulefolder
3.10 Use the === operatorhttps://github.com/Uncodedtech/nodebestpractices#-310-use-the--operator
3.11 Use Async Await, avoid callbacks #strategichttps://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 #newhttps://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 #strategichttps://github.com/Uncodedtech/nodebestpractices#-41-at-the-very-least-write-api-component-testing
4.2 Include 3 parts in each test name #newhttps://github.com/Uncodedtech/nodebestpractices#-42-include-3-parts-in-each-test-name
4.3 Structure tests by the AAA pattern #strategichttps://github.com/Uncodedtech/nodebestpractices#-43-structure-tests-by-the-aaa-pattern
4.4 Ensure Node version is unified #newhttps://github.com/Uncodedtech/nodebestpractices#-44-ensure-node-version-is-unified
4.5 Avoid global test fixtures and seeds, add data per-test #strategichttps://github.com/Uncodedtech/nodebestpractices#-45-avoid-global-test-fixtures-and-seeds-add-data-per-test
4.6 Tag your tests #advancedhttps://github.com/Uncodedtech/nodebestpractices#-46-tag-your-tests
4.7 Check your test coverage, it helps to identify wrong test patternshttps://github.com/Uncodedtech/nodebestpractices#-47-check-your-test-coverage-it-helps-to-identify-wrong-test-patterns
4.8 Use production-like environment for e2e testinghttps://github.com/Uncodedtech/nodebestpractices#-48-use-production-like-environment-for-e2e-testing
4.9 Refactor regularly using static analysis toolshttps://github.com/Uncodedtech/nodebestpractices#-49-refactor-regularly-using-static-analysis-tools
4.10 Mock responses of external HTTP services #advanced #new #advancedhttps://github.com/Uncodedtech/nodebestpractices#-410-mock-responses-of-external-http-services
4.11 Test your middlewares in isolationhttps://github.com/Uncodedtech/nodebestpractices#-411-test-your-middlewares-in-isolation
4.12 Specify a port in production, randomize in testing #newhttps://github.com/Uncodedtech/nodebestpractices#-412-specify-a-port-in-production-randomize-in-testing
4.13 Test the five possible outcomes #strategic #newhttps://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 #strategichttps://github.com/Uncodedtech/nodebestpractices#-51-monitoring
5.2. Increase the observability using smart logging #strategichttps://github.com/Uncodedtech/nodebestpractices#-52-increase-the-observability-using-smart-logging
5.3. Delegate anything possible (e.g. gzip, SSL) to a reverse proxy #strategichttps://github.com/Uncodedtech/nodebestpractices#-53-delegate-anything-possible-eg-gzip-ssl-to-a-reverse-proxy
5.4. Lock dependencieshttps://github.com/Uncodedtech/nodebestpractices#-54-lock-dependencies
5.5. Guard process uptime using the right toolhttps://github.com/Uncodedtech/nodebestpractices#-55-guard-process-uptime-using-the-right-tool
5.6. Utilize all CPU coreshttps://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 #updatedhttps://github.com/Uncodedtech/nodebestpractices#-58-discover-the-unknowns-using-apm-products
5.9. Make your code production-readyhttps://github.com/Uncodedtech/nodebestpractices#-59-make-your-code-production-ready
5.10. Measure and guard the memory usage #advancedhttps://github.com/Uncodedtech/nodebestpractices#-510-measure-and-guard-the-memory-usage
5.11. Get your frontend assets out of Nodehttps://github.com/Uncodedtech/nodebestpractices#-511-get-your-frontend-assets-out-of-node
5.12. Strive to be stateless #strategichttps://github.com/Uncodedtech/nodebestpractices#-512-strive-to-be-stateless
5.13. Use tools that automatically detect vulnerabilitieshttps://github.com/Uncodedtech/nodebestpractices#-513-use-tools-that-automatically-detect-vulnerabilities
5.14. Assign a transaction id to each log statement #advancedhttps://github.com/Uncodedtech/nodebestpractices#-514-assign-a-transaction-id-to-each-log-statement
5.15. Set NODE_ENV=productionhttps://github.com/Uncodedtech/nodebestpractices#-515-set-node_envproduction
5.16. Design automated, atomic and zero-downtime deployments #advancedhttps://github.com/Uncodedtech/nodebestpractices#-516-design-automated-atomic-and-zero-downtime-deployments
5.17. Use an LTS release of Node.jshttps://github.com/Uncodedtech/nodebestpractices#-517-use-an-lts-release-of-nodejs
5.18. Log to stdout, avoid specifying log destination within the app #updatedhttps://github.com/Uncodedtech/nodebestpractices#-518-log-to-stdout-avoid-specifying-log-destination-within-the-app
5.19. Install your packages with npm ci #newhttps://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 ruleshttps://github.com/Uncodedtech/nodebestpractices#-61-embrace-linter-security-rules
6.2. Limit concurrent requests using a middlewarehttps://github.com/Uncodedtech/nodebestpractices#-62-limit-concurrent-requests-using-a-middleware
6.3 Extract secrets from config files or use packages to encrypt them #strategichttps://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 #strategichttps://github.com/Uncodedtech/nodebestpractices#-64-prevent-query-injection-vulnerabilities-with-ormodm-libraries
6.5. Collection of generic security best practiceshttps://github.com/Uncodedtech/nodebestpractices#-65-collection-of-generic-security-best-practices
6.6. Adjust the HTTP response headers for enhanced securityhttps://github.com/Uncodedtech/nodebestpractices#-66-adjust-the-http-response-headers-for-enhanced-security
6.7. Constantly and automatically inspect for vulnerable dependencies #strategichttps://github.com/Uncodedtech/nodebestpractices#-67-constantly-and-automatically-inspect-for-vulnerable-dependencies
6.8. Protect Users' Passwords/Secrets using bcrypt or scrypt #strategichttps://github.com/Uncodedtech/nodebestpractices#-68-protect-users-passwordssecrets-using-bcrypt-or-scrypt
6.9. Escape HTML, JS and CSS outputhttps://github.com/Uncodedtech/nodebestpractices#-69-escape-html-js-and-css-output
6.10. Validate incoming JSON schemas #strategichttps://github.com/Uncodedtech/nodebestpractices#-610-validate-incoming-json-schemas
6.11. Support blocklisting JWTshttps://github.com/Uncodedtech/nodebestpractices#-611-support-blocklisting-jwts
6.12. Prevent brute-force attacks against authorization #advancedhttps://github.com/Uncodedtech/nodebestpractices#-612-prevent-brute-force-attacks-against-authorization
6.13. Run Node.js as non-root userhttps://github.com/Uncodedtech/nodebestpractices#-613-run-nodejs-as-non-root-user
6.14. Limit payload size using a reverse-proxy or a middlewarehttps://github.com/Uncodedtech/nodebestpractices#-614-limit-payload-size-using-a-reverse-proxy-or-a-middleware
6.15. Avoid JavaScript eval statementshttps://github.com/Uncodedtech/nodebestpractices#-615-avoid-javascript-eval-statements
6.16. Prevent evil RegEx from overloading your single thread executionhttps://github.com/Uncodedtech/nodebestpractices#-616-prevent-evil-regex-from-overloading-your-single-thread-execution
6.17. Avoid module loading using a variablehttps://github.com/Uncodedtech/nodebestpractices#-617-avoid-module-loading-using-a-variable
6.18. Run unsafe code in a sandboxhttps://github.com/Uncodedtech/nodebestpractices#-618-run-unsafe-code-in-a-sandbox
6.19. Take extra care when working with child processes #advancedhttps://github.com/Uncodedtech/nodebestpractices#-619-take-extra-care-when-working-with-child-processes
6.20. Hide error details from clientshttps://github.com/Uncodedtech/nodebestpractices#-620-hide-error-details-from-clients
6.21. Configure 2FA for npm or Yarn #strategichttps://github.com/Uncodedtech/nodebestpractices#-621-configure-2fa-for-npm-or-yarn
6.22. Modify session middleware settingshttps://github.com/Uncodedtech/nodebestpractices#-622-modify-session-middleware-settings
6.23. Avoid DOS attacks by explicitly setting when a process should crash #advancedhttps://github.com/Uncodedtech/nodebestpractices#-623-avoid-dos-attacks-by-explicitly-setting-when-a-process-should-crash
6.24. Prevent unsafe redirectshttps://github.com/Uncodedtech/nodebestpractices#-624-prevent-unsafe-redirects
6.25. Avoid publishing secrets to the npm registryhttps://github.com/Uncodedtech/nodebestpractices#-625-avoid-publishing-secrets-to-the-npm-registry
6.26. 6.26 Inspect for outdated packageshttps://github.com/Uncodedtech/nodebestpractices#-626-inspect-for-outdated-packages
6.27. Import built-in modules using the 'node:' protocol #newhttps://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 loophttps://github.com/Uncodedtech/nodebestpractices#-71-dont-block-the-event-loop
7.2. Prefer native JS methods over user-land utils like Lodashhttps://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 #strategichttps://github.com/Uncodedtech/nodebestpractices#-81-use-multi-stage-builds-for-leaner-and-more-secure-docker-images
8.2. Bootstrap using node command, avoid npm starthttps://github.com/Uncodedtech/nodebestpractices#-82-bootstrap-using-node-command-avoid-npm-start
8.3. Let the Docker runtime handle replication and uptime #strategichttps://github.com/Uncodedtech/nodebestpractices#-83-let-the-docker-runtime-handle-replication-and-uptime
8.4. Use .dockerignore to prevent leaking secretshttps://github.com/Uncodedtech/nodebestpractices#-84-use-dockerignore-to-prevent-leaking-secrets
8.5. Clean-up dependencies before productionhttps://github.com/Uncodedtech/nodebestpractices#-85-clean-up-dependencies-before-production
8.6. Shutdown smartly and gracefully #advancedhttps://github.com/Uncodedtech/nodebestpractices#-86-shutdown-smartly-and-gracefully
8.7. Set memory limits using both Docker and v8 #advanced #strategichttps://github.com/Uncodedtech/nodebestpractices#-87-set-memory-limits-using-both-docker-and-v8
8.8. Plan for efficient cachinghttps://github.com/Uncodedtech/nodebestpractices#-88-plan-for-efficient-caching
8.9. Use explicit image reference, avoid latest taghttps://github.com/Uncodedtech/nodebestpractices#-89-use-explicit-image-reference-avoid-latest-tag
8.10. Prefer smaller Docker base imageshttps://github.com/Uncodedtech/nodebestpractices#-810-prefer-smaller-docker-base-images
8.11. Clean-out build-time secrets, avoid secrets in args #strategic #newhttps://github.com/Uncodedtech/nodebestpractices#-811-clean-out-build-time-secrets-avoid-secrets-in-args
8.12. Scan images for multi layers of vulnerabilities #advancedhttps://github.com/Uncodedtech/nodebestpractices#-812-scan-images-for-multi-layers-of-vulnerabilities
8.13 Clean NODE_MODULE cachehttps://github.com/Uncodedtech/nodebestpractices#-813-clean-node_module-cache
8.14. Generic Docker practiceshttps://github.com/Uncodedtech/nodebestpractices#-814-generic-docker-practices
8.15. Lint your Dockerfile #newhttps://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 componentshttps://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 patternhttps://en.wikipedia.org/wiki/Multitier_architecture
Read More: layer your apphttps://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 featurehttps://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
convicthttps://www.npmjs.com/package/convict
env-varhttps://github.com/evanshortiss/env-var
zodhttps://github.com/colinhacks/zod
Read More: configuration best practiceshttps://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.jshttps://nestjs.com/
Fastifyhttps://www.fastify.io/
expresshttps://expressjs.com/
Koahttps://koajs.com/
full considerations guide herehttps://github.com/Uncodedtech/nodebestpractices/blob/master/sections/projectstructre/choose-framework.md
Read More: Choosing the right frameworkhttps://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
Researcheshttps://earlbarr.com/publications/typestudy.pdf
Read More: TypeScript considerationshttps://github.com/Uncodedtech/nodebestpractices/blob/master/sections/projectstructre/typescript-considerations.md
⬆ Return to tophttps://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 callbackshttps://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
limitationshttps://eslint.org/docs/rules/no-throw-literal
Read More: using the built-in error objecthttps://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 errorhttps://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 placehttps://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 GraphQLhttps://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 processhttps://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
Pinohttps://github.com/pinojs/pino
Winstonhttps://github.com/winstonjs/winston
Read More: using a mature loggerhttps://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 flowshttps://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 productshttps://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 rejectionhttps://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
ajvhttps://www.npmjs.com/package/ajv
zodhttps://github.com/colinhacks/zod
typeboxhttps://github.com/sinclairzx81/typebox
Read More: failing fasthttps://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 promiseshttps://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
EventTargetshttps://nodejs.org/api/events.html#eventtarget-and-event-api
⬆ Return to tophttps://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
ESLinthttps://eslint.org
prettierhttps://www.npmjs.com/package/prettier
Read More: Using ESLint and Prettierhttps://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-nodehttps://www.npmjs.com/package/eslint-plugin-node
eslint-plugin-mochahttps://www.npmjs.com/package/eslint-plugin-mocha
eslint-plugin-node-securityhttps://www.npmjs.com/package/eslint-plugin-security
eslint-plugin-requirehttps://www.npmjs.com/package/eslint-plugin-require
/eslint-plugin-jesthttps://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
Prettierhttps://prettier.io/
Standardjshttps://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 ES6https://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.0https://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 Functionshttps://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 tophttps://github.com/Uncodedtech/nodebestpractices#table-of-contents
https://github.com/Uncodedtech/nodebestpractices#4-testing-and-overall-quality-practices
JavaScript testing best practiceshttps://github.com/goldbergyoni/javascript-testing-best-practices
Node.js testing - beyond the basicshttps://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
Postmanhttps://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 namehttps://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 patternhttps://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
nvmhttps://github.com/nvm-sh/nvm
Voltahttps://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 fixtureshttps://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
Mochahttps://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
Istanbulhttps://github.com/istanbuljs/istanbuljs
NYChttps://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
Sonarqubehttps://www.sonarqube.org/
starshttps://github.com/SonarSource/sonarqube
Code Climatehttps://codeclimate.com/
starshttps://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
nockhttps://github.com/nock/nock
Mock-Serverhttps://www.mock-server.com/
Read More: Mock external serviceshttps://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 isolationhttps://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 testinghttps://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 herehttps://testjavascript.com/wp-content/uploads/2021/10/the-backend-checklist.pdf
Node.js testing - beyond the basicshttps://github.com/testjavascript/nodejs-integration-tests-best-practices
checklist comes handyhttps://testjavascript.com/wp-content/uploads/2021/10/the-backend-checklist.pdf
Read More: Test five outcomeshttps://github.com/Uncodedtech/nodebestpractices/blob/master/sections/testingandquality/test-five-outcomes.md
⬆ Return to tophttps://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 logginghttps://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 proxyhttps://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 dependencieshttps://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
systemdhttps://systemd.io/
Read More: Guard process uptime using the right toolhttps://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 coreshttps://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 productshttps://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-readyhttps://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
Walmarthttps://www.joyent.com/blog/walmart-node-js-memory-leak
Read More: Measure and guard the memory usagehttps://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 Nodehttps://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 dayhttps://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 vulnerabilitieshttps://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
AsyncLocalStoragehttps://nodejs.org/api/async_context.html
Read More: Assign β€˜TransactionId’ to each log statementhttps://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=productionhttps://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.jshttps://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 Routinghttps://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 cihttps://github.com/Uncodedtech/nodebestpractices/blob/master/sections/production/installpackageswithnpmci.md
⬆ Return to tophttps://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-securityhttps://github.com/nodesecurity/eslint-plugin-security
Read More: Lint ruleshttps://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-flexiblehttps://www.npmjs.com/package/rate-limiter-flexible
express-rate-limithttps://www.npmjs.com/package/express-rate-limit
Read More: Implement rate limitinghttps://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 managementhttps://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
Sequelizehttps://github.com/sequelize/sequelize
Knexhttps://github.com/tgriesser/knex
mongoosehttps://github.com/Automattic/mongoose
Read More: Query injection prevention using ORM/ODM librarieshttps://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 practiceshttps://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
helmethttps://www.npmjs.com/package/helmet
Read More: Using secure headers in your applicationhttps://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 audithttps://docs.npmjs.com/cli/audit
snykhttps://snyk.io/
Read More: Dependency securityhttps://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 Passwordshttps://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 outputhttps://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
jsonschemahttps://www.npmjs.com/package/jsonschema
joihttps://www.npmjs.com/package/joi
Read More: Validate incoming JSON schemashttps://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.jshttps://github.com/jaredhanson/passport
Read More: Blocklist JSON Web Tokenshttps://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 limitinghttps://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 userhttps://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 parserhttps://github.com/expressjs/body-parser
Read More: Limit payload sizehttps://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 statementshttps://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.jshttps://github.com/chriso/validator.js
safe-regexhttps://github.com/substack/safe-regex
Read More: Prevent malicious RegExhttps://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-securityhttps://www.npmjs.com/package/eslint-plugin-security
Read More: Safe module loadinghttps://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 sandboxhttps://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 processeshttps://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 clienthttps://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 securityhttps://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 redirectshttps://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 secretshttps://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-updateshttps://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 attackshttps://en.wikipedia.org/wiki/Typosquatting
⬆ Return to tophttps://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 loophttps://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 utilshttps://github.com/Uncodedtech/nodebestpractices/blob/master/sections/performance/nativeoverutil.md
⬆ Return to tophttps://github.com/Uncodedtech/nodebestpractices#table-of-contents
https://github.com/Uncodedtech/nodebestpractices#8-docker-best-practices
Bret Fisherhttps://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 buildshttps://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 claimhttps://docs.npmjs.com/cli/v7/using-npm/changelog#706-2020-10-27
Read More: Bootstrap container using node command, avoid npm starthttps://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 processeshttps://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 .dockerignorehttps://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-scopehttps://eslint.org/blog/2018/07/postmortem-for-malicious-package-publishes
Remove development dependencieshttps://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 shutdownhttps://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 onlyhttps://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 timeshttps://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 cautionhttps://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 imageshttps://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 secretshttps://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 productionhttps://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 cachehttps://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 practiceshttps://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 Dockerfilehttps://github.com/Uncodedtech/nodebestpractices/blob/master/sections/docker/lint-dockerfile.md
⬆ Return to tophttps://github.com/Uncodedtech/nodebestpractices#table-of-contents
https://github.com/Uncodedtech/nodebestpractices#milestones
milestoneshttps://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 Portuguesehttps://github.com/Uncodedtech/nodebestpractices/blob/master/README.brazilian-portuguese.md
Marcelo Melohttps://github.com/marcelosdm
https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/flags/CN.png
Chinesehttps://github.com/Uncodedtech/nodebestpractices/blob/master/README.chinese.md
Matt Jinhttps://github.com/mattjin
https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/flags/RU.png
Russianhttps://github.com/Uncodedtech/nodebestpractices/blob/master/README.russian.md
Alex Ivanovhttps://github.com/contributorpw
https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/flags/PL.png
Polishhttps://github.com/Uncodedtech/nodebestpractices/blob/master/README.polish.md
Michal Biesiadahttps://github.com/mbiesiad
https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/flags/JA.png
Japanesehttps://github.com/Uncodedtech/nodebestpractices/blob/master/README.japanese.md
Yuki Otahttps://github.com/YukiOta
Yuta Azumihttps://github.com/YA21
https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/flags/EU.png
Basquehttps://github.com/Uncodedtech/nodebestpractices/blob/master/README.basque.md
Ane Diaz de Tuestahttps://github.com/anediaz
https://github.com/Uncodedtech/nodebestpractices#translations-in-progress
https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/flags/FR.png
Frenchhttps://github.com/Uncodedtech/nodebestpractices/blob/master/README.french.md
Discussionhttps://github.com/goldbergyoni/nodebestpractices/issues/129
https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/flags/HE.png
Hebrewhttps://github.com/Uncodedtech/nodebestpractices/blob/master/README.hebrew.md
Discussionhttps://github.com/goldbergyoni/nodebestpractices/issues/156
https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/flags/KR.png
Koreanhttps://github.com/Uncodedtech/nodebestpractices/blob/master/README.korean.md
Sangbeom Hanhttps://github.com/uronly14me
Discussionhttps://github.com/goldbergyoni/nodebestpractices/issues/94
https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/flags/ES.png
Spanishhttps://github.com/goldbergyoni/nodebestpractices/blob/spanish-translation/README.spanish.md
Discussionhttps://github.com/goldbergyoni/nodebestpractices/issues/95
https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/flags/TR.png
Discussionhttps://github.com/goldbergyoni/nodebestpractices/issues/139
https://github.com/Uncodedtech/nodebestpractices#steering-committee
GitHub projectshttps://github.com/goldbergyoni/nodebestpractices/projects
https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/members/yoni.png
Yoni Goldberghttps://github.com/goldbergyoni
https://twitter.com/goldbergyoni
https://goldbergyoni.com
goldbergyoni.comhttps://goldbergyoni.com
@goldbergyonihttps://github.com/goldbergyoni
https://github.com/josh-hemphill
Josh Hemphillhttps://github.com/josh-hemphill
https://twitter.com/spooklogical
https://www.linkedin.com/in/joshuahemphill/
https://joshuahemphill.com
https://github.com/rluvaton
Raz Luvatonhttps://github.com/rluvaton
https://twitter.com/rluvaton
https://www.linkedin.com/in/rluvaton/
https://github.com/Uncodedtech/nodebestpractices#contributing
contributing docshttps://github.com/Uncodedtech/nodebestpractices/blob/master/.operations/CONTRIBUTING.md
https://github.com/Uncodedtech/nodebestpractices#contributors-
Kevin Rambaudhttps://github.com/kevinrambaud
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-kevinrambaud
Michael Finehttps://github.com/mfine15
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-mfine15
Shreya Dahalhttp://squgeim.github.io
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-squgeim
Matheus Cruz Rochahttp://matheusrocha89.com
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-matheusrocha89
Yog Mehtahttps://bityog.github.io/Portfolio/
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-BitYog
Kudakwashe Paradzayihttp://kudapara.co.zw
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-kudapara
t1st3https://www.t1st3.com/
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-t1st3
mulijordan1976https://github.com/mulijordan1976
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-mulijordan1976
Matan Kushnerhttps://twitter.com/matchai
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-matchai
Fabio Hirokihttps://fabiothiroki.github.io
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-fabiothiroki
James Sumnershttp://james.sumners.info/
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-jsumners
Dan Gamblehttps://twitter.com/_DanGamble
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-dan-gamble
PJ Trainorhttps://github.com/trainorpj
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-trainorpj
Remek Ambroziakhttps://github.com/reod
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-reod
Yoni Jahhttps://ca.non.co.il
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-yonjah
Misha Khokhlovhttps://github.com/hazolsky
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-hazolsky
Evgeny Orekhovhttps://plus.google.com/+Π•Π²Π³Π΅Π½ΠΈΠΉΠžΡ€Π΅Ρ…ΠΎΠ²/
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-EvgenyOrekhov
-https://github.com/gediminasml
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-gediminasml
Isaac Halvorsonhttp://hisaac.net
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-hisaac
Vedran KaračiΔ‡http://www.vedrankaracic.com
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-vkaracic
lallenlowehttps://github.com/lallenlowe
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-lallenlowe
Nathan Wellshttps://github.com/nwwells
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-nwwells
Paulo Reishttps://github.com/paulovitin
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-paulovitin
syzerhttps://snap.simpego.ch
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-syzer
David Sanchohttp://sancho.dev
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-davesnx
Robert Manoleahttps://apiforge.it
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-pupix
Xavier Hohttps://jumptoglide.com
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-spaxe
Aaronhttp://www.ocular-rhythm.io
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-ocularrhythm
Jan Charles Maghirang Adonahttps://septa97.me
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-septa97
Allenhttps://www.cakeresume.com/allenfang
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-AllenFang
Leonardo Villelahttps://github.com/leonardovillela
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-leonardovillela
MichaΕ‚ ZaΕ‚Δ™ckihttps://michalzalecki.com
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-MichalZalecki
Chris Nicolahttp://www.wealthbar.com
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-chrisnicola
Alejandro Corredorhttps://twitter.com/aecorredor
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-aecorredor
cwarhttps://github.com/cwar
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-cwar
Yuweihttps://github.com/keyfoxth
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-keyfoxth
Utkarsh Bhatthttps://bigcodenerd.org
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-utkarshbhatt12
Duarte Mendeshttps://github.com/duartemendes
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-duartemendes
Jason Kimhttp://jasonkim.ca
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-serv
Mitja O.https://github.com/Max101
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-Max101
Sandro Miguel Marqueshttp://sandromiguel.com
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-SandroMiguel
Gabehttps://github.com/GabeKuslansky
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-GabeKuslansky
Ron Grosshttp://ripper234.com/
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-ripper234
Valeri Karpovhttp://www.thecodebarbarian.com
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-vkarpov15
Sergio Bernalhttps://sergiobernal.com
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-imsergiobernal
Nikola Telkedzhievhttps://github.com/ntelkedzhiev
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-ntelkedzhiev
Vitor Godoyhttps://github.com/vitordagamagodoy
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-vitordagamagodoy
Manish Saraanhttps://www.manishsaraan.com/
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-manishsaraan
Sangbeom Hanhttps://github.com/uronly14me
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-uronly14me
blackmatchhttps://blackmatch.github.io
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-blackmatch
Joe Reevehttps://simmsreeve.com
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-ISNIT0
Ryan Busbyhttps://github.com/BusbyActual
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-BusbyActual
Iman Mohamadihttp://jsdecorator.com
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-ImanMh
Sergii Paryzhskyihttps://github.com/HeeL
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-HeeL
Kapil Patelhttps://github.com/kapilepatel
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-kapilepatel
θΏ·ζΈ‘https://twitter.com/justjavac
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-justjavac
Hozefahttps://github.com/hozefaj
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-hozefaj
Ethanhttps://github.com/el-ethan
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-el-ethan
Samhttps://github.com/milkdeliver
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-milkdeliver
Arlindhttps://github.com/ArlindXh
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-ArlindXh
Teddy Toussainthttps://github.com/ttous
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-ttous
Lewishttp://ardern.io
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-LewisArdern
Gabriel Lidenor https://gabriellidenor.com/
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-GabrielLidenor
Romanhttps://github.com/animir
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-animir
Francozeirahttps://github.com/Francozeira
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-Francozeira
Invvardhttps://twitter.com/invvard
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-Invvard
RΓ΄mulo Garofalohttps://romulogarofalo.github.io/
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-romulogarofalo
Tho Q Luonghttp://thoqbk.github.io/
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-thoqbk
Burak Shenhttps://github.com/Qeneke
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-Qeneke
Martin Muzatkohttp://www.happy-css.com
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-MartinMuzatko
Jared Collierhttps://github.com/autoboxer
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-autoboxer
Hilton Meyerhttp://hiltonmeyer.com
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-bikingbadger
ChangJoo Park(λ°•μ°½μ£Ό)http://kr.vuejs.org
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-ChangJoo-Park
Masahiro Sakaguchihttps://github.com/MasahiroSakaguchi
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-MasahiroSakaguchi
Keith Hollidayhttps://github.com/TheHollidayInn
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-TheHollidayInn
coreychttps://www.coreycleary.me
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-coreyc
Maximilian Berkmannhttp://maxcubing.wordpress.com
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-Berkmann18
Douglas Mariano Valerohttps://github.com/DouglasMV
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-DouglasMV
Marcelo Melohttps://github.com/marcelosdm
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-marcelosdm
Mehmet Perkhttps://twitter.com/mperk_
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-mperk
ryan ouyanghttps://github.com/ryanouyang
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-ryanouyang
Shabeerhttps://github.com/shabeer-mdy
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-shabeer-mdy
Eduard Kyvenkohttps://github.com/halfzebra
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-halfzebra
Deyvison Rochahttp://deyvisonrocha.com
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-deyvisonrocha
George Mamerhttp://twitter.com/georgemamer
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-georgem3
Konstantinos Leimonishttps://github.com/leimonio
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-leimonio
Oliver Llubereshttps://github.com/Zybax
🌍https://github.com/Uncodedtech/nodebestpractices#translation-Zybax
Tien Dohttps://stackoverflow.com/story/tiendq
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-tiendq
Ranvir Singhhttp://singh1114.github.io/
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-singh1114
Vadim Nicolaevhttps://github.com/collierrgbsitisfise
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-collierrgbsitisfise
🌍https://github.com/Uncodedtech/nodebestpractices#translation-collierrgbsitisfise
German Gamboa Gonzalezhttps://github.com/germangamboa95
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-germangamboa95
Hafezhttps://github.com/AbdelrahmanHafez
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-AbdelrahmanHafez
Chandiranhttp://linkedin.com/in/chandiran-dmc
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-chandiran-dmc
VinayaSathyanarayanahttps://github.com/VinayaSathyanarayana
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-VinayaSathyanarayana
Kim Kernhttps://www.kimkern.de
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-kiwikern
Kenneth Freitashttps://kennethfreitas.github.io/
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-kennethfreitas
songehttps://github.com/songe
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-songe
Kirill Shekhovtsovhttp://ksed.dev
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-Ksedline
Sergehttps://github.com/SerzN1
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-SerzN1
keyrwinzhttps://github.com/keyrwinz
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-keyrwinz
Dmitry Nikitenkohttps://github.com/nDmitry
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-nDmitry
bushuaihttps://bushuai.cc
πŸ‘€https://github.com/goldbergyoni/nodebestpractices/pulls?q=is%3Apr+reviewed-by%3Abushuai
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-bushuai
Benjamin Gruenbaumhttps://stackoverflow.com/users/1348195/benjamin-gruenbaum
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-benjamingr
Ezequielhttps://github.com/byeze
🌍https://github.com/Uncodedtech/nodebestpractices#translation-byeze
Juan JosΓ© RodrΓ­guezhttps://github.com/juaoose
🌍https://github.com/Uncodedtech/nodebestpractices#translation-juaoose
Or Binhttps://github.com/OrBin
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-OrBin
Andreo Vieirahttps://twitter.com/andreoav07
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-andreoav
Michael Solomonhttps://github.com/mikicho
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-mikicho
Jimmy Callinhttps://github.com/jimmycallin
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-jimmycallin
Siddharthhttps://www.linkedin.com/in/siddharthofficial/
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-w01fS
Ryan Smithhttps://ryansmith.tech/
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-ryan3E0
Tom Boettgerhttps://de.linkedin.com/in/tom-boettger
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-bttger
JoaquΓ­n Ormaecheahttps://github.com/jormaechea
🌍https://github.com/Uncodedtech/nodebestpractices#translation-jormaechea
dfrzuzhttps://github.com/dfrzuz
🌍https://github.com/Uncodedtech/nodebestpractices#translation-dfrzuz
Victor Homyakovhttps://github.com/victor-homyakov
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-victor-homyakov
Joshhttp://joshuahemphill.com
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-josh-hemphill
πŸ›‘οΈhttps://github.com/Uncodedtech/nodebestpractices#security-josh-hemphill
Alec Francishttps://github.com/alec-francis
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-alec-francis
arjun6610https://github.com/arjun6610
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-arjun6610
Jan Oschhttps://github.com/jan-osch
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-jan-osch
Thiago Rotondo Sampaiohttps://github.com/thiagotrs
🌍https://github.com/Uncodedtech/nodebestpractices#translation-thiagotrs
Alexseyhttps://github.com/Alexsey
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-Alexsey
Luis A. Acurerohttps://github.com/13luismb
🌍https://github.com/Uncodedtech/nodebestpractices#translation-13luismb
Lucas Romanohttps://lromano97.github.io/
🌍https://github.com/Uncodedtech/nodebestpractices#translation-lromano97
Denise Casehttps://github.com/denisecase
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-denisecase
Nick Ribalhttp://stackoverflow.com/story/elektronik
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-elektronik2k5
πŸ‘€https://github.com/goldbergyoni/nodebestpractices/pulls?q=is%3Apr+reviewed-by%3Aelektronik2k5
0xflotushttps://github.com/0xflotus
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-0xflotus
Jonathan Chenhttps://www.dijonkitchen.org/
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-dijonkitchen
Dilan Srilalhttps://github.com/dilansri
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-dilansri
vladthelittleonehttps://vectree.ru
🌍https://github.com/Uncodedtech/nodebestpractices#translation-vladthelittleone
Nik Osvaldshttps://www.nikolaso.com
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-nosvalds
Daniel Kisshttps://github.com/kdaniel21
πŸ“–https://github.com/goldbergyoni/nodebestpractices/commits?author=kdaniel21
Forressthttps://twitter.com/forresst17
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-forresst
Jonathan Svenhedenhttps://github.com/svenheden
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-svenheden
AustrisChttps://github.com/AustrisC
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-AustrisC
kyeongtae kimhttps://github.com/cisco0808
🌍https://github.com/Uncodedtech/nodebestpractices#translation-cisco0808
007https://keybase.io/651z9pz968v2accj
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-6gx7iycn53ioq2e8apk1j1ypwov4giui
Ane Diaz de Tuestahttp://www.anediaz.com
🌍https://github.com/Uncodedtech/nodebestpractices#translation-anediaz
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-anediaz
YukiOtahttp://yukioh.net
🌍https://github.com/Uncodedtech/nodebestpractices#translation-YukiOta
Frazer Smithhttps://www.yeovilhospital.co.uk/
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-Fdawgs
Raz Luvatonhttps://github.com/rluvaton
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-rluvaton
Yuta Azumihttps://github.com/YA21
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-YA21
andrewjbarbourhttps://github.com/andrewjbarbour
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-andrewjbarbour
mrhttps://MasujimaRyohei.jp
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-MasujimaRyohei
Aleksandarhttps://github.com/kubanac95
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-kubanac95
Owlhttp://vincentjonathan.com
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-SuspiciousLookingOwl
Yedidya Schwartzhttps://github.com/yedidyas
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-yedidyas
πŸ’‘https://github.com/Uncodedtech/nodebestpractices#example-yedidyas
arihttps://github.com/ariel-diaz
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-ariel-diaz
Thomas KΓΆnighttp://www.koenigthomas.de/
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-Vispercept
Kalle LΓ€msΓ€https://github.com/coocos
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-coocos
Wyatthttp://math.cat
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-ZhyMC
KHADIR Tayebhttp://libkhadir.fr
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-tkhadir
Shankar Regmihttps://github.com/shankarregmi
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-shankarregmi
Shubhamhttps://github.com/codebyshubham
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-codebyshubham
Lucas Alveshttp://lucalves.me/
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-lucalves
Benjaminhttps://github.com/benjaminudoh10
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-benjaminudoh10
Yeoh Joerhttps://www.yjoer.com
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-yjoer
Miigonhttps://blog.miigon.net
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-Miigon
Rostislav Bogoradhttp://brainstorage.me/Egregor2011
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-Egregor2011
Flousehttps://github.com/Flouse
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-Flouse
Tarantini Pereirahttp://taranttini.com
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-taranttini
Kazuki Matsuohttps://github.com/kzmat
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-kzmat
Adam Smithhttps://github.com/burkybang
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-burkybang
Dohyeon Kohttps://codekodo.tistory.com
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-k906506
Vladislav Legkovhttps://github.com/vlad99902
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-vlad99902
Kerollos Magdyhttp://kerolloz.github.io
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-kerolloz
Erez Liebermanhttps://www.linkedin.com/in/erez-lieberman-b90b7219/
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-erezLieberman
Breno Macedohttps://www.linkedin.com/in/breno-macedo-ernani-de-s%C3%A1-110223158/
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-breno404
Fernando Floreshttps://github.com/JFernando122
🌍https://github.com/Uncodedtech/nodebestpractices#translation-JFernando122
Rafael Britohttps://www.linkedin.com/in/rafaelconcept/
🌍https://github.com/Uncodedtech/nodebestpractices#translation-rafaelconcept
Emiliano Peraltahttps://emiliano-peralta-portfolio.vercel.app/
🌍https://github.com/Uncodedtech/nodebestpractices#translation-emiperalta
Shin, SJhttps://lannex.github.io
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-lannex
Benjamin Forsterhttp://www.benjaminforster.com
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-e-e-e
Daniele Fedelihttps://github.com/DanieleFedeli
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-DanieleFedeli
djob195https://github.com/djob195
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-djob195
antspkhttps://github.com/antspk
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-antspk
μ •μ§„μ˜https://jjy0821.tistory.com/
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-jjy821
kkk-cashwalkhttps://github.com/kkk-cashwalk
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-kkk-cashwalk
apainintheneckhttps://github.com/apainintheneck
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-apainintheneck
Fajar Budhi Iswandahttps://github.com/koyanyaroo
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-koyanyaroo
이주호https://github.com/jutiger
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-jutiger
Singhhttps://github.com/MisterSingh
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-MisterSingh
Alex Dumitruhttps://github.com/Alex-Dumitru
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-Alex-Dumitru
Anton Lykhatskyihttps://github.com/lykhatskyi
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-lykhatskyi
sangwonleehttps://github.com/EverythingAvailable
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-EverythingAvailable
Eugenio Berrettahttps://github.com/euberdeveloper
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-euberdeveloper
soranakkhttps://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Γ© Esserhttps://www.youtube.com/channel/UCBxzOQd2v9wWfiMDrf_RQ7A
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-Esser50K
Scchttps://github.com/ShiChenCong
🌍https://github.com/Uncodedtech/nodebestpractices#translation-ShiChenCong
Mauro Accornerohttps://www.mauroaccornero.it
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-mauroaccornero
no-yanhttps://github.com/no-yan
πŸ–‹https://github.com/Uncodedtech/nodebestpractices#content-no-yan
hodbauerhttps://github.com/hodbauer
🌍https://github.com/Uncodedtech/nodebestpractices/blob/master/translation-hodbauer
https://github.com/Uncodedtech/nodebestpractices#steering-committee-emeriti
Bruno Scheuflerhttps://github.com/BrunoScheufler
https://brunoscheufler.com/
https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/members/kyle.png
Kyle Martinhttps://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 Bruyerehttps://github.com/kevynb
https://www.linkedin.com/in/kevynbruyere/
https://github.com/Uncodedtech/nodebestpractices/blob/master/assets/images/members/sagir.png
Sagir Khanhttps://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 pagehttps://github.com/Uncodedtech/nodebestpractices
Activityhttps://github.com/Uncodedtech/nodebestpractices/activity
Custom propertieshttps://github.com/Uncodedtech/nodebestpractices/custom-properties
0 starshttps://github.com/Uncodedtech/nodebestpractices/stargazers
0 watchinghttps://github.com/Uncodedtech/nodebestpractices/watchers
0 forkshttps://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
Releaseshttps://github.com/Uncodedtech/nodebestpractices/releases
Packages 0https://github.com/orgs/Uncodedtech/packages?repo_name=nodebestpractices
https://github.com
Termshttps://docs.github.com/site-policy/github-terms/github-terms-of-service
Privacyhttps://docs.github.com/site-policy/privacy-policies/github-privacy-statement
Securityhttps://github.com/security
Statushttps://www.githubstatus.com/
Communityhttps://github.community/
Docshttps://docs.github.com/
Contacthttps://support.github.com?tags=dotcom-footer

Viewport: width=device-width


URLs of crawlers that visited me.