Caution
This project is in early development.
The content in this README is more of a plan and might not reflect the final product.
Development is ongoing very actively.
If you are interested, I would like to hear your thoughts. Contact information is available on my profile.
Holypack is a backend-agnostic build system designed for accessible and scalable web projects. It focuses on transforming, optimizing, and bundling frontend assets with minimal setup and maximum flexibility. Built with modern tooling and enterprise-readiness in mind, it supports a wide range of project types (from progressive-enhancement-first architectures to single-page applications) without enforcing backend constraints. Holypack provides reliable defaults, thoughtful integrations for linting, testing, security and a modular plugin system for unrestricted extensibility.
Many modern tools either make strong assumptions about the backend environment (typically JavaScript or TypeScript) or overlook the needs of progressive enhancement, which is vital for accessibility and long-term scalability. Holypack is crafted to fill this gap by offering a backend-agnostic approach that prioritizes portability, flexibility, and production-readiness from the start. It supports diverse project types, including SPAs, PWAs, SSR setups, and CLI tools without dictating architectural choices.
Holypack is designed to help achieve long-term maintainability, modern developer workflows, and a clear separation of concerns. It uses proven technologies to keep things simple but flexible enough to handle different use cases. The configuration approach strikes a balance, avoiding unnecessary complexity while still allowing customization when needed.
The core principles behind holypack include:
- Production-ready: A straightforward setup by default.
- Guided flexibility: A mix of "convention over configuration" and "configuration over convention."
- Optimized for modern workflows: Integrates with fast, developer-friendly tools that improve efficiency.
- Built on proven technologies: Combined with the best practices to ensure sustainable efficiency.
- Adaptable and non-restrictive: Works with any project structure, without being restrictive.
Holypack offers a set of enterprise-friendly features that balance performance, security, and developer experience. All designed to adapt to projects of any scale.
- Modular plugin system, uses tapable under the hood
- Backend-agnostic architecture, supports any backend in any language
- Project templates for:
- Frontend-only (assets)
- Single Page Applications (SPA)
- Progressive Web Applications (PWA, service workers, navigation preloading)
- Server-Side Rendering (SSR) with progressive enhancement
- Code and asset bundling via webpack
- JavaScript/TypeScript transpilation with Babel and SWC
- CSS processing with PostCSS and Lightning CSS
- Support for Sass and SCSS
- First-class CSS modules support
- Subresource Integrity (SRI)
- Content Security Policy (CSP)
- Trusted Types
- Dual builds for modern and legacy environments
- Built-in support for graceful degradation
- Build CLI applications targeting Node.js (including SSR use cases)
- Optional JavaScript obfuscation for closed-source projects
- Support for bundling into single-file executables
Warning
Code obfuscation is not a security mechanism for intellectual properties. It serves as a deterrent and may support legal standing by demonstrating that violations were deliberate rather than accidental.
Name | Package | Status |
---|---|---|
| ||
Linters | ||
ESLint | @holypack/integration-eslint | Completed |
axe-core | Planned | |
Stylelint | Planned | |
commitlint | Planned | |
Husky | Planned | |
| ||
Build Tools | ||
TypeScript | @holypack/integration-typescript | Work in progress |
Babel | @holypack/integration-babel | Work in progress |
SWC | Planned | |
JavaScript Obfuscator | Planned | |
PostCSS | Planned | |
Lightning CSS | Planned | |
Sass | Planned | |
SCSS | Planned | |
Browserslist | Planned | |
webpack | Planned | |
| ||
Testing Tools | ||
Jest | Planned | |
| ||
Release Tools | ||
changesets | Planned | |
| ||
Libraries & Frameworks | ||
Express | Planned | |
React | Planned | |
| ||
Polyfills | ||
core-js | Planned | |
trusted-types | Planned |
Name | Package | Status |
---|---|---|
core | @holypack/core | Work in progress |
cli | @holypack/cli | Planned |
prelude | holypack | Work in progress |
The packages will be available once the initial implementation is complete.
The final view of the usage will be provided at a later stage.
Multiple file formats are supported for configuration, including JSON, YAML, JavaScript and TypeScript.
Example of configuration in holypack.config.mjs
:
import eslint from "@holypack/integration-eslint";
import { defineConfig } from "holypack";
export default defineConfig({
integrations: [
eslint(),
],
});
Toggle the eslint.config.mjs
view for the above example
import createHolypackPlugin from "@holypack/eslint-plugin";
const holypack = await createHolypackPlugin();
export default [
...holypack.configs.recommended,
];
When a configuration file is provided, the system will use it as the main configuration file. Otherwise, it will look for a configuration file in the current working directory with the following priority:
package.json
(holypack.config
property)holypack.config.ts
holypack.config.js
holypack.config.mts
holypack.config.mjs
holypack.config.cts
holypack.config.cjs
.holypackrc.ts
.holypackrc.js
.holypackrc.mts
.holypackrc.mjs
.holypackrc.cts
.holypackrc.cjs
.holypackrc.json
.holypackrc.yml
.holypackrc.yaml
.holypackrc
.config/holypackrc.ts
.config/holypackrc.js
.config/holypackrc.mts
.config/holypackrc.mjs
.config/holypackrc.cts
.config/holypackrc.cjs
.config/holypackrc.json
.config/holypackrc.yml
.config/holypackrc.yaml
.config/holypackrc
The final view of the API will be provided at a later stage.
Example:
import { resolveContext } from "holypack";
const context = await resolveContext();
The name first came from my reaction to how crowded the npm registry felt. But it now reflects my respect for the stack of technologies that I have used to build this project. Cats are also very surprising.
Just same as webpack, I prefer not to capitalize it in the middle of a sentence.
This project is licensed under the MIT License. See the LICENSE file for more information.