Open source libraries and configurations used at Customer.io.
- @ciolabs/config-eslint - Shared ESLint configuration for Customer.io projects
- @ciolabs/config-prettier - Shared Prettier configuration for Customer.io projects
- @ciolabs/framecast - TypeScript cross-frame communication library
- @ciolabs/html-email-formatter - Format and prettify HTML email content with conditional comment support
- @ciolabs/html-find-conditional-comments - Finds all conditional comments in a string
- @ciolabs/html-preserve-comment-whitespace - Preserves the presence or lack thereof of whitespace surrounding HTML comments
- @ciolabs/html-process-conditional-comments - Makes it easy to safely process HTML inside of conditional comments
- @ciolabs/htmlparser2-source - A wrapper around htmlparser2 that adds source range information to the AST
- @ciolabs/html-mod - Manipulate HTML strings with a Browser-like API
- @ciolabs/morphdom - A flexible wrapper around morphdom, a way to diff and patch DOM elements
This monorepo uses pnpm workspaces for managing multiple packages. pnpm provides better dependency resolution, faster installs, and automatic build ordering based on package dependencies.
pnpm install
Note: This project requires pnpm >= 10.0.0. If you don't have pnpm installed, you can install it with
npm install -g pnpm
or use Corepack:corepack enable
.
pnpm run lint # Lint all packages
pnpm run lint:fix # Lint and auto-fix issues
pnpm run format # Format all files with Prettier
pnpm run format:check # Check formatting without changes
pnpm run typecheck # Type check all packages
pnpm run build # Build all packages (in dependency order)
pnpm run test # Run tests for all packages
pnpm run clean # Clean build artifacts
This project uses Changeset for version management and publishing.
When you make changes that should be released:
pnpm run changeset
This will prompt you to:
- Select which packages have changed
- Choose the type of change (major, minor, patch)
- Write a summary of the changes
Once you've created changesets, the release process is automated:
- Changeset creates a release PR automatically with version bumps and changelog
- Review and merge the release PR - this triggers the GitHub Action
- Packages are automatically published to npm with GitHub releases created
This repository uses Husky and lint-staged to automatically lint and format changed files before each commit.
- Fork the repository
- Create a feature branch
- Make your changes
- Ensure all tests pass and code is properly formatted
- Create a changeset:
pnpm run changeset
- Submit a pull request
Apache License 2.0 with Commons Clause - see LICENSE file for details.
Made with ❤️ by the team at Customer.io