Simple Configuration
Configure your git hooks using TypeScript, JavaScript, or JSON. Supports multiple config formats for maximum flexibility.
A zero-dependency, type-safe tool for managing git hooks in Bun projects

# Install the package
bun add -D bun-git-hooks
# Create a configuration file
cat > git-hooks.config.ts << EOL
import type { GitHooksConfig } from 'bun-git-hooks'
const config: GitHooksConfig = {
// Note: staged-lint is only available in pre-commit hook
'pre-commit': {
'staged-lint': {
'*.{js,ts}': 'bunx --bun eslint . --fix --max-warnings=0'
}
},
'commit-msg': 'bun commitlint --edit $1',
'pre-push': 'bun run build',
}
export default config
EOL
# Hooks are automatically installed!git-hooks.config.ts (TypeScript)git-hooks.config.js (JavaScript)git-hooks.config.cjs (CommonJS)git-hooks.config.json (JSON)package.json (with gitHooks field)SKIP_BUN_GIT_HOOKS: Set to "1" to skip hook executionBUN_GIT_HOOKS_RC: Path to initialization scriptSKIP_INSTALL_GIT_HOOKS: Set to "1" to skip hook installationconst config: GitHooksConfig = {
// Lint and test before commits (using staged-lint)
'pre-commit': {
'staged-lint': {
'*.{js,ts}': 'bunx --bun eslint . --fix --max-warnings=0',
'*.{css,scss}': 'stylelint --fix'
}
},
// Validate commit messages
'commit-msg': 'bun commitlint --edit $1',
// Build and test before pushing
'pre-push': 'bun run build && bun run test:e2e',
// Update dependencies after checkout
'post-checkout': 'bun install',
// Run security checks before push
'pre-push': 'bun run security:check'
}Create a .git-hooks.rc file to set up environment variables or perform custom initialization:
#!/bin/bash
export NODE_ENV=development
export CUSTOM_VAR=value# Skip hooks for a single command
SKIP_BUN_GIT_HOOKS=1 git commit -m "message"
# Skip hook installation
SKIP_INSTALL_GIT_HOOKS=1 bun installJoin our community to get help, share ideas, and contribute:
If you find this project useful, please consider:
MIT License © 2024-present Stacks.js