Skip to content

Conversation

@JoshuaBatty
Copy link
Member

@JoshuaBatty JoshuaBatty commented Oct 29, 2025

Rendered


Note

Adds an RFC proposing a new forc-tooling monorepo for operational tooling and CLI wrappers, keeping AST-aware binaries in Sway, with defined migration, distribution, CI, and release processes.

  • RFC Added: rfcs/0017-tooling-monorepo.md introducing a split into a new forc-tooling monorepo.
    • Scope:
      • Move CLI wrappers (forc-fmt, forc-lsp, forc-doc, forc-migrate) and operational tools (forc-node, forc-client, forc-crypto, forc-wallet) to forc-tooling.
      • Keep AST-aware implementations (swayfmt, sway-lsp, sway-doc, sway-migrate) in sway.
    • Distribution: Update sway-nightly-binaries, fuelup, and fuel.nix to source binaries from both repos.
    • CI & Compatibility: Separate CI pipelines; track cross-repo compatibility via compatibility.toml.
    • Release Pipeline: Independent crate releases from forc-tooling; atomic installs via dual manifests.
    • Implementation Plan: Bootstrap repo, migrate tools, introduce wrapper crates, update distribution, rollout/monitor.
    • Release Tooling Options: Consider release-plz, cargo-smart-release, cargo-unleash.
    • Notes: Drawbacks, alternatives, prior art, and unresolved questions documented.

Written by Cursor Bugbot for commit 9f0d425. This will update automatically on new commits. Configure here.

cursor[bot]

This comment was marked as outdated.

@JoshuaBatty JoshuaBatty changed the title [WIP] Tooling Monorepo Tooling Monorepo Nov 6, 2025
Copy link
Member

@kayagokalp kayagokalp left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This looks great to me! Only thing we might want to clarify/discuss is versioning as the binary that invoking compiler capabilities now will be decoupled from the sway repo.

As RFC discusses with the ability to version different packages independently, we should be able to continue following those version sets (like forc-fmt is actually at the same level as the compiler releases) while keeping rest of the tools like forc-client independent from these bumps.

I think we can also revive a simplified version of "releasy" which is going to actually just watch for releases in sway repo and open bump PRs on the tooling monorepo (like sway-core bumped on sway side etc). This can be useful for situations like getting latest language features released into forc-fmt semi-automatically, as there will be a PR already.

I am curios whether we consider forc as a tooling monorepo thing or sway monorepo thing? I feel like it should be tooling monorepo while its sway repo dependency is forc-pkg but without an automatic process described as above, language releases will require an additional PR merged. It is not the end of the world but something to consider

@JoshuaBatty JoshuaBatty requested review from a team, Voxelot, mchristopher and zees-dev November 7, 2025 00:28
| **Sway** | Compiler, language services, AST-aware binaries | Publishes `swayfmt`, `sway-lsp`, `sway-doc`, `sway-migrate` , and related libraries consumed by tooling wrappers |
| **Forc-tooling** | CLI wrappers and operational tools | Hosts `forc-fmt`, `forc-lsp`, `forc-doc`, `forc-node`, `forc-client`, `forc-crypto`, `forc-wallet`, and tracing/deploy utilities |

Both repos maintain independent CI pipelines:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It would be interesting to allow sway CI to trigger some upstream tests. The new tooling repo is one of them.

In this way, we would know that something is breaking. This CI task would not block merge, but would signal to someone else that changes are coming.

@cursor
Copy link

cursor bot commented Dec 2, 2025

PR Summary

Adds an RFC proposing a separate forc-tooling monorepo, keeping AST-aware binaries in sway, with defined CI, release, and compatibility tracking.

  • RFC Added: rfcs/0017-tooling-monorepo.md
    • Proposes creating a dedicated forc-tooling monorepo for CLI wrappers and operational tools while keeping swayfmt, sway-lsp, sway-doc, sway-migrate in sway.
    • Repository boundaries:
      • sway: compiler, language services, AST-aware binaries
      • forc-tooling: forc-fmt, forc-lsp, forc-doc, forc-migrate (wrappers), forc-node, forc-client, forc-crypto, forc-wallet, tracing/deploy tools
    • Distribution: update fuelup, fuel.nix, and nightly pipelines to source tooling from the new repo.
    • CI/Release: independent pipelines; tooling publishes separately; atomic installs supported.
    • Compatibility tracking: auto-generate releases.toml from Cargo.lock per release.
    • Implementation plan: bootstrap repo, migrate operational tools, introduce wrappers, adapt distribution, and monitor rollout.
    • Tooling options: outlines multi-crate release tools (release-plz, cargo-smart-release, cargo-unleash).
    • Notes drawbacks, rationale/alternatives, prior art, and unresolved questions.

Written by Cursor Bugbot for commit 60dfcb3. This will update automatically on new commits. Configure here.

…onorepo with improved dependency management in Cargo.toml files.
JoshuaBatty added a commit to FuelLabs/fuelup that referenced this pull request Dec 9, 2025
Update all channel TOML files to use the new simplified target naming
convention for forc-wallet:

- aarch64-unknown-linux-gnu → linux_arm64
- x86_64-unknown-linux-gnu → linux_amd64
- aarch64-apple-darwin → darwin_arm64
- x86_64-apple-darwin → darwin_amd64

This aligns with the forc-wallet release asset renaming and the
simplified naming convention adopted by the forc monorepo.

Note: fuel-core and fuel-core-keygen entries are intentionally
unchanged as their release assets have not been renamed.

Closes #809
Related: #808
RFC: FuelLabs/sway-rfcs#49
JoshuaBatty added a commit to FuelLabs/sway that referenced this pull request Dec 9, 2025
## Summary

This PR completes the sway-side of migrating `forc-tracing` and
`forc-crypto` to the new [forc
monorepo](https://github.com/FuelLabs/forc), as outlined in [RFC
#49](FuelLabs/sway-rfcs#49).

The corresponding forc repo PR:
FuelLabs/forc#119

### Changes

- Remove `forc-tracing` crate from workspace (now uses crates.io
`0.71.1`)
- Remove `forc-crypto` crate from workspace
- Update CI to no longer build/package `forc-crypto` binary (it's now
built from forc repo)
- Update gh-pages workflow to install `forc-crypto` from forc repo for
documentation generation

### Distribution

Going forward, `forc-crypto` will be built and distributed from the forc
repo by:
- sway-nightly-binaries
- fuelup  
- fuel.nix

### Documentation

For now, documentation for all tooling will continue to live in this
repo. The `gh-pages` workflow now pulls `forc-crypto` from the forc repo
rather than building it locally, so docs generation continues to work as
before.
JoshuaBatty added a commit to FuelLabs/fuelup that referenced this pull request Dec 10, 2025
Update all channel TOML files to use the new simplified target naming
convention for forc-wallet:

- aarch64-unknown-linux-gnu → linux_arm64
- x86_64-unknown-linux-gnu → linux_amd64
- aarch64-apple-darwin → darwin_arm64
- x86_64-apple-darwin → darwin_amd64

This aligns with the forc-wallet release asset renaming and the
simplified naming convention adopted by the forc monorepo.

Note: fuel-core and fuel-core-keygen entries are intentionally
unchanged as their release assets have not been renamed.

Closes #809
Related: #808
RFC: FuelLabs/sway-rfcs#49
JoshuaBatty added a commit to FuelLabs/fuelup that referenced this pull request Dec 11, 2025
Update all channel TOML files to use the new simplified target naming
convention for forc-wallet:

- aarch64-unknown-linux-gnu → linux_arm64
- x86_64-unknown-linux-gnu → linux_amd64
- aarch64-apple-darwin → darwin_arm64
- x86_64-apple-darwin → darwin_amd64

This aligns with the forc-wallet release asset renaming and the
simplified naming convention adopted by the forc monorepo.

Note: fuel-core and fuel-core-keygen entries are intentionally
unchanged as their release assets have not been renamed.

Closes #809
Related: #808
RFC: FuelLabs/sway-rfcs#49
JoshuaBatty added a commit to FuelLabs/fuelup that referenced this pull request Dec 11, 2025
…#811)

Update all channel TOML files to use the new simplified target naming
convention for forc-wallet:

- aarch64-unknown-linux-gnu → linux_arm64
- x86_64-unknown-linux-gnu → linux_amd64
- aarch64-apple-darwin → darwin_arm64
- x86_64-apple-darwin → darwin_amd64

This aligns with the forc-wallet release asset renaming and the
simplified naming convention adopted by the forc monorepo.

Note: fuel-core and fuel-core-keygen entries are intentionally
unchanged as their release assets have not been renamed.

Closes #809
Related: #808
RFC: FuelLabs/sway-rfcs#49
JoshuaBatty added a commit to FuelLabs/fuel.nix that referenced this pull request Jan 15, 2026
## Summary

Migrates `forc-node` package support from the `sway` repository to the
`forc` monorepo, effective from version 0.71.0 onwards.

This follows the same pattern established in #205 for `forc-crypto`.

## Changes

- **refresh-manifests.sh**: Added `pkg_forc_node` with legacy repo
routing (sway < 0.71.0, forc >= 0.71.0)
- **patches.nix**: 
  - Added `forc-node` to `forc-plugins` list for openssl dependencies
  - Added `buildAndTestSubdir` patch for forc monorepo builds
  - Added clang/rocksdb dependencies required for fuel-core bindings
- **packages.md**: Added forc-node to documentation

## Related PRs

- forc: [FuelLabs/forc#130](FuelLabs/forc#130) -
Migrate forc-node from sway repo
- fuelup:
[FuelLabs/fuelup#819](FuelLabs/fuelup#819) -
Migrate forc-node from sway to forc monorepo
- sway-nightly-binaries:
[FuelLabs/sway-nightly-binaries#81](FuelLabs/sway-nightly-binaries#81)
- Migrate forc-node nightly builds

## RFC

[FuelLabs/sway-rfcs#49](FuelLabs/sway-rfcs#49) -
Tooling Monorepo RFC

---------

Co-authored-by: GitHub Action <action@github.com>
ironcev added a commit to FuelLabs/sway that referenced this pull request Jan 16, 2026
## Summary

This PR completes the sway-side of migrating `forc-node` to the [forc
monorepo](https://github.com/FuelLabs/forc), as outlined in [RFC
#49](FuelLabs/sway-rfcs#49).

The corresponding forc repo PR:
FuelLabs/forc#130

`forc-node` has already been released from the forc repo (v0.71.2).

### Changes

- Remove `forc-node` crate from workspace
- Update CI to no longer build/test/package `forc-node` binary (it's now
built from forc repo)
- Update gh-pages workflow to install `forc-node` from forc repo for
documentation generation
- Remove unused workspace dependencies (`fuel-core`,
`fuel-core-chain-config`, `libp2p-identity`, `sha1`, `termion`)

### Distribution

Going forward, `forc-node` will be built and distributed from the forc
repo by:
- sway-nightly-binaries
- fuelup
- fuel.nix

### Documentation

Documentation for all tooling will continue to live in this repo. The
`gh-pages` workflow now pulls `forc-node` from the forc repo rather than
building it locally, so docs generation continues to work as before.

Co-authored-by: Igor Rončević <ironcev@hotmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants