Crate mwbot

source ·
Expand description

A MediaWiki bot and tool framework

mwbot aims to provide a batteries-included framework for building bots and tools for MediaWiki wikis. It builds on top of the mwapi and parsoid crates, which offer lower-level APIs.



Create a ~/.config/mwbot.toml file with the following structure:

api_url = ""
rest_url = ""

If want to authenticate, add an auth section:

username = "Example"
oauth2_token = "[...]"

See the OAuth documentation for how to get an OAuth 2 token. Using an owner-only consumer is the easiest way to do so.

§Reading a page

let bot = mwbot::Bot::from_default_config().await.unwrap();
let page ="Rust (programming language)")?;
let html = page.html().await?.into_mutable();
// The lead section is the second p tag in the first section
let lead ="section > p")[1].text_contents();
assert!(lead.starts_with("Rust is a multi-paradigm, general-purpose programming language"));

Using Bot::from_default_config() will look in the current directory for mwbot.toml before looking in the user’s config directory. A custom path can be specified by using Bot::from_config(...).

§Editing a page

let bot = mwbot::Bot::from_default_config().await.unwrap();
let page ="Project:Sandbox")?;
let wikitext = "This is a test edit!";, &SaveOptions::summary("test edit!")).await?; accepts both HTML and wikitext and supports the {{nobots}} exclusion mechanism, among other features.

§Next steps

Try using one of the offered page generators to fetch and operate on multiple pages.


mwbot is the flagship crate of the mwbot-rs project. We’re always looking for new contributors, please reach out if you’re interested!


  • pub use mwtimestamp as timestamp;
  • pub use parsoid;



  • API Client
  • Main bot class
  • Build a mwbot::Bot instance programmatically
  • A Page represents a wiki page on a specific wiki (Bot). You can get metadata about a page, its contents (in HTML or wikitext) and edit the page.
  • Extra options for saving pages
  • Represents a MediaWiki title. A title can be broken down into the following attributes: [[interwiki:ns:db_key#fragment]].
  • The TitleCodec is responsible for parsing, normalizing and formatting Titles. See the crate-level documentation for an example of how to construct one.



  • Setup logging, can be adjusted by setting the RUST_LOG environment variable.

Type Aliases§