# wend > Symbolic, typed, invertible filesystem paths built from Python t-strings (3.14+). wend is a Python 3.14 library that builds filesystem paths as symbolic expressions from t-strings (PEP 750). One expression renders paths from values (`render`), reads values back out of a path (`match`) and finds the existing paths it describes (`glob`); it also carries conditions, relations to other paths, schemas, inference and lineage. Install with `pip install wend`. Each link below is the Markdown version of a page of https://lmmx.github.io/wend/. ## Start here - [Home](): Symbolic, typed, invertible filesystem paths built from Python t-strings (3.14+). ## Get started - [Installation](): Install wend with pip or uv: it needs Python 3.14 or later, has no dependencies, and has three optional extras. - [Quickstart](): Build a path expression, render it, match a path back to its values, find files with glob, and check a condition, in about ten minutes. ## Concepts - [How wend works](): The idea behind wend: an expression describes a path, and every feature is something done with that description. - [Expressions](): What a path expression records, and how P, T and / build one from literal text, parameters and t-strings. - [Parameters](): The four kinds of parameter, the type, choices and default a parameter declares, and why a value bound to a segment parameter cannot traverse. - [Operations](): Path operations on expressions: which are computed from structure, which wait for bindings, and which are rejected when the expression is built. - [Rendering and matching](): The two directions of an expression: render paths from bindings, and match paths back to verified, typed bindings. - [Relations](): How an expression keeps the paths it was built from: base, base_rel, child, sibling, cousin, rebase and under. - [Effects](): Which operations touch the filesystem, how conditions declare what a path must be when it is used, and what the checks do and do not guarantee. ## Guides - [Datasets and shards](): Declare a sharded dataset's layout once, render every shard path in bulk, list the shards that exist with glob, and find the missing ones. - [Pipeline steps](): Declare what a pipeline step reads and writes with requires and ensures, run it as a Step, and see what a second run and a failed run do. - [Mapping between trees](): Map source paths to output paths and back with a Lens, find the outputs that are stale or orphaned, and see why a lossless lens refuses two sources for one target. - [Untrusted input](): Build paths from values that come from outside the program: bind them to segment and SubPath parameters, keep path parameters under a base with Under, and know what the checks do not protect. - [Lineage and caching](): Explain how a path expression was derived, record which files each pipeline step made from which with a Ledger, find what is stale, and name cache entries after their inputs with content_key. - [Settings and anchors](): Declare an application's paths once with defaults, bind them from a settings object such as a dataclass, a Pydantic model or a named tuple, override with keywords, and start paths from the home, working and XDG directories. ## Integrations - [Pydantic](): Validate the path fields of a Pydantic model against a wend expression with PathOf: accept a path or its bindings, get a Match back, use conditions as validators, and read the errors. - [Polars](): Render an expression for every row of a Polars DataFrame with resolve_frame: what it validates, what it lowers to Polars, what it refuses, and the fallback with compile().many. ## API reference - [API reference](): wend's public API, module by module, generated from the docstrings. - [wend](): The wend package: building, resolving, matching and discovering path expressions. - [wend.anchors](): Anchors: the home directory, the working directory and the XDG base directories. - [wend.conditions](): Conditions a path must meet when it is realised, and their effects. - [wend.errors](): The exceptions wend raises, all subclasses of WendError. - [wend.fs](): The filesystem protocol that glob and infer use, with local and fsspec backends. - [wend.infer](): Infer path expressions from an existing directory tree. - [wend.schema](): Declare a directory layout as a schema of files and directories, and check trees against it. - [wend.lineage](): Lineage of expressions and of the files made from them. - [wend.query](): Queries over discovered paths, with filesystem predicates. - [wend.templates](): Ready-made path templates, such as numbered shards. - [wend.frame](): Vectorised resolution and matching of path columns with Polars. - [wend.pydantic](): Path fields for Pydantic models. ## Background - [Future Paths and wend](): How the five Future Paths essays map onto wend: what was built, what changed on the way, and what is still open. ## Optional - [Development](): The repository's layout, how to set up and test wend, the semantic contract and the tests that check it, and the conventions for commits and journal entries. - [Releasing](): How a wend release is made: the Deploy Release workflow bumps the version, tags it and starts CI on the tag, and CI publishes the package to PyPI with Trusted Publishing. - [Project history](): wend's development journal: how the dated entries are written and labelled, what each one records, and where to start reading. - [Documentation](): How wend's documentation site is built, checked, tested and published to GitHub Pages.