@ferrflow/doc 7.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (170) hide show
  1. package/docs-en/ci/github-actions.md +120 -0
  2. package/docs-en/ci/gitlab-ci.md +90 -0
  3. package/docs-en/ci/hosted-bot.md +82 -0
  4. package/docs-en/ci/pipeline-triggers.md +287 -0
  5. package/docs-en/configuration/config-file.md +1259 -0
  6. package/docs-en/configuration/formats.md +220 -0
  7. package/docs-en/configuration/monorepo.md +390 -0
  8. package/docs-en/installation.md +56 -0
  9. package/docs-en/introduction.md +56 -0
  10. package/docs-en/quickstart.md +66 -0
  11. package/docs-en/reference/api.md +106 -0
  12. package/docs-en/reference/cli.md +483 -0
  13. package/docs-en/reference/conventional-commits.md +103 -0
  14. package/docs-en/reference/errors.md +508 -0
  15. package/docs-en/verifying-releases.md +97 -0
  16. package/docs-fr/ci/github-actions.md +109 -0
  17. package/docs-fr/ci/gitlab-ci.md +77 -0
  18. package/docs-fr/ci/hosted-bot.md +82 -0
  19. package/docs-fr/ci/pipeline-triggers.md +238 -0
  20. package/docs-fr/configuration/config-file.md +839 -0
  21. package/docs-fr/configuration/formats.md +163 -0
  22. package/docs-fr/configuration/monorepo.md +357 -0
  23. package/docs-fr/installation.md +56 -0
  24. package/docs-fr/introduction.md +54 -0
  25. package/docs-fr/quickstart.md +63 -0
  26. package/docs-fr/reference/api.md +106 -0
  27. package/docs-fr/reference/cli.md +407 -0
  28. package/docs-fr/reference/conventional-commits.md +103 -0
  29. package/docs-fr/reference/errors.md +378 -0
  30. package/docs-fr/verifying-releases.md +97 -0
  31. package/docs-fr-v4/ci/github-actions.md +106 -0
  32. package/docs-fr-v4/ci/gitlab-ci.md +77 -0
  33. package/docs-fr-v4/ci/pipeline-triggers.md +214 -0
  34. package/docs-fr-v4/configuration/config-file.md +769 -0
  35. package/docs-fr-v4/configuration/formats.md +128 -0
  36. package/docs-fr-v4/configuration/monorepo.md +324 -0
  37. package/docs-fr-v4/installation.md +48 -0
  38. package/docs-fr-v4/introduction.md +54 -0
  39. package/docs-fr-v4/legal/telemetry.md +65 -0
  40. package/docs-fr-v4/quickstart.md +63 -0
  41. package/docs-fr-v4/reference/cli.md +130 -0
  42. package/docs-fr-v4/reference/conventional-commits.md +67 -0
  43. package/docs-fr-v4/reference/errors.md +372 -0
  44. package/docs-fr-v5/ci/github-actions.md +109 -0
  45. package/docs-fr-v5/ci/gitlab-ci.md +77 -0
  46. package/docs-fr-v5/ci/hosted-bot.md +82 -0
  47. package/docs-fr-v5/ci/pipeline-triggers.md +238 -0
  48. package/docs-fr-v5/configuration/config-file.md +812 -0
  49. package/docs-fr-v5/configuration/formats.md +150 -0
  50. package/docs-fr-v5/configuration/monorepo.md +357 -0
  51. package/docs-fr-v5/installation.md +56 -0
  52. package/docs-fr-v5/introduction.md +54 -0
  53. package/docs-fr-v5/legal/telemetry.md +26 -0
  54. package/docs-fr-v5/quickstart.md +63 -0
  55. package/docs-fr-v5/reference/api.md +106 -0
  56. package/docs-fr-v5/reference/cli.md +356 -0
  57. package/docs-fr-v5/reference/conventional-commits.md +88 -0
  58. package/docs-fr-v5/reference/errors.md +378 -0
  59. package/docs-fr-v5/verifying-releases.md +97 -0
  60. package/docs-fr-v6/ci/github-actions.md +109 -0
  61. package/docs-fr-v6/ci/gitlab-ci.md +77 -0
  62. package/docs-fr-v6/ci/hosted-bot.md +82 -0
  63. package/docs-fr-v6/ci/pipeline-triggers.md +238 -0
  64. package/docs-fr-v6/configuration/config-file.md +813 -0
  65. package/docs-fr-v6/configuration/formats.md +150 -0
  66. package/docs-fr-v6/configuration/monorepo.md +357 -0
  67. package/docs-fr-v6/installation.md +56 -0
  68. package/docs-fr-v6/introduction.md +54 -0
  69. package/docs-fr-v6/quickstart.md +63 -0
  70. package/docs-fr-v6/reference/api.md +106 -0
  71. package/docs-fr-v6/reference/cli.md +356 -0
  72. package/docs-fr-v6/reference/conventional-commits.md +88 -0
  73. package/docs-fr-v6/reference/errors.md +378 -0
  74. package/docs-fr-v6/verifying-releases.md +97 -0
  75. package/docs-v0/ci/github-actions.md +77 -0
  76. package/docs-v0/ci/gitlab-ci.md +59 -0
  77. package/docs-v0/configuration/config-file.md +97 -0
  78. package/docs-v0/configuration/formats.md +86 -0
  79. package/docs-v0/configuration/monorepo.md +59 -0
  80. package/docs-v0/installation.md +48 -0
  81. package/docs-v0/introduction.md +34 -0
  82. package/docs-v0/legal/telemetry.md +63 -0
  83. package/docs-v0/quickstart.md +58 -0
  84. package/docs-v0/reference/cli.md +95 -0
  85. package/docs-v0/reference/conventional-commits.md +68 -0
  86. package/docs-v1/ci/github-actions.md +76 -0
  87. package/docs-v1/ci/gitlab-ci.md +58 -0
  88. package/docs-v1/configuration/config-file.md +515 -0
  89. package/docs-v1/configuration/formats.md +115 -0
  90. package/docs-v1/configuration/monorepo.md +246 -0
  91. package/docs-v1/installation.md +48 -0
  92. package/docs-v1/introduction.md +39 -0
  93. package/docs-v1/legal/telemetry.md +63 -0
  94. package/docs-v1/quickstart.md +62 -0
  95. package/docs-v1/reference/cli.md +128 -0
  96. package/docs-v1/reference/conventional-commits.md +67 -0
  97. package/docs-v2/ci/github-actions.md +117 -0
  98. package/docs-v2/ci/gitlab-ci.md +90 -0
  99. package/docs-v2/ci/pipeline-triggers.md +263 -0
  100. package/docs-v2/configuration/config-file.md +806 -0
  101. package/docs-v2/configuration/formats.md +98 -0
  102. package/docs-v2/configuration/monorepo.md +324 -0
  103. package/docs-v2/installation.md +48 -0
  104. package/docs-v2/introduction.md +40 -0
  105. package/docs-v2/legal/telemetry.md +66 -0
  106. package/docs-v2/quickstart.md +63 -0
  107. package/docs-v2/reference/cli.md +130 -0
  108. package/docs-v2/reference/conventional-commits.md +67 -0
  109. package/docs-v2/reference/errors.md +500 -0
  110. package/docs-v2/self-hosting.md +101 -0
  111. package/docs-v3/ci/github-actions.md +117 -0
  112. package/docs-v3/ci/gitlab-ci.md +90 -0
  113. package/docs-v3/ci/pipeline-triggers.md +263 -0
  114. package/docs-v3/configuration/config-file.md +806 -0
  115. package/docs-v3/configuration/formats.md +99 -0
  116. package/docs-v3/configuration/monorepo.md +324 -0
  117. package/docs-v3/installation.md +48 -0
  118. package/docs-v3/introduction.md +40 -0
  119. package/docs-v3/legal/telemetry.md +66 -0
  120. package/docs-v3/quickstart.md +66 -0
  121. package/docs-v3/reference/cli.md +161 -0
  122. package/docs-v3/reference/conventional-commits.md +67 -0
  123. package/docs-v3/reference/errors.md +502 -0
  124. package/docs-v3/self-hosting.md +137 -0
  125. package/docs-v4/ci/github-actions.md +117 -0
  126. package/docs-v4/ci/gitlab-ci.md +90 -0
  127. package/docs-v4/ci/pipeline-triggers.md +263 -0
  128. package/docs-v4/configuration/config-file.md +850 -0
  129. package/docs-v4/configuration/formats.md +182 -0
  130. package/docs-v4/configuration/monorepo.md +324 -0
  131. package/docs-v4/installation.md +48 -0
  132. package/docs-v4/introduction.md +56 -0
  133. package/docs-v4/legal/telemetry.md +65 -0
  134. package/docs-v4/quickstart.md +66 -0
  135. package/docs-v4/reference/cli.md +161 -0
  136. package/docs-v4/reference/conventional-commits.md +67 -0
  137. package/docs-v4/reference/errors.md +502 -0
  138. package/docs-v4/self-hosting.md +137 -0
  139. package/docs-v5/ci/github-actions.md +120 -0
  140. package/docs-v5/ci/gitlab-ci.md +90 -0
  141. package/docs-v5/ci/hosted-bot.md +82 -0
  142. package/docs-v5/ci/pipeline-triggers.md +287 -0
  143. package/docs-v5/configuration/config-file.md +1133 -0
  144. package/docs-v5/configuration/formats.md +206 -0
  145. package/docs-v5/configuration/monorepo.md +390 -0
  146. package/docs-v5/installation.md +56 -0
  147. package/docs-v5/introduction.md +56 -0
  148. package/docs-v5/legal/telemetry.md +26 -0
  149. package/docs-v5/quickstart.md +66 -0
  150. package/docs-v5/reference/api.md +106 -0
  151. package/docs-v5/reference/cli.md +431 -0
  152. package/docs-v5/reference/conventional-commits.md +88 -0
  153. package/docs-v5/reference/errors.md +508 -0
  154. package/docs-v5/verifying-releases.md +97 -0
  155. package/docs-v6/ci/github-actions.md +120 -0
  156. package/docs-v6/ci/gitlab-ci.md +90 -0
  157. package/docs-v6/ci/hosted-bot.md +82 -0
  158. package/docs-v6/ci/pipeline-triggers.md +287 -0
  159. package/docs-v6/configuration/config-file.md +1134 -0
  160. package/docs-v6/configuration/formats.md +206 -0
  161. package/docs-v6/configuration/monorepo.md +390 -0
  162. package/docs-v6/installation.md +56 -0
  163. package/docs-v6/introduction.md +56 -0
  164. package/docs-v6/quickstart.md +66 -0
  165. package/docs-v6/reference/api.md +106 -0
  166. package/docs-v6/reference/cli.md +431 -0
  167. package/docs-v6/reference/conventional-commits.md +88 -0
  168. package/docs-v6/reference/errors.md +508 -0
  169. package/docs-v6/verifying-releases.md +97 -0
  170. package/package.json +17 -0
@@ -0,0 +1,246 @@
1
+ ---
2
+ title: Monorepo
3
+ description: Version multiple packages independently in a single repository.
4
+ ---
5
+
6
+ FerrFlow treats a repository as a monorepo when the config defines more than one package. Each package is versioned independently based on its own git history.
7
+
8
+ ## Package isolation
9
+
10
+ FerrFlow uses path prefixes to determine which commits belong to which package. Only commits that touch files under `path` (or `sharedPaths`) trigger a release for that package.
11
+
12
+ <div class="ferr-tabs">
13
+ <div class="ferr-tab" data-label="JSON"><p class="ferr-tab__label">JSON</p><div class="ferr-tab__body"><pre><code class="language-json">{
14
+ &quot;package&quot;: [
15
+ {
16
+ &quot;name&quot;: &quot;api&quot;,
17
+ &quot;path&quot;: &quot;packages/api&quot;
18
+ },
19
+ {
20
+ &quot;name&quot;: &quot;site&quot;,
21
+ &quot;path&quot;: &quot;packages/site&quot;
22
+ }
23
+ ]
24
+ }
25
+ </code></pre>
26
+ </div></div>
27
+ <div class="ferr-tab" data-label="TOML"><p class="ferr-tab__label">TOML</p><div class="ferr-tab__body"><pre><code class="language-toml">[[package]]
28
+ name = &quot;api&quot;
29
+ path = &quot;packages/api&quot;
30
+
31
+ [[package]]
32
+ name = &quot;site&quot;
33
+ path = &quot;packages/site&quot;
34
+ </code></pre>
35
+ </div></div>
36
+ <div class="ferr-tab" data-label="JSON5"><p class="ferr-tab__label">JSON5</p><div class="ferr-tab__body"><pre><code class="language-json5">{
37
+ package: [
38
+ {
39
+ name: &quot;api&quot;,
40
+ path: &quot;packages/api&quot;,
41
+ },
42
+ {
43
+ name: &quot;site&quot;,
44
+ path: &quot;packages/site&quot;,
45
+ },
46
+ ],
47
+ }
48
+ </code></pre>
49
+ </div></div>
50
+ <div class="ferr-tab" data-label="YAML"><p class="ferr-tab__label">YAML</p><div class="ferr-tab__body"><pre><code class="language-yaml">package:
51
+ - name: api
52
+ path: packages/api
53
+ - name: site
54
+ path: packages/site
55
+ </code></pre>
56
+ </div></div>
57
+ </div>
58
+
59
+ ## Shared dependencies
60
+
61
+ If you have code shared between packages (e.g., a `packages/shared/` library), declare it as a `sharedPaths` entry. A change to any shared path triggers a release for every package that lists it:
62
+
63
+ <div class="ferr-tabs">
64
+ <div class="ferr-tab" data-label="JSON"><p class="ferr-tab__label">JSON</p><div class="ferr-tab__body"><pre><code class="language-json">{
65
+ &quot;package&quot;: [
66
+ {
67
+ &quot;name&quot;: &quot;api&quot;,
68
+ &quot;path&quot;: &quot;packages/api&quot;,
69
+ &quot;sharedPaths&quot;: [&quot;packages/shared/&quot;]
70
+ },
71
+ {
72
+ &quot;name&quot;: &quot;site&quot;,
73
+ &quot;path&quot;: &quot;packages/site&quot;,
74
+ &quot;sharedPaths&quot;: [&quot;packages/shared/&quot;]
75
+ }
76
+ ]
77
+ }
78
+ </code></pre>
79
+ </div></div>
80
+ <div class="ferr-tab" data-label="TOML"><p class="ferr-tab__label">TOML</p><div class="ferr-tab__body"><pre><code class="language-toml">[[package]]
81
+ name = &quot;api&quot;
82
+ path = &quot;packages/api&quot;
83
+ shared_paths = [&quot;packages/shared/&quot;]
84
+
85
+ [[package]]
86
+ name = &quot;site&quot;
87
+ path = &quot;packages/site&quot;
88
+ shared_paths = [&quot;packages/shared/&quot;]
89
+ </code></pre>
90
+ </div></div>
91
+ <div class="ferr-tab" data-label="JSON5"><p class="ferr-tab__label">JSON5</p><div class="ferr-tab__body"><pre><code class="language-json5">{
92
+ package: [
93
+ {
94
+ name: &quot;api&quot;,
95
+ path: &quot;packages/api&quot;,
96
+ sharedPaths: [&quot;packages/shared/&quot;],
97
+ },
98
+ {
99
+ name: &quot;site&quot;,
100
+ path: &quot;packages/site&quot;,
101
+ sharedPaths: [&quot;packages/shared/&quot;],
102
+ },
103
+ ],
104
+ }
105
+ </code></pre>
106
+ </div></div>
107
+ <div class="ferr-tab" data-label="YAML"><p class="ferr-tab__label">YAML</p><div class="ferr-tab__body"><pre><code class="language-yaml">package:
108
+ - name: api
109
+ path: packages/api
110
+ sharedPaths:
111
+ - packages/shared/
112
+ - name: site
113
+ path: packages/site
114
+ sharedPaths:
115
+ - packages/shared/
116
+ </code></pre>
117
+ </div></div>
118
+ </div>
119
+
120
+ ## Git tag format
121
+
122
+ By default, monorepo tags use the `{name}@v{version}` format:
123
+
124
+ ```
125
+ api@v1.2.0
126
+ site@v0.4.1
127
+ ```
128
+
129
+ Configure this with the `tagTemplate` field:
130
+
131
+ <div class="ferr-tabs">
132
+ <div class="ferr-tab" data-label="JSON"><p class="ferr-tab__label">JSON</p><div class="ferr-tab__body"><pre><code class="language-json">{
133
+ &quot;workspace&quot;: {
134
+ &quot;tagTemplate&quot;: &quot;{name}@v{version}&quot;
135
+ }
136
+ }
137
+ </code></pre>
138
+ </div></div>
139
+ <div class="ferr-tab" data-label="TOML"><p class="ferr-tab__label">TOML</p><div class="ferr-tab__body"><pre><code class="language-toml">[workspace]
140
+ tag_template = &quot;{name}@v{version}&quot;
141
+ </code></pre>
142
+ </div></div>
143
+ <div class="ferr-tab" data-label="JSON5"><p class="ferr-tab__label">JSON5</p><div class="ferr-tab__body"><pre><code class="language-json5">{
144
+ workspace: {
145
+ tagTemplate: &quot;{name}@v{version}&quot;,
146
+ },
147
+ }
148
+ </code></pre>
149
+ </div></div>
150
+ <div class="ferr-tab" data-label="YAML"><p class="ferr-tab__label">YAML</p><div class="ferr-tab__body"><pre><code class="language-yaml">workspace:
151
+ tagTemplate: &quot;{name}@v{version}&quot;
152
+ </code></pre>
153
+ </div></div>
154
+ </div>
155
+
156
+ For a single-package repo, the default is `v{version}` (no name prefix).
157
+
158
+ FerrFlow looks for the most recent tag matching the template to determine what commits are new.
159
+
160
+ ## Independent cadences
161
+
162
+ Packages release independently. In a single `ferrflow release` run:
163
+
164
+ - `api` may bump from `1.2.0` → `1.3.0` (new `feat:` commit)
165
+ - `site` may bump from `0.4.0` → `0.4.1` (only `fix:` commits)
166
+ - `shared` may not release at all (only `chore:` commits)
167
+
168
+ ## Per-package overrides
169
+
170
+ Each package can override the workspace-level `versioning` strategy and `tagTemplate`:
171
+
172
+ <div class="ferr-tabs">
173
+ <div class="ferr-tab" data-label="JSON"><p class="ferr-tab__label">JSON</p><div class="ferr-tab__body"><pre><code class="language-json">{
174
+ &quot;workspace&quot;: {
175
+ &quot;versioning&quot;: &quot;semver&quot;,
176
+ &quot;tagTemplate&quot;: &quot;{name}@v{version}&quot;
177
+ },
178
+ &quot;package&quot;: [
179
+ {
180
+ &quot;name&quot;: &quot;api&quot;,
181
+ &quot;path&quot;: &quot;packages/api&quot;,
182
+ &quot;versioning&quot;: &quot;calver&quot;
183
+ },
184
+ {
185
+ &quot;name&quot;: &quot;site&quot;,
186
+ &quot;path&quot;: &quot;packages/site&quot;,
187
+ &quot;tagTemplate&quot;: &quot;site-v{version}&quot;
188
+ }
189
+ ]
190
+ }
191
+ </code></pre>
192
+ </div></div>
193
+ <div class="ferr-tab" data-label="TOML"><p class="ferr-tab__label">TOML</p><div class="ferr-tab__body"><pre><code class="language-toml">[workspace]
194
+ versioning = &quot;semver&quot;
195
+ tag_template = &quot;{name}@v{version}&quot;
196
+
197
+ [[package]]
198
+ name = &quot;api&quot;
199
+ path = &quot;packages/api&quot;
200
+ versioning = &quot;calver&quot;
201
+
202
+ [[package]]
203
+ name = &quot;site&quot;
204
+ path = &quot;packages/site&quot;
205
+ tag_template = &quot;site-v{version}&quot;
206
+ </code></pre>
207
+ </div></div>
208
+ <div class="ferr-tab" data-label="JSON5"><p class="ferr-tab__label">JSON5</p><div class="ferr-tab__body"><pre><code class="language-json5">{
209
+ workspace: {
210
+ versioning: &quot;semver&quot;,
211
+ tagTemplate: &quot;{name}@v{version}&quot;,
212
+ },
213
+ package: [
214
+ {
215
+ name: &quot;api&quot;,
216
+ path: &quot;packages/api&quot;,
217
+ versioning: &quot;calver&quot;,
218
+ },
219
+ {
220
+ name: &quot;site&quot;,
221
+ path: &quot;packages/site&quot;,
222
+ tagTemplate: &quot;site-v{version}&quot;,
223
+ },
224
+ ],
225
+ }
226
+ </code></pre>
227
+ </div></div>
228
+ <div class="ferr-tab" data-label="YAML"><p class="ferr-tab__label">YAML</p><div class="ferr-tab__body"><pre><code class="language-yaml">workspace:
229
+ versioning: semver
230
+ tagTemplate: &quot;{name}@v{version}&quot;
231
+
232
+ package:
233
+
234
+ - name: api
235
+ path: packages/api
236
+ versioning: calver
237
+ - name: site
238
+ path: packages/site
239
+ tagTemplate: &quot;site-v{version}&quot;
240
+ </code></pre>
241
+
242
+ </div></div>
243
+ </div>
244
+
245
+ <aside class="ferr-aside ferr-aside--tip"><div class="ferr-aside__body"><p>Use <code>ferrflow check</code> to preview exactly which packages would be released and at what version before committing to a release.</p>
246
+ </div></aside>
@@ -0,0 +1,48 @@
1
+ ---
2
+ title: Installation
3
+ description: How to install FerrFlow locally or in CI.
4
+ ---
5
+
6
+ ## Local installation
7
+
8
+ <div class="ferr-tabs">
9
+ <div class="ferr-tab" data-label="Cargo"><p class="ferr-tab__label">Cargo</p><div class="ferr-tab__body"><pre><code class="language-bash">cargo install ferrflow
10
+ </code></pre>
11
+ </div></div>
12
+ <div class="ferr-tab" data-label="npm"><p class="ferr-tab__label">npm</p><div class="ferr-tab__body"><pre><code class="language-bash">npm install -g ferrflow
13
+ # or as a dev dependency
14
+ npm install -D ferrflow
15
+ </code></pre>
16
+ </div></div>
17
+ <div class="ferr-tab" data-label="WASM (browser)"><p class="ferr-tab__label">WASM (browser)</p><div class="ferr-tab__body"><pre><code class="language-bash">npm install @ferrflow/wasm
18
+ </code></pre>
19
+ <p>Use FerrFlow directly in the browser — parse commits, compute version bumps, and generate changelogs client-side without a backend.</p>
20
+ </div></div>
21
+ <div class="ferr-tab" data-label="Binary"><p class="ferr-tab__label">Binary</p><div class="ferr-tab__body"><p>Download a pre-built binary from <a href="https://github.com/FerrLabs/FerrFlow/releases/latest">Releases</a>:</p>
22
+ <pre><code class="language-bash"># Linux x86_64
23
+ curl -L https://github.com/FerrLabs/FerrFlow/releases/latest/download/ferrflow-linux-x64.tar.gz | tar xz
24
+ sudo mv ferrflow /usr/local/bin/
25
+ </code></pre>
26
+ </div></div>
27
+ <div class="ferr-tab" data-label="Docker"><p class="ferr-tab__label">Docker</p><div class="ferr-tab__body"><pre><code class="language-bash">docker run --rm -v $(pwd):/repo ghcr.io/ferrlabs/ferrflow:latest check
28
+ </code></pre>
29
+ </div></div>
30
+ </div>
31
+
32
+ ## CI installation
33
+
34
+ The recommended way to use FerrFlow in CI is the GitHub Action — no installation step needed:
35
+
36
+ ```yaml
37
+ - uses: FerrLabs/ferrflow@v1
38
+ env:
39
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
40
+ ```
41
+
42
+ See [GitHub Actions](/docs/ci/github-actions) and [GitLab CI](/docs/ci/gitlab-ci) for complete examples.
43
+
44
+ ## Verify
45
+
46
+ ```bash
47
+ ferrflow --version
48
+ ```
@@ -0,0 +1,39 @@
1
+ ---
2
+ title: Introduction
3
+ description: What FerrFlow is and why it exists.
4
+ ---
5
+
6
+ FerrFlow is a single binary that automates semantic versioning for any repository — monorepo or classic, any language.
7
+
8
+ It reads your commit history, determines the right version bump, updates your version files, writes a changelog, creates a git tag, and publishes a release. Zero runtime dependencies.
9
+
10
+ ## Why not semantic-release or changesets?
11
+
12
+ Most versioning tools are coupled to a specific ecosystem or require Node.js to be present in your CI.
13
+
14
+ | Tool | Monorepo | Multi-language | Runtime |
15
+ | ---------------- | ----------- | -------------- | -------- |
16
+ | semantic-release | via plugins | JS/Node only | Node.js |
17
+ | changesets | manual bump | JS only | Node.js |
18
+ | release-please | limited | partial | Node.js |
19
+ | cargo-release | no | Rust only | Rust |
20
+ | **FerrFlow** | **native** | **any** | **none** |
21
+
22
+ FerrFlow ships as a compiled binary. Drop it in any CI environment without installing a runtime. A WASM build (`@ferrflow/wasm`) is also available for browser-side usage.
23
+
24
+ ## How it works
25
+
26
+ 1. **Reads commits** since the last git tag for each package
27
+ 2. **Determines the bump** from [Conventional Commits](/docs/reference/conventional-commits) (`feat` → minor, `fix` → patch, breaking → major)
28
+ 3. **Updates version files** — `Cargo.toml`, `package.json`, `pom.xml`, etc.
29
+ 4. **Writes the changelog** in Keep a Changelog format
30
+ 5. **Creates a git tag** (`api@v1.2.0`) and pushes
31
+ 6. **Publishes a GitHub/GitLab release** with the changelog as release notes
32
+
33
+ In a monorepo, FerrFlow only releases packages that have changed, and understands shared dependency paths.
34
+
35
+ ## Key features
36
+
37
+ - **Query commands** — `ferrflow version`, `ferrflow tag`, and `ferrflow status` for CI scripting
38
+ - **Any version file** — Cargo.toml, package.json, pom.xml, build.gradle, plain text, and more
39
+ - **Browser support** — `@ferrflow/wasm` brings commit parsing, bump computation, and changelog generation to the browser
@@ -0,0 +1,63 @@
1
+ ---
2
+ title: Telemetry
3
+ description: What FerrFlow collects, how data is anonymized, and how to opt out.
4
+ ---
5
+
6
+ FerrFlow collects anonymous usage telemetry to help improve the tool. This page explains exactly what is sent, how it is anonymized, and how to disable it.
7
+
8
+ ## What is collected
9
+
10
+ Each time you run a command, FerrFlow may send a single event containing:
11
+
12
+ | Field | Description |
13
+ | --------------- | ------------------------------------------------------------------- |
14
+ | `event_type` | The action performed: `check`, `release`, `version_bump`, or `init` |
15
+ | `commits_count` | Number of commits since the last release |
16
+ | `repo_hash` | A SHA-256 hash of your git remote URL (see below) |
17
+
18
+ Only fields relevant to the command are included. Empty fields are omitted.
19
+
20
+ ## How data is anonymized
21
+
22
+ Your repository URL is **never sent in plain text**. FerrFlow computes a SHA-256 hash of the git remote URL and sends only the resulting hex digest. This lets us count unique repositories without knowing which repositories they are.
23
+
24
+ No source code, file names, commit messages, branch names, package names, version numbers, IP addresses, or personal information are ever collected or stored.
25
+
26
+ ## Where data is sent
27
+
28
+ Events are sent as a POST request to `https://api.ferrflow.com/events`. The request is asynchronous and non-blocking — it never slows down your workflow. If the request fails, it is silently discarded.
29
+
30
+ ## How to opt out
31
+
32
+ You can disable telemetry entirely using either an environment variable or your config file.
33
+
34
+ ### Environment variable
35
+
36
+ <div class="ferr-tabs">
37
+ <div class="ferr-tab" data-label="Linux / macOS"><p class="ferr-tab__label">Linux / macOS</p><div class="ferr-tab__body"><pre><code class="language-bash">export FERRFLOW_TELEMETRY=false
38
+ </code></pre>
39
+ </div></div>
40
+ <div class="ferr-tab" data-label="Windows"><p class="ferr-tab__label">Windows</p><div class="ferr-tab__body"><pre><code class="language-powershell">$env:FERRFLOW_TELEMETRY = &quot;false&quot;
41
+ </code></pre>
42
+ </div></div>
43
+ </div>
44
+
45
+ Accepted values to disable: `false`, `0`, `off`, `no` (case-insensitive).
46
+
47
+ ### Config file
48
+
49
+ <div class="ferr-tabs">
50
+ <div class="ferr-tab" data-label="JSON"><p class="ferr-tab__label">JSON</p><div class="ferr-tab__body"><pre><code class="language-json">{
51
+ &quot;workspace&quot;: {
52
+ &quot;telemetry&quot;: false
53
+ }
54
+ }
55
+ </code></pre>
56
+ </div></div>
57
+ <div class="ferr-tab" data-label="TOML"><p class="ferr-tab__label">TOML</p><div class="ferr-tab__body"><pre><code class="language-toml">[workspace]
58
+ telemetry = false
59
+ </code></pre>
60
+ </div></div>
61
+ </div>
62
+
63
+ Either method is sufficient to disable telemetry. If the config file disables it, the environment variable cannot re-enable it, and vice versa.
@@ -0,0 +1,62 @@
1
+ ---
2
+ title: Quick start
3
+ description: Go from zero to your first automated release in under 5 minutes.
4
+ ---
5
+
6
+ <ol>
7
+ <li><p><strong>Scaffold the config</strong></p>
8
+ <p>Run <code>ferrflow init</code> at the root of your repository. It detects your version files and writes a <code>.ferrflow</code> config:</p>
9
+ <pre><code class="language-bash">ferrflow init
10
+ </code></pre>
11
+ <p>For a Rust project this produces:</p>
12
+ <pre><code class="language-json">{
13
+ &quot;$schema&quot;: &quot;https://ferrflow.com/schema/ferrflow.json&quot;,
14
+ &quot;workspace&quot;: {
15
+ &quot;tagTemplate&quot;: &quot;v{version}&quot;
16
+ },
17
+ &quot;package&quot;: [
18
+ {
19
+ &quot;name&quot;: &quot;my-app&quot;,
20
+ &quot;path&quot;: &quot;.&quot;,
21
+ &quot;changelog&quot;: &quot;CHANGELOG.md&quot;,
22
+ &quot;versionedFiles&quot;: [
23
+ { &quot;path&quot;: &quot;Cargo.toml&quot;, &quot;format&quot;: &quot;toml&quot; }
24
+ ]
25
+ }
26
+ ]
27
+ }
28
+ </code></pre>
29
+ </li>
30
+ <li><p><strong>Preview what would happen</strong></p>
31
+ <p>Before touching anything, run a dry-run to see what FerrFlow would do:</p>
32
+ <pre><code class="language-bash">ferrflow check
33
+ </code></pre>
34
+ <p>Output:</p>
35
+ <pre><code>Scanning . ...
36
+ → feat: add user authentication
37
+ → fix: correct pagination offset
38
+
39
+ Bump my-app 0.1.0 → 0.2.0
40
+ Tag v0.2.0
41
+ </code></pre>
42
+ </li>
43
+ <li><p><strong>Run the release</strong></p>
44
+ <pre><code class="language-bash">ferrflow release
45
+ </code></pre>
46
+ <p>FerrFlow will:</p>
47
+ <ul>
48
+ <li>Update <code>Cargo.toml</code> to <code>0.2.0</code></li>
49
+ <li>Append to <code>CHANGELOG.md</code></li>
50
+ <li>Commit the changes</li>
51
+ <li>Create and push <code>v0.2.0</code></li>
52
+ <li>Create a GitHub release (if <code>GITHUB_TOKEN</code> is set)</li>
53
+ </ul>
54
+ </li>
55
+ </ol>
56
+
57
+ ## Next steps
58
+
59
+ - Set up [GitHub Actions](/docs/ci/github-actions) to run releases automatically on push to `main`
60
+ - Configure a [monorepo](/docs/configuration/monorepo) if you have multiple packages
61
+ - Use `ferrflow version` and `ferrflow tag` in CI scripts — see the [CLI reference](/docs/reference/cli)
62
+ - Review the full [config reference](/docs/configuration/config-file)
@@ -0,0 +1,128 @@
1
+ ---
2
+ title: CLI commands
3
+ description: Full reference for all FerrFlow CLI commands and flags.
4
+ ---
5
+
6
+ ## `ferrflow release`
7
+
8
+ Run the full release pipeline: bump versions, update changelogs, commit, tag, push, and create a release.
9
+
10
+ ```bash
11
+ ferrflow release [OPTIONS]
12
+ ```
13
+
14
+ | Flag | Description |
15
+ | ----------------- | ----------------------------------------------------------- |
16
+ | `--dry-run` | Preview all changes without writing, committing, or pushing |
17
+ | `--verbose`, `-v` | Show detailed output including commit hashes and file diffs |
18
+
19
+ **What it does:**
20
+
21
+ 1. Scans commits since the last tag for each package
22
+ 2. Determines the version bump from Conventional Commits
23
+ 3. Updates all `versionedFiles` with the new version
24
+ 4. Appends the new section to `CHANGELOG.md`
25
+ 5. Creates a git commit with the version bump changes
26
+ 6. Creates and pushes the git tag
27
+ 7. Creates a GitHub/GitLab release with the changelog as notes
28
+
29
+ ---
30
+
31
+ ## `ferrflow check`
32
+
33
+ Preview what `ferrflow release` would do without making any changes. Equivalent to `ferrflow release --dry-run`.
34
+
35
+ ```bash
36
+ ferrflow check
37
+ ```
38
+
39
+ ---
40
+
41
+ ## `ferrflow changelog`
42
+
43
+ Generate or update `CHANGELOG.md` only, without bumping versions or creating tags.
44
+
45
+ ```bash
46
+ ferrflow changelog [OPTIONS]
47
+ ```
48
+
49
+ | Flag | Description |
50
+ | ----------- | ------------------------------------------------- |
51
+ | `--dry-run` | Print the changelog entry without writing to disk |
52
+
53
+ ---
54
+
55
+ ## `ferrflow init`
56
+
57
+ Scaffold a config file for the current repository. Detects existing version files (`Cargo.toml`, `package.json`, etc.) and generates the appropriate config.
58
+
59
+ ```bash
60
+ ferrflow init [OPTIONS]
61
+ ```
62
+
63
+ | Flag | Description |
64
+ | ------------------- | ---------------------------------------------- |
65
+ | `--format <FORMAT>` | Config file format: `json`, `json5`, or `toml` |
66
+
67
+ ---
68
+
69
+ ## `ferrflow status`
70
+
71
+ Show the current version of each package and whether a release would be triggered.
72
+
73
+ ```bash
74
+ ferrflow status [OPTIONS]
75
+ ```
76
+
77
+ | Flag | Description |
78
+ | ------------------- | ----------------------------------------- |
79
+ | `--output <FORMAT>` | Output format: `text` (default) or `json` |
80
+
81
+ Example output:
82
+
83
+ ```
84
+ api 1.2.3 minor bump pending (1 feat commit)
85
+ site 0.4.1 no release (only chore commits)
86
+ ```
87
+
88
+ ---
89
+
90
+ ## `ferrflow version`
91
+
92
+ Print the current version of one or all packages. Useful in CI scripts.
93
+
94
+ ```bash
95
+ ferrflow version [PACKAGE] [OPTIONS]
96
+ ```
97
+
98
+ | Flag | Description |
99
+ | -------- | -------------- |
100
+ | `--json` | Output as JSON |
101
+
102
+ Returns the version from the latest git tag matching the package's tag template.
103
+
104
+ ---
105
+
106
+ ## `ferrflow tag`
107
+
108
+ Print the latest tag for one or all packages.
109
+
110
+ ```bash
111
+ ferrflow tag [PACKAGE] [OPTIONS]
112
+ ```
113
+
114
+ | Flag | Description |
115
+ | -------- | -------------- |
116
+ | `--json` | Output as JSON |
117
+
118
+ ---
119
+
120
+ ## Global flags
121
+
122
+ These flags work with all commands:
123
+
124
+ | Flag | Description |
125
+ | ----------------- | --------------------------------------------------------------------------------------------------- |
126
+ | `--config <PATH>` | Path to a custom config file (default: auto-detected). Also accepts `FERRFLOW_CONFIG` env variable. |
127
+ | `--version` | Print the FerrFlow version and exit |
128
+ | `--help`, `-h` | Print help |
@@ -0,0 +1,67 @@
1
+ ---
2
+ title: Conventional Commits
3
+ description: How FerrFlow interprets commit messages to determine version bumps.
4
+ ---
5
+
6
+ FerrFlow follows the [Conventional Commits](https://www.conventionalcommits.org/) specification to determine how much to bump the version.
7
+
8
+ ## Bump rules
9
+
10
+ | Commit type | Version bump | Example |
11
+ | ----------------------------- | ------------ | ----------------------------------- |
12
+ | `feat:` | **minor** | `feat: add wallet subscriptions` |
13
+ | `fix:` | patch | `fix: correct pagination offset` |
14
+ | `perf:` | patch | `perf: cache user queries` |
15
+ | `refactor:` | patch | `refactor: extract auth middleware` |
16
+ | `feat!:` or `BREAKING CHANGE` | **major** | `feat!: remove deprecated endpoint` |
17
+ | `chore:` | none | `chore: update dependencies` |
18
+ | `docs:` | none | `docs: update README` |
19
+ | `ci:` | none | `ci: add linting step` |
20
+ | `style:` | none | `style: format code` |
21
+ | `test:` | none | `test: add unit tests` |
22
+
23
+ ## Breaking changes
24
+
25
+ A breaking change can be indicated in two ways:
26
+
27
+ **Exclamation mark suffix:**
28
+
29
+ ```
30
+ feat!: remove the /v1/users endpoint
31
+ fix!: change authentication header format
32
+ ```
33
+
34
+ **`BREAKING CHANGE` footer:**
35
+
36
+ ```
37
+ feat: redesign the API
38
+
39
+ BREAKING CHANGE: The /v1/users endpoint has been removed. Use /v2/users instead.
40
+ ```
41
+
42
+ Both produce a **major** version bump.
43
+
44
+ ## Scope
45
+
46
+ Scopes are optional and ignored for bump calculation. They're useful for readability:
47
+
48
+ ```
49
+ feat(auth): add OAuth2 support → minor bump
50
+ fix(db): correct index on user table → patch bump
51
+ ```
52
+
53
+ ## No release
54
+
55
+ Commits with types `chore`, `docs`, `ci`, `style`, or `test` do not trigger a release. If all commits since the last tag are of these types, FerrFlow exits without creating a new version.
56
+
57
+ ## Multiple commits
58
+
59
+ When multiple commits are present since the last tag, FerrFlow takes the **highest** bump across all of them:
60
+
61
+ ```
62
+ fix: correct typo → patch
63
+ feat: add export button → minor ← wins
64
+ chore: lint → none
65
+ ```
66
+
67
+ Result: **minor** bump.