Cross-runtime compatibility¶
fuckingnode compat [item]
!!! note "What we mean by Cross-runtime" While we always use the term "cross-runtime", we also include cross-platform (Golang and Rust) support inside of that term.
While FuckingNode can be a very powerful automation tool if properly used, in the end it's just an executable that automates tasks; it doesn't do much on its own. Thus, features that aren't supported by a runtime itself, won't work with us. (Adding "polyfills" or "glue fixes" is not discarded as an idea, but not planned short-term anyway).
You can run compat anytime from the CLI to see a table showing what works and
what doesn't. NodeJS is the only environment with 100% platform support. As
of version 5.1.0, that table looks like this:
| Feature | NodeJS | Deno | Bun | Go | Cargo |
|---|---|---|---|---|---|
| Cleanup | Yes | Partial | Partial | Partial | Partial |
| Kickstart | Yes | Yes | Yes | Yes | Yes |
| Commit | (Agnostic) | (Agnostic) | (Agnostic) | (Agnostic) | (Agnostic) |
| Uncommit | (Agnostic) | (Agnostic) | (Agnostic) | (Agnostic) | (Agnostic) |
| Release | Yes | Yes | Yes | No | Yes |
| Stats | Yes | Yes | Yes | Partial | Yes |
| Surrender | Yes | Yes | Yes | Yes | Yes |
| Setup | (Agnostic) | (Agnostic) | (Agnostic) | (Agnostic) | (Agnostic) |
| Audit | Yes | No | Yes | No | No |
| Launch | (Agnostic) | (Agnostic) | (Agnostic) | (Agnostic) | (Agnostic) |
| Terminate | Partial | Partial | Partial | Yes | Yes |
'Yes', 'No', 'Partial' indicate the obvious. '(Agnostic)' indicates that the feature runs anywhere (it won't check if you're on a supported runtime or depend on any runtime-specific feature).
Reasons for not supporting a feature are the following.
Partial Deno, Bun, Cargo & Go support for cleanup¶
In all these runtimes, the kind of cleanup commands we'd use (prune,
dedupe...) aren't available, so the cleanup itself isn't available.
clean will still work with them, as linting, prettification, or updates do
work.
No Deno support for hard cleanup¶
FuckingNode itself is written in Deno, thus we're disallowed by the runtime from cleaning its cache. While a "gluefix" exists, it doesn't work most of the time.
No Golang support for release¶
We might add it in the future, for now it's not supported because it're harder to implement (as more steps are required).
Partial Go support for stats¶
Golang does support it but doesn't support the Recommended Community Standards
part. go.mod doesn't have any field that can be compared to anything. No
module name, no author, no license, etc...
No Cargo & Go support for migrate¶
There's a single package manager for these platforms, migrate is useless.
No audit support for Deno, Cargo, or Go¶
Neither Deno, nor Golang, nor Cargo, offer an audit command.
Partial terminate support for JS runtimes¶
Some steps like PATH removal or deeper uninstall (specifically for Node) are yet to be done.