diff --git a/README.md b/README.md
index 430b0032a..a64694c60 100644
--- a/README.md
+++ b/README.md
@@ -1,34 +1,33 @@
+
+
+
+
# powdr
[](https://matrix.to/#/#powdr:matrix.org)
[](https://twitter.com/powdr_labs)
-*powdr* is an extended polynomial identity (PIL) and zk-focused assembly (zkASM)
-language written in Rust, focused on modularity and excellent developer experience.
+> WARNING: This codebase is experimental and has not been audited. DO NOT USE FOR PRODUCTION!
-WARNING: This is a proof-of-concept implementation. It is missing many internal checks. DO NOT USE FOR PRODUCTION!
-
-## Basic Concept
+For detailed documentation please visit [the powdr book](https://docs.powdr.org/).
*powdr* is a toolkit that helps build zkVMs and similar proof frameworks.
It has two main components:
-- A polynomial identity language that allows you to define polynomial constraints, lookups, etc.
-- An extensible assembly language to perform dynamic executions.
+- powdr-asm: an extensible assembly IR language to perform dynamic executions.
+- powdr-PIL: a low level constraint language that allows you to define arithmetic constraints, lookups, etc.
Both frontend and backend are highly flexible.
As an example, *powdr* contains a frontend that enables you to write code in (no-std) Rust,
-which is compiled to RISCV, then to powdr-asm and finally to PIL.
+which is compiled to RISCV, then to powdr-asm and finally to powdr-PIL.
*powdr*-pil can be used to generate proofs using multiple backends, such as:
-- Halo2
-- eSTARKs: *powdr*-pil is fully compatible with the eSTARKS backend from Polygon Hermez,
- although not yet fully integrated in an automatic way.
-- Nova: ongoing work.
-- other STARKs: maybe?
+- Halo2: via [polyexen](https://github.com/Dhole/polyexen) and [snark-verifer](https://github.com/privacy-scaling-explorations/snark-verifier/)
+- eSTARK: via [Eigen's starky](https://github.com/0xEigenLabs/eigen-zkvm/)
+- SuperNova: ongoing work (https://github.com/powdr-labs/powdr/pull/453)
All stages are fully automatic, which means you do not need to write any
additional code for witness generation besides your Rust code. All witnesses
@@ -37,7 +36,7 @@ inferred, *powdr* can ensure that the system is not underconstrained, i.e.
there are no additional unwanted witnesses.
All artifacts from the compilation pipeline are human-readable. This means you
-can inspect the RISCV assembly files, the powdr-asm, and the PIL file.
+can inspect the RISCV assembly files, the powdr-asm IR, and the compiled PIL file.
The assembly language is designed to be extensible. This means that it does not have a single
native instruction. Instead, all instructions are user-defined and because of that,
@@ -45,10 +44,10 @@ it is easy to adapt *powdr* assembly to any VM.
### Notes on Efficiency
-Currently, the code is quite wasteful. It generates many unnecessary columns.
-The idea is to first see if automatic witness generation is possible in general.
-If this is confirmed, various optimizer stages will be built to reduce the
-column (and row) count automatically.
+The current focus of the project is VM support and developer experience. The
+compiler generates many unnecessary columns. We will soon start writing
+optimizer steps that should bring performance closer to existing production
+systems.
### Project structure
diff --git a/book/src/powdr_wires.png b/book/src/powdr_wires.png
new file mode 100644
index 000000000..2772f906e
Binary files /dev/null and b/book/src/powdr_wires.png differ