Today we’re thrilled to release the flox (still in beta) to the public as an open-source project. In this discourse post we want to take you behind the scenes of what flox is and how it works, but you are welcome to also read our full announcement on our website.
What to expect when you try flox
today?
Everybody at flox is ecstatic that we finally reached this milestone. The closed-beta cycle provided us with valuable feedback from numerous users both from within and more importantly from outside the Nix community. Being able to finally work in the open means a lot to everybody here at flox. Code can be found on GitHub.
But the truth is that we are still in beta.
That means that there are many things we still need to fix and improve. Not only that, we also have some important features coming in the near future.
In this release we hope to show a basic workflow that even non-Nix users will appreciate and maybe help existing Nix users convince their colleagues to give
nix
andflox
a try.
What features make flox
worth trying?
Initial onboarding is crucial.
That does not only mean having a good installer, but it does start with it. With flox
, we want to meet new users where they are. For this reason our installers are signed & native to the platform (deb
, rpm
, nix
, mac
, …). Existing Nix users can directly install as well:
nix profile install 'github:flox/floxpkgs#flox.fromCatalog' \
--experimental-features "nix-command flakes" \
--impure
Environments are at the core of flox
. We provide an imperative and declarative interface for creating environments. Beginners have an intuitive interface to install specific versions of software. Everything is recorded declaratively for when the users are ready to use that interface. Best of both worlds some would say.
$ flox install cowsay
created generation 1
$ flox activate
flox [default] $ echo "Hello!" | cowsay
________
< Hello! >
--------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
There is incredible value in sharing the things we create. Collaboration is built into flox
. It should be as easy to share your environment as it is to share your code.
$ flox pull -e github:flox-examples/demo
Total 0 (delta 0), reused 0 (delta 0), pack-reused 0
To /home/USER/.cache/flox/meta/flox-examples
* [new branch] aarch64-linux.demo -> aarch64-linux.demo
$ flox activate -e flox-examples/demo
flox [flox-examples/demo default] $ fortune | cowsay
_____________________________________
/ Spock: We suffered 23 casualties in \
\ that attack, Captain. /
-------------------------------------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
flox [flox-examples/demo default] $ exit
$
Nixpkgs is the best collection of packages out there, period.
We strive to improve the experience of consuming packages from nixpkgs
by providing a layer that records their evaluation, build, and cache metadata. We call this layer - a catalog. This allows users of flox
to select from multiple versions of packages. It also enables enterprise users to share packages in binary form without exposing their source code or even their Nix expression.
$ flox search python310
python310 - A high-level dynamically-typed programming language
stable.nixpkgs-flox.python310@3.10.7
stable.nixpkgs-flox.python310@3.10.8
stable.nixpkgs-flox.python310@3.10.9
staging.nixpkgs-flox.python310@3.10.7
staging.nixpkgs-flox.python310@3.10.8
staging.nixpkgs-flox.python310@3.10.9
unstable.nixpkgs-flox.python310@3.10.7
unstable.nixpkgs-flox.python310@3.10.8
unstable.nixpkgs-flox.python310@3.10.9
...
Our theory is that the Nix language is ultimately necessary to support the full complexity of defining and composing packages, but that completely hiding it means users have less opportunity to learn. Therefore we would like to slowly introduce concepts, and along the way expose more value, encouraging further exploration.
Our framework and libraries remain Nix compatible. While our command line tool provides additional niceties and we’ve patched Nix to make the experience better, everything can still be accessed and used with the vanilla Nix command line tool (with some experimental features enabled). Most patches and improvements have been or will be upstreamed, as appropriate. For example: impure-derivations, ACL support, fine-grained access tokens, etc.
Our promise is to maintain the compatibility with Nix in order to ensure interoperability with the rest of the ecosystem. This is also because we want to ensure all the great tools and features throughout the ecosystem are avaible to all users. We do not want to limit or restrict - instead we want to establish and recommend best-practices.
In short: by using flox
you will not be locked into our ecosystem.
flox and Nix community
The “no bullshit” version of what we want to say is: flox is nothing without the Nix community. And we are well aware of this. Not only that, we are betting that as a company that wants to bring Nix to the world we need to work with the community.
This is why in the past year flox dedicated time to support, empower and sometimes lead efforts across the Nix community. Be assured that we will continue to do so in most transparent way possible.
The elephant in the room is: How will we make money? What is our monetization strategy? We have nothing to hide here. Our monetization is focused on increasing corporate and organizational use. To put it in layman’s terms:
- We love Nix and what we can do with it.
- We also know that it is not easy to learn or adopt Nix.
- Even if learning Nix would be easier, adoption of new tech becomes harder the bigger the organisation.
- The bigger the organisation, the “weirder” their requirements (from the perspective of an open source project). Not all of those requirements make sense to include in an open source version, but would make a big difference for enterprise adoption.
- We want to make it possible for you (the Nix user) to be able to bring Nix-based technology to your organizations and to be an effective ambassador.
As you can see we are playing with open cards. We don’t compete with the Nix community, but are part of it. If something is not clear, please feel free to ask us.
Give flox
a try
If you have questions about flox
we invite you to join flox discourse where we can answer all the flox-specific questions, bug reports, and suggestions. All the feedback is much appreciated, even if flox
is still in beta and a lot of work is still ahead of us.
If you believe in our mission, values and that Nix will prevail, then consider joining us.
Let us know what you think about flox either directly or by Twitter or Matrix.
Ask us anything.