- Notifications
You must be signed in to change notification settings - Fork10
Tvix - A Rust implementation of Nix. Read-only mirror ofhttps://code.tvl.fyi/tree/tvix
License
tvlfyi/tvix
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
Tvix is a new implementation of the Nix language and package manager. See theannouncement post for information about the background of thisproject.
Tvix is developed byTVL in our monorepo, thedepot
, at//tvix. Code reviews take place onGerrit, bugs arefiled inour issue tracker.
For more information about Tvix, feel free to reach out. We are interested inpeople who would like to help us review designs, brainstorm and describerequirements that we may not yet have considered.
Development discussion is focused around two IRC channels, which are alsoavailablevia XMPP andvia Matrix.
TVL runs the
#tvl
channel onhackint.Tvix-related discussion in this channel is focused on eval, and on (almost)1:1 replacements of C++ Nix with Rust components.The separate
#tvix-dev
channel (onMatrix) focuses on the content-addressed store model,innovating on the plain files approach used in C++ Nix.
There is also a low-trafficmailing list with occasional design discussions.
Contributions to Tvix follow the TVLreview flow andcontribution guidelines.
WARNING: Tvix is not ready for use in production. None of our current APIsshould be considered stable in any way.
WARNING: Any other instances of this project or repository arejosh
-mirrors. We do not accept code contributions or issues outside ofthe methods outlined above.
This folder contains the following components:
//tvix/boot
- tooling to boot MicroVMs off oftvix-[ca]store
//tvix/build
- a generic (Nix-unaware) builder protocol and various implementations//tvix/castore
- subtree storage/transfer in a content-addressed fashion//tvix/cli
- preliminary REPL & CLI implementation for Tvix//tvix/docs
- standalone documentation//tvix/eval
- an implementation of the Nix programming language//tvix/glue
- combines tvix-eval with tvix-[ca]store and tvix-build, implementation of build- and import-related builtins//tvix/nar-bridge
- a HTTP webserver providing a Nix HTTP Binary Cache interface in front of a tvix-store//tvix/nix-compat
- a Rust library for compatibility with C++ Nix, features like encodings and hashing schemes and formats//tvix/nix-daemon
- a Nix-compatible store daemon backed by Tvix//tvix/serde
- a Rust library for using the Nix language for app configuration//tvix/store
- a "filesystem" linking Nix store paths and metadata with the content-addressed layer//tvix/tracing
- unified library to configure logging, tracing, instrumentation and progress concerns
Some additional folders with auxiliary things exist and can be explored at yourleisure.
The CLI can also be built with standard Rust tooling (i.e.cargo build
),as long as you are in a shell with the right dependencies.
- If you cloned the full monorepo, it can be provided by
mg shell //tvix:shell
. - If you cloned the
tvix
workspace only(git clone https://code.tvl.fyi/depot.git:workspace=views/tvix.git
),nix-shell
provides it.
If you're in the TVL monorepo, you can also runmg build //tvix/cli
(ormg build
from inside that folder) for a more incremental build.
Please follow the depot-wide instructions on how to getmg
and use the depottooling.
Important note: We only use and test Nix builds of our softwareagainst Nix 2.3. There are a variety of bugs and subtle problems innewer Nix versions which we do not have the bandwidth to address,builds in newer Nix versions may or may not work.
Some parts of Tvix are written in Rust. To simplify the dependencymanagement on the Nix side of these builds, we usecrate2nix
in asingle Rust workspace in//tvix
to maintain the Nix buildconfiguration.
When making changes to Cargo dependency configuration in any of theRust projects under//tvix
, be sure to runmg run //tools:crate2nix-generate
in//tvix
itself and commit the changesto the generatedCargo.nix
file. This only applies to the full TVL checkout.
When adding/removing a Cargo feature for a crate, you will want to add it to thefeatures power set that gets tested in CI. For each crate there's a default.nix with amkFeaturePowerset
invocation, modify the list to include/remove the feature.Note that you don't want to add "collection" features, such asfs
for tvix-[ca]store ordefault
.
All code implemented for Tvix is licensed under the GPL-3.0, with theexception of the protocol buffer definitions used for communicationbetween services which are available under a more permissive license(MIT).
The idea behind this structure is that any direct usage of our code(e.g. linking to it, embedding the evaluator, etc.) will fall underthe terms of the GPL3, but users are free to implement their owncomponents speaking these protocols under the terms of the MITlicense.
About
Tvix - A Rust implementation of Nix. Read-only mirror ofhttps://code.tvl.fyi/tree/tvix