https://github.com/ertgl/holypack
[WIP] Backend-agnostic build system for scalable web projects.
https://github.com/ertgl/holypack
Last synced: about 1 year ago
JSON representation
[WIP] Backend-agnostic build system for scalable web projects.
- Host: GitHub
- URL: https://github.com/ertgl/holypack
- Owner: ertgl
- License: mit
- Created: 2025-04-13T23:40:51.000Z (about 1 year ago)
- Default Branch: main
- Last Pushed: 2025-06-27T07:16:56.000Z (about 1 year ago)
- Last Synced: 2025-06-27T07:40:10.422Z (about 1 year ago)
- Language: TypeScript
- Homepage:
- Size: 2.28 MB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
holypack
A holycat, has some business with your boxes.
> [!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.
## Table of Contents
- [Overview](#overview)
- [Scope](#scope)
- [Principles](#principles)
- [Features](#features)
- [Integrations](#integrations)
- [Packages](#packages)
- [Installation](#installation)
- [Usage](#usage)
- [Name](#name)
- [License](#license)
## Overview
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.
### Scope
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.
### Principles
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 productivity.
- **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.
### Features
Holypack offers a set of enterprise-friendly features that balance performance,
security, and developer experience. All designed to adapt to projects of any
scale.
#### Foundation
- **Modular plugin system**, uses [tapable](https://github.com/webpack/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
#### Build & Transform
- Code and asset bundling via [webpack](https://webpack.js.org/)
- JavaScript/TypeScript transpilation with [Babel](https://babeljs.io/) and
[SWC](https://swc.rs/)
- CSS processing with [PostCSS](https://postcss.org/) and
[Lightning CSS](https://lightningcss.dev/)
- Superpowered CSS, with [Sass](https://sass-lang.com/) and
[SCSS](https://sass-lang.com/documentation/syntax/#scss)
- First-class [CSS modules](https://github.com/css-modules/css-modules) support
#### Security & Integrity
- [Subresource Integrity (SRI)](https://developer.mozilla.org/en-US/docs/Web/Security/Subresource_Integrity)
- [Content Security Policy (CSP)](https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/CSP)
- [Trusted Types](https://developer.mozilla.org/en-US/docs/Web/API/Trusted_Types_API)
- Dual builds for **modern** and **legacy** environments
- Built-in support for **graceful degradation**
#### CLI & Distribution
- 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.
## Integrations
Name
Package
Status
Linters
ESLint
@holypack/integration-eslint
Completed
axe-core
Planned
Stylelint
Planned
commitlint
Planned
Husky
Planned
Build Tools
TypeScript
@holypack/integration-typescript
Completed
Babel
@holypack/integration-babel
Completed
SWC
Planned
JavaScript Obfuscator
Planned
PostCSS
Planned
Lightning CSS
Planned
Sass
Planned
SCSS
Planned
Browserslist
Planned
webpack
@holypack/integration-webpack
Work in progress
Testing Tools
Jest
@holypack/integration-jest
Completed
Distribution & Release Tools
changesets
Planned
export-map-generator
Completed
Libraries & Frameworks
Express
Planned
React
Planned
Polyfills
core-js
Planned
trusted-types
Planned
## Packages
Name
Package
Status
core
@holypack/core
Completed
cli
@holypack/cli
Planned
prelude
holypack
Completed
## Installation
The packages will be available once the initial implementation is complete.
## Usage
The final view of the usage will be provided at a later stage.
### Configuration
Multiple file formats are supported for configuration, including JSON, YAML,
JavaScript and TypeScript.
Example of configuration in `holypack.config.mjs`:
```js
import eslint from "@holypack/integration-eslint";
import { defineConfig } from "holypack/config";
export default defineConfig({
integrations: [
eslint(),
],
});
```
Toggle the eslint.config.mjs view for the above example
```js
import createHolypackPlugin from "@holypack/eslint-plugin";
const holypack = await createHolypackPlugin();
export default [
...holypack.configs.recommended,
];
```
#### Configuration Exploration
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`
### Low-level API
The final view of the API will be provided at a later stage.
#### Context Resolution
Example:
```ts
import { resolveContext } from "@holypack/core";
const context = await resolveContext();
```
## Name
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.
## License
This project is licensed under the
[MIT License](https://opensource.org/license/mit).
See the [LICENSE](LICENSE) file for more information.