Rendered with Parsoid

Help talk:Toolforge

From Wikitech
(Redirected from Help talk:Tool Labs)
Latest comment: 6 months ago by Triciaburmeister in topic Improvements to the Toolforge docs navigation
Jump to navigation Jump to search
This talk page is not a Cloud VPS or Toolforge support forum. Contact information for Cloud VPS and Toolforge can be found at Help:Cloud Services communication.

Best practice hints

What I miss are best practice hints for two things:

  • How to publish code? Should we all use github? Or is gerrit the better way? A link to a small tutorial would be nice.
  • How to document a tool and how to communicate with the users. I can say, we use often a page inside Wikipedia because this was the easiest way for normal user to come in contact with us, we had an english version and mostly a version in our native language (German). Is it better to use the wikitech-wiki or the Mediawiki-wiki? Which wiki use "Single User Login".

Everybody should be free to go other ways but it would help if the majority use one way. --kolossos (talk) 10:04, 31 May 2013 (UTC)Reply[reply]

How to add and modify a description for an project

I want to add a description at the list of for one of my tools. How can I do this? --kolossos (talk) 10:04, 31 May 2013 (UTC)Reply[reply]

See Nova Resource:Tools/Help#Tool Labs's landing page. Anomie (talk) 13:18, 31 May 2013 (UTC)Reply[reply]
Thanks.--kolossos (talk) 15:27, 31 May 2013 (UTC)Reply[reply]

GUI tool for databasework

At the hackathon in Amsterdam it was mentioned to be possible to use an external GUI tool to interact with the database that runs on your own machine rather then to use PHPMyAdmin. What settings should be used for that?

Henna (talk) 11:21, 23 June 2013 (UTC)Reply[reply]

Basically, it's the same settings as at Toolserver, except that you replace with enwiki.labs (and with --Tim Landscheidt (talk) 12:21, 23 June 2013 (UTC)Reply[reply]

300-350M? Really?

I was tempted to add this to Nova Resource:Tools/Help#Why am I getting errors about must be installed for pthread_cancel to work?, but then I thought it might be too much detail so I decided to put it here for others to decide about.

Experiments in July 2013 with "do nothing for 60 seconds" scripts in various languages gave the following results:

Languageh_vmem neededCode

#include <unistd.h> int main(void){ return sleep(60); }

Lua14Mlocal clock = os.clock local t0 = clock() + 60 while clock() < t0 do end
Perl20Msleep 60;
Python30Mfrom time import sleep; sleep(60);
NodeJS750Mvar e = new Date().getTime() + 60000; while (new Date().getTime() <= e) {}

Of course, real scripts in most of these languages will load various modules/libaries and consequently have higher memory requirements. PHP may be somewhat of an exception here, as its 350M already includes a large number of such extensions (although any additional extensions or libraries (e.g. from PEAR) loaded would still increase the number). Anomie (talk) 02:21, 21 August 2013 (UTC)Reply[reply]

I also tried a simple Java program. But I must have been doing something wrong, because it complained that it didn't have enough memory until I gave it 3.2G. Anomie (talk) 02:21, 21 August 2013 (UTC)Reply[reply]
Java (un)helfully allocates most of its heap on startup; you can control that behavior with the -Xms and -Xmx command-line options.  Coren/Marc (talk) 22:55, 22 August 2013 (UTC)Reply[reply]
Specifying 32M for both of those options makes it slightly better. Now it "only" needs 1.2G. Anomie (talk) 13:11, 23 August 2013 (UTC)Reply[reply]
With jamvm, I can get a max heap space of 300M with "just" 750M. Shrinking the heap space doesn't help much anymore. Growing the availible space to 2750M allowed me to run with a max heap space of 2300M, so that at least seems to scale. Jamvm is installed on all nodes, and is called with -jamvm. Martijn Hoekstra (talk) 21:04, 15 October 2013 (UTC)Reply[reply]

Public tool database?

Can I create a database as a tool user that is visible to other tools? On toolserver, we did that by adding "_p" to the database name. Should be documented, even if it's "you can't do that here". --Magnus Manske (talk) 15:47, 22 August 2013 (UTC)Reply[reply]

It should indeed. You have two choices:
  1. We do keep to the "_p" convention, by default every database user has "SELECT on %_p.*" and so can read databases named that way; or
  2. Since users have all privileges on databases they are allowed to create (username__%) with grant option, you can grant the appropriate to any or all users with a GRANT statement.
 Coren/Marc (talk) 22:52, 22 August 2013 (UTC)Reply[reply]

Does 20% of this page really need to be about pywikipedia?

I know that pywikipedia is a popular tool, but it seems excessive for a fifth of this general help page to be about using it. At the moment and not counting the "TOCright" template, 16417 of 85463 bytes of wikitext (19.2%) and 230 of 1172 lines of wikitext (19.6%) are in the "Pywikipedia" section. Anomie (talk) 13:08, 3 September 2013 (UTC)Reply[reply]

Hosted jQuery etc.

Does Tool Labs offer hosted resources like jQuery? Tools like Pathoschild's important and friends started using e.g. on which means agreeing to -> -> i.e. to send all data to Google for any use. I block them so it's no big privacy issue for me, but it would be nice to fix. --Nemo 09:12, 10 September 2013 (UTC)Reply[reply]

Can we just load the appropriate files from or Anomie (talk) 17:16, 10 September 2013 (UTC)Reply[reply]
That would be ideal, but are they "free access"? Maybe they are and Pathoschild just didn't think about it. --Nemo 17:25, 10 September 2013 (UTC)Reply[reply]
As jQuery is available under the MIT licence, why pull it from other hosts at all and not just host it locally so that the tool developer has full control over it? After the first use of a tool by a user there shouldn't be a difference in caching. --Tim Landscheidt (talk) 01:24, 27 October 2013 (UTC)Reply[reply]
There are a number of very good reasons to prefer to avoid having umpteen different copies of jQuery (and others). We can't use the one in bits (it'd introduce a great deal of complications related to the resource loader) but it'd make a great deal of sense to have one available for all tools on our own infrastructure. I'll try to see if we can rely on our own caching servers for that but if not, I'll make a repository for shared browser objects like this for Tools.  Coren/Marc (talk) 16:12, 29 December 2013 (UTC)Reply[reply]
The static now hosts a variety of free software shared resources including Bootstrap and jQuery. --BryanDavis (talk) 05:56, 3 February 2016 (UTC)Reply[reply]

Naming of user-created databases

Do the user-created databases really have to start with some "random" string like "p50252g21636"? Why? Couldn't the database names be made more user-friendly, like using the normal user name? svick (talk) 12:34, 26 September 2013 (UTC)Reply[reply]

Because usernames are not unique across projects.  Coren/Marc (talk) 20:02, 15 October 2013 (UTC)Reply[reply]
So what about something like projectname_username? I think that would still be a big improvement over p50252g21636. Svick (talk) 20:21, 15 October 2013 (UTC)Reply[reply]
Potential for disallowed characters in the project or user names, probably. "p50252g21636" is more or less projectid_userid. Anomie (talk) 13:04, 16 October 2013 (UTC)Reply[reply]
The biggest issue is Mysql's hard-coded username length limit.  Coren/Marc (talk) 16:13, 29 December 2013 (UTC)Reply[reply]

Getting help

Hi. I am not sure where to post this so please let me know if there is a more appropriate place. As described in more detail here, I have gotten a Wikipedia template filler to work "internally" from the command line on the Tools Lab server, but I am having trouble accessing from an external web browser. I would be very grateful if someone with knowledge of perl and Tools Lab could help me. Thanks. Boghog (talk) 20:11, 27 October 2013 (UTC)Reply[reply]

The above mentioned problem is the inability of the perl cgi script to access a local library even though the library in question has world read and execute privileges. There is no mention of this on the help page. Any suggestions on how to get this to work would be greatly appreciated. Thanks. Boghog (talk) 12:02, 28 October 2013 (UTC)Reply[reply]

OK, I think I have solved most the problems. The key was to add the following to the cgi script. This made debugging the library much easier:
use CGI::Carp 'fatalsToBrowser';
Adding this single line gave some very useful feedback that indicated despite using cpanm for the installs, there were a still a few unfulfilled dependencies. After installing these missing modules, the script finally worked. I still need to get url and isbn options to work, but at least the most commonly used options now work. The link for running the tool is here: citation-template-filling. Boghog (talk) 15:57, 1 November 2013 (UTC)Reply[reply]

MySQL Workbench

MySQL Workbench doesn't work for me the way described. I always get the following error message: "Bad authentication type, the server is not accepting this type of authentication.". I'm using the same private key file which works for normal SSH access. Maybe this is something like . I wish I could just use phpMyAdmin... I'm really no friend of managing databases on command line. --APPER (talk) 19:07, 31 October 2013 (UTC)Reply[reply]

I now did the SSH tunneling using my SSH client and used MySQL Workbench only for the SQL stuff. --APPER (talk) 13:47, 2 November 2013 (UTC)Reply[reply]

submitting git update on a directory


I would like to run a git update everyday, but can't find how to submit it. My Pywikipedia repository is "/data/project/herculebot/pywikibot-compat/". I would like to run "git pull" on this directory with qsub. How to do so ?

--Hercule (talk) 21:27, 26 November 2013 (UTC)Reply[reply]

Schedule a cronjob to run a command along the lines of cd /data/project/herculebot/pywikibot-compat/ && /usr/local/bin/jsub -cwd -N git-pull /usr/bin/git pull. I haven't tested it, but that should be about right. If you really want to use qsub instead of jsub, see /usr/local/bin/jsub and work out what qsub command it winds up using. Anomie (talk) 14:53, 27 November 2013 (UTC)Reply[reply]

Impossible to submit Java program


I'm unable to run my Java script using jsub.

In the terminal, logged on tools.login I can run the following command line with no problem :

java -Xmx256M -Xms256M -jar /data/project/herculebot/Wikipedia.jar

When I edit my crontab, I add the following line :

54 * * * * cd /data/project/herculebot/ && /usr/local/bin/jsub -once -mem 256m -quiet -N Cacographies -j y java -Xmx256M -Xms256M -jar /data/project/herculebot/Wikipedia.jar

I always have the same error on my Cacographies.out file : Error occurred during initialization of VM Could not reserve enough space for object heap Error: Could not create the Java Virtual Machine. Error: A fatal exception has occurred. Program will exit.

I tried to give more memory, with -mem 768m, but it's not better.

Can someone help me to solve this issue ?


--Hercule (talk) 21:01, 1 December 2013 (UTC)Reply[reply]

To close this here as well: This was discussed on the mailing list, and the suggestion there was to increase the memory requested massively with 2 GByte apparently enough to satisfy Java :-). --Tim Landscheidt (talk) 02:49, 11 December 2013 (UTC)Reply[reply]

add permissions around take to docs?

from IRC just now:

<brainwane> I'm having trouble "take"ing a file 
<brainwane> $ take /home/brainwane/biographies.txt
<brainwane> /home/brainwane/biographies.txt: you must own the containing directory
<brainwane> where do I put this file so my tools acct can "take" it?
<brainwane> petan: any ideas?
<andrewbogott> tools accounts usually have their own home directory
<Coren> brainwane: In any directory your tool account owns.
* chippy has quit (Remote host closed the connection)
<andrewbogott> in, I think… /data/project/<toolname>
<brainwane> ok, so I should have scp
<Coren> I.e. mv it before you take it.  :-)
<brainwane> I tried....
<Coren> Ah, your own home doesn't give permission to your tool.  :-)
<brainwane> $ mv biographies.txt /data/project/missing-from-wikipedia/public_html/missing-from-wikipedia/
<brainwane> mv: cannot create regular file `/data/project/missing-from-wikipedia/public_html/missing-from-wikipedia/biographies.txt': Permission denied
* dr0ptp4kt has quit (Quit: dr0ptp4kt)
<Coren> brainwane: Ah!  Your permissions are too strict then.
<brainwane> oh?
<Coren> brainwane: You probably want your tool's home to be g+w anyways; otherwise you can't properly have more than one maintainer without a lot of trouble.
<brainwane> g+w? groupwrite?
<Coren> brainwane: from your tool account, "chmod -R g+w ~"
<brainwane> got it. done
<Coren> That'll give your tool maintainers write access to the tool, and that includes yourself.  :-)
<brainwane> cool. was that in the docs and I missed it?
<Coren> That's normal unixy stuff which we mostly don't cover in the labs-specific docs.
<brainwane> :/
<Coren> It would be good if we could find a nice tutorial we could link to though.
<brainwane> I've been using Unix since 1999 and I missed this.
<brainwane> I presumed that creating a tool account would automatically give me as maintainer the necessary permissions.
<Coren> brainwane: It does; but if you did things like use some scp clients or unpacked tarballs with restrictive permissions, it'll override.

Sumana Harihareswara, a volunteer (talk) 23:30, 3 December 2013 (UTC)Reply[reply]

Python files in public_html

How are they handled? mod_python? wsgi? I am unable to create a working hello-world page. --Chricho (talk) 18:03, 1 January 2014 (UTC)Reply[reply]

Ah, it is run using cgi, too… --Chricho (talk) 18:22, 1 January 2014 (UTC)Reply[reply]

Docs inaccuracies?

The Tools/Help page says that the public_html directory is at ~/public_html. Well, that is not correct, it is in fact at /data/project/mytool/public_html, so you need to "become" the tool for it to be in your home directory. It would be nice if this were clarified at the first location in the doc where public_html is mentioned. Thanks! Oleg Alexandrov (talk) 05:53, 2 January 2014 (UTC)Reply[reply]

~ is the abbreviation for an (any) account's home directory (as ~account is an abbreviation for a specific account's home directory). Tool accounts have their home directories at /data/project/$TOOL, so ~/public_html is the subdirectory of the tool's home directory.
The first (:-)) mention of public_html even says:
Note that individual tool accounts have both a ~/public_html/ and a ~/cgi-bin/ directory in the home directory for storing Web files.
If you feel that the documentation could be improved by a clarification, be bold! :-) It's probably easier for you to find a wording that is easier understandable than for someone who is already used to the terminology. --Tim Landscheidt (talk) 16:15, 3 January 2014 (UTC)Reply[reply]

Access databases from PHP

How do I access databases from PHP? Also, not sure if it should, but /data/svwiktionary/ doesn't contain a password to use (I might have deleted it a long time ago if it did).

I'm interested in both the replicas and using my own db. I haven't yet created my own db, but intend to at some point. skalman (talk) 10:33, 25 January 2014 (UTC)Reply[reply]

I had apparently reset the password in /data/svwiktionary/ to something of my choice, so I incorrectly assumed that the "correct password" was lost. However, it seems like it works with the password if I use the password that's in there. skalman (talk) 16:32, 25 January 2014 (UTC)Reply[reply]

PHP upgrade

Currently PHP 5.3.10 is installed. Would it be possible to upgrade to 5.5? I don't have any hard dependencies, but I'm lazy and it would be nice to use the shorter array syntax, especially for nested arrays. Furthermore, version 5.3 will be unsupported by July this year. skalman (talk) 22:24, 25 January 2014 (UTC)Reply[reply]

A newbie issue: WinSCP and Putty

When using Toolserver, I was used to open two windows - a Putty console and a WinSCP connection. I did the same into Labs with much frustration by obvious mismatch of logged user, since when using WinSCP I am "alebot", while while using Putty i "become itsource". Files were owned by one user, or another one, a simple and obvious evidence for unix skilled users but an enigma for persistent newbies as I am getting frustrating messages when trying to edit anything using the wrong user.

The solution of such an enigma was so obvious that no one of skilled users I asked for help gave me its banal solution.... I had to run a ls -l command to grab the question. --Alex brollo (talk) 09:11, 3 March 2014 (UTC)Reply[reply]

Shell access vs Tools access - doc is confusing

In section Getting access to Tool Labs it says I automatically requested shell access and after some time I was added to group "shell". So far OK.

But then it mentions I should request Tools access, but says later (#Notification) that "You will also receive email explaining that your user rights have been changed and that you are now a member of the group 'shell'". But I already have it. Confusing. That's a typo, right? --Eccenux (talk) 20:55, 2 May 2014 (UTC)Reply[reply]

Well, from the perspective of the help page, everything is in the future :-). The whole section is very confusing and TL;DR, especially with the technicalities of generating an ssh key thrown in between. IMHO it should be written much simpler and actionable:
  1. Sign up at wikitech for a Labs account.
  2. Fill out an access request for the Tools project.
  3. Wait for the request to be completed.
  4. Generate/upload an ssh key, etc.
However, to me this is all very natural, so I don't want to axe stuff that is essential for others. But: It's a wiki! :-) --Tim Landscheidt (talk) 00:50, 3 May 2014 (UTC)Reply[reply]

.htaccess is ignored

Is there a way to mess up the setup of a project? Because what's described on this page about .htaccess just doesn't work. The file is ignored, no matter what I put in it (it should at least bring up a 500). --TMg (talk) 15:58, 10 May 2014 (UTC)Reply[reply]

No, you didn't do anything wrong. The information about .htaccess refers to the time when we used Apache and is now obsolete. I'll delete some of it later. Our lighttpd setup uses ~/.lighttpd.conf (caution: You need to webservice restart after changing it). --Tim Landscheidt (talk) 16:25, 10 May 2014 (UTC)Reply[reply]


The page currently says "Any script or job invoked with jlocal should not be running more than a few seconds and use minimal resources". I have a script that submits multiple jobs, waits for them to complete, then concatenates the results for emailing to me. So it uses minimal resources (most of its wall time is sleeping) but could be running for more than a few seconds if it takes more than a few seconds for the grid to actually schedule and run the submitted jobs. Is this still allowed? Anomie (talk) 14:24, 12 May 2014 (UTC)Reply[reply]

Yeah, that's okay.  Coren/Marc (talk) 18:47, 16 July 2014 (UTC)Reply[reply]

Bad MySQL performance?

Hi, I have a MySQL table with about 50,000 items, but queries are already slow. All the indexes are there, and the same software is fast on two other machines with an even larger amount of data. "Slow" means that a click on the web page, which causes three or four queries, sometimes takes several seconds. An example page is this one. The queries aren't totally trivial (group by), but they should be fast anyway, like they are on other machines. Are there known performance problems? Any idea what to do? --Dnaber (talk) 17:05, 21 June 2014 (UTC)Reply[reply]

Found it out myself: the table was using InnoDB. Using MyISAM, it's as fast as expected. --Dnaber (talk) 20:48, 21 June 2014 (UTC)Reply[reply]

Log Rotation?

Hi, what's the proper way to rotate the logs of the jobs started with "jstart"? I tried "logrotate", but when it removes the old files, the system doesn't catch up and new logs are not created (and not used when I run "touch appname.out"). --Dnaber (talk) 18:00, 23 June 2014 (UTC)Reply[reply]

Tomcat crashing?

Our Tomcat application had crashed several times, sometimes without any notice in the error logs (~/error.log and public_tomcat/logs/*). By "crash" I mean that it simply didn't run anymore (application not available and no Tomcat job shown with the "qstat" command). What could be the cause for this? Could the "webservice" script be modified to automatically restart Tomcat if needed, like jobs started with "jstart"? --Dnaber (talk) 08:42, 4 July 2014 (UTC)Reply[reply]

Some of the crashes are due to "There is insufficient memory for the Java Runtime Environment to continue.", so it seems the the JVM doesn't get enough memory from the system. The JAVA_OPTS I set in public_tomcat/bin/ say that the JVM gets 300M. --Dnaber (talk) 16:12, 7 July 2014 (UTC)Reply[reply]
It seems it was a memory problem - I have just added a solution that works for me to --Dnaber (talk) 12:45, 29 July 2014 (UTC)Reply[reply]

Hay's tool for metadata?

Is someone able to add some information about Hay's tool to add metadata? Seems that as it is now operational, that the addition of some text for this would be beneficial. Thanks. Billinghurst (talk) 11:14, 30 August 2014 (UTC)Reply[reply]


This page has grown organically, and I think a few issues have crept up on us:

To address this, I'd like to rename this page to "Help:Tool Labs", break it apart into more specific subpages, pull in useful separate info, and expand missing documentation. This page would become an index that looks something like this:

Tool Labs is a reliable, scalable hosting environment for community developers working on tools and bots that help users maintain and use wikis. The cloud-based infrastructure was developed by the Wikimedia Foundation and is supported by a dedicated group of Wikimedia Foundation staff and volunteers. Tool Labs is a part of the Labs project.


  • What is Tool Labs? — learn the core concepts (rationale, features, architecture & terminology).
  • Rules — learn about the rules that apply to all tools we host (licensing, privacy, resource usage, etc).

Getting started

  • Getting started with Tool Labs — get started as a Tool Labs developer (request access, SSH login, create or join a tool instance).
  • Getting started with...
    • Java — create a basic Java application using Tomcat.
    • node.js — create a basic node.js application using the webgrid.
    • PHP — create a basic PHP application with translations using webservice.
    • Python — create a basic Python tool using Flask and MVC.
  • Accessing the databases — querying Wikimedia SQL databases, creating user databases, and using Redis.
  • Publishing your tools — add your tools to the public directory so others can find them.

How to

I think this format would be easier to maintain and use, would make it easier to add missing information, and would let us go into more depth on specific pages.

Any thoughts or objections? —Pathoschild 08:33, 09 November 2014 (UTC)Reply[reply]

Let me point out that "assumes you're using PHP" is incorrect: it's just assumed that Intuition can and should be made to work with whatever one is using.
Splitting and reorganising is nice, but I hope you don't mean to create 15 separate pages! For a gradual approach, I suggest that you move the page and reshuffle its sections across different parent sections (but keeping current section titles so that links don't break), and after that split out as much content as possibly to existing pages like Help:Git and others. Then it will be easier to see how much content is left and how to reorganise it. --Nemo 19:58, 9 November 2014 (UTC) P.s.: A half-page index can and should be on Help:Contents; one outdated index is enough.Reply[reply]
I do think we should split the page; the scope is too extensive to cover with a single page. We can use supersections instead if that's preferred, but I think that would be less effective. —Pathoschild 20:29, 09 November 2014 (UTC)Reply[reply]
I moved the page since that seems uncontroversial. —Pathoschild 03:09, 10 November 2014 (UTC)Reply[reply]
I don't particularly like the split-up. Yesterday I was looking for the syntax of .lighttpd.conf, and I had to go to a sub-page (that I needed to add to my watchlist) to see the file mentioned. But even there a search for the bit that I remembered came up empty because the advice I was looking for was hidden in a collapsed "Extended instructions" section.
I think the overarching problem is that the page(s) address a very wide range of audiences. Some pieces seem to have a total novice in mind, while others present concepts that you need very advanced skills to understand. --Tim Landscheidt (talk) 17:41, 13 November 2014 (UTC)Reply[reply]
I think this page has long outgrown a single page that answers all questions. I'm still trying to wrap my head around what is (and isn't) here to figure out a better organization. I think those that have complained before about not wanting multiple pages may have just trained themselves to use ctrl-f instead of the site search. --BryanDavis (talk) 06:05, 3 February 2016 (UTC)Reply[reply]
Definitely. With C-f I can iterate over all matches, and if all matches are contained in one page, once I reach the top one again, I'm done. With multiple pages I have to repeat the process for each chunk of information that is on a different page. With C-f, I can amend the search term on the fly and easily try different spellings or synonyms ("Was it 'hostname' or 'host name'?"). If despite that C-f comes up empty on a single page, I can be reasonably sure that the information is not available, while with multiple pages and MediaWiki's search it might be missing, but it might also be "hidden".
The biggest problem I see with this documentation is that there is not sufficient feedback by the users, either in form of comments or – be bold! – edits. A few years ago, WMF hired an external writer to reorganize it, recently another staffer polished it, now you have put it on your agenda, and everybody seems to have to work in total darkness of what a new user or beginner might look for with the risk that afterwards the effort is lauded, but there is no objective metric to assess progress. I'm guilty of that myself in other open source projects where I don't complain about or improve bad documentation, instead taking it as is, but in an ecosphere of people used to sticking {{Confusing}} on articles or just fixing them themselves, it would be very nice and appreciated if they behaved the same way here. --Tim Landscheidt (talk) 05:35, 6 February 2016 (UTC)Reply[reply]
@Tim Landscheidt: You present reasonable points about the utility of C-f for refreshing one's memory of a previously discovered fact. In an earlier post you said "I think the overarching problem is that the page(s) address a very wide range of audiences." which may be getting more to the issue that I'm interested in solving. A full analysis has not been performed and published yet on the survey of Tool Labs users that was done in September 2015. The question "Tool Labs documentation is easy-to-find" is one that Yuvipanda and I have discussed a bit however. The responses to that question were nearly equally split between "agree/strongly agree" and "disagree/strongly disagree" (48/54). Those raw response counts are missing a deeper analysis however of what might differentiate the two groups. I'm hoping to spend some time "soon" on preparing a more complete analysis of the survey results and one thing I'm interested doing in that analysis is looking for correlations in areas such as this one where there is a stark divide between the respondents. It may turn out that when the results are further divided by number of years of experience, number of tools built, preferred programming language, or some other demographic criteria that a more clear pattern emerges to guide us to making informed changes to the documentation and its organization.
I fully agree with the second paragraph of your response. The only sustainable way for Tool Labs to grow is for the users of the Tool Labs services to help each other solve problems and learn. Looking to Wikimedia Foundation staff and a small number of highly engaged volunteers to answer all questions and maintain all documentation while also maintaining and supporting the underlying platforms and services will not scale. --BryanDavis (talk) 17:59, 6 February 2016 (UTC)Reply[reply]

Jobs submitted to the grid via 'cron'


I don't want to receive an email for each job working with 'cron', so what I should do? Thank you, Automatik (talk) 19:21, 25 December 2014 (UTC)Reply[reply]

If you use jsub, you can use the -quiet option to suppress output unless the job submission failed. --Tim Landscheidt (talk) 15:52, 28 December 2014 (UTC)Reply[reply]
Thanks for your help! --Automatik (talk) 20:04, 30 December 2014 (UTC)Reply[reply]

Most recent dumps


The most recent dump for frwiktionary is available since 15 hours , but the timestamp for this dump is not yet available in /public/dumps/public. Could not it be faster? Automatik (talk) 13:49, 5 January 2015 (UTC)Reply[reply]


I'm not necessarily convinced that promoting & Co. is a good idea as apart from DNS the user encounters tools-login & Co. everywhere else, notably at the prompt. --Tim Landscheidt (talk) 21:08, 8 January 2015 (UTC)Reply[reply]

I cleaned up Help:Tool_Labs#Bastion hosts and surroundings as part of phab:T91509 work, and now it mentions first. Yuvipanda, which hostname should guides favor? -- spage (talk) 02:25, 7 May 2015 (UTC)Reply[reply]

Main contributor(s)

Hi, is there a tool to list all articles in a language version of wikipedia, in which a certain user is the main contributor? Cheers, --Ghilt (talk) 20:14, 26 January 2015 (UTC)Reply[reply]

Missing table in DB

Hi Tool Labs, even as a newby i could easily connect to the replica by following the described steps. However, what i now wonder about is where i can find the wikitexts of pages? The DB scheme describes that there is a text table but i cannot find it on the replica. Any help appriciated... Thank you. --Arnd (talk) 12:30, 1 February 2015 (UTC)Reply[reply]

In the WMF cluster, the article contents are not stored in the database, but on separate servers. These are neither replicated to Labs nor can they be directly accessed otherwise. You need to use …/w/index.php?title=…&action=raw (for simple cases) or the API (…/w/api.php) for that. You can find an example here. Remember to change the …?format= parameter to the format your script should use. --Tim Landscheidt (talk) 22:03, 1 February 2015 (UTC)Reply[reply]
Thank you for the answer. This REST-API approach seems rather slow when looking for special patterns in articles. Maybe then its better to use a data dump instead. --Arnd (talk) 18:18, 4 February 2015 (UTC)Reply[reply]

Need to update page

I was following a link to a tool that apparently no longer exists and eventually ended up at the Tools page. But when I clicked on most of the links, I received error messages or messages that the tool or page no longer exists. Is there any way this page can be kept up-to-date and tools that no longer exist or function can be removed from the list? It would really increase the usefulness of this list for editors. Liz (talk) 18:14, 21 February 2015 (UTC)Reply[reply]

Which "most" links do not work for you? The list is created dynamically inter alia by looking at whether a tool has a running webservice. So if a tool's link yields an error message, you should contact its maintainer directly. --Tim Landscheidt (talk) 04:25, 22 February 2015 (UTC)Reply[reply]

rm some redundancy?

can we remove some redundancy?

see e.g. special:diff/156222/156224. --jeremyb (talk) 21:42, 28 April 2015 (UTC)Reply[reply]

Yup. I referred to Contacts section in Help:Tool_Labs#Troubleshooting. As for duplication in /* Moving a tool from Toolserver to Tool Labs */, the migration is complete and Toolserver shut down in July 2014, so I killed it altogether. -- spage (talk) 03:12, 7 May 2015 (UTC)Reply[reply]

Translation tool

Hi everybody, I am from the French wikipedia. I worked on a small tool aiming at automatising the creation of references. It is here. The question is whether it would be possible to host it on a server from the wikimedia foundation instead of using a random server, which seems to create problems with some antivirus softwares. Thank you for your assistance. --Lebronj23 (talk) 21:33, 8 December 2015 (UTC)Reply[reply]

Yes, this looks like it would be a good match for tool labs. If you follow the Quick start guide, the new tool guide and the web tool notes, you should be good to go! valhallasw (Merlijn van Deen) (talk) 08:56, 9 December 2015 (UTC)Reply[reply]
Thanks a lot. I will have a look at the links you adviced. --Lebronj23 (talk) 19:19, 12 December 2015 (UTC)Reply[reply]

Cannot find MediaWiki job error logs

Where would I find logs covering any exceptions thrown from a MediaWiki background job? Thanks, Awight (talk) 07:57, 14 December 2015 (UTC)Reply[reply]

As this is not related to Tool Labs infrastructure, it's probably better to ask this question in one of the MediaWiki support channels. valhallasw (Merlijn van Deen) (talk) 11:16, 14 December 2015 (UTC)Reply[reply]

"Can I delete a tool?"

@Merlijn van Deen: I assume your edit reflects a policy decision, but not a technical limitation? --Tim Landscheidt (talk) 14:13, 27 April 2016 (UTC)Reply[reply]

A bit of both. The 'rmtool' tool in misctools is undeployed, undocumented (as far as Nova_Resource:Tools/Admin goes, at least, although there is a small man page and the code is not too hard to follow) and unmaintained (it still refers to /data/project/.system/webservers which hasn't existed for a while). 'rmtool' also doesn't 'delete' the tool, as the service group will continue to exist. So... I don't feel comfortable announcing 'admins can delete your tool' as long as we don't actually have a documented protocol for that. valhallasw (Merlijn van Deen) (talk) 07:29, 28 April 2016 (UTC)Reply[reply]
Eh, I removed rmtool with gerrit:239522 last September?! I have documented (my) protocol now at Nova Resource:Tools/Admin#Deleting a tool. --Tim Landscheidt (talk) 10:29, 28 April 2016 (UTC)Reply[reply]
I guess I had an old checkout of that repo in my home directory -- that explains why it's undeployed :-). Thank you for documenting your protocol! valhallasw (Merlijn van Deen) (talk) 11:24, 28 April 2016 (UTC)Reply[reply]

Python is different versions with different modules. How run on grid and with scheduling?

I need to run a bot on grid with scheduling. It made under the python version 3.4, and normally works in the tool home via command python3 But on grid installed v3.2, without basic modules like 'request', 'urllib.parse', etc, and I get problem with utf-8, like on obsolete version 2.7. (Errors with utf-8, although that the files in utf-8, have # - * - coding: utf-8 - * -, have the prefix of strings 'u' like u'not english a string'.)

If in console of Tool labs run:

  • python -V, result: 2.7.6
  • python3 -V, result: 3.4.3

For grid run (according Help:Tool_Labs/Developing#Setup_job_submission and Help:Tool Labs/Grid):

  • jsub -N job_name python -V, result error (job_name.err): Python 2.7.3
  • jsub -N job_name python3 -V, result error (job_name.err): -bash: /usr/bin/python3.4: No such file or directory

If I try run for display version:

import sys
print (sys.version_info)

then it say that on grid set v3.2, and wrote errors said above (no modules, utf-8).

How to run a bot on grid scheduled? --Vladis13 (talk) 10:27, 20 August 2016 (UTC)Reply[reply]

Asked on Phabricator:T143473. --Vladis13 (talk) 10:49, 20 August 2016 (UTC)Reply[reply]

seems that the code in does not use redis anymore Shavtay (talk) 21:37, 28 December 2016 (UTC)Reply[reply]

Shavtay It looks like the Redis consumer code from SuchABot was moved to I'll update the link in the docs. --BryanDavis (talk) 01:23, 29 December 2016 (UTC)Reply[reply]

Bot password when running with jsub

Hi, I have a bot that I want to send to the grid with jsub. The bot changes files in the Hebrew Wiktionary and I supplied with mylang='he' family = 'wiktionary' usernames['wiktionary']['he'] = u''

in the .err file I get:

 File "/data/project/he-wiktionary-rule-checker/hewiktionary_checker/", line 361, in main"\u05e1\u05e8\u05d9\u05e7\u05d4 \u05e2\u05dd \u05d1\u05d5\u05d8 ")
 File "/data/project/shared/pywikipedia/core/pywikibot/tools/", line 1448, in wrapper
   return obj(*__args, **__kw)
 File "/data/project/shared/pywikipedia/core/pywikibot/tools/", line 1448, in wrapper
   return obj(*__args, **__kw)
 File "/data/project/shared/pywikipedia/core/pywikibot/", line 1259, in save
   cc=apply_cosmetic_changes, quiet=quiet, **kwargs)
 File "/data/project/shared/pywikipedia/core/pywikibot/", line 139, in wrapper
   handle(func, self, *args, **kwargs)
 File "/data/project/shared/pywikipedia/core/pywikibot/", line 121, in handle
   func(self, *args, **kwargs)
 File "/data/project/shared/pywikipedia/core/pywikibot/", line 1270, in _save
   watch=watch, bot=botflag, **kwargs)
 File "/data/project/shared/pywikipedia/core/pywikibot/", line 1329, in callee
 File "/data/project/shared/pywikipedia/core/pywikibot/", line 2093, in login
   if loginMan.login(retry=True):
 File "/data/project/shared/pywikipedia/core/pywikibot/", line 305, in login
 File "/data/project/shared/pywikipedia/core/pywikibot/", line 414, in input
   data = ui.input(question, password=password, default=default, force=force)
 File "/data/project/shared/pywikipedia/core/pywikibot/userinterfaces/", line 294, in input
   text = self._input_reraise_cntl_c(password)
 File "/data/project/shared/pywikipedia/core/pywikibot/userinterfaces/", line 308, in _input_reraise_cntl_c
   text = getpass.getpass()
 File "/usr/lib/python3.4/", line 92, in unix_getpass
   passwd = fallback_getpass(prompt, stream)
 File "/usr/lib/python3.4/", line 127, in fallback_getpass
   return _raw_input(prompt, stream)
 File "/usr/lib/python3.4/", line 149, in _raw_input
   raise EOFError

Shavtay (talk) 08:37, 14 May 2017 (UTC)Reply[reply]

@Shavtay: It sounds like you need to setup a password file or some other means of passing your account's password to pywikibot. See mw:Manual:Pywikibot/ for some ideas. Personally I like using owner-only OAuth grants. The pywikibot setup for that is described at mw:Manual:Pywikibot/OAuth. --BryanDavis (talk) 19:31, 14 May 2017 (UTC)Reply[reply]

Why i cant add a new public ssh key?

I cant add a new SSH public key that start with ssh-rsa. Why? --Walter Klosse (talk) 17:59, 28 June 2017 (UTC)Reply[reply]

@Walter Klosse: What error message did you get? Did your copy and paste of the key include any extra newlines? An SSH public key in the proper format will be a single long line that starts with ssh-rsa followed by a long base64 encoded string and optionally a label for the key. Opening a Phabricator task might be an easier way to work through your problem than this talk page. We would also be glad to try and help you figure out what is going wrong interactively in the #wikimedia-cloud connect irc channel. Use !help to get attention from an admin. --BryanDavis (talk) 23:23, 28 June 2017 (UTC)Reply[reply]

Installing MediaWiki core

The current instruction for installing MW don't work since MediaWiki 1.31+ requires PHP 7, but the default available version of PHP on Toolforge is 5.5.9. Dalba (talk) 05:33, 15 June 2018 (UTC)Reply[reply]

Update java version

Hello. Java version on Toolforge is version 7. I use java bot on my tool in Toolforge, and some of new features by Java 8 cannot be run in Toolforge because the version is still 7. Please update java version in toolforge to the latest version (v 8); because many users including me need to update our bots to the latest version. Thanks.--ASammour (talk) 12:32, 9 October 2018 (UTC)Reply[reply]

Java 8 is current available in the Toolforge Kubernetes containers. Our best integration for Kubernetes is the webservice command, but it is also possible to run bots and other long running processes with a bit of manual configuration. Note that today there is a small bug in our Java 8 containers which makes the default java command Java 7 rather than 8, but that should be corrected in the next few days. I also expect that we will have Java 8 support on grid engine in the relatively near future (within the next 3-6 months) when the grid is updated to run on Debian Stretch. --BryanDavis (talk) 14:54, 9 October 2018 (UTC)Reply[reply]

Toolforge dumping sqldump from enwiki_p to toolsDB custom space

Hi! Is this the right place to talk about Toolforge? I am new to toolforge and had some questions regarding accessing the replica databases(especially enwiki) from the toolsDB server. My objective right now is to get the ipblocks and revisions table in enwiki database over to my custom tools database space where i can play with the data and create custom tables as i want. But i am not able to access the enwiki database from my tool's custom toolsDB server(understandably enwiki is on different shard/server). Is there a way i can bring in data from enwiki to my tool's DB space? I assume this must have already been used by other users as well trying to work with Wikipedia metadata.

I am trying playing around with the mysql command as follows to generate a dump-

mysqldump -u s53882 -p --single-transaction --quick --lock-tables=false enwiki_p ipblocks > ipblocks.sql

After running this command i am prompted for password, and after entering the password i get the following message- mysqldump: Got error: 1049: "Unknown database 'enwiki_p'" when selecting the database

Please let me know if I should use something other than enwiki_p here, I am running this command from my tools space on toolforge tools.blocklog@tools-bastion-02:~$ pwd /data/project/blocklog

Thanks in Advance!Arnab777as3uj (talk) 03:24, 16 November 2018 (UTC)Reply[reply]

You need to provide a hostname for the database server to connect to. The sql command can figure out which server to connect to based on logical database names like enwiki_p, but mysqldump does not include that ability. Adding to your command will select the correct database server. (As an aside, ln -s $HOME/.my.cnf $HOME/ will make it so that you do not need to pass the -u ... -p arguments to mysqldump.)
The next problem you are going to run into however is that your user does not have the permissions needed to actually see the raw database tables. All access to the underlying tables is mediated by a view layer. Your dump will only return you the source code for that view.
If you only need a one-time (or say once a month) dump of the data from the ipblocks table, your best bet is probably a select * from ipblocks query. If you need the data refreshed more often for your intended use case you may need to step back and rethink the problem and see if you can find a reasonable way to use some combination of the Action API, the Wiki Replicas, and ToolsDB that does not require full table dumps to operate. --BryanDavis (talk) 22:29, 16 November 2018 (UTC)Reply[reply]

Adding toolinfo.json file

How can I add toolinfo.json file to public_html file? Adithyak1997 (talk) 17:02, 21 November 2018 (UTC)Reply[reply]

@Adithyak1997: in my opinion, the easiest way to manage toolinfo data today is by using the interface that is built into The toolinfo data that can be created and edited there is indexed by Hay's Directory. Another option is to make a $HOME/www/static directory for your tool, add a toolsinfo.json file there, and then register it with Hay's Directory as<your tool name>/toolinfo.json. Both of these options will work for any tool, even if that tool is not running a webservice. A third way is by creating a $HOME/public_html/toolinfo.json file and running a webservice for that tool to serve the file up as<your tool name>/toolinfo.json. --BryanDavis (talk) 19:28, 21 November 2018 (UTC)Reply[reply]

No public_html

Hi! What am I possibly doing wrong if I always get Could not find a public_html folder or a .lighttpd.conf file in your tool home? Regards, XanonymusX (talk) 11:11, 11 January 2019 (UTC)Reply[reply]

Did you create a $HOME/public_html folder for your tool before starting the webservice? --BryanDavis (talk) 16:00, 11 January 2019 (UTC)Reply[reply]
Well, I guess not. What I have done is following the steps at Help:Toolforge#Tool Accounts; now I wanted to go on with the tool web page, but apparently there are steps in between that sadly are not obvious to me. --XanonymusX (talk) 17:54, 11 January 2019 (UTC)Reply[reply]
The next steps vary a little bit depending on what programming language you are attempting to use to build your tool's webservice. We have a couple of detailed tutorials for Python posted on Help:Toolforge/How to. I am not finding anything similar for PHP today. Luckily it is fairly simple once you have logged into the Toolforge bastion and used become <MYTOOL>:
  • mkdir $HOME/public_html
  • Create/edit $HOME/public_html/index.php
  • webservice --backend=kubernetes php7.2 start
  • Visit
  • Look for any errors from your PHP code in $HOME/error.log
--BryanDavis (talk) 19:25, 11 January 2019 (UTC)Reply[reply]

Making changes to html file

I currently have my tool code available in Github([link]). I have currently made some changes in it. How can those changes be committed in my tool? I am using Putty as well as WinCSP.Adithyak1997 (talk) 10:49, 10 March 2019 (UTC)Reply[reply]

@Adithyak1997: Help:Access to Toolforge instances with PuTTY and WinSCP may be helpful to you. Another option is using git pull directly from Toolforge to update a clone of your GitHub hosted repo. --BryanDavis (talk) 01:27, 11 March 2019 (UTC)Reply[reply]

Opinion required

I would like to know whether taking up the tools DyK notices (mentioned here) and TemplateTransclusionCheck (mentioned here) as a maintainer will benefit for someone. Adithyak1997 (talk) 08:00, 5 April 2019 (UTC)Reply[reply]

Planned changes to organization of Toolforge developer/maintainer documentation

This Help:Toolforge page has been changed to a draft form as part of planned improvements to Toolforge developer documentation. Some information that was previously available on this page has been moved to the About Toolforge page. You may also find information you are looking for linked from Portal:Toolforge.

Please check back to see the progress of continued improvements.

List of tools broken

The list of tools at is truncated at end (?) of the 'A's. I was looking for 'typoscan' which, now that I've a login here, I can find. But... Shenme (talk) 14:57, 4 June 2019 (UTC)Reply[reply]

I can't reproduce this problem, but it may be a communications problem between your browser and the web server or a problem of the HTML document being tool large for your browser to deal with. That page renders all of the tools to the browser along with some javascript to do searching on the client side. --BryanDavis (talk) 15:37, 4 June 2019 (UTC)Reply[reply]

Scientific research quality of Wikipedia/how to downolad external links?

Hi guys, I do my PhD on Wikipedia quality work on the analysis of environmental articles. We have downoladed more than 200k sources. But have a problem. Don't know how to download more than 500 external sources in one article - in this cases (below): {

{"Global warming"},
{"Genetically modified organism"},
{"Red imported fire ant"},
{"Electric car use by country"},
{"Tesla Model S"},
{"Fukushima Daiichi nuclear disaster"},
{"African humid period"},
{"Global warming controversy"},
{"Climate change mitigation"},
{"Radiation effects from the Fukushima Daiichi nuclear disaster"},
{"Genetically modified food controversies"},


Problem is probably in API I will be grateful for any suggestion how this problem, solve. Thank you. --Wikiditor (talk) 09:04, 28 June 2019 (UTC)Reply[reply]

Anyone willing to get an old tool builder back up to speed?

Hi there. I used to build a lot of tools that were widely used on the English Wikipedia, back in the days of Toolserver. I semi-retired from contributing to Wikipedia altogether around the time that Toolserver went away and Labs/Toolforge were built to replace it. Many of my tools have been ported to Toolforge and are still in use today. Others are broken and don't have a maintainer that can be reached to fix them. I believe I still have permissions to edit these tools, and I'm listed as a maintainer on most/all of them. However, I have no idea how to get access to them. I'm not a professional developer and so I'm not intimately familiar with working in these kinds of environments, nor do I know the ins and outs of things like Github and Phabricator.

I'm wondering if there's anyone out there that might be interested in walking me through the steps of getting access to these tools to fix the ones that aren't working properly. I assume I'd need to get in via SSH and start digging around. I don't even know if I still have my old SSH key lying around somewhere... Help! Scottywong (talk) 02:41, 30 July 2019 (UTC)Reply[reply]

Welcome back Scottywong! This talk page probably doesn't reach as many folks as you might hope. I would suggest #wikimedia-cloud connect and as places where you might be able to find folks with more Toolserver era knowledge who could help you find your tool building groove again in the Toolforge environment. The irc channel might be especially useful if you find you are having problems with getting your ssh access working. Hopefully Help:Toolforge can help you find your way as well. User:Magnus Manske/Migrating from toolserver may have some interesting, if dated, notes too. --BryanDavis (talk) 19:08, 30 July 2019 (UTC)Reply[reply]

Dumps documentation

@SRodlund: it looks like you removed the section on dumps in this change. That section was still linked to from Portal:Data Services#Wikimedia Dumps – do you have any plans for putting it somewhere? Right now I can’t find the information anywhere on Wikitech (the /public/dumps/public path is only mentioned on WMDE/Wikidata/PropertySuggester update). --Lucas Werkmeister (WMDE) (talk) 11:38, 23 September 2019 (UTC)Reply[reply]

@Lucas Werkmeister (WMDE): I do! I pulled the content out into a staging page to check its accuracy and work on its structer as a standalone document. It sounds like a priority, so I will work on bringing it back today. :-)

Lists are offline

Dear all, I was an avid user of wmflabs lists, especially the one regarding itwiki. Since 3 days they stopped working. Does anybody know who is in charge for them? Is this wikimedia website the right place to ask? Thanks in advance. --Luckyz (talk) 13:11, 31 January 2020 (UTC)Reply[reply]

Luckyz, I would suggest that you try to report this problem to the "list" tool's maintainers: Alessio, Fale, Incola, and Mess. --BryanDavis (talk) 16:48, 31 January 2020 (UTC)Reply[reply]

Help on databse

@BryanDavis: Hello, BryanDavis! I found you in the previous topic. I am interested in running bots from toolforge. I am connected to toolforge by ssh. Whenever I am trying to create a database, It shows an error that I don't have permissions. I need to use database to run my bot perfectly. Please, help me a bit. regards, --ShohagS (talk) 04:31, 14 October 2020 (UTC)Reply[reply]

@ShohagS: have you read Help:Toolforge/Database#User databases? Your question does not have enough context for me provide more help than that link. --BryanDavis (talk) 19:45, 14 October 2020 (UTC)Reply[reply]
@BryanDavis: Thanks a lot. But It still giving me an error after connection to the tools.db.svc.eqiad.wmflabs using mysql --defaults-file=$HOME/ -h tools.db.svc.eqiad.wmflabs command. The error was like this ERROR 1044 (42000): Access denied for user 's54497'@'%' to database 's54497_SBB'. Can you provide more help or does my account need permission? --ShohagS (talk) 03:23, 15 October 2020 (UTC)Reply[reply]
@ShohagS: I am not seeing any databases owned by your suggestbotbn tool: toolforge:tool-db-usage/owner/s54497. The database name you supplied above (s54497_SBB) also does not meet the requirement of having two _ characters after your tool's credential user name. See Help:Toolforge/Database#Steps_to_create_a_user_database_on_tools.db.svc.eqiad.wmflabs for a detailed explanation of the requirements and process of creating a new database. --BryanDavis (talk) 15:23, 15 October 2020 (UTC)Reply[reply]
@BryanDavis: I forgot to thank you while I was a bit busy. But just remembered you while I am stuck again. Apologies for that. I am truly sorry. I am using that database in web here but whenever I am trying to use that database through jsub It shows error pymysql.err.InternalError: (1205, 'Lock wait timeout exceeded; try restarting transaction'). Not when I run the python3 script (to update the database) manually. It works nicely then. Why is that? Please let me know. ShohagS (talk) 14:57, 26 October 2020 (UTC)Reply[reply]

Support for ASGI?

Hi, the main example for Toolforge is for using Python/Flask via WSGI with Kubernetes. Is there support for ASGI (Asynchronous Server Gateway Interface) services, such as FastAPI and Uvicorn? I couldn't find any examples of services running with ASGI, so that's why I ask. Thanks. - Fuzheado (talk) 11:12, 24 November 2021 (UTC)Reply[reply]

The current python specific tooling in the Toolforge Kubernetes cluster (and grid engine actually) is focused on hosting WSGI services as you note. This is the first time I have personally heard someone asking about the competing ASGI standard. It would be currently possible to deploy an ASGI service on the Kubernetes cluster via a manually created Deployment. -- BryanDavis (talk) 18:17, 24 November 2021 (UTC)Reply[reply]
Thanks BryanDavis. I created a Phabricator task here in case it's something we can discuss and see if there is long term support for. task T296729 - Fuzheado (talk) 13:35, 30 November 2021 (UTC)Reply[reply]
We have now beta support for buildpack-based toolforge images, that will allow you to use asgi (or any python webserver of your choosing), you can have a try, you can specify the command to start your webservice (ex. asgi/gunicorn/...) in the procfile David Caro (talk) 08:36, 11 July 2023 (UTC)Reply[reply]

Improvements to the Toolforge docs navigation

Hello, as part of a technical documentation project to improve the overall navigation of Cloud Services docs, I am proposing a new navigation menu for the Toolforge user docs. For additional details, and how to provide your feedback on my proposed revisions, see Thanks! Triciaburmeister (talk) 20:58, 17 August 2023 (UTC)Reply[reply]