# Thirtyfour > Project resources: crate API https://docs.rs/thirtyfour/latest/thirtyfour/; repository examples https://github.com/stevepryde/thirtyfour/tree/main/thirtyfour/examples. ## Documentation - [Introduction](/thirtyfour/introduction.html): Project resources: crate API https://docs.rs/thirtyfour/latest/thirtyfour/; repository examples https://github.com/stevepryde/thirtyfour/tree/main/thirtyfour/examples. - [AI/LLM Quickstart](/thirtyfour/getting-started/ai-quickstart.html): Use this page as the compact source of truth when asking an AI coding tool to write `thirtyfour` automation. It keeps the reliable defaults in one place and links to the deeper documentation when a task needs more detail. - [Element Queries](/thirtyfour/features/queries.html): To find elements on a page, call `.query(...)` on a `WebDriver` or a `WebElement`. `query()` is the recommended way to locate elements: it knows how to wait for the element to appear, can describe what you were looking for in error messages, and lets you chain filters and alternatives until the query returns exactly what you want. - [Waiting For Element Changes](/thirtyfour/features/waiting.html): `ElementQuery` waits for an element to *appear*. `ElementWaiter` waits for an element you already have to reach a particular state — visible, clickable, gone, with certain text, etc. Reach for it whenever you've clicked something and need the page to settle before you continue. - [Components](/thirtyfour/features/components.html): When you automate a real web app, the same selectors and helper methods tend to show up over and over: "find the search bar," "click the submit button," "read the cart count." Without structure, that logic spreads across your code and gets brittle. **Components** let you wrap a piece of UI — a single button, a form, a whole page — in a Rust struct, attach methods to it, and then reuse it anywhere. - [WebDriver Manager](/thirtyfour/features/manager.html): `thirtyfour` automatically downloads and runs the appropriate webdriver binary (`chromedriver`, `geckodriver`, `msedgedriver`) for your installed browser, so you don't have to manage the driver process yourself. The simple form is `WebDriver::managed()`: - [Chrome DevTools Protocol](/thirtyfour/cdp/overview.html): **Chrome DevTools Protocol** (CDP) is the lower-level inspection and control API that Chromium-based browsers expose for debugging, profiling, and automation. It predates W3C WebDriver BiDi and only works on Chromium browsers (Chrome, Edge, Brave, Opera, …) — but it covers a large surface area that WebDriver itself doesn't, including network throttling, fine-grained DOM inspection, runtime JS evaluation with object handles, request interception, device emulation, and more. - [WebDriver BiDi](/thirtyfour/bidi/overview.html): **WebDriver BiDi** is the [W3C-standard][bidi-abstract] bidirectional protocol that succeeds parts of Chrome DevTools Protocol with a **cross-browser** equivalent. It runs over a WebSocket negotiated by the standard `webSocketUrl: true` capability on `New Session`, and both Chromium-based browsers (chromedriver ≥ 115) and Firefox (geckodriver ≥ 0.31) implement it today.