Skip to main content

mwlib - MediaWiki Parser and Utility Library

Overview

mwlib is a versatile library designed for parsing MediaWiki articles and converting them to various output formats. A notable application of mwlib is in Wikipedia's "Print/export" feature, where it is used to create PDF documents from Wikipedia articles.

Getting Started

Prerequisites

To build mwlib, ensure you have the following software installed:

  • Python (version 3.11 or 3.12)
  • Ploticus
  • re2c
  • Perl
  • Pillow / PyImage
  • ImageMagick
  • uv (Python package installer, faster alternative to pip)

Setup a virtual environment for Python 3.11 or 3.12 and activate it.

Installing uv

If you don't have uv installed, you can install it following the instructions at uv's official documentation.

For example, on Unix-like systems:

curl -LsSf https://astral.sh/uv/install.sh | sh

Or using pip:

pip install uv

Installing mwlib

To install all dependencies and the project, run:

$ make install

This will use uv to install all required dependencies.

To build the C extensions and install mwlib in development mode:

$ make build
$ make develop

Documentation

Please visit http://mwlib.readthedocs.org/en/latest/index.html for detailed documentation.

Configuration

OAuth2 Configuration

mwlib supports OAuth2 client_credentials flow for Wikipedia API access. This allows authenticated access to MediaWiki APIs that require OAuth2 authentication, while maintaining compatibility with wikis that don't use OAuth2.

OAuth2 Configuration Options

The following configuration options are available for OAuth2:

HTTP/2 Configuration Options

mwlib also supports HTTP/2 for improved performance:

  • http2.enabled: Whether to use HTTP/2 (default: True)
  • http2.auto_detect: Whether to auto-detect HTTP/2 support (default: True)

These configuration options can be set either through environment variables or in a configuration file (mwlib.ini or ~/.mwlibrc). The following table shows the mapping between configuration file options and their corresponding environment variables:

Config File Option Environment Variable Description
oauth2.client_id MWLIB_OAUTH2_CLIENT_ID OAuth2 client ID
oauth2.client_secret MWLIB_OAUTH2_CLIENT_SECRET OAuth2 client secret
oauth2.token_url MWLIB_OAUTH2_TOKEN_URL Token endpoint URL
oauth2.enabled MWLIB_OAUTH2_ENABLED Enable OAuth2 (true/false)
http2.enabled MWLIB_HTTP2_ENABLED Enable HTTP/2 (true/false)
http2.auto_detect MWLIB_HTTP2_AUTO_DETECT Auto-detect HTTP/2 support

Example configuration file (mwlib.ini):

[oauth2]
enabled=true
client_id=your-client-id
client_secret=your-client-secret

[http2]
auto_detect=true

Example Usage

You can also set the config parameters directly when instantiating MwApi:

from mwlib.network.sapi import MwApi

# Using OAuth2
api = MwApi(
    apiurl="https://en.wikipedia.org/w/api.php",
    use_oauth2=True
)

The recommended best practice, however, is to configure environment variables:

export MWLIB_OAUTH2_CLIENT_ID="your_client_id"
export MWLIB_OAUTH2_CLIENT_SECRET="your_client_secret"
export MWLIB_OAUTH2_ENABLED="True"

File Store Lookup for Image Description Pages

mwlib can look up image description pages (namespace 6) in a local SQLite file instead of fetching them from the remote MediaWiki API. This significantly reduces the number of API requests and bypasses Wikipedia rate limits for configured domains.

The data originates from the Wikimedia Enterprise API snapshot endpoint, which provides Wikipedia page data as NDJSON files. mw-file-store turns that snapshot into a SQLite file of pre-extracted metadata: templates (used for license checking), image dimensions, content URLs, and license information.

How it works

  1. During ZIP creation (mw-zip), image description page titles for configured domains (default: en.wikipedia.org) are batched and looked up in the file store.
  2. For pages found in the store, templates are stored locally and an early license check is performed — images that fail the license filter are never downloaded.
  3. Pages not found in the store fall back to the remote MediaWiki API.
  4. Non-configured domains (e.g., Commons) always use the remote API.

Configuration Options

Config File Option Environment Variable Default Description
filestore.path MWLIB_FILESTORE_PATH (unset) SQLite file to read; the lookup is off when unset
filestore.domains MWLIB_FILESTORE_DOMAINS en.wikipedia.org Comma-separated domains to route through the file store (wikis with the English File: namespace only)

Example environment variable configuration:

export MWLIB_FILESTORE_PATH="/data/file_pages.sqlite"
export MWLIB_FILESTORE_DOMAINS="en.wikipedia.org"

Or in a configuration file (mwlib.ini):

[filestore]
path=/data/file_pages.sqlite
domains=en.wikipedia.org

When no store is configured, or the file is missing or unreadable, mwlib falls back to the remote API automatically with no change in behavior. The file is re-opened whenever it is replaced, so a rebuild needs no restart.

Building the File Store

Use the mw-file-store command to download the Wikimedia Enterprise namespace 6 snapshot (about 2 GB) and build the SQLite file:

mw-file-store --path /data/file_pages.sqlite

# Rebuild even if the snapshot has not changed
mw-file-store --path /data/file_pages.sqlite --fresh

The build writes <path>.new and atomically renames it over <path>, so readers never see a partial file. A run whose snapshot matches the live file exits without downloading, and a new file with too few rows (or more than 10% fewer than the live one) is refused. --path defaults to MWLIB_FILESTORE_PATH.

This requires Wikimedia Enterprise API credentials:

export WME_USERNAME="your-username"
export WME_PASSWORD="your-password"

Docker Compose Setup

For users interested in setting up mwlib using Docker Compose, detailed instructions are available at Docker Compose documentation.

License

Copyright (c) 2007-2012 PediaPress GmbH

All rights reserved.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

  • Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.

  • Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.

  • Neither the name of PediaPress GmbH nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

.. _SpamBayes: http://spambayes.sourceforge.net/

Metadata

Release files for mwlib 0.19.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for mwlib 0.19.0
File Size Uploaded Provenance Actions
mwlib-0.19.0.tar.gz 5.2 MB With provenance Details for mwlib-0.19.0.tar.gz

Release files / mwlib-0.19.0.tar.gz

Download URL mwlib-0.19.0.tar.gz
Size 5.2 MB
Tags Source
SHA-256 checksum
How to use checksums
5a21a83636acb78b688eeb64ba6bbe7f6e1fa24648aa46939988a5336cbe5035
BLAKE2b-256 checksum
How to use checksums
6d75a357c6381695afa5bb3b98c143596f6a5f008fa088ed2d961436a1cd93e4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.13

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 30, 2026.

Transparency log

Security for mwlib 0.19.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 1 file in this release has been uploaded with provenance metadata.

Attestation for mwlib-0.19.0.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 30, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.19.0 This release

1 release file Full provenance

0.8.5.dev

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page