Skip to content
/ holypack Public

[WIP] Backend-agnostic build system for scalable web projects.

License

Notifications You must be signed in to change notification settings

ertgl/holypack

Repository files navigation

holypack

holycat, the mascot of 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

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 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.

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 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

Security & Integrity

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 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

Packages

Name Package Status
core @holypack/core Work in progress
cli @holypack/cli Planned
prelude holypack Work in progress

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:

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,
];

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:

import { resolveContext } from "holypack";

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. See the LICENSE file for more information.

About

[WIP] Backend-agnostic build system for scalable web projects.

Resources

License

Stars

Watchers

Forks

Releases

No releases published