This page will help you understand what Toolforge is, some of its features, and how it is structured.
If you already know these basics, then you are ready to start developing tools! Visit the Toolforge Portal for more information.
Before you start
Before you can start using Toolforge to create and maintain tools, you'll need:
- An SSH client (like Putty or WinSCP or Linux command line)
- An understanding of Unix command line
What is Toolforge?
Toolforge is a hosting environment. Toolforge makes it easy for you to perform analytics, administer bots, run webservices, and create tools. Tools help project editors, technical contributors, and other volunteers who work on Wikimedia projects.
What is a tool?
Tools are software applications, web applications, gadgets, and bots that help people working on Wikimedia projects. Tools can do all kinds of tasks like helping editors discover quick tasks to do, making automatic edits, visualizing data, extracting metadata, and more.
What tools are hosted on Toolforge?
For a list of tools hosted on Toolforge, visit:
What are the main features of Toolforge?
- A supported hosting environment for tools, web services, continuous bots, and scheduled tasks
- Access to replicated production databases
- Shared management of tool accounts, where tools and bots are stored
- A grid engine for dispatching jobs
- Support for mosh, SSH, SFTP
- Version control via Gerrit and Git
- Support for Redis
- Support for Elasticsearch
How is Toolforge structured?
Toolforge is made up of four main parts: the bastion hosts, the grid, the web cluster, and the databases.
You can log in to Toolforge through a bastion host. There are two bastion hosts to choose from:
- user login to access tools interactively
- functionally identical, please use this for heavy processing such as compiles
Submitted jobs are added to a work queue, and the system finds a host to execute them. Jobs can be scheduled synchronously or asynchronously, continuously, or just once. If a continuous job fails, the grid will automatically restart the job, so that it keeps going.
The web cluster
The Toolforge web cluster is fronted by a web proxy, which supports SSL and is open to the Internet. The proxy distributes web requests among the web servers in this cluster. Any server in this web cluster can serve any of the hosted web tools, because Toolforge uses a shared storage system.
Each tool has its own lighttpd Web server, with full configuration options. FCGI scripts are supported with configuration options, and WSGI is supported using flup.server.fcgi.
Toolforge supports two sets of databases: the wiki replicas and user-created databases, which are used by individual tools. The wiki replicas follow the same setup as production wiki databases, and the information that can be accessed from them is the same as that which normal registered users (i.e.: not +sysop or other types of advanced permissions) can access on-wiki or via the API.
Note: some data has been removed from the replicas for privacy reasons. User-created databases can be created by either a user or a tool on the wiki replica servers or on a local ‘tools’ project database.
Rules of use
Individual wiki policies
Each wiki has its own guidelines and procedures. When developing on Toolforge, please follow the bot policies of the wikis your bot will interact with.
For general information and guidelines, see Bot policy.
Communication and support
We communicate and provide support through several primary channels. Please reach out with questions and to join the conversation.
|Phabricator Workboard||#Cloud-Services||Task tracking and bug reporting|
|IRC Channel||#wikimedia-cloud connect
|General discussion and support|
|Mailing List||cloud@||Information about ongoing initiatives, general discussion and support|
|Announcement emails||cloud-announce@||Information about critical changes (all messages mirrored to cloud@)|
|News wiki page||News||Information about major near-term plans|
|Cloud Services Blog||Clouds & Unicorns||Learning more details about some of our work|
|Wikimedia Technology Blog||techblog.wikimedia.org||News and stories from the Wikimedia technical movement|