This is a dedicated page for the Frequently Asked Questions about Wikifunctions. Please, feel free to ask your own question on thetalk page, if your question is not listed here!
Also, please consider ourFAQ on Meta regarding more general questions about Wikifunctions and Abstract Wikipedia.
Wikifunctions is a new Wikimedia project that provides a catalog of all kinds of functions that anyone can call, write, maintain, and use. It also provides the underlying technology that will eventually enable the translation of language-independent articles from Abstract Wikipedia into the language of any Wikipedia. This will allow everyone to contribute and read articles in their preferred languages.
Functions are a form of knowledge that can answer questions, such as how many days have passed between two dates or the distance between two cities. More complicated functions can answer more complicated questions, such as the volume of a three-dimensional shape, the distance between Mars and Venus on a certain date, or whether two species were alive at the same time.
We already use functions in many types of knowledge inquiries, such as asking a question to a search engine. The templates, such asTemplate:Convert andTemplate:Age on English Wikipedia, are also examples of functionalities that are already used in many Wikipedias, written in wikitext and Lua and manually copied to each wiki where it's wanted.
An implementation is a particular way to execute a function. An implementation is a recipe that lists the steps that are needed to run the function. It may be a piece of code in a programming language or a combination of calls to other functions. A function may have many implementations, which should all be equivalent.
A test is a way to determine if a given function is doing the right thing. A function will typically have multiple testers, each specifying some input to the function and the conditions the output for the given input must fulfill.
For example, testers for a “title case” function might include: “abc” should become “Abc”; “war and peace” should become “War and Peace”; “война и мир” should become “Война и мир”; and “123” should remain “123”.
Wikifunctions and Abstract Wikipedia are multilingual in a number of ways that do not impact each other:
Currently, Wikifunctions supports implementations written in JavaScript and Python. We plan to add support for more programming languages in the future. We hope to add at least one further programming language in 2025 (but have not yet decided which one).
Wikifunctions is the first step towards building Abstract Wikipedia. Our near-term focus will be on supporting the community and making improvements based on feedback. Concurrently, we will begin the process of integrating it with Wikipedia and Wikidata, which will enable broader real-life applications and get us closer to the vision of Abstract Wikipedia.
Contributors will be able to call functions stored on the Wikifunctions site from within their wikis. The result of the function call will be displayed to readers of the wiki. This can be used, for example, to calculate the age of a person, the population density based on population and area data from Wikidata, or to draw a graph and integrate it into a given article.
Another option to integrate Wikifunctions will be to integrate an interactive function call interface within their wiki. This could be used, for example, in a Wikipedia article to dynamically calculate the result of a physical equation based on reader-provided parameters, draw and interact with mathematical functions, etc.
Please, seeWikifunctions:What Wikifunctions is not for more information on that.
Per the discussion happenedon Meta between November and December 2021, all contributions to Wikifunctions and the wider Abstract Wikipedia projects will be published under free licenses. In particular:
There are still some points that will need to be addressed in the future, such as the license of the generated content from the abstract content. We plan on drafting a more comprehensive document with the Legal department about how people can re-use code from Wikifunctions as painlessly as possible, while adhering to the license.
Welcome! We're very happy to have you here! There are many opportunities for contributing to Wikifunctions, from creating new functions to improving and translating documentation. If you are looking for ways to get involved, we recommend that maybe, depending on your level of comfort, you suggest a new function on a topic you are interested in. Or even create such a function. Provide some tests. Try your hand at an implementation. Help with translations. Read and improve our documentation. Help with organizing the community.
To see how to create a new function, implementation, or test, seeWikifunctions:Introduction.
To see in more detail how to create an implementation, seeWikifunctions:How to create implementations.
If you can write several languages, find functions that don't have labels and descriptions in your languages yet on the pageSpecial:ListMissingLabels, and help to add them.
If you have some interest in a domain that could feature functions in Wikifunctions, but yet doesn't, or if you have more ideas for functions, go to the page forsuggesting new functions and present your ideas.
If you are a coder in JavaScript or Python, maybe you want to check for functions that don't yet have implementations in JavaScript or Python, and try to write them.
Your first stop should be theHelp portal, where you'll find all the documentation related to using and editing Wikifunctions. If you're still stuck, post a message onProject chat, and someone will answer your question.
For now, the best way to sort or categorize functions is to do it by hand through pages in the Wikifunctions namespace. Another option would be through the talk page of the given function. We will monitor these efforts and discuss with the community which changes to the system would be helpful for this task.