Craft your forge, Build your project, Grow your community freely
1<!--
2SPDX-FileCopyrightText: 2025 Romain Maneschi <romain@gitroot.dev>
3 4SPDX-License-Identifier: EUPL-1.2
5--> 6 7# Changelog
8 9This file is made for human readers. It contain important (not all) changes made for a release, as well as the release date. Each version contains a link to all closed issues into the current version and a link to the binary corresponding to the version.
10 11At any time, you can find the latest GitRoot binary for linux amd64 at [https://gitroot.dev/releases/gitroot-last](https://gitroot.dev/releases/gitroot-last).
12 13## unreleased
14 15### GitRoot
16 17- **BREAKING** plugin-sdk are generated from sdkgenerator [#8fba](./issues/8fba-generate-plugin-sdk.md)
18- go: `CmdStats.TotalCPUTimeMs` become `CmdStats.TotalCpuTimeMs` 19- go: delete deprecated methods
20-`ModifyContent(filepath, content string)` use `Worktree().WriteContent(filepath, content string)` 21-`ModifyWebContent(filepath, content string)` use `Webcontent().WriteContent(filepath, content string)` 22-`ReplaceWebContent(filepath, oldContent, content string)` use `Webcontent().ReplaceContent(filepath, oldContent, content string)` 23-`ModifyCacheContent(filepath, content string)` use `Cache().WriteContent(filepath, content string)` 24- ts: all models are generated from go
25- ts: delete all `static build()` use `constructor` instead
26- rust: all models are generated from go, only imports impacted
27- repair `app/testsuite/demo.sh` with new purl plugin
28- **BREAKING** use [PURL](https://github.com/package-url/purl-spec) to define plugin [#4e8f](./issues/close/4e8f-purl-as-plugin-url.md) and [#5dd3](./issues/close/5dd3-plugin-scope.md)
29- in `.gitroot/plugins.yml` replace url, checksum, name and version with: `- purl: pkg:gitroot/gitroot/ladybug@0.4.0?registry=gitroot.dev%2Freleases%2F0.4.0&checksum=sha256:7409837469ce89d5c9fd8dd48236764650f48523ff4d81295967154977a01635` 30- in plugin-sdk callFunc to other plugin replace pluginName (e.g. `ladybug`) by `pkg:gitroot/gitroot/ladybug` (optional version)
31- will generate new plugin data directory from `gitrootData/data/plugins/ladybug` to `gitrootData/data/plugins/gitroot-ladybug` 32- will generate new plugin cache directory from `gitrootData/data/cache/repo1/ladybug` to `gitrootData/data/cache/repo1/gitroot-ladybug` 33- will generate new user from `ladybug@localhost` to `gitroot-ladybug@localhost` 34- rebase go-git [graft](./grafts/rebaseGoGit.md) and [graft2](./grafts/rebaseGoGit2.md)
35- clean force-push scenario (no more found acestor) [#4f8d](./issues/close/4f8d-found-ancestor-observer.md)
36- delete lof of todo about branches/checkout/HEAD
37- start use of sideband
38- configured the Hop plugin to run tests on gitroot.dev [#3a5e](./issues/close/3a5e-release-0.4.0.md) - [graft](./grafts/make_hop_working.md)
39- repaired existing tests (many were failing as they hadn't been run regularly)
40- the flaky [testsuite](./app/testsuite/runtest.sh) should now be more stable
41 42## 0.4.0 (22/04/2026) [is last](https://gitroot.dev/releases/gitroot-last)
43 44Commit: `0d57f5943dde9102f43ea08a2c047f824b5559d5` 45 46[gitroot-0.4.0-linux-amd64](https://gitroot.dev/releases/0.4.0/gitroot-0.4.0-linux-amd64) sha256 `4f0fb91ce26c61361f820d268974cf95a1d7baa1bcfc5f78b3a7b4f37d8b4fed` 47[gitroot-0.4.0-linux-arm64](https://gitroot.dev/releases/0.4.0/gitroot-0.4.0-linux-arm64) sha256 `9ee4abc4888d2578fa107958b10272e97210a3a7dc7e13addddee221e4e900d2` 48[gitroot-0.4.0-darwin-amd64](https://gitroot.dev/releases/0.4.0/gitroot-0.4.0-darwin-amd64) sha256 `a09a675aec206afcf6984740e695172a55080ca37b668d26b9454f6b358e6e5d` 49[gitroot-0.4.0-darwin-arm64](https://gitroot.dev/releases/0.4.0/gitroot-0.4.0-darwin-arm64) sha256 `86bc8393e55cff929ca20628841f379fc031378cf8399a9fde5a2e1a56cd2c4b` 50 51### GitRoot
52 53- run plugins in order of project not root
54- if a plugin has no file impacted, it will not run anymore
55- sync plugin inactive plugin in sub repositories
56- integrate `pollen` and `hop` plugin in [tests](./app/testsuite/runtest.sh)
57- **BREAKING** plugin sdk changes:
58- create [model.File](app/libs/golang/plugin/model/file.go)
59- from `AddFile(path string)` to `AddFile(file model.File)` 60- from `ModFile(fromPath string, toPath string)` to `ModFile(file model.File)` 61- from `DelFile(path string)` to `DelFile(file model.File)` 62- new plugin api:
63-`ExportFunc(name string, callback func(args map[string]string) (map[string]string, error))` permit to export a function, when another plugin will call it, the callback will be called with args. Only string are permitted. Can return multiple values but only strings like args.
64-`CanCallFunc(plugin string, name string, args map[string]string) bool` check if a plugin can call a function. If plugin is not installed/activated, has not the func or user has disable the call to it, you will get a false.
65-`CallFunc(plugin string, name string, args map[string]string) (map[string]string, error)` permit to call the function of another plugin. If the plugin don't exist or the plugin has not exported this function the rror will be `plugin or method not found`.
66-`CopyFile(fromFs model.FsBase, fromPath string, toFs model.FsBase, toPath string) error` copy a file from an fs to another
67-`DeleteFile(fromFs model.FsBase, filename string) error` delete a file
68-`MoveFile(fromFs model.FsBase, fromPath string, toFs model.FsBase, toPath string) error` move a file fron a fs to another
69-`ReplaceContent(fromFs model.FsBase, filepath string, oldContent string, content string) error ` replace content of a file
70-`WriteContent(fromFs model.FsBase, filepath string, content string) error` write to a file
71- deprecated plugin api:
72-`ModifyContent(filepath, content string)` use `Worktree().WriteContent(filepath, content string)` 73-`ModifyWebContent(filepath, content string)` use `Webcontent().WriteContent(filepath, content string)` 74-`ReplaceWebContent(filepath, oldContent, content string)` use `Webcontent().ReplaceContent(filepath, oldContent, content string)` 75-`ModifyCacheContent(filepath, content string)` use `Cache().WriteContent(filepath, content string)` 76- new executors features:
77- stats of sub cmd [#ea2f](./issues/close/v0.4.0/ea2f-executor-stats-v2.md)
78- ssh stats [#d9ee](./issues/close/v0.4.0/d9ee-ssh-executor-stats.md)
79- can have cache [#94af](./issues/94af-executor-cache.md)
80- can have artifacts [#9ea8](./issues/close/v0.4.0/9ea8-executor-artifacts.md)
81- set env var correctly
82- fix bug: materialize working tree of good branche
83- **BREAKING** Removed the requirement to sign commits and push using the same SSH key.
84- GitRoot no longer generates `.gitroot/init.sh` and `.gitroot/allowed_signers` files.
85- Users can now push unsigned commits or commits from other authors (enabling rebases with plugin commits).
86- The `stigma` plugin can be used to restore this functionality with the following behavior:
87- Generates `.gitroot/init.sh` and `.gitroot/allowed_signers` files.
88- Maintains the `.gitroot/allowed_signers` file with all valid keys.
89- Reports unsigned commits as warnings.
90- Reports invalidly signed commits as errors.
91- start to clean tests by adding libs and cmd in testsuite.
92- add [plugins](./plugins/) section
93 94### Plugins
95 96- stigma: assists in configuring, verifying, and reporting on commit signatures.
97- move changelog to [own directory](./app/plugins/stigma/index.md)
98- hop
99- 0.0.2 compatible with gitroot plugin-sdk 0.4.0
100- rework report layout
101- **BREAKING** add `pipelinesToWebDir` in conf to make artifacts and logs accessible in web, set empty to desable, `/pipelines` by default
102- move changelog to [own directory](./app/plugins/hop/index.md)
103- pollen
104- 0.0.3 compatible with gitroot plugin-sdk 0.4.0
105- move changelog to [own directory](./app/plugins/pollen/index.md)
106- ladybug:
107- 0.0.4 compatible with gitroot plugin-sdk 0.4.0
108- move changelog to [own directory](./app/plugins/ladybug/index.md)
109- silo:
110- 0.0.4 compatible with gitroot plugin-sdk 0.4.0
111- clean cache when conf has changed [#4f54](./issues/close/v0.4.0/4f54-change-global-conf.md)
112- move changelog to [own directory](./app/plugins/silo/index.md)
113- grafter:
114- 0.0.4 compatible with gitroot plugin-sdk 0.4.0
115- move changelog to [own directory](./app/plugins/grafter/index.md)
116- apex:
117- 0.0.4 compatible with gitroot plugin-sdk 0.4.0
118- render files in other branches than main [#de9a](./issues/close/v0.4.0/de9a-apex-branch-graft.md)
119- emit report when render a file from other branch
120- fix bug: rendering of local link [#bf18](./issues/close/v0.4.0/bf18-apex-local-link.md)
121- fix bug: impossible to put some metadata in apex [#71d7](./issues/close/v0.4.0/71d7-apex-metadata-not-possible.md)
122- **BREAKING** don't render markdown by default. Install `apex_markdown` plugin to do it. And `apex_code` to hilight code in markdown.
123- **BREAKING** install `apex_code` plugin to render worktree with hilight on dource files.
124- depends on `apex_markdown` and `apex_code` which are optional dependencies
125- add layouts to extend representation of data [#bbf1](./issues/close/v0.4.0/bbf1-apex-layout-materialization.md)
126- move changelog to [own directory](./app/plugins/apex/index.md)
127- apex_markdown: export func `renderMd` with args `fp` the filepath of the mardown and `md` the content. Return `html` the result and `metas` the metadata.
128- depends on `apex_code` to render code
129- depends on `apex_mermaid` to render mermaid charts
130- add rust, typescript and json icon
131- move changelog to [own directory](./app/plugins/apex/markdown/index.md)
132- apex_code: export func `renderCode` with args `code` the code to render and `lang` the language of the code. Return `html` the result.
133- move changelog to [own directory](./app/plugins/apex/code/index.md)
134- apex_mermaid: export func `renderCode` with args `code` the code mermaid to render. Return `html` (svg) the result.
135- move changelog to [own directory](./app/plugins/apex_mermaid/index.md)
136137## 0.3.0 (20/12/2025)
138139Commit: `11ec919c30bb10bb73560e624f772675d1f34c91`140141[gitroot-0.3.0-linux-amd64](https://gitroot.dev/releases/0.3.0/gitroot-0.3.0-linux-amd64) sha256 `9697a5a5b3ae2ecab339450908705bf53e393154d3d2c3ebed8b5f89cd0cee5e`142[gitroot-0.3.0-linux-arm64](https://gitroot.dev/releases/0.3.0/gitroot-0.3.0-linux-arm64) sha256 `e268cb95136f6f871d2090c1240c8d3952a58312fd4211b40646b553264ac32b`143[gitroot-0.3.0-darwin-amd64](https://gitroot.dev/releases/0.3.0/gitroot-0.3.0-darwin-amd64) sha256 `91eb4f5568acff907f99a51c38e14a443b65cae369c0451d033cc6b1a4bfa667`144[gitroot-0.3.0-darwin-arm64](https://gitroot.dev/releases/0.3.0/gitroot-0.3.0-darwin-arm64) sha256 `4b64f6807d01230ae6d2e4b89fa42c245ea9bf924a81d5eb5f929c6b12bfd5f7`145146### GitRoot
147148- Add [🗨 Contact](./contact.md) page
149- Use mise tasks thanks to Zon Orti the #3 contributor 🚀
150- add in the plugin sdk the `report()` api, to be able to report something to user. Don't use it to report bad behavior, `log()` and `logError()` are here for that.
151- add `reporter` interface to plugin sdk, to prevent GitRoot that a plugin can report something to user. See grafter as the first use case.
152- **BREAKING** add `execconf` in forgeConf, permit to enable one kind of executor and to set it's conf
153- **BREAKING** add `externalsshaddr` and `externalhttpaddr` property in forgeConf, permit to display `git clone ssh://gitroot.dev/` in web for example [#a716](./issues/close/a716-conf-external-addr.md)
154- implement the first `updater` wich handle the previous breaking
155- add [rust](https://rust-lang.org/) lib to build plugin
156- add `Exec([]commands)` method for plugin, need exec permission
157- allow to name `malloc` and `free` function in wasn guest `gitrootAlloc` and `gitrootFree`158- garbage memory of plugin between 2 calls
159- use [mise](https://mise.jdx.dev/) to simplify dev environment and update go, tinygo and node to latest version
160161### Plugins
162163- hop: execute process on host [hop-0.0.1.wasm](https://gitroot.dev/releases/0.3.0/hop-0.0.1.wasm) _sha256: b67e9418702648a493f40d4f5375b51a6ade2812382ddc43c4a1133d8c5c3b44_164- use the new report api
165- pollen: [pollen-0.0.2.wasm](https://gitroot.dev/releases/0.3.0/hop-0.0.2.wasm) _sha256: e6e94e93514d3fe1e65506f5ac72a01b84b792bc6c07009eadc194942fc63ca1_166- 0.0.2 compatible with gitroot plugin-sdk 0.3.0
167- ladybug: [ladybug-0.0.3.wasm](https://gitroot.dev/releases/0.3.0/ladybug-0.0.3.wasm) _sha256: adfaf88dc15ca5d53019ff194a32abec9c914c6cdf676ef4de589c1a4cfd12d4_168- 0.0.3 compatible with gitroot plugin-sdk 0.3.0
169- silo: [silo-0.0.3.wasm](https://gitroot.dev/releases/0.3.0/silo-0.0.3.wasm) _sha256: f38f8b71b68eddd1ce895a645e8c27052aab1f7607fc8182beb66b4e3e0fd2df_170- 0.0.3 compatible with gitroot plugin-sdk 0.3.0
171- grafter: [grafter-0.0.3.wasm](https://gitroot.dev/releases/0.3.0/grafter-0.0.3.wasm) _sha256: 9d63e0a232ea8dcdbd28ffc5793b56eada5981fc85296dfb8fd7342b3379d4e2_172- 0.0.3 compatible with gitroot plugin-sdk 0.3.0
173- implement reporter api to display hop reports
174- apex: [apex-0.0.3.wasm](https://gitroot.dev/releases/0.3.0/apex-0.0.3.wasm) _sha256: 3f7e22f834ce7e16231f6fa08495517c1ec021cb801b9b2885345a8deb16ebf0_175- 0.0.3 compatible with gitroot plugin-sdk 0.3.0
176- add favicon configuration [#8c3f](./issues/close/8c3f-apex-favicon.md)
177- add html metadata configuration
178- fix bug: 404 page not found is styled [#4c5b](./issues/close/v0.3.0/4c5b-web-path-slash.md)
179- fix bug: current menu is now hilighted and marked with `aria-current="page"` [#6eeb](./issues/close/v0.3.0/6eeb-apex-current-page.md)
180- **BREAKING** don't render metadata by default, file should have `apexRenderMetadatas: true` in metadata to allow it, not final solution but good enough for now
181182## 0.2.0 (18/09/2025)
183184Commit: `089d7caca0dfd7ac079aa92021b5f896e9f0fdb1`185186[gitroot-0.2.0-linux-amd64](https://gitroot.dev/releases/0.2.0/gitroot-0.2.0-linux-amd64) sha256 `91c37b86a36253dc9a25f89c772035ab8445fc7c2f8f330128cb12425cb9b2f6`187[gitroot-0.2.0-linux-arm64](https://gitroot.dev/releases/0.2.0/gitroot-0.2.0-linux-arm64) sha256 `d866ac45007f94d4d9967915efcff6181a32fe0791e50845620c6152f8dc1651`188[gitroot-0.2.0-darwin-amd64](https://gitroot.dev/releases/0.2.0/gitroot-0.2.0-darwin-amd64) sha256 `a8784f3b82c7814e36066c5dda7e540920378159654658dc7777c4fe73d1b59d`189[gitroot-0.2.0-darwin-arm64](https://gitroot.dev/releases/0.2.0/gitroot-0.2.0-darwin-arm64) sha256 `70f23407a13b8dd20852382906c05dc2aa268f74cbef31358cec861cba89f04c`190191### GitRoot
192193- add [assemblyscript](https://www.assemblyscript.org/) lib to build plugin
194- add `ReplaceWebContentBuilder(filename, old, new)` method for plugin, need mod permission
195- after a merge delete branch and clean users.yml
196- cross compilation [#70d0](./issues/close/70d0-cross-compile.md)
197- add `Commits(from string, to string) ([]Commit, error)` method for plugin to access commits between 2 hash
198- check that the plugin is compatible with current version
199- update plugins: change URL in `plugins.yml` of root repository
200- download plugins from http(s) and checksum them
201- compile plugins AOT and keep compilation
202- garbage collect plugins after execution [#f1ab](./issues/close/v0.2.0/f1ab-garbabe-collecte-plugins.md)
203- fix empty FS after execution [#95b0](./issues/close/v0.2.0/95b0-plugins-fs-bug.md)
204205### Plugins
206207- pollen: rss generator [pollen-0.0.1.wasm](https://gitroot.dev/releases/0.2.0/pollen-0.0.1.wasm) _sha256: 49cd8e1846b1612a0d5686918b502fe29e070e7bf9613c1ba9a1dfe5417d0f2a_208- ladybug: [ladybug-0.0.2.wasm](https://gitroot.dev/releases/0.2.0/ladybug-0.0.2.wasm) _sha256: 0c755bb2dc5cc037216b29ba1709875afee425ee429b6be97f0d5e137067acff_209- 0.0.2 compatible with gitroot
210- fix bug: do not delete `---` in body of files
211- silo: [silo-0.0.2.wasm](https://gitroot.dev/releases/0.2.0/silo-0.0.2.wasm) _sha256: 66fe44b4e0984154bda0867a9b35ea39b0be3d92a89e4e542b70472fadf2f78e_212- 0.0.2 compatible with gitroot
213- create an empty board when nothing to display [#a7ca](./issues/close/v0.2.0/a7ca-silo-empty-board.md)
214- fix bug: move of file delete old item [#7a80](./issues/close/v0.2.0/7a80-silo-move-bug.md)
215- grafter: [grafter-0.0.2.wasm](https://gitroot.dev/releases/0.2.0/grafter-0.0.2.wasm) _sha256: 9ce5e36af1fd53a6547ec51d55356a661a05ae617b16ef97b1eae0dd0cce22c0_216- 0.0.2 compatible with gitroot
217- better diff
218- **BREAKING** change state of graft in metadata
219- apex: [apex-0.0.2.wasm](https://gitroot.dev/releases/0.2.0/apex-0.0.2.wasm) _sha256: 4c7d1b84f768a6aea11393ea2bc116a7be30fd12380fd7e11f283d5970028119_220- 0.0.2 compatible with gitroot
221- add line heading
222- generate branches page and one page by branch with commits
223224## 0.1.0 (20/05/2025)
225226Initial GitRoot version 🎉
227228Commit: `fa6d1600606efdc590eb2f0411305e971fdd854d`229230[gitroot-0.1.0-linux-amd64](https://gitroot.dev/releases/0.1.0/gitroot-0.1.0-linux-amd64) sha256 `e70d24e2631708ae4b778f9f60de03fad5087dd1fb2845955a9ed5c758a5ca0a`231[gitroot-0.1.0-darwin-amd64](https://gitroot.dev/releases/0.1.0/gitroot-0.1.0-darwin-amd64) sha256 `622abd155657f2b3674b9fab71de2438774005054deb30301787d3a1ff37ff1a`232[gitroot-0.1.0-darwin-arm64](https://gitroot.dev/releases/0.1.0/gitroot-0.1.0-darwin-arm64) sha256 `7946ad03f109c7d9cdb93fc6ec1b0838b10dde3c7bf67d4254374f5f9b9b19a5`233234### GitRoot
235236- launch GitRoot by specifying where to store data (all data will be written in this path)
237- accept git commands through ssh (clone, pull and pull)
238- manage users (who can write in which repositories)
239- install and activate plugins
240- repositories can be viewed online
241242### Plugins
243244- ladybug: add properties to md files [ladybug-0.0.1.wasm](https://gitroot.dev/releases/0.1.0/ladybug-0.0.1.wasm) _sha256: af00a9f14a27399f383d0cc23415e14e7d6180c167d1504018f11166346ebb55_245- silo: regroup, filter, sort files in a new md file in git [silo-0.0.1.wasm](https://gitroot.dev/releases/0.1.0/silo-0.0.1.wasm) _sha256: 99bc06d9d6f020c5df216fd6134306079aec26eacee9ad9bbabbc259097e618a_246- grafter: manage, review and merge of branches in git [grafter-0.0.1.wasm](https://gitroot.dev/releases/0.1.0/grafter-0.0.1.wasm) _sha256: 6645615df36a9938adac300d8d46fe298f8f53fb2e69713a495b83b0f114f40a_247- apex: transform md file to html one and write them in web, optionally generate worktree [apex-0.0.1.wasm](https://gitroot.dev/releases/0.1.0/apex-0.0.1.wasm) _sha256: 9570f005ad70be04eab3c900acd11d5c2ccf48fef5d4c17536c9cf79c8fd333e_