CINXE.COM
Learn with tutorials - Wikimedia Developer Portal
<!doctype html> <html lang="en" class="no-js"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width,initial-scale=1"> <meta name="description" content="Find technical documentation, and connect with Wikimedia developer communities."> <meta name="author" content="Wikimedia Foundation and contributors"> <link rel="canonical" href="https://developer.wikimedia.org/get-started/tutorials/"> <link rel="prev" href="../new-dev/"> <link rel="next" href="../browse-languages/"> <link rel="icon" href="../../assets/favicon.png"> <meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.5.39"> <title>Learn with tutorials - Wikimedia Developer Portal</title> <link rel="stylesheet" href="../../assets/stylesheets/main.8c3ca2c6.min.css"> <link rel="stylesheet" href="../../assets/stylesheets/palette.06af60db.min.css"> <link rel="stylesheet" href="../../assets/stylesheets/theme.css"> <script>__md_scope=new URL("../..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script> <meta property="og:type" content="website" /> <meta property="og:title" content="Wikimedia Developer Portal - Learn with tutorials" /> <meta property="og:description" content="Find technical documentation, and connect with Wikimedia developer communities." /> <meta property="og:url" content="https://developer.wikimedia.org/get-started/tutorials/" /> <meta property="og:image" content="https://developer.wikimedia.org/get-started/tutorials/assets/wikimedia.png" /> <meta property="og:image:type" content="image/png" /> <meta property="og:image:width" content="395" /> <meta property="og:image:height" content="310" /> <meta name="twitter:card" content="summary"> <meta name="twitter:title" content="Wikimedia Developer Portal - Learn with tutorials" /> <meta name="twitter:description" content="Find technical documentation, and connect with Wikimedia developer communities." /> <meta name="twitter:image" content="https://developer.wikimedia.org/get-started/tutorials/assets/wikimedia.png"> </head> <body dir="ltr" data-md-color-scheme="default" data-md-color-primary="indigo" data-md-color-accent="indigo"> <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off"> <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off"> <label class="md-overlay" for="__drawer"></label> <div data-md-component="skip"> <a href="#tutorials-for-using-content-and-data" class="md-skip"> Skip to content </a> </div> <div data-md-component="announce"> </div> <header class="md-header md-header--shadow md-header--lifted" data-md-component="header"> <nav class="md-header__inner md-grid" aria-label="Header"> <a href="/" title="Wikimedia Developer Portal" class="md-header__button md-logo" aria-label="Wikimedia Developer Portal" data-md-component="logo"> <img src="../../assets/wikimedia.svg" alt="Wikimedia logo" /> </a> <label class="md-header__button md-icon" for="__drawer"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"/></svg> </label> <div class="md-header__title" data-md-component="header-title"> <div class="md-header__ellipsis"> <div class="md-header__topic"> <span class="md-ellipsis"> Wikimedia Developer Portal </span> </div> <div class="md-header__topic" data-md-component="header-topic"> <span class="md-ellipsis"> Learn with tutorials </span> </div> </div> </div> <form class="md-header__option" data-md-component="palette"> <input class="md-option" data-md-color-media="(prefers-color-scheme: light)" data-md-color-scheme="default" data-md-color-primary="indigo" data-md-color-accent="indigo" aria-label="Switch to dark mode" type="radio" name="__palette" id="__palette_0"> <label class="md-header__button md-icon" title="Switch to dark mode" for="__palette_1" hidden> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17 7H7a5 5 0 0 0-5 5 5 5 0 0 0 5 5h10a5 5 0 0 0 5-5 5 5 0 0 0-5-5m0 8a3 3 0 0 1-3-3 3 3 0 0 1 3-3 3 3 0 0 1 3 3 3 3 0 0 1-3 3"/></svg> </label> <input class="md-option" data-md-color-media="(prefers-color-scheme: dark)" data-md-color-scheme="slate" data-md-color-primary="indigo" data-md-color-accent="indigo" aria-label="Switch to light mode" type="radio" name="__palette" id="__palette_1"> <label class="md-header__button md-icon" title="Switch to light mode" for="__palette_0" hidden> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17 6H7c-3.31 0-6 2.69-6 6s2.69 6 6 6h10c3.31 0 6-2.69 6-6s-2.69-6-6-6m0 10H7c-2.21 0-4-1.79-4-4s1.79-4 4-4h10c2.21 0 4 1.79 4 4s-1.79 4-4 4M7 9c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3"/></svg> </label> </form> <script>var palette=__md_get("__palette");if(palette&&palette.color){if("(prefers-color-scheme)"===palette.color.media){var media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']");palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent")}for(var[key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <div class="md-header__option"> <div class="md-select"> <button class="md-header__button md-icon" aria-label="Select language"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="m12.87 15.07-2.54-2.51.03-.03A17.5 17.5 0 0 0 14.07 6H17V4h-7V2H8v2H1v2h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2zm-2.62 7 1.62-4.33L19.12 17z"/></svg> </button> <div class="md-select__inner"> <ul class="md-select__list"> <li class="md-select__item"> <a href="/de/get-started/tutorials/" hreflang="de" class="md-select__link"> Deutsch </a> </li> <li class="md-select__item"> <a href="/get-started/tutorials/" hreflang="en" class="md-select__link"> English </a> </li> <li class="md-select__item"> <a href="/en-gb/get-started/tutorials/" hreflang="en-gb" class="md-select__link"> English (United Kingdom) </a> </li> <li class="md-select__item"> <a href="/es/get-started/tutorials/" hreflang="es" class="md-select__link"> Español </a> </li> <li class="md-select__item"> <a href="/fr/get-started/tutorials/" hreflang="fr" class="md-select__link"> Français </a> </li> <li class="md-select__item"> <a href="/lb/get-started/tutorials/" hreflang="lb" class="md-select__link"> Lëtzebuergesch </a> </li> <li class="md-select__item"> <a href="/nl/get-started/tutorials/" hreflang="nl" class="md-select__link"> Nederlands </a> </li> <li class="md-select__item"> <a href="/pl/get-started/tutorials/" hreflang="pl" class="md-select__link"> Polski </a> </li> <li class="md-select__item"> <a href="/pt-br/get-started/tutorials/" hreflang="pt-br" class="md-select__link"> Português (Brasil) </a> </li> <li class="md-select__item"> <a href="/sl/get-started/tutorials/" hreflang="sl" class="md-select__link"> Slovenščina </a> </li> <li class="md-select__item"> <a href="/sh-latn/get-started/tutorials/" hreflang="sh-latn" class="md-select__link"> Srpski (Latinica) </a> </li> <li class="md-select__item"> <a href="/fi/get-started/tutorials/" hreflang="fi" class="md-select__link"> Suomi </a> </li> <li class="md-select__item"> <a href="/tr/get-started/tutorials/" hreflang="tr" class="md-select__link"> Türkçe </a> </li> <li class="md-select__item"> <a href="/mk/get-started/tutorials/" hreflang="mk" class="md-select__link"> Македонски </a> </li> <li class="md-select__item"> <a href="/ru/get-started/tutorials/" hreflang="ru" class="md-select__link"> Русский </a> </li> <li class="md-select__item"> <a href="/he/get-started/tutorials/" hreflang="he" class="md-select__link"> עברית </a> </li> <li class="md-select__item"> <a href="/ar/get-started/tutorials/" hreflang="ar" class="md-select__link"> العربية </a> </li> <li class="md-select__item"> <a href="/bn/get-started/tutorials/" hreflang="bn" class="md-select__link"> বাংলা </a> </li> <li class="md-select__item"> <a href="/zh-hans/get-started/tutorials/" hreflang="zh-hans" class="md-select__link"> 中文(简体) </a> </li> <li class="md-select__item"> <a href="/zh-hant/get-started/tutorials/" hreflang="zh-hant" class="md-select__link"> 中文(繁體) </a> </li> <li class="md-select__item"> <a href="/ja/get-started/tutorials/" hreflang="ja" class="md-select__link"> 日本語 </a> </li> <li class="md-select__item"> <a href="/ko/get-started/tutorials/" hreflang="ko" class="md-select__link"> 한국어 </a> </li> </ul> </div> </div> </div> <label class="md-header__button md-icon" for="__search"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg> </label> <div class="md-search" data-md-component="search" role="dialog"> <label class="md-search__overlay" for="__search"></label> <div class="md-search__inner" role="search"> <form class="md-search__form" name="search"> <input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required> <label class="md-search__icon md-icon" for="__search"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg> </label> <nav class="md-search__options" aria-label="Search"> <a href="javascript:void(0)" class="md-search__icon md-icon" title="Share" aria-label="Share" data-clipboard data-clipboard-text="" data-md-component="search-share" tabindex="-1"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7s-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91s2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08"/></svg> </a> <button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/></svg> </button> </nav> </form> <div class="md-search__output"> <div class="md-search__scrollwrap" tabindex="0" data-md-scrollfix> <div class="md-search-result" data-md-component="search-result"> <div class="md-search-result__meta"> Initializing search </div> <ol class="md-search-result__list" role="presentation"></ol> </div> </div> </div> </div> </div> </nav> <nav class="md-tabs" aria-label="Tabs" data-md-component="tabs"> <div class="md-grid"> <ul class="md-tabs__list"> <li class="md-tabs__item md-tabs__item--active"> <a href="../" class="md-tabs__link"> Get started </a> </li> <li class="md-tabs__item"> <a href="../../use-content/" class="md-tabs__link"> Use content and data </a> </li> <li class="md-tabs__item"> <a href="../../build-tools/" class="md-tabs__link"> Tools and bots </a> </li> <li class="md-tabs__item"> <a href="../../contribute/" class="md-tabs__link"> Contribute </a> </li> <li class="md-tabs__item"> <a href="../../community/" class="md-tabs__link"> Community </a> </li> <li class="md-tabs__item"> <a href="../../get-help/" class="md-tabs__link"> Get help </a> </li> </ul> </div> </nav> </header> <div class="md-container" data-md-component="container"> <main class="md-main" data-md-component="main"> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" > <div class="md-sidebar__scrollwrap"> <div class="md-sidebar__inner"> <nav class="md-nav md-nav--primary md-nav--lifted md-nav--integrated" aria-label="Navigation" data-md-level="0"> <label class="md-nav__title" for="__drawer"> <a href="/" title="Wikimedia Developer Portal" class="md-nav__button md-logo" aria-label="Wikimedia Developer Portal" data-md-component="logo"> <img src="../../assets/wikimedia.svg" alt="Wikimedia logo" /> </a> Wikimedia Developer Portal </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_1" checked> <div class="md-nav__link md-nav__container"> <a href="../" class="md-nav__link "> <span class="md-ellipsis"> Get started </span> </a> <label class="md-nav__link " for="__nav_1" id="__nav_1_label" tabindex=""> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_1_label" aria-expanded="true"> <label class="md-nav__title" for="__nav_1"> <span class="md-nav__icon md-icon"></span> Get started </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../wikimedia-tech/" class="md-nav__link"> <span class="md-ellipsis"> Learn about Wikimedia technology </span> </a> </li> <li class="md-nav__item"> <a href="../new-dev/" class="md-nav__link"> <span class="md-ellipsis"> Understand the development process </span> </a> </li> <li class="md-nav__item md-nav__item--active"> <input class="md-nav__toggle md-toggle" type="checkbox" id="__toc"> <label class="md-nav__link md-nav__link--active" for="__toc"> <span class="md-ellipsis"> Learn with tutorials </span> <span class="md-nav__icon md-icon"></span> </label> <a href="./" class="md-nav__link md-nav__link--active"> <span class="md-ellipsis"> Learn with tutorials </span> </a> <nav class="md-nav md-nav--secondary" aria-label="Table of contents"> <label class="md-nav__title" for="__toc"> <span class="md-nav__icon md-icon"></span> Table of contents </label> <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix> <li class="md-nav__item"> <a href="#tutorials-for-using-content-and-data" class="md-nav__link"> <span class="md-ellipsis"> Tutorials for using content and data </span> </a> </li> <li class="md-nav__item"> <a href="#tutorials-for-building-tools-and-bots" class="md-nav__link"> <span class="md-ellipsis"> Tutorials for building tools and bots </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item"> <a href="../browse-languages/" class="md-nav__link"> <span class="md-ellipsis"> Browse by programming language </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2" > <div class="md-nav__link md-nav__container"> <a href="../../use-content/" class="md-nav__link "> <span class="md-ellipsis"> Use content and data </span> </a> <label class="md-nav__link " for="__nav_2" id="__nav_2_label" tabindex="0"> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_2_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_2"> <span class="md-nav__icon md-icon"></span> Use content and data </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../use-content/featured-apps/" class="md-nav__link"> <span class="md-ellipsis"> Explore featured apps </span> </a> </li> <li class="md-nav__item"> <a href="../../use-content/tutorials/" class="md-nav__link"> <span class="md-ellipsis"> Learn with tutorials </span> </a> </li> <li class="md-nav__item"> <a href="../../use-content/content/" class="md-nav__link"> <span class="md-ellipsis"> Use wiki content </span> </a> </li> <li class="md-nav__item"> <a href="../../use-content/data/" class="md-nav__link"> <span class="md-ellipsis"> Access open data </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3" > <div class="md-nav__link md-nav__container"> <a href="../../build-tools/" class="md-nav__link "> <span class="md-ellipsis"> Tools and bots </span> </a> <label class="md-nav__link " for="__nav_3" id="__nav_3_label" tabindex="0"> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_3"> <span class="md-nav__icon md-icon"></span> Tools and bots </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../build-tools/search/" class="md-nav__link"> <span class="md-ellipsis"> Discover and share tools </span> </a> </li> <li class="md-nav__item"> <a href="../../build-tools/get-started/" class="md-nav__link"> <span class="md-ellipsis"> Get started </span> </a> </li> <li class="md-nav__item"> <a href="../../build-tools/tutorials/" class="md-nav__link"> <span class="md-ellipsis"> Learn with tutorials </span> </a> </li> <li class="md-nav__item"> <a href="../../build-tools/apis/" class="md-nav__link"> <span class="md-ellipsis"> Use APIs and data sources </span> </a> </li> <li class="md-nav__item"> <a href="../../build-tools/host-tools/" class="md-nav__link"> <span class="md-ellipsis"> Host tools on Wikimedia servers </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4" > <div class="md-nav__link md-nav__container"> <a href="../../contribute/" class="md-nav__link "> <span class="md-ellipsis"> Contribute </span> </a> <label class="md-nav__link " for="__nav_4" id="__nav_4_label" tabindex="0"> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_4_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_4"> <span class="md-nav__icon md-icon"></span> Contribute </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../contribute/overview/" class="md-nav__link"> <span class="md-ellipsis"> Learn how contributing works </span> </a> </li> <li class="md-nav__item"> <a href="../../contribute/by-topic/" class="md-nav__link"> <span class="md-ellipsis"> Contribute by topic </span> </a> </li> <li class="md-nav__item"> <a href="../../contribute/by-language/" class="md-nav__link"> <span class="md-ellipsis"> Contribute by programming language </span> </a> </li> <li class="md-nav__item"> <a href="../../contribute/search/" class="md-nav__link"> <span class="md-ellipsis"> Search all projects </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5" > <div class="md-nav__link md-nav__container"> <a href="../../community/" class="md-nav__link "> <span class="md-ellipsis"> Community </span> </a> <label class="md-nav__link " for="__nav_5" id="__nav_5_label" tabindex="0"> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_5_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_5"> <span class="md-nav__icon md-icon"></span> Community </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../community/events/" class="md-nav__link"> <span class="md-ellipsis"> Explore hackathons and events </span> </a> </li> <li class="md-nav__item"> <a href="../../community/communicate/" class="md-nav__link"> <span class="md-ellipsis"> Communicate with the tech community </span> </a> </li> <li class="md-nav__item"> <a href="../../community/grow/" class="md-nav__link"> <span class="md-ellipsis"> Learn and share technical skills </span> </a> </li> <li class="md-nav__item"> <a href="../../community/updates/" class="md-nav__link"> <span class="md-ellipsis"> Get tech project updates </span> </a> </li> <li class="md-nav__item"> <a href="../../community/tech-ops/" class="md-nav__link"> <span class="md-ellipsis"> Learn about Wikimedia technical operations </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_6" > <div class="md-nav__link md-nav__container"> <a href="../../get-help/" class="md-nav__link "> <span class="md-ellipsis"> Get help </span> </a> </div> <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_6_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_6"> <span class="md-nav__icon md-icon"></span> Get help </label> <ul class="md-nav__list" data-md-scrollfix> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-content" data-md-component="content"> <article class="md-content__inner md-typeset"> <h1>Learn with tutorials</h1> <p>Follow coding exercises with step-by-step guidance.</p> <h2 id="tutorials-for-using-content-and-data">Tutorials for using content and data<a class="headerlink" href="#tutorials-for-using-content-and-data" title="Permanent link">¶</a></h2> <p>Learn the basics of using Wikimedia content and data in your project.</p> <p><a class="md-button" href="../../use-content/tutorials/">Browse tutorials</a></p> <h2 id="tutorials-for-building-tools-and-bots">Tutorials for building tools and bots<a class="headerlink" href="#tutorials-for-building-tools-and-bots" title="Permanent link">¶</a></h2> <p>Learn the basics of writing code that interacts with Wikimedia projects.</p> <p><a class="md-button" href="../../build-tools/tutorials/">Browse tutorials</a></p> </article> </div> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type="button" class="md-top md-icon" data-md-component="top" hidden> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8z"/></svg> Back to top </button> </main> <footer class="md-footer"> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class="md-copyright"> <div class="md-copyright__highlight"> Copyright © Wikimedia Foundation and contributors </div> </div> <div class="footer-links"> <ul> <li><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Privacy_policy">Privacy policy</a></li> <li><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Terms_of_Use">Terms of Use</a></li> <li><a href="https://www.gnu.org/licenses/gpl-3.0.html">Code: GPL-3.0-or-later</a></li> <li><a href="https://creativecommons.org/licenses/by-sa/4.0/">Content: CC-BY-SA-4.0</a></li> <li><a href="https://www.mediawiki.org/wiki/Special:MyLanguage/Developer_Portal">About</a></li> <li><a href="https://www.mediawiki.org/wiki/Special:MyLanguage/Developer_Portal/Contribute">Contribute</a></li> </ul> </div> </div> </div> </footer> </div> <div class="md-dialog" data-md-component="dialog"> <div class="md-dialog__inner md-typeset"></div> </div> <script id="__config" type="application/json">{"base": "../..", "features": ["navigation.tabs", "navigation.tabs.sticky", "navigation.sections", "navigation.top", "search.share", "navigation.indexes", "toc.integrate"], "search": "../../assets/javascripts/workers/search.6ce7567c.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}}</script> <script src="../../assets/javascripts/bundle.525ec568.min.js"></script> <script src="../../assets/js/matomo.js"></script> </body> </html>