My polyglot monorepo. It keeps the projects I rely on most under a single roof so I can share tooling, manage dependencies consistently, and clone everything in one go.
Maintaining several language stacks across scattered repositories was slowing me down. Consolidating them here lets me:
- reuse the same CI, release, and security policies;
- version cross-cutting assets together;
- archive upstream code (including Git LFS objects) so future clones depend on this repo only.
The first two pillars were OnePython and OneDotNet. Adding the rest of my “other” projects made it a trio, hence Three = OnePython + OneDotNet + Others. In Daoist philosophy, “三生万物” (“Three begets all things”) symbolizes how diversity emerges from a balanced trio—exactly how this monorepo grows.
| Project | Directory | Upstream | Commit |
|---|---|---|---|
| Asciidoctor LaTeXMath | src/public/lib/asciidoctor-latexmath/ |
Repo | 514d685 |
| ImageOcclusionEditor | src/public/app/ImageOcclusionEditor/ |
Repo | e08f834 |
| OneDotNet | OneDotNet/ |
Repo | 17f2224 |
| OnePython | OnePython/ |
Repo | 21ef6d5 |
| Steam Account History to CSV | src/public/lib/steam-account-history-to-csv/ |
Repo | b759a52 |
| Hexo Renderer AsciiDoc | src/public/lib/hexo-renderer-asciidoc/ |
Repo | d98f8d5 |
The src/public/lib/hexo-renderer-asciidoc/ and src/public/lib/steam-account-history-to-csv/ folders share a pnpm workspace that still lives at the repo root even though the projects moved under src/public/lib/. The nested layout keeps the repo top level tidy while preserving predictable dependency resolution (sharedWorkspaceLockfile: true) and automatic linking between workspace packages (linkWorkspacePackages: true). As before, the workspace does not pin a Node version—each package’s own engines entry (Hexo still wants Node ≥ 20.19) remains authoritative.
Development flow:
- Enable Corepack (once per machine) so the
packageManagersetting can download pnpm for you. - From the repo root, run
pnpm installto hydrate every workspace project and refresh the singlepnpm-lock.yaml. - Use the root scripts from
package.json:pnpm run build→ runsbuildin every workspace package.pnpm run test/pnpm run lint/pnpm run format→ fan out with--if-present, so packages missing a script are skipped.
- When pnpm warns about blocked install scripts (for example
hexo-util), review and allow them withpnpm approve-buildsto stay compliant with pnpm 10’s hardened defaults.
For publishing/versioning, follow pnpm’s Changesets guide so both packages can share a single release workflow.
Each subtree was imported with git subtree add --squash, so future pulls can use git subtree pull --prefix=<dir> <remote> main --squash to stay in sync.