# Noir Language Documentation > The Universal ZK Circuit Language This file contains links to documentation sections following the llmstxt.org standard. ## Table of Contents - [Getting Started Manually](https://noir-lang.org/docs/getting_started_manually): Create and run your first Noir project manually. - [Getting Started with AI](https://noir-lang.org/docs/getting_started_with_ai): Create and run your first Noir project using an AI agent. - [Building a web app with Noir and Barretenberg](https://noir-lang.org/docs/guides/building_a_web_app): Learn how to setup a new app that uses Noir to generate and verify zero-knowledge SNARK proofs in a typescript or javascript environment. - [Using the REPL Debugger](https://noir-lang.org/docs/guides/debugging/debugging_with_the_repl): Step-by-step guide on how to debug your Noir circuits with the REPL Debugger. - [Using the VS Code Debugger](https://noir-lang.org/docs/guides/debugging/debugging_with_vs_code): Step-by-step guide on how to debug your Noir circuits with the VS Code Debugger configuration and features. - [How to use Oracles](https://noir-lang.org/docs/guides/how_to_use_oracles): Learn how to use oracles in your Noir program with examples in both Nargo and NoirJS. This guide also covers writing a JSON RPC server and providin... - [Oracles](https://noir-lang.org/docs/guides/oracles): This guide provides an in-depth understanding of how Oracles work in Noir programming. Learn how to use outside calculations in your programs, cons... - [Thinking in Circuits](https://noir-lang.org/docs/guides/thinking_in_circuits): Considerations when writing Noir programs - [Noir](https://noir-lang.org/docs/): Noir is an open-source, Rust-influenced domain-specific language for writing privacy-preserving programs with zero-knowledge proofs, requiring no p... - [Installation](https://noir-lang.org/docs/installation): There are different ways to install Nargo, the one-stop shop and command-line tool for developing Noir programs. This guide explains how to specify... - [Assert Function](https://noir-lang.org/docs/language/assert): Learn about the `assert` and `static_assert` functions in Noir, which can be used to explicitly constrain the predicate or comparison expression th... - [Attributes](https://noir-lang.org/docs/language/attributes): Learn how to use attributes in Noir. Attributes are metadata that can be applied to data types, functions and variables. - [Comments](https://noir-lang.org/docs/language/comments): Learn how to write comments in Noir programming language. A comment is a line of code that is ignored by the compiler, but it can be read by progra... - [Compile-time Code & Metaprogramming](https://noir-lang.org/docs/language/comptime): Learn how to use metaprogramming in Noir to create macros or derive your own traits - [Control Flow](https://noir-lang.org/docs/language/control_flow): Learn how to use loops and if expressions in the Noir programming language. Discover the syntax and examples for for loops and if-else statements. - [Data Bus](https://noir-lang.org/docs/language/data_bus): Use call_data and return_data to enable a backend optimization for more efficient recursion, with examples and constraints. - [Arrays](https://noir-lang.org/docs/language/data_types/arrays): Dive into the Array data type in Noir. Grasp its methods, practical examples, and best practices for efficiently using Arrays in your Noir code. - [Booleans](https://noir-lang.org/docs/language/data_types/booleans): Delve into the Boolean data type in Noir. Understand its methods, practical examples, and best practices for using Booleans in your Noir programs. - [Type Casting and Coercions](https://noir-lang.org/docs/language/data_types/coercions): Noir's explicit type casts and implicit type coercions - [Fields](https://noir-lang.org/docs/language/data_types/fields): Dive deep into the Field data type in Noir. Understand its methods, practical examples, and best practices to effectively use Fields in your Noir p... - [Function types](https://noir-lang.org/docs/language/data_types/function_types): Define and use function types for higher‑order functions in Noir, including syntax, examples, and notes on closures. - [Data Types](https://noir-lang.org/docs/language/data_types): Get a clear understanding of the two categories of Noir data types - primitive types and compound types. Learn about their characteristics, differe... - [Integers](https://noir-lang.org/docs/language/data_types/integers): Explore the Integer data type in Noir. Learn about its methods, see real-world examples, and grasp how to efficiently use Integers in your Noir code. - [References](https://noir-lang.org/docs/language/data_types/references): Learn about reference types in Noir, including immutable references (&T) and mutable references (&mut T). - [Strings](https://noir-lang.org/docs/language/data_types/strings): Discover the String data type in Noir. Learn about its methods, see real-world examples, and understand how to effectively manipulate and use Strin... - [Structs](https://noir-lang.org/docs/language/data_types/structs): Explore the Struct data type in Noir. Learn about its methods, see real-world examples, and grasp how to effectively define and use Structs in your... - [Tuples](https://noir-lang.org/docs/language/data_types/tuples): Dive into the Tuple data type in Noir. Understand its methods, practical examples, and best practices for efficiently using Tuples in your Noir code. - [Vectors](https://noir-lang.org/docs/language/data_types/vectors): Explore the Vector data type in Noir. Understand its methods, see real-world examples, and learn how to effectively use Vectors in your Noir programs. - [Functions](https://noir-lang.org/docs/language/functions): Learn how to declare functions and methods in Noir, a programming language with Rust semantics. This guide covers parameter declaration, return typ... - [Generics](https://noir-lang.org/docs/language/generics): Learn how to use Generics in Noir - [Global Variables](https://noir-lang.org/docs/language/globals): Learn about global variables in Noir. Discover how to declare, modify, and use them in your programs. - [Lambdas](https://noir-lang.org/docs/language/lambdas): Learn how to use anonymous functions in Noir programming language. - [Mutability](https://noir-lang.org/docs/language/mutability): Learn about mutable variables in Noir. Discover how to declare, modify, and use them in your programs. - [Logical Operations](https://noir-lang.org/docs/language/ops): Learn about the supported arithmetic and logical operations in the Noir programming language. Discover how to perform operations on private input t... - [Oracles](https://noir-lang.org/docs/language/oracles): Dive into how Noir supports Oracles via RPC calls, and learn how to declare an Oracle in Noir with our comprehensive guide. - [Shadowing](https://noir-lang.org/docs/language/shadowing): Rebind variables with the same name to derive new values, enabling ergonomic "temporary mutability" patterns in Noir. - [Traits](https://noir-lang.org/docs/language/traits): Traits in Noir can be used to abstract out a common interface for functions across several data types. - [Unconstrained Functions](https://noir-lang.org/docs/language/unconstrained): Learn about what unconstrained functions in Noir are, how to use them and when you'd want to. - [Black Box Functions](https://noir-lang.org/docs/libraries/standard_library/black_box_fns): Black box functions are functions in Noir that rely on backends implementing support for specialized constraints. - [Bn254 Field Library](https://noir-lang.org/docs/libraries/standard_library/bn254): Optimized helpers for bn254 Fr—fast comparisons and decomposition tailored for Noir’s standard library. - [Bounded Vectors](https://noir-lang.org/docs/libraries/standard_library/containers/boundedvec): Growable vectors with a fixed maximum length; safer and more efficient than vectors, with rich methods for access and mutation. - [UHashMap](https://noir-lang.org/docs/libraries/standard_library/containers/uhashmap): A growable key–value map with a generic hasher. - [Ciphers](https://noir-lang.org/docs/libraries/standard_library/cryptographic_primitives/ciphers): Learn about the implemented ciphers ready to use for any Noir project - [Scalar multiplication](https://noir-lang.org/docs/libraries/standard_library/cryptographic_primitives/embedded_curve_ops): See how you can perform scalar multiplication in Noir - [Hash methods](https://noir-lang.org/docs/libraries/standard_library/cryptographic_primitives/hashes): Learn about the cryptographic primitives ready to use for any Noir project - [Cryptographic Primitives](https://noir-lang.org/docs/libraries/standard_library/cryptographic_primitives): Learn about the cryptographic primitives ready to use for any Noir project - [Signatures](https://noir-lang.org/docs/libraries/standard_library/cryptographic_primitives/signatures): Learn about signature verification in Noir, including the standard library's ECDSA verification over the secp256k1 and secp256r1 curves and signatu... - [fmtstr](https://noir-lang.org/docs/libraries/standard_library/fmtstr): Format string literals at compile time—inspect raw contents or emit quoted strings for macro generation. - [Is Unconstrained Function](https://noir-lang.org/docs/libraries/standard_library/is_unconstrained): The is_unconstrained function returns whether the context at that point of the program is unconstrained or not. - [Logging and Panics](https://noir-lang.org/docs/libraries/standard_library/logging): Learn how to use the println statement for debugging in Noir with this tutorial. Understand the basics of logging in Noir and how to implement it i... - [Memory Module](https://noir-lang.org/docs/libraries/standard_library/mem): This module contains functions which manipulate memory in a low-level way - [CtString](https://noir-lang.org/docs/libraries/standard_library/meta/ctstring): Compile-time, dynamically sized strings for `comptime`—build, append, and emit quoted string literals. - [Expr](https://noir-lang.org/docs/libraries/standard_library/meta/expr): Introspect and transform quoted expressions at compile time—inspect structure, resolve types, and modify sub-expressions. - [FunctionDefinition](https://noir-lang.org/docs/libraries/standard_library/meta/function_def): Inspect and mutate function definitions in `comptime`—read signatures, body, attributes, and adjust parameters or return types. - [Metaprogramming](https://noir-lang.org/docs/libraries/standard_library/meta): Noir's Metaprogramming API - [Location](https://noir-lang.org/docs/libraries/standard_library/meta/location): A source location at compile time, used to attach diagnostics (errors and warnings) to specific items or expressions. - [Module](https://noir-lang.org/docs/libraries/standard_library/meta/module): Work with modules in `comptime`—query names, list functions/structs, detect contracts, and add new items. - [UnaryOp and BinaryOp](https://noir-lang.org/docs/libraries/standard_library/meta/op): Represent and inspect operators at compile time—check kinds, and emit quoted operator tokens. - [Quoted](https://noir-lang.org/docs/libraries/standard_library/meta/quoted): Token streams produced by `quote { ... }`—parse as expressions, modules, types, and inspect raw tokens. - [TraitConstraint](https://noir-lang.org/docs/libraries/standard_library/meta/trait_constraint): Represent trait constraints at compile time for searching and matching trait implementations. - [TraitDefinition](https://noir-lang.org/docs/libraries/standard_library/meta/trait_def): Work with trait definitions at compile time—convert to trait constraints and inspect basic properties. - [TraitImpl](https://noir-lang.org/docs/libraries/standard_library/meta/trait_impl): Inspect concrete trait implementations—list methods and read trait generic arguments in `comptime`. - [Type](https://noir-lang.org/docs/libraries/standard_library/meta/typ): Represent and analyze types at compile time—query structure, check trait bounds, and resolve trait impls. - [TypeDefinition](https://noir-lang.org/docs/libraries/standard_library/meta/type_def): Inspect and transform struct/enum type definitions—fields, generics, attributes, and module context. - [TypedExpr](https://noir-lang.org/docs/libraries/standard_library/meta/typed_expr): Resolved, type-checked expressions—retrieve types, access referenced function definitions, and more. - [UnresolvedType](https://noir-lang.org/docs/libraries/standard_library/meta/unresolved_type): Work with the syntactic form of types—inspect references, vectors, and primitive kind checks before resolution. - [Option Type](https://noir-lang.org/docs/libraries/standard_library/options): Express presence or absence safely with `Option`—construct, inspect, and transform values without nulls. - [Recursive Proofs](https://noir-lang.org/docs/libraries/standard_library/recursion): Learn about how to write recursive proofs in Noir. - [Traits](https://noir-lang.org/docs/libraries/standard_library/traits): Noir's stdlib provides a few commonly used traits. - [Crates and Packages](https://noir-lang.org/docs/project_structure/crates_and_packages): Learn how to use Crates and Packages in your Noir project - [Dependencies](https://noir-lang.org/docs/project_structure/dependencies): Learn how to specify and manage dependencies in Nargo, allowing you to upload packages to GitHub and use them easily in your project. - [Modules](https://noir-lang.org/docs/project_structure/modules): Learn how to organize your files using modules in Noir, following the same convention as Rust's module system. Examples included. - [Workspaces](https://noir-lang.org/docs/project_structure/workspaces): Manage multiple related Noir packages in a single repository with a shared workspace, including members, default-member, and command scoping. - [Class: Noir](https://noir-lang.org/docs/reference/NoirJS/noir_js/classes/Noir): ```ts - [noir_js](https://noir-lang.org/docs/reference/NoirJS/noir_js): | Class | Description | - [Type Alias: ErrorWithPayload](https://noir-lang.org/docs/reference/NoirJS/noir_js/type-aliases/ErrorWithPayload): ```ts - [Function: compile()](https://noir-lang.org/docs/reference/NoirJS/noir_wasm/functions/compile): ```ts - [Function: compile\_contract()](https://noir-lang.org/docs/reference/NoirJS/noir_wasm/functions/compile_contract): ```ts - [Function: inflateDebugSymbols()](https://noir-lang.org/docs/reference/NoirJS/noir_wasm/functions/inflateDebugSymbols): ```ts - [noir_wasm](https://noir-lang.org/docs/reference/NoirJS/noir_wasm): The compilation artifacts of a given contract. - [Nargo](https://noir-lang.org/docs/reference/nargo_commands): Noir CLI Commands for Noir Prover and Verifier to create, execute, prove and verify programs, generate Solidity verifier smart contract and compile... - [Known limitations](https://noir-lang.org/docs/tooling/debugger/debugger_known_limitations): An overview of known limitations of the current version of the Noir debugger - [REPL Debugger](https://noir-lang.org/docs/tooling/debugger/debugger_repl): Noir Debugger REPL options and commands. - [VS Code Debugger](https://noir-lang.org/docs/tooling/debugger/debugger_vscode): VS Code Debugger configuration and features. - [Debugger](https://noir-lang.org/docs/tooling/debugger): Learn about the Noir Debugger, in its REPL or VS Code versions. - [Dev Containers](https://noir-lang.org/docs/tooling/devcontainer): Learn how to set up and use Noir development environments with Dev Containers in VS Code and GitHub Codespaces. - [Fuzzer](https://noir-lang.org/docs/tooling/fuzzer): The Noir Fuzzer is a tool that allows you to fuzz your Noir programs. - [Language Server](https://noir-lang.org/docs/tooling/language_server): Learn about the Noir Language Server, how to install the components, and configuration that may be required. - [Noir Codegen for TypeScript](https://noir-lang.org/docs/tooling/noir_codegen): Learn how to use Noir codegen to generate TypeScript bindings - [Profiler](https://noir-lang.org/docs/tooling/profiler): Learn about the Noir Profiler, how to generate execution flamegraphs, identify bottlenecks, and visualize optimizations. - [Setting up shell completions](https://noir-lang.org/docs/tooling/shell_completions): Generate and install shell completion scripts for the nargo CLI in zsh, bash, fish, powershell, and elvish. - [Tests](https://noir-lang.org/docs/tooling/tests): Learn how to use Nargo to test your Noir program in a quick and easy way