Leveraging Git Hooks in Monorepos with Mookme.

📖 New Ebook Available

Build Your First MCP Server: A Developer's Guide to Wrapping Existing APIs for AI Agents to Use

Learn to create powerful AI integrations step by step

Get it for $9.99 →

Despite its amusing name, Mookme is a "simple, easy-to-use, yet powerful, and language-agnostic git hook designed specifically for monorepos." The brains behind Mookme, escape.tech, are also responsible for the GraphQL and REST API Security Tools. Their innovative contributions are worth a follow, so consider checking them out on LinkedIn.

Husky has been a valuable tool in preventing wasted time through its pre-commit hooks on various Umbrage projects. The last thing anyone wants is to commit something that fails to pass eslint or hasn't been formatted with prettier. Mookme offers similar functionality but excels in managing pre-commit hooks in monorepos without needing alignment to a package.json.

Simply drop a .hooks folder into any subdirectory, and the hooks will only execute if there are commits making changes within those subdirectories. If there's a need for a hook to run across the entire repo, a global .hooks can be set at the root.

In an ongoing internal project, we have a Rails API in /backend and a Next.js app in /frontend. I've added eslint and prettier with lint-staged exclusively to the Next.js app by positioning the hook here: /frontend/.hooks/pre-commit.json

The json syntax is straightforward:

{
  "steps": [
    {
      "name": "Lint",
      "command": "npx lint-staged"
    }
  ]
}

Our /frontend/package.json houses our lint-staged configuration:

{
    "lint-staged": {
        "src/**/*.(ts|tsx|js|jsx)": [
            "eslint --fix",
            "prettier --write"
        ],
        "src/**/*.(css|scss)": [
            "prettier --write"
        ]
    },
}

For the future, I plan to explore integrating a hook into /backend/.hooks/ to run a Ruby gem that would generate new TypeScript interfaces for use in the /frontend Next.js app, ensuring we always have the latest types if the Rails API schema changes.

What are some of your favorite uses for git hooks? I'd love to hear your thoughts on LinkedIn.

Want to Chat About AI Engineering?

I hold monthly office hours to discuss your AI Product, MCP Servers, Web Dev, systematically improving your app with Evals, or whatever strikes your fancy. These times are odd because it's weekends and before/after my day job, but I offer this as a free community service. I may create anonymized content from our conversations as they often make interesting blog posts for others to learn from.

Book Office Hours