+ The Simple, Secure Framework
+ Developers Trust
+
+ + Build powerful, scalable applications with + minimal overhead and full out-of-the-box functionality. + Your code, your way. +
+ ++ Originally developed to handle Walmart's Black Friday scale, hapi continues to be the + proven choice for enterprise-grade backend needs. +
+Why teams pick hapi
+83% of developers* are concerned with the security of open-source code. You're probably among that 83%.
+* npm Inc. 2019 Trends in JavaScript report
+ +You've got nothing to worry about with hapi.
+
+ When you npm install @hapi/hapi, every single line of code you get has been verified. You never
+ have to worry about some deep dependency being poorly maintained (or handed over to someone sketchy). hapi is
+ the only leading node framework without any external code dependencies. None.
+
How do we keep hapi secure?
+-
+
- + End-to-end Code Hygiene — hapi requires the most secure settings to manage, control, and + distribute code, including 2FA for all contributors. + +
- + Secure Defaults, Updated Regularly — every hapi component comes with the most secure + defaults out-of-the-box. Along with protecting server load with payload limits and request timeouts, hapi + blocks error messages that could leak information or echo back exploits. + +
- + Integrated Authorization and Authentication Architecture — the most comprehensive + authorization and authentication API available in a Node framework. + +
- + Advanced Features — with encrypted and signed cookies, secret or key rotation, and HTTP + security headers, there are no excuses for building insecure applications. + +
- + Reliable, Predictable Ownership — when something goes wrong, you know who to contact. + Security updates are handled under a strict, well-defined protocol. + +
- + Rich ecosystem — hapi's extensive set of official plugins means no more blindly trusting + some middleware you found for critical functionality just because it has a high count on npm. + +
- + In-house Security Expertise — created by Eran Hammer, the author of the OAuth + specifications and other identity protocols. + +
+ hapi has been pushing the envelope on quality from day one. It was the first node framework + to require and achieve 100% code coverage across every dependency — when everyone thought it was crazy. +
++ When quality and performance are in conflict, most frameworks choose wrongly and sacrifice quality for + performance. It might save them a millisecond, but it will cost you days. hapi always chooses + readability. Machines keep getting faster and cheaper. Humans only get slower and more expensive. +
+On practically every measurable quality metric, hapi scores at the very top:
+-
+
- + Code Readability — if you cannot open the source code of your framework and understand how + it works, sooner or later you are going to be in trouble. + +
- + Coverage and Style — 100% code coverage using strict coverage rules and a coding style + optimized to reduce bugs and increase comprehension — always end-to-end. + +
- + Open Issues — hapi and its official plugins are actively kept with only a handful of open + issues or pull requests. Few other ecosystems can claim this low level of outstanding issues end-to-end + across every single dependency. + +
The question we care most about is, "Are you happy?"
+hapi is developer-first — so you can spend your brainpower on the places that matter.
++ Every hapi feature is designed to make the platform easier and more intuitive to use. That + means there's no need to hack things together, experiment to see what *might* work, or try to figure out + hidden internals. There is no "magic" — the code does what you expect with easy to follow + internal logic. +
++ hapi's clean and easy-to-learn interface doesn't take up too much space. It is designed for a + small surface area, allowing you to build your applications as you see fit, + using your style and the technologies of your choosing. +
++ And hapi users certainly are. In survey after survey, hapi scores at the very top for developer satisfaction. +
++ hapi was designed from the ground-up to support large, distributed, and remote teams + — allowing them to effectively work together on common code. No more toe stepping. +
+ +Say goodbye to middleware hell
++ hapi was the first node framework (and in some ways, still the only) to provide + strong guarantees. The order in which parallel or unrelated components are configured should + never produce unexpected results. +
+-
+
- + Plugin dependencies — plugins can safely rely on other plugins, including the order in + which they must execute, no matter the order in which you register them. + +
- + Extension priorities — request lifecycle extensions can specify their relative order so + future extensions won't disrupt the existing balance. + +
- + Namespace protection — caches, plugins, decorators, and server methods are all protected + and cannot be implicitly overridden. + +
- + Zero routing conflicts — paths will never conflict, and will always result in the same + priority order — no matter what order they're added in. + +
+ hapi comes pretty loaded out-of-the-box, but it also has the most mature and complete set of + extension points at every step — including authentication, + authorization, and validation. +
+ +Middleware is just another name for bad design.
++ hapi doesn't use middleware, because it's a bad pattern. Instead of a generic, one-size-fits-all approach + taken by almost every other framework, hapi provides a rich, laser-focused extensibility model that puts + security and predictability first. +
+ +Make it Yours.
++ hapi has always led the way with tools to make the server yours. It was the first to introduce these (often + imitated but poorly executed) features: +
+-
+
- + Framework plugins — a truly composable way of breaking your application + into logical components with a super-thin abstraction layer. + +
- + Request lifecycle — the exact order in which "stuff happens," allowing you to choose the + specific spot to extend or modify how your application operates. + +
- + Server methods — reusable, cacheable functions accessible throughout the application. + +
- + API Decorations — user-defined API that lives, safely, side-by-side the official API. + +
+ Plus, everything is properly namespaced, which makes extensions safe and easy to use. You'll never have to + worry about your application failing in production because of a runtime conflict between two extensions or + plugins. Everything is validated at load-time so you can easily identify conflicts during development. +
+
-
-# @hapi/hapi.dev deployment process
-
-This documentation is aimed for maintainers of the website to deploy a new version. The site is hosted on [Netlify](https://www.netlify.com/).
-
-## Testing the release
-
-Prior to deploying the new website version it is best to test it on your local machine. You need to:
-
-1. Make the changes you need to the codebase.
-2. Run `npm run generate` which will build the static dist folder.
-3. Run `npm run static` to view the website with the static dist folder you generated on the previous step.
-
-At this point if everything looks good and you don't notice any regression, you can proceed to the next step.
-
-## Deploying
-
-You need to go to [Netlify's login page](https://app.netlify.com/). Once logged in make sure you are on the hapi team account and not your personal one:
-







`;
+ }
+
+ if (hasBreaking) {
+ content += ` `;
+ }
+
+ content += `{#${milestone.version}} `;
+
+ content += `\n\n`;
+
+ for (const issue of milestone.issues) {
+ content += `- [#${issue.number}](${issue.url}) ${escapeHtml(issue.title)}\n`;
+ }
+ content += '\n';
+ }
+ }
+
+ await fs.writeFile(changelogPath, content);
+};
+
+const escapeHtml = (text: string) => text.replaceAll('<', '<').replaceAll('>', '>');
diff --git a/cli/getModuleInfo.ts b/cli/getModuleInfo.ts
new file mode 100644
index 00000000..87e03a5e
--- /dev/null
+++ b/cli/getModuleInfo.ts
@@ -0,0 +1,285 @@
+import { execFileSync } from 'node:child_process';
+import fs from 'node:fs/promises';
+import path from 'node:path';
+
+import { Semaphore, uniq } from 'es-toolkit';
+import Semver from 'semver';
+import { createMarkdownRenderer } from 'vitepress';
+
+import { generateChangelog } from './generateChangelog.js';
+import { getDirectoryListing, getRawContent, getRepoInfo } from './gh.js';
+import { modules } from './modules.js';
+import {
+ API_DIR,
+ MARKDOWN_DIR,
+ METADATA_DIR,
+ POLICIES_GENERATED_DIR,
+ getExisting,
+ getModuleInfoPath,
+ getModuleMarkdownPath,
+ getModuleStoragePath,
+} from './paths.js';
+
+import type { ModuleInfo, ModuleSpec, VersionInfo } from './types.js';
+
+const getFilteredVersions = (specs: ModuleSpec, versions: string[]): VersionInfo[] => {
+ const compatibilityVersions = Object.keys(specs.compatibility);
+ const minVersion = Math.min(...compatibilityVersions.map((v) => parseInt(v, 10)));
+ const prefilteredVersions = versions.filter((v) => Semver.satisfies(v, `>=${minVersion}`));
+ const publishedMajorVersions = uniq(prefilteredVersions.map((v) => Semver.major(v)));
+ const semveredMajors = compatibilityVersions.map((v) => `${v}.0.0`);
+
+ return publishedMajorVersions.map((major) => {
+ const closestMatchingVersion = Semver.maxSatisfying(semveredMajors, `<= ${major}`);
+ return {
+ fullVersion: Semver.maxSatisfying(prefilteredVersions, `^${major}`)!,
+ major,
+ nodeVersion: closestMatchingVersion ? specs.compatibility[Semver.major(closestMatchingVersion)] : '',
+ };
+ });
+};
+
+const md = await createMarkdownRenderer('.');
+
+const repos: Record
+
+ {{ module.stars }}
+
+ {{ module.forks }}
+
+
-
-
-
-
additional information
-
[Practical Hapi](https://www.amazon.com/Practical-hapi-Build-Industry-Studies/dp/1484258045)
+
+ This book walks you through an end to end implementation of hapi, nodejs and asynchronous programming, right through Node JS Event Loop, Rest API best practices, Hapi Server Setup, Routing, Post and Get Requests with Payload and Parameters, Database Connectivity, Sequelize, Validation, Plugin Architecture, npm repository and its optimum use, swaggerui Integration, Postman tricks, Tricks and Tips for Neater Code, Constructs like await, fetch etc., Nodemon and much much more!!!! A capstone project with industry level challenges is what takes the cake in explaining Hapi in context. The framework is a great choice since it was tried and tested for high production demands and is backed by the best. With further releases coming, this framework is here to stay and is certainly an addition to your skills.
+
+-
[Developing a hapi Edge](http://www.amazon.com/Developing-hapi-Edge-Framework-Services-ebook/dp/B013CWI3MY)
+
+ This book shows you how to build enterprise-quality web applications using the hapi service and application framework. By walking through the creation of a real web application, hapi-plugins.com, you will learn how to configure and start hapi, build out APIs, perform authentication, validation, caching, and so much more. You will also discover tips and tricks used in production hapi deployments regarding plugins, testing, debugging, and security. hapi was developed and is used within Walmart and has been battle tested during the most critical days of the year for e-commerce websites, Black Friday. It has proven itself to not only handle extremely high production loads at a breeze but is also a pleasure to work with. The aim of the framework was to address pitfalls in the other established out there, and it has done so without fail.
+
+-
[Getting Started with hapi.js](https://www.packtpub.com/web-development/getting-started-hapijs)
+
+ This book introduces hapi.js and walks through the creation of your first working application using the out-of-the-box features hapi.js provides. Packed with real-world problems and examples, this book covers some of the basic concepts of hapi.js and Node.js and takes you through the typical journey you'll face when developing an application. Starting with easier concepts such as routing requests, building APIs serving JSON, using templates to build websites and applications, and connecting databases, we then move on to more complex problems such as authentication, model validation, caching, and techniques for structuring your codebase to scale gracefully. You will also develop skills to ensure your application's reliability through testing, code coverage, and logging. By the end of this book, you'll be equipped with all the skills you need to build your first fully featured application. This book will be invaluable if you are investigating Node.js frameworks or planning on using hapi.js in your next project.
+
+-
[hapi.js in Action](http://manning.com/harrison)
+
+ Packed with examples, this book takes you from your first simple server through the skills you'll need to build a complete application. In it, you'll learn how to build websites and APIs, implement caching, authentication, validation, error handling, and a lot more. You'll also explore vital techniques for production applications, such as testing, monitoring, deployment, and documentation.
+
+-
[hapi with TypeScript](http://hapibook.jjude.com)
+
+ This book introduces TypeScript into developing web applications with hapi. TypeScript, a language developed by Microsoft, brings the benefits of strong types and object-oriented programming to JavaScript. With ample code samples, this book teaches all aspects of developing a web application in hapi with TypeScript. It also introduces, hapidock, a docker container with all required components for developing in hapi. With hapidock, you can develop and test hapi applications in a production-like environment. Through this book, you will learn to build stable enterprise-level server applications. The book is free to read at http://hapibook.jjude.com. E-books (pdf, mobi, and epub) and fully executable code samples are available after purchase.
+
+-
[Hapi.js Handbook](https://leanpub.com/hapi-handbook)
+
+ This handbook is a collection of tutorials for Hapi.js framework. You can find tutorials about validation, working with 3rd plugins, sending/getting data, template engines, integrations with DB and etc.
+
+## Boilerplates {#boilerplates}
+
+- [appy](https://github.com/JKHeadley/appy) — A user system leveraging rest-hapi to bootstrap your app.
+- [aqua](https://github.com/jedireza/aqua) — A website and user system. Implemented with React and Flux.
+- [frame](https://github.com/jedireza/frame) — A user system API. Bring your own front-end.
+- [generator-hapi-service](https://github.com/normative/generator-hapi-service) — Yeoman generator for hapi web services.
+- [generator-hapi-style](https://github.com/jedireza/generator-hapi-style) — Yeoman generator for scaffolding hapi apps and plugins.
+- [hanx.js](https://github.com/youhusam/hanx.js) — Full-stack boilerplate with Node.js, hapi, PostgreSQL and AngularJS (MEAN.js port)
+- [hapi-angular-quickstart](https://github.com/ptpaterson/hapi-angular-quickstart) — Angular2 Quickstart example wrapped into a Hapi plugin.
+- [hapi-api](https://github.com/rjmreis/hapi-api) — Lean hapi API Boilerplate with an opinionated view on project structure
+- [hapi-cli](https://github.com/AMoreaux/hapi-cli) — Boilerplate for hapi with mongodb, mongoose. Work with Hapi V17.
+- [hapi-dash](https://github.com/smaxwellstewart/hapi-dash) — A boilerplate hapi web and API server example, with frontend dashboard
+- [hapi-moon](https://github.com/metoikos/hapi-moon) — Hassle-free and production ready hapi.js Server boilerplate
+- [hapi-ninja](https://github.com/poeticninja/hapi-ninja) — Boilerplate hapi server example. Node.js, hapi, and Swig.
+- [hapi-react-starter-kit](https://github.com/Dindaleon/hapi-react-starter-kit) — A hapi React Starter kit with react-router, redux, react-transform.
+- [hapi-starter-kit](https://github.com/Codigami/hapi-starter-kit) — Hapi.js based REST boilerplate which uses latest ES7/ES8 features (async/await) with code coverage and follows best pratices
+- [hapi-struct](https://github.com/MarcHanin/hapi-struct) — Simple Hapi server boilerplate with user authentication (MongoDB)
+- [hapify boilerplate](https://github.com/Tractr/boilerplate-hapijs/) — Dynamic boilerplate providing an API built with HapiJS, MongoDB and Docker (build for [Hapify.io](https://hub.hapify.io/))
+- [hapitodo](https://github.com/genediazjr/hapitodo) — A TodoMVC jQuery front-end with a Hapi back-end.
+- [jolly](https://github.com/ravisuhag/jolly) — Production ready boilerplate for hapi.js
+- [mullet](https://github.com/lynnaloo/mullet) — Boilerplate hapi Server with Facebook and React
+- [the pal boilerplate](https://github.com/hapipal/boilerplate) — A friendly, proven starting place for your next hapi plugin or deployment
+- [rest-hapi](https://github.com/JKHeadley/rest-hapi) — A RESTful API generator built around the hapi framework and mongoose ODM.
+- [rutha](https://github.com/molekilla/rutha) — frontend stack for hapi (server, api) and Angular (client)
+- [snowflake-hapi-openshift](https://github.com/bartonhammond/snowflake-hapi-openshift) — Hapi Server running on OpenShift/local backed by MongoDB & Redis
+- [start-hapiness](https://github.com/thebergamo/start-hapiness) — A Boilerplate that help you to create fast project with Hapi + MongoDB
+- [testing-hapi](https://github.com/pashariger/testing-hapi) — Hapi API Server with Swagger Docs, Testing and Travis CI
+- [typehapily](https://github.com/tejzpr/typehapily) — A TypeScript based boilerplate for HAPIJS with TypeORM & Dynamic Linting
+
+## Projects built with hapi.js {#projects}
+
+- [Colonizers](https://github.com/colonizers/colonizers) — A HTML5 multiplayer game, based on the popular board game "Catan" by Klaus Teuber.
+- [MasteryJS](https://github.com/labibramadhan/mastery) — Scalable API Server framework build on top of Hapi and Sequelize.
+- [Paydash](https://github.com/hks-epod/paydash) — Worker payments dashboard for MGNREGA, India's employment guarantee programme.
+- [Postmile](https://github.com/hueniverse/postmile) — Postmile is a collaborative list making tool built using hapi.js, Node.js, and MongoDB.
+
+## Videos {#videos}
+
+- [Hapi Days Conf 2014 Videos](https://www.youtube.com/playlist?list=PLzc1AUDlJ7WvcMnv3NaEwgh0i2nJKl0GX) — hapi days is a one day conference that's focused on hapi and the people that use it.
+- [Modern backend with TypeScript, Hapi, PostgreSQL and Prisma](https://www.youtube.com/watch?v=d9v7umfMNkM&list=PLn2e1F9Rfr6k7ULe0gzQvtaXLoXrPqpki&index=2&ab_channel=Prisma) — A series of live streams and articles on building a backend with TypeScript, Hapi, PostgreSQL, and Prisma.
+- [Nodevember Conf 2014 hapi.js Workshop](https://www.youtube.com/watch?v=TEKFocYepFY) — A hapi from Scratch Tutorial By Ben Acker And Wyatt Preul at Nodevember Conf.
diff --git a/docs/resources/status.md b/docs/resources/status.md
new file mode 100644
index 00000000..99ed31f5
--- /dev/null
+++ b/docs/resources/status.md
@@ -0,0 +1,3 @@
+# Module Status
+
+