[{"data":1,"prerenderedAt":321},["ShallowReactive",2],{"navigation":3,"\u002Fopen-source\u002Fcrisp":18,"\u002Fopen-source\u002Fcrisp-surround":317},[4],{"title":5,"path":6,"stem":7,"children":8,"page":17},"Open Source","\u002Fopen-source","open-source",[9,13],{"title":10,"path":11,"stem":12},"Crisp","\u002Fopen-source\u002Fcrisp","open-source\u002Fcrisp",{"title":14,"path":15,"stem":16},"@weburz\u002Fparticle-canvas","\u002Fopen-source\u002Fparticle-canvas","open-source\u002Fparticle-canvas",false,{"id":19,"title":10,"body":20,"description":301,"extension":302,"icon":303,"links":304,"meta":309,"navigation":310,"path":11,"seo":311,"stem":12,"tags":312,"__hash__":316},"openSource\u002Fopen-source\u002Fcrisp.md",{"type":21,"value":22,"toc":295},"minimark",[23,40,43,48,75,79,89,194,197,208,214,223,227,230,238,277,280,284,292],[24,25,26,27,34,35,39],"p",{},"Crisp is a ",[28,29,33],"a",{"href":30,"rel":31},"https:\u002F\u002Fwww.conventionalcommits.org",[32],"nofollow","Conventional Commits"," linter\nfor ",[36,37,38],"code",{},"git commit"," messages. It's a single Go binary — no Node toolchain, no\ndependency churn, no version-pin drama.",[24,41,42],{},"We built it because the JavaScript-ecosystem alternatives broke too often and\nwere heavyweight for what is a very small, very static problem: does this\ncommit message follow our convention or not.",[44,45,47],"h2",{"id":46},"why-it-exists","Why it exists",[49,50,51,59,65],"ol",{},[52,53,54,58],"li",{},[55,56,57],"strong",{},"No Node dependency tree."," A commit-message linter is a 200ms one-shot\ntool. It shouldn't need to resolve a 300-package install graph to run.",[52,60,61,64],{},[55,62,63],{},"Opinionated and uniform."," One style across every Weburz repo, enforced\nthe same way on every machine.",[52,66,67,70,71,74],{},[55,68,69],{},"Easy to drop in."," A ",[36,72,73],{},"pre-commit"," hook entry and you're done.",[44,76,78],{"id":77},"install","Install",[24,80,81,82,88],{},"The recommended path is via ",[28,83,86],{"href":84,"rel":85},"https:\u002F\u002Fpre-commit.com",[32],[36,87,73],{},":",[90,91,96],"pre",{"className":92,"code":93,"language":94,"meta":95,"style":95},"language-yaml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# .pre-commit-config.yaml\nrepos:\n  - repo: https:\u002F\u002Fgithub.com\u002FWeburz\u002Fcrisp\n    rev: v1.0.0\n    hooks:\n      - id: crisp\n        stages: [commit-msg]\n        name: lint commit messages\n","yaml","",[36,97,98,107,118,133,144,152,166,183],{"__ignoreMap":95},[99,100,103],"span",{"class":101,"line":102},"line",1,[99,104,106],{"class":105},"sHwdD","# .pre-commit-config.yaml\n",[99,108,110,114],{"class":101,"line":109},2,[99,111,113],{"class":112},"swJcz","repos",[99,115,117],{"class":116},"sMK4o",":\n",[99,119,121,124,127,129],{"class":101,"line":120},3,[99,122,123],{"class":116},"  -",[99,125,126],{"class":112}," repo",[99,128,88],{"class":116},[99,130,132],{"class":131},"sfazB"," https:\u002F\u002Fgithub.com\u002FWeburz\u002Fcrisp\n",[99,134,136,139,141],{"class":101,"line":135},4,[99,137,138],{"class":112},"    rev",[99,140,88],{"class":116},[99,142,143],{"class":131}," v1.0.0\n",[99,145,147,150],{"class":101,"line":146},5,[99,148,149],{"class":112},"    hooks",[99,151,117],{"class":116},[99,153,155,158,161,163],{"class":101,"line":154},6,[99,156,157],{"class":116},"      -",[99,159,160],{"class":112}," id",[99,162,88],{"class":116},[99,164,165],{"class":131}," crisp\n",[99,167,169,172,174,177,180],{"class":101,"line":168},7,[99,170,171],{"class":112},"        stages",[99,173,88],{"class":116},[99,175,176],{"class":116}," [",[99,178,179],{"class":131},"commit-msg",[99,181,182],{"class":116},"]\n",[99,184,186,189,191],{"class":101,"line":185},8,[99,187,188],{"class":112},"        name",[99,190,88],{"class":116},[99,192,193],{"class":131}," lint commit messages\n",[24,195,196],{},"Then in your repo:",[90,198,202],{"className":199,"code":200,"language":201,"meta":95,"style":95},"language-sh shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","pre-commit install --install-hooks\n","sh",[36,203,204],{"__ignoreMap":95},[99,205,206],{"class":101,"line":102},[99,207,200],{},[24,209,210,211,213],{},"That's it. Every ",[36,212,38],{}," now runs Crisp against the message.",[24,215,216,217,222],{},"You can also grab the binary directly from the\n",[28,218,221],{"href":219,"rel":220},"https:\u002F\u002Fgithub.com\u002FWeburz\u002Fcrisp\u002Freleases",[32],"releases page"," and run it standalone.",[44,224,226],{"id":225},"what-it-checks","What it checks",[24,228,229],{},"Standard Conventional Commits format:",[90,231,236],{"className":232,"code":234,"language":235},[233],"language-text","\u003Ctype>(\u003Coptional scope>): \u003Cdescription>\n\n\u003Coptional body>\n\n\u003Coptional footer>\n","text",[36,237,234],{"__ignoreMap":95},[24,239,240,241,244,245,244,248,244,251,254,255,244,258,244,261,244,264,244,267,244,270,244,273,276],{},"Allowed types are the conventional set (",[36,242,243],{},"feat",", ",[36,246,247],{},"fix",[36,249,250],{},"chore",[36,252,253],{},"docs",",\n",[36,256,257],{},"refactor",[36,259,260],{},"test",[36,262,263],{},"style",[36,265,266],{},"perf",[36,268,269],{},"build",[36,271,272],{},"ci",[36,274,275],{},"revert",").",[24,278,279],{},"Bad message → non-zero exit → commit blocked. Good message → silent pass.",[44,281,283],{"id":282},"source","Source",[24,285,286,291],{},[28,287,290],{"href":288,"rel":289},"https:\u002F\u002Fgithub.com\u002FWeburz\u002Fcrisp",[32],"github.com\u002FWeburz\u002Fcrisp"," — MIT licensed.",[263,293,294],{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}",{"title":95,"searchDepth":102,"depth":109,"links":296},[297,298,299,300],{"id":46,"depth":109,"text":47},{"id":77,"depth":109,"text":78},{"id":225,"depth":109,"text":226},{"id":282,"depth":109,"text":283},"A no-nonsense Conventional Commits linter for Git, written in Go. Single binary, no Node required.","md","i-simple-icons-go",[305],{"label":306,"icon":307,"to":288,"target":308},"GitHub","i-simple-icons-github","_blank",{},true,{"title":10,"description":301},[313,314,315],"Go","Git","CLI","eNGsUWv77RCqYtbDxum3buMN9HNXOVlS8tS7qWDcgXk",[318,319],null,{"title":14,"path":15,"stem":16,"description":320,"children":-1},"Zero-dependency animated particle canvas for Nuxt 4 — drop-in \u003CParticleCanvas \u002F> component, ~10 KB.",1779552213643]