# Changelog

All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).

## Unreleased

## 0.32.0 - 2026-06-05
### Breaking Changes
- Download url script now no longer installs locally by default, but instead places in cargo's default location for binaries, which is typically in the user's PATH. The old behavior can be achieved by using `--local`.

### Added
- Add new `crates/bender-slang` crate that integrates the vendored Slang parser via a Rust/C++ bridge (https://github.com/pulp-platform/bender/pull/264).
- Add new `pickle` command (behind feature `slang`) to parse and re-emit SystemVerilog sources (https://github.com/pulp-platform/bender/pull/264, https://github.com/pulp-platform/bender/pull/272).
- Add target filtering for defines (https://github.com/pulp-platform/bender/pull/287).
- feat: Add -v/--verbose flag and migrate to log crate (https://github.com/pulp-platform/bender/pull/296).
- Add bender book to repository (https://github.com/pulp-platform/bender/pull/295).
- Add cross-process filesystem locks around git database and checkout operations so concurrent `bender` invocations against the same dependency serialize safely (https://github.com/pulp-platform/bender/pull/307).
- Add `db_dir` config field to share bare-repo and lock storage across projects without relocating per-project checkouts; older Bender versions silently ignore the field and fall back to their per-project default (https://github.com/pulp-platform/bender/pull/307).
- Add `script` filtering by top module for systemverilog sources (https://github.com/pulp-platform/bender/pull/297).

### Fixed
- Realign `sources` output for consistency with legacy flows (https://github.com/pulp-platform/bender/pull/286).
- audit: Fix false path conflict for equivalent relative paths (https://github.com/pulp-platform/bender/pull/291).
- Fix packages with empty sources (https://github.com/pulp-platform/bender/pull/294).
- fix(paths): Resolve env vars before applying prefix to dependency paths (https://github.com/pulp-platform/bender/pull/303).
- Fix panic on lockfile choice' source not in any deps (https://github.com/pulp-platform/bender/pull/300).
- Remove git/ssh prompts behind progress bars (https://github.com/pulp-platform/bender/pull/310).

### Changed
- Adjust release flow to use cargo-dist (https://github.com/pulp-platform/bender/pull/292).
- Modernize and improve error handling (https://github.com/pulp-platform/bender/pull/279).
- Use shared clone for checkouts, dissociate on `bender clone` (https://github.com/pulp-platform/bender/pull/308).
- installer: replace `init` with version-aware router (https://github.com/pulp-platform/bender/pull/285).
- feat: filter export_include_dirs of excluded packages by default (https://github.com/pulp-platform/bender/pull/299).

## 0.31.0 - 2026-03-03
### Fixed
- Fix panic for untracked dependencies on update (https://github.com/pulp-platform/bender/pull/269).
- Fix scripts for unknown file types in manifest (https://github.com/pulp-platform/bender/pull/270).
- Fix upper bound for caret version requirements (https://github.com/pulp-platform/bender/pull/273).
- Fix dependency fetching on update for unfetched versions/revisions (https://github.com/pulp-platform/bender/pull/274).
- Fix `vendor init` patch application (https://github.com/pulp-platform/bender/pull/284).

### Added
- Add warning for untracked revision used for a dependency (https://github.com/pulp-platform/bender/pull/274).
- Add `--new-only` flag to `update` to only update dependencies which are not yet fetched (https://github.com/pulp-platform/bender/pull/275).
- Add ability to override files with same name (https://github.com/pulp-platform/bender/pull/267).
- Add target filtering for include directories (https://github.com/pulp-platform/bender/pull/281).

### Changed
- Adjust script template json to support per-file comments (https://github.com/pulp-platform/bender/pull/267).
- Only fetch needed dependencies (https://github.com/pulp-platform/bender/pull/276).
- `script`: Invert source-annotations polarity, disabling by default (https://github.com/pulp-platform/bender/pull/280).

## 0.30.0 - 2026-02-12
### Added
- Add warnings for nonexistent include directory and errors for missing path dependency (https://github.com/pulp-platform/bender/pull/229).
- Add vlog-arg for synopsys scripts (https://github.com/pulp-platform/bender/pull/227).
- Add flag for `rtl` target to files without target in script and sources (https://github.com/pulp-platform/bender/pull/186).
- Add support for verilog/vhdl files with custom file endings in manifest (https://github.com/pulp-platform/bender/pull/207).
- Add CI check for unused crates, cleanup (https://github.com/pulp-platform/bender/pull/242).
- Add information for git version tags (https://github.com/pulp-platform/bender/pull/243).
- Add `pass_targets` to dependencies to allow passing targets for hierarchical file filtering (not only global) (https://github.com/pulp-platform/bender/pull/235).
- Add `audit` command to check for possible dependency updates (https://github.com/pulp-platform/bender/pull/236).
- Add CLI script output regression tests (https://github.com/pulp-platform/bender/pull/245).
- Add metadata to script output to assist with traceability (https://github.com/pulp-platform/bender/pull/244).
- Add application of targets to only specific packages with a `<PKG>:<TARGET>` model for the target flag (https://github.com/pulp-platform/bender/pull/247).
- Add target filtering for dependencies (https://github.com/pulp-platform/bender/pull/250).
- Fixed symlink removal for windows (https://github.com/pulp-platform/bender/pull/252).
- Add LFS support for dependencies (https://github.com/pulp-platform/bender/pull/259).
- Add progress bars for git actions (https://github.com/pulp-platform/bender/pull/239, https://github.com/pulp-platform/bender/pull/262).

### Fixed
- Fix suppression of all warnings along with an error (https://github.com/pulp-platform/bender/pull/234).
- Ensure sources output files are validated (https://github.com/pulp-platform/bender/pull/234).
- Properly fail cloning for path dependencies (https://github.com/pulp-platform/bender/pull/225).
- Fix symlink handling in windows (https://github.com/pulp-platform/bender/pull/252, https://github.com/pulp-platform/bender/pull/255).
- Fix git authentification hangs (https://github.com/pulp-platform/bender/pull/261).

### Changed
- Change order of choice selection for conflicts on update (https://github.com/pulp-platform/bender/pull/237).
- Refactor CLI, group flags, add aliases and support for env variables (https://github.com/pulp-platform/bender/pull/240).
- Consolidate warnings, suppression and deduplication (https://github.com/pulp-platform/bender/pull/246).
- Add default `remotes` to manifest to allow specifying multiple (default) remotes for dependencies, without having to write out the full git url every time (https://github.com/pulp-platform/bender/pull/260).

## 0.29.1 - 2025-11-24
### Fixed
- Ensure informative print is not in stdout (e.g. fix for scripts) (https://github.com/pulp-platform/bender/pull/231)
- Use write to stdout instead of print to enable piping bender output into another command (https://github.com/pulp-platform/bender/pull/231)
- Remove compile warnings for release (https://github.com/pulp-platform/bender/pull/231)

### Added
- Add `snapshot` command to relink git version after working on a dependency with `bender clone` (https://github.com/pulp-platform/bender/pull/230).

## 0.29.0 - 2025-11-07
### Fixed
- `script`: Fix genus template.
- Fix `update` failing pull of inexistent commit when multiple repositories are indicated.
- Fix checkout for commit not yet fetched.
- `script`: Fix flist-plus incdir template.
- Throttle git commands to avoid git request failures.

### Added
- Add ARM64 binaries for releases
- `update`: Update repositories in checkout dir if conditions match:
  - Folder is a git repository
  - Git state is clean
  - `--ignore-checkout-dir` flag to update IPs ignoring the state inside the checkout directory.
- `update`: Tell user the lockfile version when solving a conflict.
- Print dependency updates executed.
- Enable updating of individual dependencies (and recursive dependencies if desired).
- `vendor`: Add path error information.
- Add support for glob in manifest source files.
- `parents`: Print currently selected version.
- `packages`: Add `--version` flag to print currently used versions.
- `packages`: Add `--targets` flag to print targets used in the corresponding manifest.
- Add `clean` command to clean all bender related dependencies.
- `script`: Allow flist formats to use `only-sources`/`only-includes`/`only-defines` flags.
- Add check to ensure files referenced in all manifests exist.
- Add warnings for unknown fields in manifest.
- `sources`: Add defines for passed targets to output (similar to `script`).
- Add support to indicate and read in external file lists in manifest.
- Enumerate warnings and add `--suppress` flag to hide warnings.

### Changed
- `update`: Clean up alignment of manual resolution output.
- `checkout`: When using `checkout_dir`, overwrite existing dependencies if not changed, warning if not checked out, flag to force checkout.
- `update`: Update `checkout_dir` if no internal changes.
- Execute checkout instead of clone to checkout correct dependency versions when reasonable.
- `packages --graph`: Clean up alignment of output.
- `script`: No longer enforce all caps defines.

## 0.28.2 - 2025-03-31
### Fixed
- Put `vcs`, `vsim`, and `riviera` defines in quotes.
- Fix `genus` script initialization.
- Update Readme with for script formats.
- Fix vendor file mappings when combining into a single directory.
- Make panic an error when lockfile is not up to date with dependencies.
- Fix Readme dependency version indication for exact match.
- Fix vendor file copying for symbolic links.
- Fix synopsys script include paths.
- Fix checkout when system forces git signatures.

### Added
- Add `completion` command to generate shell autocomplete integration.
- Add abort on error for `vcs` script type.
- Add warning to update command when using overrides.
- Add support for branchless commits in dependency repositories.

### Changed
- Bump dependencies.

## 0.28.1 - 2024-02-22
### Added
- Add `flist-plus` script format for file list with plusargs.

### Fixed
- Ensure defines/includes/sources are included in script when specifying multiple `--only-*`.

### Changed
- For `bender clone`: Add a relative path to the lockfile to align to change in v0.27.0.

## 0.28.0 - 2024-01-19
### Added
- Add macOS binary for releases
- Add `init` command to initialize a Bender.yml file of an IP.
- Allow environment variables in dependency and sources paths.
- Add windows binary and compatibility for release.

### Fixed
- Documentation and Error Message fixes.

### Changed
- Complete revamp of script generation, now using templates. Script formats are homogenized and custom templates are enabled.

## 0.27.4 - 2023-11-14
### Added
- Add clearer error message when commits are no longer available upstream.
- Improve Readme git explanation

### Fixed
- Fix CI GNU release.

## 0.27.3 - 2023-09-12
### Added
- Add `--checkout` flag to `path` command to force checkout if needed.
- Add `--no-checkout` flag to `update` command to prevent checkout after update if not needed.

### Changed
- `path` and local links: Skip checkout if package path already exists (can be overruled by `--checkout` flag)
- `update`: Default to automatically perform checkout after update (can be overruled by `--no-checkout` flag)

### Fixed
- Improve ReadMe and Warning information for `vendor` upstream linking.
- Ensure `workspace.package_links` symlinks are properly updated when executing the `clone` command.

## 0.27.2 - 2023-07-12
### Added
- Add information on expected location for manifest file not found.

### Fixed
- Use `IndexMap` and `IndexSet` instead of the `std Hash*` equivalents to preserve ordering
- Change GNU release to be built to a more compatible binary (manylinux container).
- Parse override dependencies in lowercase to align to change in 0.25.0

### Changed
- Adjusted hash input for dependency checkout to ensure consistency within a project.

## 0.27.1 - 2023-01-25
### Fixed
- Fixed accidental debug print in `sources` command

## 0.27.0 - 2023-01-16
### Added
- Add `--no-default-target` flag to `script` command to remove default targets
- Add `fusesoc` command to generate FuseSoC `.core` files.
- Add rhel and almalinux releases

### Changed
- Reworked `import` command to `vendor`, refactor corresponding Manifest entry (`vendor_package` instead of `external_import`)
- Update `clap` to v4, changes CLI
- Use relative paths in Lockfile if path dependency is in a subdirectory

### Fixed
- Streamline `import` command for initializing a repository

## 0.26.1 - 2022-08-29
### Fixed
- Keep `export_incdirs` from excluded dependencies in sources and scripts

## 0.26.0 - 2022-08-26
### Added
- Add clippy to github CI and fix noted issues
- Add `import` command to import files from non-bender repositories

### Changed
- Update `tokio` dependency, update to `futures=0.3`, rewrite for `async/await`. Bumps minimum rust to 1.57
- Update `serde_yaml` dependency to `0.9`. Bumps minimum rust to 1.58
- Partially checkout path dependencies in git dependencies
- Add warnings if manifest file is not found for a dependency

## 0.25.3 - 2022-08-05
### Added
- Added `formality` script.

### Changed
- Update dependencies, with slight restructuring updating `clap` to v3.1, bumps minimum rust to 1.54
- Removed `defines` from VHDL in `synopsys` script.
- Updated CI release OSs to currently supported releases, added debian

## 0.25.2 - 2022-04-13
### Added
- Add `checkout` command to fetch and checkout dependencies

### Fixed
- Ensure consistency when manually chosing a version if there are conflicts.
- Update `Bender.lock` when running `bender clone`. Running `bender update` is no longer required afterwards.

## 0.25.1 - 2022-04-08
### Fixed
- For multiple compatible versions, select the highest compatible version, not the newest commit with a compatible version.

## 0.25.0 - 2022-04-06
### Added
- `parents` command outputs more detail:
  - source information in case multiple dependencies do not match
  - information about an override if one is present

### Changed
- Interpret all dependency names as lowercase to reduce ambiguity

### Fixed
- Fix panic of `parents` command if a dependency does not have a manifest or if the manifest does not match the `Bender.lock` file.
- Use correct manifest of checked out dependency in case folder already exists in `checkout_dir`.
- Fix vcs script argument to use `vhdlan-bin` for vhdlan binary
- Fix incomplete dependency version update when refetching from remote
- Fix panic when using `checkout_dir` if the directory does not yet exist

## 0.24.0 - 2022-01-06
### Added
- Add error if a cyclical dependency is detected to avoid infinite loop
- Add error on dependency mismatch between `Bender.yml` and `Bender.lock`
- Add hint to work around the "too many open files" error (issue #52).
- Add warning for mismatch of dependency name and name in package
- Add dependency information to `sources` command
- Add `--fetch/-f` argument to `bender update` to force re-fetch of git dependencies from their remotes
- Add global `--local` argument to disable remote accesses of git commands, e.g. for air-gapped computers
- Add `precision` format to the script command.
- Extend the `sources` and `scripts` commands with three flags to work with a subset of packages (`-p`/`--package`, `-e`/`--exclude`, and `-n`/`--no-deps`; see ReadMe or command help for the description).

### Changed
- Reduce the number of open files in large repositories by changing the method to get the Git commit hash from a tag (from individual calls to `git rev-parse --verify HASH^{commit}` to `git show-ref --dereference`).
- Change behavior of `export_include_dirs` in `Bender.yml` file to not include these directories globally, but only include the directories exported within the package and direct dependencies (this may break unclean implementations).

### Fixed
- Fix absolute path of path dependencies inside git dependencies.

## 0.23.2 - 2021-11-30
### Changed
- Wrap defines in quotes for the VCS's shell script

## 0.23.1 - 2021-09-29
### Fixed
- CI -> changed from travis to github actions

## 0.23.0 - 2021-09-13
### Changed
- Change `parents` command, now displays version requirement of each package
- updated resolver to use a single Core and SessionIo object for performance
- Add HashMap to git_versions in SessionIo to avoid multiple identical git calls, significantly improves performance

## 0.22.0 - 2021-01-21
### Added
- Add `clone` command to checkout individual ips to a directory and create a path reference in Bender.local
- Add `parents` command to get list of packages requiring the queried package

### Fixed
- Fix plugins to work for scripts in root repository
- Force git fetch on unsatisfied requirements to check for newly added tags in server repository

## 0.21.0 - 2020-11-04
### Added
- Add option to pass additional defines through the command line ([#34](https://github.com/fabianschuiki/bender/pull/34))

### Changed
- Switch to Rust 2018 edition
- Update dependency `serde_yaml`, `tokio-timer`, `semver`, `blake2`, `typed-arena`, `dirs`, `pathdiff`, and `itertools`
- Extended documentation in the README

## 0.20.0 - 2020-07-04
### Added
- Add `riviera` format to the script command. ([#29](https://github.com/fabianschuiki/bender/pull/29))

## 0.19.0 - 2020-04-27
### Added
- Add `flist` scripts target emitting a plain file list.

### Changed
- `script` now inserts Tcl `catch` statements for `synopsys` and `vsim` to abort elaboration on the first error.  This can be disabled with the new `--no-abort-on-error` flag.

## 0.18.0 - 2020-04-03
### Added
- Add `verilator` and `genus` formats to the script command. ([#27](https://github.com/fabianschuiki/bender/pull/27))

## 0.17.0 - 2020-03-11
### Added
- Add `vivado-sim` format to the script command.  This format differs from the `vivado` format in that it targets simulation, not synthesis; other than that, it is equivalent to the `vivado` format.

## 0.16.1 - 2020-03-10
### Changed
- `script vivado` now emits paths relative to the project root with the `ROOT` variable.

### Fixed
- `script vcs`: Fix shell syntax to define `ROOT` variable.

## 0.16.0 - 2020-02-17
### Added
- Add `vcs` format to the `script` command.

### Changed
- `script`: `vcom-arg` or `vlog-arg` can be used with format `vsim` or `vcs`.

## 0.15.0 - 2020-02-13
### Added
- `script vivado`: Add options to restrict output to defines, includes, or sources.

### Changed
- `script`: Raise error if `vcom-arg` or `vlog-arg` are used with format other than `vsim`.
- `script vivado`:
  - Add `-norecurse` to `add_files` to prevent warnings.
  - Set `include_dirs` and `verilog_define` properties also for `simset` to prevent critical warnings.  This can be disabled with the new `--no-simset` option.

### Fixed
- `script vivado`: Fix name of `include_dirs` property.

## 0.14.0 - 2019-10-16
### Added
- Add `vivado` format to the `script` command.

## 0.13.3 - 2019-07-29
### Changed
- Bump rustc minimum version to 1.36

### Fixed
- Fix rustc 1.36 `as_ref` [regression](https://github.com/rust-lang/rust/issues/60958)
- Emit format-specific target defines even if no target is specified.

## 0.13.2 - 2019-07-29
### Fixed
- Fix capitalization of target defines such as `TARGET_SYNTHESIS`.

## 0.13.1 - 2019-07-18
### Fixed
- Omit unsupported `-2008` flag for VHDL analysis commands in Synopsys scripts.

## 0.13.0 - 2019-07-17
### Added
- Add the `frozen` option to prevent any dependency updates for a package.
- Add the `workspace` section to carry workspace configuration.
- Add the `workspace.checkout_dir` option to keep local working copies of each dependency.

### Changed
- Make order of packages and defines deterministic.
- Move the `package_links` option to `workspace.package_links`.

## 0.12.1 - 2019-05-08
### Added
- Add `-f` flag to `sources` for printing a flattend source listing.

### Changed
- Make JSON output human readable.

### Fixed
- Fix target defines to be all uppercase.
- Fix emission of target defines for source files which have no other defines.

## 0.12.0 - 2019-04-17
### Added
- Add `script` subcommand.
- Add `vsim` and `synopsys` script output formats.

## 0.11.0 - 2019-03-26
### Added
- Add `atty` dependency.
- Add `itertools` dependency.

### Changed
- Ask the user to resolve dependency conflicts if stdin/stdout are attached to an interactive console.
- Update `semver` dependency to v0.9.

## 0.10.0 - 2019-01-08
### Changed
- Create relative package links if possible.

## 0.9.0 - 2019-01-08
### Added
- Add the `udpate` subcommand that explicitly updates dependencies.
- Add dependency on the `dirs` crate.

### Changed
- No longer automatically update dependencies when the manifest changes.

## 0.8.0 - 2018-12-07
### Added
- Add `export_include_dirs` section to manifest, allowing packages to expose a subdirectory as include file search path.

### Changed
- Rename `package-links` manifest section to `package_links`.

## 0.7.1 - 2018-12-07
### Fixed
- Fix an issue where path dependencies would not properly resolve transitively.

## 0.7.0 - 2018-09-20
### Added
- Submodules are now checked out as well.
- Locally symlinked packages via the `package-links` list in the manifest.

### Changed
- By default, the `.bender` working directory is now a subdirectory of the root working directory.

## 0.6.2 - 2018-03-23
### Fixed
- Show checkout message only when actually checking out.
- Don't show the `--debug` option in release builds.

## 0.6.1 - 2018-03-22
### Added
- Show message when checking out a repository.
- Show message when fetching from a git remote.
- `--debug` option for debug builds.

### Changed
- Improved error messages when constraints cannot be met.

### Fixed
- Limit the number of concurrent git network activity to 8.

## 0.6.0 - 2018-03-01
### Added
- Plugin packages can now be declared in the `plugins` section of the config.
- Add the `package` field to source groups.
- Add the `bender config` command to dump the tool configuration.

## 0.5.0 - 2018-02-22
### Added
- Add plugin support. The manifest may now have a `plugins` section.
- Add include directories and preprocessor defines support. These can now be specified for source groups.
- Add `overrides` section to config.
- Add target specifications for source files.

### Changed
- Output of `bender sources` is now JSON formatted.
- Items in lock files have deterministic order.

## 0.4.0 - 2018-02-16
### Added
- Add `sources` section to manifest.
- Add `bender sources` command to access the source file manifest of the root package and its dependencies.

### Changed
- Dependency resolution only runs if lock file is older than manifest.

### Fixed
- Manifests of path dependencies are now read properly.
- Relative paths in config files are now treated as relative to the config file, not the current working directory.

## 0.3.2 - 2018-02-14
### Changed
- Only update git databases when manifest file changes.
- Only load manifests once per session.
- Only update checkouts once per session.

## 0.3.1 - 2018-02-14
### Fixed
- Fix crash when dependencies have no manifest.

## 0.3.0 - 2018-02-13
### Added
- Initial implementation of recursive dependency resolution.
- The `bender packages` command to access the package dependency graph.

### Changed
- Lockfile now contains the dependency names for each package.

## 0.2.1 - 2018-02-06
### Fixed
- Help page now shows proper program name, version, and authors.

## 0.2.0 - 2018-02-06
### Changed
- Use `git archive | tar xf -` to create checkouts.

### Fixed
- Fix creating a checkout of a branch.
- Fail gracefully if a dependency repository is empty.

## 0.1.0 - 2018-02-01
### Added
- Initial support for checkouts.
- Resolution of the root package's dependencies.
- The `bender path` command to get a path to the checked out dependencies.
