Welcome to the culur monorepo, a monorepo personally developed by @phamhongphuc (even though hosted under the culur organization). This project was born from the desire to promote reusability, consistency, and streamlined setup & updates across my various personal projects. It's meticulously managed using pnpm and Nx.
While primarily intended for my own use, you are welcome to utilize these packages or draw inspiration from this setup for your own projects. Please be mindful that updates can be frequent and may include breaking changes without extensive prior notice, as this is an actively evolving personal toolkit.
Beyond its direct utility, this repository serves as a practical demonstration of:
-
Monorepo Architecture & Core Workflow:
- Setting up a robust monorepo with pnpm and Nx.
- Fine-tuning Renovate for intelligent dependency grouping and optimized updates within a monorepo.
- Customizing Changesets for rich, emoji-enhanced changelogs with clear structure (aided by self-developed
@culur/changesets-*packages).
-
CI/CD and Automation with GitHub Actions:
- Building reusable GitHub Actions, particularly for consistent environment setup across workflows.
- Leveraging Volta to enforce pinned Node.js and pnpm versions.
- Optimizing Nx build and task execution by utilizing GitHub Cache (as an effective alternative to Nx Cloud).
- Automating Changeset creation for updates from Renovate PRs or during release preparation.
- Orchestrating a seamless NPM package release pipeline.
-
Reusable Tooling Configurations (via
@culur/config-*packages and best practices):- Establishing comprehensive linting with ESLint, Prettier, Stylelint, and Markdown Lint, tailored for monorepos with potential nested configurations and optimized for Nx's caching and task running.
- Implementing shareable and minimally-adjusted configurations for tsup (bundling), tsconfig (TypeScript), Vite, and Vitest (testing) across different packages.
-
...and many other patterns and examples embedded within this codebase.
While these approaches are personally trusted and have proven effective for my needs, they might not represent the absolute 'best practice' in every scenario. If you spot areas for improvement or have suggestions, please don't hesitate to share them in the Discussions!
Explore the collection of packages developed within this monorepo, organized as follows:
Standardize your development environment with these readily-usable configurations for common linters and development tools.
| Package | Description | NPM |
|---|---|---|
config-eslint |
Sharing Eslint configurations. | |
config-prettier |
Sharing Prettier configurations. | |
config-stylelint |
Sharing Stylelint configurations. | |
config-tsup |
Sharing tsup configurations. | |
config-typescript |
Sharing tsconfig.json. | |
config-vite |
Sharing Vite/Vitest configurations. |
A collection of bespoke utility functions and focused libraries, crafted to solve specific development challenges or enhance common workflows.
| Package | Description | NPM |
|---|---|---|
logger |
Create beautiful CLI interfaces. | |
generate-zod |
An enhanced wrapper around ts-to-zod. |
|
types |
Provides shared TypeScript types. | |
utils-packages |
Check if packages are installed or not. |
This suite of packages is dedicated to customizing and enhancing the Changesets workflow, particularly for generating rich changelogs and integrating seamlessly with GitHub.
| Package | Description | NPM |
|---|---|---|
changesets-changelog-github |
A changelog entry generator for GitHub that links to commits, PRs, and users. | |
changesets-generate-dependencies-changesets |
Github action for generate dependencies changesets. | Internal package |
changesets-github-info |
Get the GitHub username and PR number from a commit. Intended for use with changesets. |
Major changes and version history for the entire monorepo (managed by Changesets) can be found in the individual package CHANGELOG.md files. For a high-level overview of recent significant updates, refer to the GitHub Releases.
While this is a personal project and I may not have the capacity to review or merge feature-driven Pull Requests aimed at serving other users, I still appreciate feedback and bug reports.
- Questions & Ideas: Please use GitHub Discussions.
- Bug Reports: If you encounter a bug, feel free to open an issue.
If you'd like to implement a new feature based on your ideas, please consider forking this project and developing it in your own repository.
This monorepo and its packages are licensed under the MIT License. See the LICENSE file for more details.