Note: Component overview, to understand a bit better how it's different / updates since the last talk / outlook on roadmap
---
## Structure
-<!-- .element: class="fragment" -->
**tvix-castore**, the granular data storage/syncing engine.
-<!-- .element: class="fragment" -->
**tvix-store**, the "Nix store implementation" on top of tvix-castore
-<!-- .element: class="fragment" -->
**nix-compat**, a library providing access to data formats, protocols and concepts
-<!-- .element: class="fragment" -->
**tvix-eval**, a bytecode interpreter evaluator and core Nix *language* concepts and builtins
-<!-- .element: class="fragment" -->
**tvix-build**, a generic builder interface
-<!-- .element: class="fragment" -->
**tvix-glue**, combines tvix-eval with tvix-[ca]store and tvix-build
Note: one big cargo workspace / go into detail later! / nix-compat: concepts like output path calculation, doesn't depend on tvix crates
tvix-eval: language concepts being Scopes, Thunks, Nix values, "core builtins"
----
![tvix-castore](./tvix-castore.png)
<!-- .element: class="r-stretch" -->
Note: Nix does do content addressing on a store path level, we're on a per-file/chunk in file. That model allows granular syncing and reuse of parts, which will speedup substitution/copying. Because everything is ca, it'll also allow decentralization and local p2p substitution. Think about everyone in the same room serving chunks. verified streaming.
----
![tvix-store](./tvix-store.png)
<!-- .element: class="r-stretch" -->
Note: track all metadata about store paths (think about the sqlite db), and link to castore instead of storing NAR. NarCalculation: this computation, is super nice to cache, as this info
never needs to expire, and is reconstructable in a pure CA manner.
----
![tvix-store](./nix-compat.png)
<!-- .element: class="r-stretch" -->
Note: kept as a somewhat separate library, Tvix "first consumer". But use from your code, it doesn't depend on Tvix bits. Regularly factoring out Nix concepts into this library
----
![tvix-eval](./tvix-eval.png)
<!-- .element: class="r-stretch" -->
Note: only includes basic builtins, like string manipulation, math, …. Other crates can bring their own builtins
----
![tvix-build](./tvix-build.png)
<!-- .element: class="r-stretch" -->
Note: Not aware of Nix, store paths etc. just flexible enough to express everything in there. Use it for your own build system!
----
![tvix-glue](./tvix-glue.png)
<!-- .element: class="r-stretch" -->
Note: connects the evaluator to store and builders
----
![nar-bridge](./nar-bridge.png)
<!-- .element: class="r-stretch" -->
Note: Example on how to use this: Nix HTTP binary cache lens into tvix-[ca]store, allows Nix to download from and push into. It renders NARs on-the-fly
---
## Updates
Rough overview. Check blog posts and `git log` for details!
----
## Updates (#1)
-<!-- .element: class="fragment" -->
Fixes on error catchability and context behaviour
-<!-- .element: class="fragment" -->
More compact Nix Value types (memory-wise)
-<!-- .element: class="fragment" -->
`tvix-cli` REPL global scope manipulation (assign variables and use them in next command)
-<!-- .element: class="fragment" -->
`firefox.outPath` and `pkgsCross.aarch64-multiplatform.firefox.outPath` correct and added to CI 🎉
Notes: catchability/context to align behaviour with nix / … / assign variables and use them in the next REPL command
----
## Updates (#2)
-<!-- .element: class="fragment" -->
OpenTelemetry integration, trace propagation throughout the entire stack
-<!-- .element: class="fragment" -->
more backends in tvix-[ca]store (`object_store`/`local fs`/`redb`/`bigtable`/…)
-<!-- .element: class="fragment" -->
nar-bridge RIIR, was deployed as a fetch-through cache for cache.nixos.org at Bornhack
-<!-- .element: class="fragment" -->
store composition/combinators
-<!-- .element: class="fragment" -->
wiring up of builds (without reference propagation yet, but reference scanning)
Notes: o11y already proven super helpful for debugging where time is spent / first version of composition / builds waiting on reference propagation
----
## Other Updates
-<!-- .element: class="fragment" -->
A lot of the tooling for `cache.nixos.org` usage / closure analysis making use of and contributing to `nix-compat` (`@edef`) 🎉
-<!-- .element: class="fragment" -->
"Replit using `tvix-[ca]store` and reporting 10x storage reduction" (`@cbrewster`) 🎉
-<!-- .element: class="fragment" -->
"Devenv is switching to Tvix" (Talk on Saturday 12:55, `@domenkozar`) 🎉
---
## Next steps (in no specific order):
-<!-- .element: class="fragment" -->
Test suite classification system, to decouple test cases from test runner and share with other Nix impls