Skip to content

Releases: software-mansion/scarb

v2.3.0-rc0

27 Sep 14:07
ad30433
Compare
Choose a tag to compare
v2.3.0-rc0 Pre-release
Pre-release

Cairo release notes ➡️

Scarb and Cairo releases are getting synchronized

We are happy to announce that starting with this release, Scarb will follow Cairo version numbering! From now on, Scarb vX.Y.Z will always ship with matching Cairo vX.Y release. It is possible that we will make patch releases for Scarb that will not come with compiler updates.

BREAKING: New artifacts extensions convention

This Scarb release starts and implements a new convention of file extensions in Cairo & Starknet ecosystems:

  • Textual Sierra representation, meant for debugging use and compiler tests, stays as: crate.sierra
  • Textual CASM code of compiled Sierra, executable in Cairo VM, stays as: crate.casm
  • JSON representation of Sierra, used to be much more reliable than textual dump becomes: crate.sierra.json
    • alternative serialization formats will naturally be crate.sierra.X
  • JSON containing Sierra code of Starknet contract class becomes: contract.contract_class.json
  • JSON containing CASM code of Starknet contract class becomes: contract.compiled_contract_class.json

See the related proposal in Cairo discussions for more elaborate description.

BREAKING: [lib] target now emits Sierra in new JSON format

The default [lib] target now by default emits Sierra in a new JSON format (.sierra.json), that is derived from Cairo compiler data structures instead of textual Sierra (.sierra).

If you want to emit old format in your packages, add the following to your Scarb.toml:

[lib]
sierra-text = true

Important

We ask though to migrate your tools & workflows to .sierra.json immediately, as .sierra files parser is known to misread programs and the JSON format does not have this issue.

BREAKING: Package names must be lowercase

Starting with this release, Scarb will refuse to work on packages that contain uppercase letters. Technically this is a breaking change, but we have not detected such packages existing in the open-source world, so we expect no affected users.

Moving tests compilation from cairo-test to scarb build

scarb cairo-test does not bundle the entire Cairo compiler now, and instead calls scarb build in order to build Cairo tests. This is now possible thanks to the addition of a new Scarb target: [[test]].

This feature is currently mostly behind the scenes. We plan to iterate on it, and make it publicly documented when we'll ensure it is rock solid. As part of this effort, our plan is to standardize generated artefacts for tests, and therefore allow Starknet Foundry to also delegate their build process entirely to Scarb. This will also make it much easier to implement other custom Cairo test runners, as we'll effectively decouple Cairo compilation from actual testing.

The tests directory

This improvement also allows Scarb to kill two birds with one stone:

  1. Starknet Foundry's tests directory is now properly handled by scarb cairo-language-server.
  2. scarb cairo-test got support for running tests from the tests directory.

We will be polishing and documenting this feature in future Scarb releases.

Note

These improvements are only available in Scarb's distributions of cairo-test and Cairo LS. The low-level binaries generated by Cairo compiler team do not have such capabilities.

Sorting imports in Cairo code

scarb fmt can now sort use statements etc. in Cairo code. This feature tends to generate big diffs, so it is disabled by default. To enable it, add the following to your Scarb.toml:

[tool.fmt]
sort-module-level-items = true

See relevant documentation for more information

Wildcard support in build-external-contracts

The build-external-contracts property of the starknet-contract target allows asking Scarb to build contracts from package dependencies as part of proper package build, for example for use in tests. This release adds a possibility to request building many contracts from a module tree at once. For example, the following snippet:

[[target.starknet-contract]]
build-external-contracts = [
    "dojo_erc::erc721::components::Balance",
    "dojo_erc::erc721::components::OperatorApproval",
    "dojo_erc::erc721::components::Owner",
    "dojo_erc::erc721::components::TokenApproval",
    "dojo_erc::erc721::erc721::ERC721",
    "dojo_erc::erc721::systems::erc721_approve",
    "dojo_erc::erc721::systems::erc721_burn",
    "dojo_erc::erc721::systems::erc721_mint",
    "dojo_erc::erc721::systems::erc721_set_approval_for_all",
    "dojo_erc::erc721::systems::erc721_transfer_from",
]

can now be written as:

[[target.dojo]]
build-external-contracts = [
    "dojo_erc::erc721::*",
]

Thanks to @ametel01 for contribution!

Minor changes

  • Commands executed via Scarb scripts may now use coloured output in some cases.
  • scarb clean refuses to work if it's executed outside Scarb workspace.
  • On Linux and macOS, Scarb now uses the exec(3) syscall for running subcommands, which means that subcommands now replace scarb process instead of being wrapped by it. Alongside this, we have improved the corresponding implementation on Windows, which should, among others, improve handling of killing processes.
  • scarb new/init now show an error or a warning if created package's name is a Cairo keyword or other ecosystem reserved name.
  • Added an internal support for target-specific dependencies.
    • test targets will now depend on a new magic package: test_plugin, which provides cairo-test compiler plugin.
    • This change will manifest itself in scarb metadata output.
  • Scarb will now attempt to infer the value of package.readme field if missing, but a readme file is present.

Cairo Version

This version of Scarb comes with Cairo v2.3.0-rc0.

What's Changed

Read more

v0.7.0

23 Aug 16:32
58cc88e
Compare
Choose a tag to compare

Breaking changes

scarb-ui crate, deprecation of PackagesFilter in scarb-metadata

The packages_filter feature in scarb-metadata is deprecated since freshly released version 1.7.0. We plan to remove it entirely in scarb-metadata 1.8.0, if we will not detect active usage of this feature on public repositories (currently this feature is unused outside Software Mansion's codebases).

The entire feature has been moved to a new crate: scarb-ui, which also provides Scarb's output system. Currently, this crate is not published to crates.io, but we consider doing so if there will be a need for it in the community.

New features

New project template

We have changed the template used by scarb new/init commands. Newly generated projects will now contain example tests and a main function, to demonstrate usage of scarb cairo-run.

scarb cache path

This new command prints a path to Scarb's global cache directory.

Big shout out to @ametel01 for implementing this ❤️

Bugfixes

  • Fixed version resolution issue which prevented following snippet from working:
    [dependencies]
    openzeppelin = { git = "https://github.com/OpenZeppelin/cairo-contracts.git", tag = "0.7.0-rc.0" }
  • scarb cairo-test can now successfully deploy contracts declared in dependencies

Cairo Version

This version of Scarb comes with Cairo v2.2.0.

What's Changed

  • Backport updates from release 0.6.2 branch by @mkaput in #572
  • Fix error message for missing gas by @mkaput in #573
  • New init template and examples updates by @mkaput in #574
  • added cache-path command by @ametel01 in #566
  • Add support for installing nightlies in install script by @szymmis in #571
  • Remove unused tracing-futures dependency by @mkaput in #580
  • Print Sierra version in scarb --version by @mkaput in #578
  • Refactor write_script duplication in tests by @szymmis in #579
  • Extract scarb-ui crate by @mkaput in #581
  • Move all UI components to a submodule by @mkaput in #582
  • Bump the non-critical group with 11 updates by @dependabot in #589
  • Copy PackagesFilter into scarb-ui by @mkaput in #583
  • Deprecate packages_filter feature in scarb-metadata by @mkaput in #584
  • Increase test parallelism in CI workflow by @mkaput in #593
  • Properly use Status message when testing workspace by @mkaput in #585
  • Basic implementation of scarb-ui in scarb cairo-run by @mkaput in #587
  • Test-runner: add unit components to compilation by @maciektr in #594
  • Consider prerelease versions if version field of a dependency is unspecified by @mkaput in #601
  • Prepare scarb-metadata release 1.7.0 by @mkaput in #602
  • Add OZ installation example by @martriay in #570
  • Upgrade Cairo to 2.2.0 by @mkaput in #603

New Contributors

Full Changelog: v0.6.0...v0.7.0

v0.6.2

15 Aug 16:28
c07fa61
Compare
Choose a tag to compare

Scarb 0.6.2

Welcome to the release notes for Scarb v0.6.2!
This quick release is primarily Cairo upgrade to v2.1.1.

Cairo Version

This version of Scarb comes with Cairo v2.1.1.

What's Changed

Full Changelog: v0.6.1...v0.6.2

v0.6.1

11 Aug 14:36
e9199e0
Compare
Choose a tag to compare

Scarb 0.6.1

Welcome to the release notes for Scarb v0.6.1! This release brings several small quality-of-life improvements:

  • scarb cairo-run will automatically call scarb build code before running
  • new command: scarb cache clean wipes Scarb global cache directory
  • scarb-metadata v.1.6.0 adds ScarbCommand helper for quick shelling into core scarb CLI

Cairo version

This version of Scarb comes with Cairo v2.1.0.

What's Changed

  • Rewrite website with Vitepress by @mkaput in #501
  • Last-minute website fixes by @mkaput in #541
  • MAINTAINING.md: stop publishing scarb crate to crates.io by @mkaput in #540
  • More website fixes by @mkaput in #542
  • Another batch of website updates by @mkaput in #545
  • Move Windows download instructions to "by os" section by @mkaput in #546
  • Various error messages improvements by @mkaput in #549
  • Upgrade Cairo to 84f933b by @mkaput in #552
  • Add Scarb command abstraction, build Scarb project before run by @maciektr in #543
  • Update Alexandria references to refer to new package structure by @mkaput in #555
  • Add scarb cache clean subcommand by @MrDenkoV in #531
  • Rename nightly artifacts to be accessible from bash scripts by @szymmis in #556
  • Fix global directories casing in documentation by @mkaput in #557
  • Update dependabot.yml by @mkaput in #559
  • Make Website Deploy workflow always deploy from main when run on release event by @mkaput in #560
  • Bump semver from 1.0.17 to 1.0.18 by @dependabot in #562
  • Bump the non-critical group with 12 updates by @dependabot in #563

Full Changelog: v0.6.0...v0.6.1

v0.6.0

07 Aug 09:58
Compare
Choose a tag to compare

Scarb 0.6.0

Welcome to the release notes for Scarb v0.6.0! This release brings a new big feature: workspaces, and upgrades Cairo to freshly released stable 2.1.0 version!

Workspaces

Scarb now natively supports projects consisting of multiple packages. Such projects are called workspaces and a denoted by a Scarb.toml file in root directory which contains a new section: [workspace]:

# [PROJECT_DIR]/Scarb.toml
[workspace]
members = ["hello_world"]
# [PROJECT_DIR]/hello_world/Scarb.toml
[package]
name = "hello_world" # the name of the package
version = "0.1.0"    # the current version, obeying semver
authors = ["Alice <[email protected]>", "Bob <[email protected]>"]

Workspaces are properly handled when pulling dependencies, and all commands and extensions should become aware of them on day one if they use scarb-metadata v1.5.0.

This feature is almost 1:1 copy-paste of Cargo's Workspaces. Therefore, it should feel familiar to Rust coders. For more information, check out relevant piece of documentation.

scarb crate

Starting with this release, we publicly announce that the scarb crate on crates.io is deprecated and will not receive further updates (including this Scarb version). We also announce that we plan to deprecate the scarb crate altogether in the future, but for this to happen we need to bring feature-parity between this crate and Scarb binaries.

We advise our existing users to pull Scarb directly from Git repository, and new users to avoid using Scarb as Rust crate altogether and instead talk to user-installed scarb CLI via the scarb-metadata crate. Scarb documentation will be updated accordingly in coming days, as we're reworking it entirely right now.

The reason for this is that the scarb crate existence is blocking us from doing several improvements we would like to have in the future, such as isolating Cairo compilation in a separate OS process.

If you have any further questions, please reach to us on our Telegram or Discord channels. We'll be happy to respond :-)

Cairo version

This version of Scarb comes with Cairo v2.1.0.

What's Changed

Full Changelog: v0.6.0-alpha.4...v0.6.0
Changelog since Scarb v0.5.2: v0.5.2...v0.6.0

0.6.0-alpha.4

03 Aug 09:42
648ac37
Compare
Choose a tag to compare
0.6.0-alpha.4 Pre-release
Pre-release

Welcome to the release notes for Scarb v0.6.0-alpha.4! This release bumps Cairo, adds scarb fetch command, fixes some bugs and brings internal changes paving the road for workspaces support.

scarb fetch

This small command is analogous to cargo fetch. Its job is simple: just pull dependencies of current project and do nothing else. In the future, this command will also update the lock file.

Big thank you to @GianfrancoBazzani for implementing this! 👏🏻

Git interdependencies bug fix

We have fixed a bug which prevented from using following dependency tree:

┌───┐   git    ┌───┐
│ X ├─────────►│ A │
└─┬─┘          └───┘
  │              ▲
  │              │ path = "../a"
  │              │
  │     git    ┌─┴─┐
  └───────────►│ B │
               └───┘

Workspaces support

We have started merging the PR stack, which implements workspaces. Not everything was merged, and thus we do not advise making use of these changes yet!

Cairo version

This version of Scarb comes with Cairo v2.1.0-rc4.

What's Changed

New Contributors

Full Changelog: v0.6.0-alpha.2...v0.6.0-alpha.4

0.6.0-alpha.2

25 Jul 15:11
4b4d541
Compare
Choose a tag to compare
0.6.0-alpha.2 Pre-release
Pre-release

Scarb 0.6.0-alpha.2

Welcome to the release notes for Scarb v0.6.0-alpha.2! This quick release is primarily Cairo upgrade to v2.1.0-rc2.

It includes some foundational work towards Scarb nightlies. 🌃

Cairo version

This version of Scarb comes with Cairo v2.1.0-rc2.

What's Changed

Full Changelog: v0.6.0-alpha.1...v0.6.0-alpha.2

0.6.0-alpha.1

21 Jul 09:38
c7b2e34
Compare
Choose a tag to compare
0.6.0-alpha.1 Pre-release
Pre-release

Scarb 0.6.0-alpha.1

Welcome to the release notes for Scarb 0.6.0-alpha.1! This release is primarily Cairo upgrade to v2.1.0-rc1. There are only small cosmetic changes to Scarb itself in this release, but we're heavily working on some big stuff 👀

Cairo version

This version of Scarb comes with Cairo v2.1.0-rc1.

What's Changed

Full Changelog: v0.6.0-alpha.0...v0.6.0-alpha.1

0.6.0-alpha.0

17 Jul 12:04
3e485db
Compare
Choose a tag to compare
0.6.0-alpha.0 Pre-release
Pre-release

Scarb 0.6.0-alpha.0

Welcome to the release notes for the first Scarb 0.6.0 line release! As Cairo 2.1.0-rc0 has been released, we are doing next major version bump.

There are no user-visible changes to Scarb itself in this release, but we did a lot of improvements to documentation and to our internal workflows this cycle.

Cairo version

This version of Scarb comes with Cairo v2.1.0-rc0.

What's Changed

  • Extract CommandExt to support module by @mkaput in #470
  • Split tests into many binaries and move support module to a separate crate by @mkaput in #471
  • Partition tests using nextest by @mkaput in #472
  • Make CI workflow run on Linux only by @mkaput in #473
  • Temporarily remove asdf plugin add scarb until it will work by @mkaput in #476
  • Update CI docs page by @mkaput in #477
  • Mention ASDF installation on the home page by @mkaput in #478
  • Do not run Scarb CI on website-only changes by @mkaput in #479
  • Ensure everything required is passing for branch protection by @mkaput in #480
  • Partially revert recent CI changes and consolidate all CI workflows into one by @mkaput in #481
  • Fix lints reported by Clippy 1.71 by @mkaput in #484
  • Update guides to latest changes in ecosystem by @mkaput in #485
  • Upgrade Cairo to 2.1.0-rc0 by @mkaput in #486

Full Changelog: v0.5.2...v0.6.0-alpha.0

0.5.2

11 Jul 11:22
f4b62ad
Compare
Choose a tag to compare

Scarb 0.5.2

Welcome to the release notes for Scarb 0.5.2! This release upgrades Cairo to 2.0.2 and brings one small feature.

Compiling external contracts

While compiling the Scarb project, by default, no artefacts are emitted for contracts defined in dependencies. It is now possible to instruct scarb build to include external contracts in the compilation of your package. This can be for example useful in some custom testing flows as requested by several Scarb users. For example, if your package depends on hypothetical package utility_contracts which provides Account contract, you can tell Scarb to compile Hello as part of your build:

[dependencies]
starknet = "2.0.0"
utility_contracts = { path = "../shared_contracts" }
 
[[target.starknet-contract]]
build-external-contracts = ["utility_contracts::Account"]

See relevant documentation section for more information.

Cairo version

This version of Scarb comes with Cairo v2.0.2.

What's Changed

Full Changelog: v0.5.1...v0.5.2