# rupa v0.1.0 - Table of Contents > A macro-less, serde-like schema library for Elixir. Schemas are plain data. ## Pages - [Rupa](readme.md) - [Changelog](changelog.md) ## Modules - The API - [Rupa](Rupa.md): A macro-less, serde-like schema library for Elixir. - [Rupa.Error](Rupa.Error.md): A structured error: where, what, and the few values the message needs. - [Rupa.Format](Rupa.Format.md): The built-in formats, and nothing else. - [Rupa.Gen](Rupa.Gen.md): StreamData generators built from a schema, for the round-trip property. - [Rupa.Json](Rupa.Json.md): The JSON edge: bytes in through OTP's `:json`, iodata out from the staged program. - [Rupa.JsonSchema](Rupa.JsonSchema.md): JSON Schema draft 2020-12, in both directions. - [Rupa.Schema](Rupa.Schema.md): The schema term: what it is, how to check one, and how to rewrite one. - [Rupa.T](Rupa.T.md): The constructors. Every one of them returns a plain term. - Exceptions - [Rupa.DecodeError](Rupa.DecodeError.md): Raised by `Rupa.decode!/3` when the data does not match the schema. - [Rupa.EncodeError](Rupa.EncodeError.md): Raised by `Rupa.encode!/3` when a value does not match the schema it is being encoded against. - [Rupa.SchemaError](Rupa.SchemaError.md): Raised by the bang variants when a schema is not well formed. - Inside - [Rupa.Closure](Rupa.Closure.md): The closure backend: `Rupa.IR` in, a tree of anonymous functions out. - [Rupa.Codec](Rupa.Codec.md): What `Rupa.compile/1` hands back: a staged schema and the decoder built from it. - [Rupa.Codegen](Rupa.Codegen.md): The module backend: `Rupa.IR` in, the AST of a module out. - [Rupa.Explain](Rupa.Explain.md): Renders a staged program as text, for `Rupa.explain/1`. - [Rupa.IR](Rupa.IR.md): The intermediate representation: what the staging pass turns a schema into. - [Rupa.Stage](Rupa.Stage.md): The staging pass: schema in, `Rupa.IR` out. ## Mix Tasks - [mix rupa.gen.struct](Mix.Tasks.Rupa.Gen.Struct.md): Writes the struct modules a schema's `into:` options name.