Generate a Node.js app that is packed with best practices AND simplicity in mind. Based off our repo Node.js best practices (78,000 stars)
β£οΈ Alpha stage: Practica.js is a work-in-progress. We've only recently kicked off. Please revisit by July 2022 π
Discord discussions | Twitter | Documentation site
Although Node.js has great frameworks π, they were never meant to be production ready immediately. Practica.js aims to bridge the gap. Based on your preferred framework, we generate example code that demonstrates a full Microservice flow, from API to DB, that is packed with good practices. For example, we include a battle-tested error handler, sanitize API response, hardened dockerfile, thoughtful 3-tier folder structure, great testing templates with DB, and more. This saves a great deal of time and can prevent painful mistakes. All decisions made are neatly and thoughtfully documented. We strive to keep things as simple and standard as possible and base our work on the popular guide: Node.js Best Practices
1 min video π, ensure audio is activated
practica-1-min-explainer.mp4
Super-Quick Setup
Our Philosophies and Unique Values
Practices and Features
The People Behind Practica.js
Our best practices guide, 78,000 stars β¨
Contribution guide
Documentation site
YouTube
- Coming Soon:
- Example Applications
- Express, PostgreSQL, with common best practices
- Express, mongo-db, with common best practices
- Express, PostgreSQL, with all best practices (advanced)
- Minimal with project setup configuration only
More Flavours
- Fastify, PostgreSQL - Fastify, mongo-db - Generate Your Own Interactively - More coming soon
- Example Applications
Note: Practica.js is a work-in-progress. To have a more complete experience, please check back after June 2022.
To run Practica in Interactive Mode (with UI):
npx @practica/create-node-app interactive
Note that for now, it can generate an app that is based on Express and PostgreSQL only. Other options will get added soon
Or if you'd prefer a typical terminal experience (without UI):
npx @practica/create-node-app immediate
β¨ And you're done! That's it. The code's all been generated.
npm start
or
npm test
Pretty straight forward, right?
- β Start coding. The code we generate is minimal by design, and should help you get up to speed quickly.
- β (Optional) Read through the code. Best Practices are tagged throughout.
- β Master it by reading our docs.
We don't re-invent the wheel. Rather, we use your favorite framework and empower it with structure and real examples. With a single command you can get an Express/Fastify-based codebase with ~100 examples of best practices inside.
Keeping it simple, flat, and based on native Node/JS capabilities is part of this project's DNA. We believe that too many abstractions, high-complexity or fancy language features can quickly become a stumbling block for the team.
To name a few examples, our code flow is flat with almost no level of indirection, although using TypeScript - almost no features are being used besides types, for modularization we simply use Node.js modules.
Good Practices and Simplicity is the name of the game with Practica. There is no need to narrow our code to a specific framework or database. We aim to support a majority of popular Node.js frameworks and databases.
We apply more than 100 practices and optimizations. You can opt in or out for most of these features using option flags on our CLI. The following table lists just a few examples out of the full list of features we provide.
Feature | Explanation | Flag | Docs |
---|---|---|---|
Monorepo setup | Generates two components (e.g., Microservices) in a single repository with interactions between the two | --mr, --monorepo | Docs here |
Output escaping and sanitizing | Clean-out outgoing responses from potential HTML security risks like XSS | --oe, --output-escape | Docs here |
Integration (component) testing | Generates full-blown component/integration tests setup including DB | --t, --tests | Docs here |
Unique request ID (Correlation ID) | Generates module that creates a unique correlation/request ID for every incoming request. This is available for any other object during the request life-span. Internally it uses Node's built-in AsyncLocalStorage | --coi, --correlation-id | Docs here |
Dockerfile | Generates dockerfile that embodies >20 best practices | --df, --docker-file | Docs here |
Strong-schema configuration | A configuration module that dynamically load run-time configuration keys and includes a strong schema so it can fail fast | Built-in with basic app | Docs here |
π See our full list of features here
Practica is a community-driven open-source project. It's being led voluntarily by engineers from many different companies. These companies are just a few who encourage their engineers to contribute and keep this project moving. π
A Nasdaq 100 company, a world leader in design software
Leader IoT provider, part of 'Cox Communication', the 3rd largest cable company in the US
Independent Node.js consultant |
Node.js lead |
Node.js developer |
Node.js lead |
These companies are keen for continous improvement and their engineers to have been known to contribute during work hours.
A million thanks to these great people who have contributed code to our project: