-
Notifications
You must be signed in to change notification settings - Fork 2.4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Migrating Nx core to Rust & deprecating custom runners #28434
Comments
With regard to this, I would have helped add support for Bun into Nx's own task runner, but at the time Bun didn't support half the modules Nx uses and would only work with web workers over IPC. I did actually provide feedback to the Nx team as there were some benefits over IPC. I want to express my disappointment that Nx has refused to consider opening up remote caching in Rust. All competitors have either opened up this ability or are working on it.
While I respect that Nx has venture capital to consider and needs a return on investment, and that this is Nrwl's business, I believe most enterprises would still pay for Powerpack. However, smaller teams and indie developers would much prefer to host their own. Personally, I have privacy concerns with any cloud—no offence—and would much prefer to control it myself. Taking away a functionality that you admitted was used by the community and putting it behind a paywall is disheartening. Regarding Powerpack, I find the pricing confusing, particularly in terms of how many seats are required. Does each developer need a seat to use Powerpack? Have you considered selling sections of Powerpack independently and adjusting the pricing for small teams? edit: I don't like this but i'm forking NX core to consistently add API first in the JS and then into the rust to ensure community solutions can still work. I think disingenuous to call this and focus so much on task runner when this move actually remove NX support for free custom cache. Again love you guy and women but please rethink and allow the API to be open at all point not eventually. |
Is it planned to expose an API to add custom remote caching in the Rust implementation ? |
Sorry not to keep hating but that comment feels belittling. I'm sorry you made this amazing tool. Caching was extremely useful before but we have limited funds as we not backed by VC yet. Please give me charity. honestly thats how it reads |
Shared cache Is also necessary to reuse cache between pipeline runs in a stateless build cluster like kubernetes or will there be another option to achieve this? From my understanding, without Powerpack or NX Cloud it will not be possible to have "Smart Monorepos AND fast CI" if you dont have a stateful CI executor, but thats something that NX wanted to provide, isnt it? If you allow a suggestion, you may put features like special/ complicated executors or plugins for e.g. Cmake, Conan or other C/C++ stuff in a powepack, but not core features. I mean 20% faster sounds great at first, but compared to what? Typical build/test task might take some minutes, it does not really matter if it takes 100ms or 80ms to load it from cache instead. |
So if i TL;DR; this, it can be summed up to: That's legitimate, but know that one of the main reasons we choose Nx is for that specific reason. And we are now forced to evaluate other options if they turn up to be cheaper or more flexible. And my 2 cents about typescript -> rust migration. I as a consumer of Nx will greatly appreciate an extensive, robust and well documented programmatic API for Nx rather than any rust re-write and small speed improvement. Nx is mostly IO bound (except for the caching stuff that needs to hash, read and parse and write a ton of files) can't you just make parts of Nx in rust? like the caching mechanism? At this point i feel that Rewrite It In Rust™️ is more of a marketing strategy rather than a practical engineering consideration. Sorry for all the 🌶 takes - i say this as a long time avid NX user. |
In my current job we have a team of 20 developers working on a massive monorepo with NX as the underlying framework. We chose NX specifically for its free tier features including on prem caching as security is paramount to our organization. We use on prem minio s3 storage that we control and administer ourselves. I was surprised to learn this week by means of a warning when run To learn such an important update from a random warning is really poor communication from NX. I had a look at site for activating powerpack and with the amount of developers working on our project the total comes up to $495.00 A 20% speed increase in a command starting up is nothing in comparison to the speed increase that remote caching offers. Unfortunatly NX has now lost credibility within our organization, reason being, if you can randomly put caching behind a paywall what's to stop NX from putting other features behind a paywall?
We have already started planning for migrating off of NX and are looking into turbo repo as we are not happy with essentially being held to ransom for trusting NX. I should note that personally I was a massive fan of NX, I was the one who incorporated it into our development process and honestly it has been an amazing journey. I even wrote an article about it here - https://medium.com/better-programming/migrating-an-angular-application-to-module-federation-with-nx-74f7664bab3e?source=your_stories_page------------------------------------- Thank you for all the work up until now, but if this change goes ahead we will be moving on and I suspect a lot of others will also |
100% agree, I've stopped making NX a priority for client. I'll be recommending other tools as well going forward. NX to me now has zero credibility. I also found this quiet disingenuous too around codeowner.
He went on to create a community plugin npm i @swapniltech0390/nx-codeowners https://www.npmjs.com/package/@swapniltech0390/nx-codeowners |
The custom NX license states:
However, much of this appears to be documented and available under the MIT version of the code. How is this license valid if the API/know-how for producing related software comes from the MIT version? Does this mean any indie hacker using APIs provided by the MIT or any tweaks to the MIT code to open up would be a breach. |
I'm going to post this from an anonymous account because our threads and phone calls should not be about this. The deprecation that prompted this series of threads Nx Powerpack offers a JSON-to-CODEOWNERS converter, an ESLint rule, and cache self-hosting which was previously available but not marketed. Assuming an organization with 30 developers, that's almost triple the price if you want to use your own cache and if you gave up on agents, dashboards, and log viz. I understand these are two completely different products aimed at different target groups but as an engineer I can't help but compare the amount of effort that has gone in one vs. the other and the two are not close. And the way these are perceived informs whether engineers would recommend and implement Nx in their organization. Unclear terminology in sales pages Unclear licensing Removing previously available functionality Comparison with competing products Public communication: correctness and timeliness Timeliness is another thing. The post is dated Sep 25th and its follow-up explanation is dated Oct 14th. Public communication: subjective interpretation
This is great, except that now Nx now has a history of removing core features. This reads as "we can help you adopt Nx but you'll have to hope we won't change the terms again".
This is only "technically correct" as evident by the recent issues and PRs getting created around this. Nx is offering a product to developers. Nx is taking away building blocks from developers. Nx now has to somehow convince their main audience that this is a good thing. My team is prototyping micro frontends via module federation and NX in our company and we are potentially exploring the enterprise version of Nx. Our frontend team has always been lean so this wouldn't be a hard sell, nor it would be my money - but the actions and the communication of Nx around this are very encouraging to look for alterntaives. |
We have our own implementation of the Powerpack features for some time now, with our own implementations:
Here’s the issue: Removing the custom runner API directly eliminates a previously free feature (custom remote caching). Forcing us into a subscription for this capability effectively moves it behind a paywall. What’s next? Will other key Nx APIs be removed, forcing users to subscribe just to maintain custom conformance or codeowners management? This approach erode trust with your community and undermines the value that Nx provided by being open and extensible. |
heh I was looking into NX, but the lack of self-hosted caching without having to pay for an enterprise license is a no-go. I found this thread by looking into alternatives. NX Cloud sounds good enough, but even if we decided to pay, just not having the option to do the remote caching in-house, and for free, is a huge blocker. |
I'm encourage by the new license thats been recently added This at least address concerns it felt like we need to beg for access. However their seem to be little documentation on what "restricted license " means compared to the unrestricted. @vsavkin is their a link or something we can read to see what the restriction is. Also could you address the concerns that the powerpack license seem to contradict the MIT license
This can be done via MIT code and looking at the code. Already using plugins that does codeowner etc. I'm personally using a patch for NX to allow remote caching (all without looking at powerpack code) does this mean that not allowed? |
looks to be very restrictive: |
You need to change the Number of developers |
Then it is not restricted at all 👍 |
I kinda feeling this has mainly been a badly managed release from a PR and communication point of view but if the above is right then its not perfect i think opening up cache should happen, but its a lot better than it was first presented
Which is why im asking for clarity |
Sorry for the delayed response, we're still catching up after Monorepo World. I won't repeat what Victor mentioned in his post, so please check that out first. However, I want to focus on a couple of things:
We're grateful for the feedback 🙏. It showed us that while we had mentioned it in a few places, we missed the mark and needed to be much more explicit in our support for smaller teams. We've now updated the Powerpack page and the license application process to make these points more clear:
If you're a small team and you rely on custom task runners for S3 caching, please contact us—we definitely don't want anyone feeling blocked by this. |
Thank you so much, Juri. Everyone, I apologize for my unclear communication. And I appreciate everyone's constructive feedback. My Twitter DMs are open to anyone who wants to talk in good faith. I'm also happy to jump on a call. I chatted with many folks last week and the week before; this remains my top priority. Nx is a small business with a few dozen engineers. We know how hard it is to run a small business, so we're offering all small businesses remote cache implementations for free. |
@Jordan-Hall That is my personal twitter account. The Nx account didn't block you. You declined my invitation to talk to you. After I texted with you in good faith, trying to be clear and honest, you published our private communication without my permission, which isn't acting in good faith imo. That's why I don't think I can trust you, and I decided not to engage with you on social personally. You are free to engage with other folks on the Nx core team though. I'd also like you to read through https://github.com/nrwl/nx/blob/master/CODE_OF_CONDUCT.md which is there to protect the wellbeing of all Nx contributors, regardless of their position. Further violations of the CoC will leave us with no choice but to restrict your access on GitHub in order to preserve a safe space for our community. If you want to restart the conversation constructively, I'm happy to have a VC with you. Thank you! |
I said it was something i didn't like because people seem to be in the dark. It was release as good faith so people know what it was about (not to make you look bad or in bad faith, sorry if you took it that way.. Im sorry @vsavkin, i like things open but sure would take a call now im actually feeling well enough. The new update looks great but seems confusing around "Free restricted license." I cant find documentation on the restrictions, |
What is considered a "small team" out of curiosity? |
Honestly, I understand why NX decided to put the remote cache feature behind a paywall. Building and maintaining NX takes a lot of time and resources. I just hope the NX team can find a sustainable way to keep moving forward. As an open-source developer, I recognize it’s unrealistic to expect everything for free indefinitely. I personally don’t charge for my open-source projects since it's a passion project for me. I even convinced my boss to let me support open-source contributions for the tools we use in our company as a small way to give back to the community. However, I believe there's a difference when people are working full-time to support these projects. Let's face it, if NX can't keep going forward, I think it is still a bad outcome for everyone. There are so many open source projects died already. I’m grateful that NX provides us with a free Power Pack since we’re a small team (under 15 people). 🙏 I hope the community can come together to find a balanced solution. |
Dear @vsavkin & @jeffbcross, Godspeed. |
This post did not age well https://www.linkedin.com/posts/zackderose_we-were-intentional-with-nx-to-allow-other-activity-7069448865090859008-vnLI _Zachary DeRose 💯 We were intentional with Nx to allow other task runners that implement their own distributed caching! But caching can be hard. Nx Cloud is the first-party solution here (checkout https://nx.app) and we're investing our engineering resources into making this an excellent experience for our users. Nx Cloud is free up to 300 CI runs a month (all non-CI runs are free) and there's a special unlimited tier for all open-source projects, and comes with some nice features like linkable task logs, Version Control System integrations for Github/GitLab/BitBucket, and support for Distributed Task Execution! You can try it now simply by running NX team must reconsider removing existing open source functionality they intentionally offered. The disruption you are causing existing teams using custom runners will likely cost more then the net revenue gained from placing it behind a pay wall. As an architect at a leading investment bank, having used NX for over 2 years in our project, out of principal there is no way we will consider signing up for Power Pack due to the questionable approach in which it was introduced. The LinkedIn post above from an NX core team member is partly why we felt comfortable using custom runners. Lies.... |
My CI/CD pipeline runs concurrent NX processes in the same workspace (e.g., build and lint). Starting with version 19.8.*, I've started seeing occasional SQLite errors, which suggests the metadata SQLite database might be corrupted by concurrent writes from multiple NX processes. Will this scenario (concurrent NX processes in the same workspace) be supported in future versions, or do I need to purchase the Powerpack to use the remote FS cache? |
We have a custom runner that calls our own API with security checks and authorization, which also have some checks for a cache before storing it to S3. So the developers don't have a real access to Amazon infrastructure and to S3 itself. Powerpack doesn't meet our needs in security and with restricted access to Amazon infrastructure. So basically with this change, we have only three options:
I don't think that this options are good. |
@ytchenak " My CI/CD pipeline runs concurrent NX processes in the same workspace (e.g., build and lint). Starting with version 19.8.*, I've started seeing occasional SQLite errors" It's a bug that should be fixed. If you upgrade to latest, the issue should go away. @alexhanga Could we set up a call to discuss your checks? Could you email [email protected], and I'll arrange a call? |
@o629625 Can we have a call to discuss your situation? If you email [email protected] we'll find a time to talk. |
@vsavkin, I’m glad to hear that there’s no additional cost for running concurrent jobs, but unfortunately, the issue persists even in the latest version (20.1.2). Please refer to this comment for more details: #28772 (comment). This issue is preventing us from upgrading to the latest NX versions. For now, I am forced to use the last NX version that does not rely on SQLite. |
Folks, I'd like to post a quick update on the process initiatives that should give a lot more visibility into the roadmap, how features are developed etc:
Let us know what we can do to tweak the process changes (especially the RFC) if they are useful or not. |
It could be just me (and I really hope it is), but we are now a couple of weeks further along, and although a new RFC process has been introduced, we still don't have any clear answers regarding the custom runners? |
@TriPSs I have to agree. The communication and side stepping here is not a great look. @vsavkin Please answer the following questions so we can make a decision on our future of using nx. We only need yes or no answers, we are not interested in why these changes would be a good thing for us.
Any other response is redundant as far as my organization is concerned |
@el-davo & @TriPSs Would you be willing to have a call to talk about your situation? If you write into [email protected], we'll find a time to talk. |
I believe a call isn't the best solution in this context. While it might solve my problem, it wouldn't address the needs of other people who have similar concerns. I can clearly outline the solutions I'm seeking here:
Also, as @el-davo stated, everyone would like answers to the following questions:
|
Hi @vsavkin first of all, thanks for all the work you and the team have been doing over the years to support nx. I understand it takes time and effort to build a powerful tool like this, open source or not, so I also understand the need for the powerpack commercial products, but can we reconsider the vendor lock-in aspect of this change? Remote caching is crucial for NX in a CI/CD environments that use docker containers to run jobs (which I think is how most folks do CI/CD nowadays). Frankly without remote cache and therefore no Again, we're not against the powerpack products, but please leave options for custom remote cache implementations. |
@bahizi would you mind having a call with us so we can better understand your situation? |
Hi @JoeRJohnson11, In our call a couple of weeks ago, I asked if you could provide an update on this thread. Since that hasn’t happened yet, I’ll take the liberty to share my understanding of the situation. If anything is incorrect, please feel free to clarify. Key points discussed:
As I mentioned during the call, I will not be applying for a "free" license to continue using something I’m already using. Additionally, there’s the concern that the license could become perpetual for a specific version, which I understand to mean that while it’s free now, it might not remain so with future Nx versions. My conclusions:
Answers to our key questions:
No.
Yes. PS: I also noticed that Vercel made their caching free (source). It even states that Nx users as of version 19.7+ may need to pay a license fee to Nx to continue using Vercel Remote Cache. Let me know if I’ve missed or misunderstood anything! |
As the maintainer of nx-remotecache-gcs, an Nx plugin that enables Google Cloud Storage for remote caching, I’m disappointed by this decision. To safeguard our organization, we’ve applied for a free Powerpack license, but it’s only valid for one year, requiring renewal annually. Is there any assurance that these licenses will continue to be free in the future? While we’ll observe how this unfolds in the near term, the gradual shift toward paywalling remote caching doesn’t sit well with us. Given the current direction, we’re actively exploring alternatives to Nx. |
@wvanderdeijl as far as I know Turborepo is going to jump on this and release an how-to migrate document. Just FYI. |
In our organization, I have recently come across custom remote cache implementations that use a REST API to interact with the cache store, because it it not possible to connect directly to the S3 bucket from CI. It doesn't look like Powerpack will work here. This is another example of the variety of ways the NX community have used custom runners and if NX moves forward with removing them, many may have no choice but to migrate to a different monorepo solution. |
For those interested, consider Currently testing it out and the DevExperience so far is a bit clunky but that can be ironed out later once we have it fully working within our current nx monorepo and benchmarked. |
@bahizi I'm curious to know how, for example, you'd replace the Angular executors with Gradle tasks. |
Folks, We are introducing a new API: #29637 It handles most of the functionality that custom tasks runners were used for, but in a much clearer way and without impending our ability to evolve Nx. Please take a look and provide feedback. Thank you! |
Thank you, but I'm not sure if the two is linked. It appears most here saying custom runner for a wide range of issues. I'll leave a comment anywsy, but looks like custom caching harder/may not be as good here :/ I still think and rust needs a API around caching that people can hook into as well. |
Yes. Your free license will always be free. Also, non-free licenses are perpetual, so they will continue working after expiring with version restrictions. |
It seems nx team is fully committed on making self-hosted remote cache a subscription service, and to host your cache you will need to go through a paywall. Not sure what was the basis of this product decision, but I believe nx has more potential than just to be a payme for cache product. Turborepo documents their Remote Caching features, documented the API specification, and allowed the community to implement self hosted cache solutions. |
I understand that the Nx team needs funding to sustain themselves, but putting the custom remote caching feature behind a paywall is disappointing. I was an advocate for using Nx in my company, and we are deeply invested in the way that Nx works in our project, and I recently got a development server and I intended to use that for our remote caching server, and now this news hit. My team is too used to the way that Nx works in our project, and it's too expensive in time and effort to move to another monorepo framework, as I had documented Nx use cases in our own GitHub wiki and it's used in our GitHub Actions pipeline. Plus, the company I'm in is not a small business, so we won't qualify for a free license. We are effectively vendor-locked, which I didn't exactly see coming, since it's a FOSS, and I thought that given the reputation Nx had with the community, they wouldn't do something like backing away from a prior promise of a free remote caching solution. There are a lot of people that bought into Nx for the free remote caching option, and now they're stuck. Right now, I'm trying to understand if I should use Nx in the next project I'll be working on. Issue is that I spent quite a lot of time learning Nx, how it works, and how to resolve the various quirks that it has, that jumping to another monorepo framework would be another issue, since I have to start from the very beginning again. Plus I got used to Nx that I'm not sure if any other frameworks has the same equivalent feature set. But this may not have been the case for anyone else if this was not an advertised feature from the start, as others would've just used free remote caching features offered by Rush, Bazel, Turborepo, etc. Cause at that point, some people wouldn't have given Nx a chance there if they prioritized free remote caching. It reminds me of Thunder Client, where they gave everyone a taste of the VSCode extension for free, but out of nowhere, they paywalled a lot of their features, which made the developers who spent their time and effort developing with it to now have to consider the option of paying, even though that was not the plan from the start. Had the extension been advertised like that from the start, then the developers who weren't interested in that scheme wouldn't have used it. Trying to get people comfortable with a product for free and then out of nowhere rescind the free promise and to get them to pay, it's wasting people's time and effort. Given the comfort with the tool, it feels like I would have to use Nx and lock it down to v20 if I want to retain the free feature, which is not ideal. I'd have to look elsewhere for continuous support. |
UPDATE FROM JAN 15:
Thank you to everyone for engaging with us.
First, we are introducing a new API: #29637
It handles most of the functionality that custom tasks runners were used for, but in a much more clear way and without impending our ability to evolve Nx. Please take a look.
Second, your involvement has reminded us and the team how important it is to keep the community in the loop. After speaking with numerous individuals and teams over the last 3 months, we've implemented several process improvements:
RFC Process Implementation
We've introduced an RFC (Request for Comments) process for major API changes. Examples include:
Enhanced Communication
I've begun posting overviews of significant changes on social media. Recent examples:
Roadmap Transparency
We've published our roadmap and plan to do so regularly:
Community Engagement
We will review our processes again in March to see if anything can be improved.
Hi folks,
We are migrating Nx core from TypeScript to Rust, with a target completion date of 2025. The main reasons are to improve Nx's speed, reduce its package size, and enable a more powerful command-line interface.
While the rewrite to Rust brings many benefits, it also introduces some limitations, particularly with extensibility APIs. One example is the rarely-used API that allowed users to completely swap out Nx's task runner. While this offered theoretical "infinite" flexibility, it also meant Nx couldn't provide direct support for the use cases it enabled, leading us to discourage its use. In fact, we stopped generating any task runners properties in new Nx workspaces several years ago.
Despite the flexibility, very few concrete use cases for custom task runners emerged. The most common was larger teams wanting to use a self-hosted remote cache. Many such teams now use Nx Cloud (which starts free for small teams), but some still value the ability to choose their own solution.
To address this, we've introduced Nx Powerpack, which includes a dedicated solution for remote caching. Powerpack users can opt for our S3 or shared filesystem cache via new Nx plugins. If your team needs additional plugins for remote caching, please contact us at [email protected].
Another niche use of custom task runners was allowing Nx contributors to experiment with runtimes like Bun and Deno before they were officially supported. We encourage contributors to work with us directly to integrate such changes into Nx's open-source task runner.
We understand that this change would mean that some teams may need Nx Powerpack. While it's a premium product designed for professional teams, we know that every Nx user's situation is unique. We therefore have the following options available:
So far hundreds of companies of different sizes, from different industries, reached out, and we were able to unblock everyone.
Finally, if you have specific use cases for custom task runners that we haven't covered, don't hesitate to open an issue.
Thank you,
Victor Savkin & Nx Core Team
The text was updated successfully, but these errors were encountered: