The on-wiki version of this newsletter can be found here:
https://www.wikifunctions.org/wiki/Wikifunctions:Status_updates/2026-03-11
----
A new composition language
The team addressed long-standing issues with the composition language this
quarter. We decided to rewrite how the composition language works,
resulting in what we have surprisingly termed "composition language v2".
Our primary goal was to increase service stability by reducing the
orchestrator's memory consumption. However, this rewrite has had many
ancillary effects: substantial latency reduction, code simplification, and
better abstractions, which will open the door to later feature additions.
The next paragraph concerns the internal details of the change. If you're
just interested in what you can expect and how to work with the new
composition language, feel free to skip this paragraph.
At its core, composition language v2 cleans up the composition language's
handling of scope. Previously, we had allowed a form of dynamic scoping,
which seemed necessary because of how Objects are stored. Notionally, our
Implementations are defined externally to Functions: both Functions and
Implementations live on Wikifunctions and can be referenced separately.
This means that Implementations bind variables that are not properly
available for binding. To resolve this problem in v2, we basically cheat:
as we build Functions for execution, we retrieve implementations from
Wikifunctions and pretend that they are defined at precisely that time.
With this change, we are now able to consolidate the language around purely
lexical scoping. This has made it much easier to develop reasonable
abstractions for the composition language's primitives, to handle closures,
etc.
Within the next day, we plan to make the switch, routing calls to the new
version of the composition language. As a writer or user of Functions, what
can you expect? Ideally, this change will be more-or-less invisible:
happy-path functionality should be identical. You should find snappier
Function execution and better system stability and consistency. As for the
sad paths, it's a mixed bag: some errors are clearer, and we're now
well-positioned to implement true stack traces; however, other errors will
be less legible. Test cases that previously relied on the system timing out
or reaching other resource limits may need to be re-visited.
We welcome feedback about this change. We hope to be able to switch to the
v2 endpoint once, and then address errors/inconveniences as they arise. If
you encounter new bugs or issues after this switch, please make a
Phabricator task under T418887
<https://phabricator.wikimedia.org/T418887> (this
Phabricator link will pre-fill it as the parent
<https://phabricator.wikimedia.org/maniphest/task/edit/form/1/?parent=418887…>).
If severe problems arise, we may also decide to roll back temporarily to
v1; we will communicate as we make changes so you know what's going on.
Thank you for all your efforts to make Wikifunctions what it is.
No NLG SIG meeting next week
Next week’s NLG SIG meeting is cancelled due to a lack of suggested topics.
Fresh Functions weekly: 16 new Functions
This week we had 16 new functions. Here is an incomplete list of functions
with implementations and passing tests to get a taste of what functions
have been created. Thanks everybody for contributing!
- link to Item article with display text (Z31870)
<https://www.wikifunctions.org/wiki/Z31870>
- trim element from start of list (Z31874)
<https://www.wikifunctions.org/wiki/Z31874>
- trim Code point from start of String (Z31880)
<https://www.wikifunctions.org/wiki/Z31880>
- reference marker HTML from string (Z31906)
<https://www.wikifunctions.org/wiki/Z31906>
- value of Numeric_Type=Digit or Decimal code point (Z31907)
<https://www.wikifunctions.org/wiki/Z31907>
- create Reference with HTML (Z31917)
<https://www.wikifunctions.org/wiki/Z31917>
- add reference to a statement (Z31921)
<https://www.wikifunctions.org/wiki/Z31921>
- site of Wikidata sitelink (Z31931)
<https://www.wikifunctions.org/wiki/Z31931>
- language of Wikidata sitelink (Z31934)
<https://www.wikifunctions.org/wiki/Z31934>
- Rational to LaTeX (Z31944) <https://www.wikifunctions.org/wiki/Z31944>
- String without prefix (Z31955)
<https://www.wikifunctions.org/wiki/Z31955>
A complete list of all functions sorted by when they were created
<https://www.wikifunctions.org/wiki/Special:ListObjectsByType?type=Z8&orderb…>
is
available.
Cara membuka blokir Bank Jago terblokir. Anda bisa menghubungi WhatsApp Layanan Jago di nomor (+62)(817=4742=833) atau melalui aplikasi Bank jago dengan memilih Opsi Lupa Username atau Password.
The on-wiki version of this newsletter can be found here:
https://www.wikifunctions.org/wiki/Wikifunctions:Status_updates/2026-03-06
----
Citations in Wikifunctions
Citations are a crucial part of what makes Wikipedia work: a human-edited
collection of knowledge, together with references to the sources of
knowledge.
<https://www.wikifunctions.org/wiki/File:Reference_function_output.png>Rendering
of the output of a Function creating a citation
We're delighted to announce that we have shipped a long-awaited feature:
you can now create Functions that will show a citation in their output. We
are providing three exemplar functions creating citations:
- create Reference out of string (Z31906)
<https://www.wikifunctions.org/wiki/Z31906>
- create Reference with HTML (Z31917)
<https://www.wikifunctions.org/wiki/Z31917>
- add reference to a statement (Z31921)
<https://www.wikifunctions.org/wiki/Z31921>
The screenshot shows how citations are rendered with this new system.
You can build more such functions using citations. We are looking forward
to seeing citations that are built using Wikidata items and turn them into
citations, or that take the references directly from the Wikidata
statements and display them as citations.
This is a major step towards providing the necessary capabilities for
creating high-quality Abstract Wikipedia articles. We are looking forward
to seeing how you are going to use it!
Copy and Paste
This week we also want to announce the release of another of our
long-awaited features: a Wikifunctions internal clipboard where you can
temporarily store any piece of ZObject so that you can then paste it
somewhere else.
<https://www.wikifunctions.org/wiki/File:Copy_and_paste_in_wikifunctions_-_c…>Location
of the Copy feature
After this release, when clicking on the menu button of any editable key (
[...]) you will see two new options at the bottom: "Copy to clipboard" and
"Paste from clipboard." The copy option will store the whole value of this
key in the Wikifunctions clipboard. This clipboard uses the browser's local
storage to keep your copied elements, which makes things shareable across
tabs and sessions.
<https://www.wikifunctions.org/wiki/File:Copy_and_paste_in_wikifunctions_-_c…>Clipboard
to select copied content from
Once you have identified a new key to paste a value from your clipboard,
you can click on that key's menu button ([...]) and select the "Paste from
clipboard" option. This will open a dialog window with a list of all the
elements from your clipboard. You can navigate through this list and choose
any element that is type-compatible with the selected key.
Once you click "Paste", it will create an identical copy of this block and
paste it to the new location after all the necessary modifications to fit
the new context. For example, when copying pieces of compositions that use
argument references, those will be maintained only when pasting the block
within the same composition, but will be reset to blank values when pasting
them into different contexts.
Our hope is that this feature speeds up creation of complex compositions
when it's more efficient to copy from one implementation to another one and
change whatever things are different. But we are also excited about more
common use cases: Have you ever created a big, long and complex function
call just to find out that you need to wrap it in another function call?
Now you don't need to start from scratch! Copy the work that you did, and
paste it back into its new key whenever you are ready.
Please note that for browser security reasons we can't re-use your system
copy-and-paste feature — this is a Wikifunctions-internal system. It will
let you copy-and-paste between items, pages, and tabs of the same browser
on the same device when using the wiki, but not further.
Let us know how you feel about it, we are excited to hear from you!
Recent Changes in the software
The main change this week is the copy-and-paste feature, above.
As part of wider work to support new languages in MediaWiki, we're creating
Z1991/pwo "Western Pwo" (T417024 <https://phabricator.wikimedia.org/T417024>
).
Recording of Volunteers’ Corner
The recording of the March Volunteers’ Corner
<https://www.wikifunctions.org/wiki/File:Abstract_Wikipedia_Volunteer_Corner…>
is
now available on Commons. Based on a volunteer’s suggestion, we built a
Function together, that creates a link to the Wikipedia article about an
item in the given language and the provided display text: HTML link to
Wikipedia article about Wikidata Item (Z29588)
<https://www.wikifunctions.org/wiki/Z29588>
We also discussed recent updates, and took questions from the community.
Enjoy the recording!
Fresh Functions weekly: 11 new Functions
This week we had 11 new functions. Here is an incomplete list of functions
with implementations and passing tests to get a taste of what functions
have been created. Thanks everybody for contributing!
- Portuguese syllables from word (Z31772)
<https://www.wikifunctions.org/wiki/Z31772>
- Births header text (Z31799) <https://www.wikifunctions.org/wiki/Z31799>
- every nth item of list starting with first (Z31809)
<https://www.wikifunctions.org/wiki/Z31809>
- position (1..=N) of first matching substring (Z31826)
<https://www.wikifunctions.org/wiki/Z31826>
- get last Code point of String (Z31845)
<https://www.wikifunctions.org/wiki/Z31845>
- value of k-th place digit in base-b digit string (Z31859)
<https://www.wikifunctions.org/wiki/Z31859>
A complete list of all functions sorted by when they were created
<https://www.wikifunctions.org/wiki/Special:ListObjectsByType?type=Z8&orderb…>
is
available.
Cara membuka blokir Bank JAGO akun Terkunci Anda bisa menghubungi WhatsApp Layanan Jago di nomor +628137064201, atau melalui aplikasi Bank jago dengan memilih Opsi Lupa Username atau Password.
Cara membuka blokir Bank JAGO akun Terkunci Anda bisa menghubungi WhatsApp Layanan Jago di nomor +628137064201, atau melalui aplikasi Bank jago dengan memilih Opsi Lupa Username atau Password.
Cara membuka blokir Bank JAGO akun Terkunci Anda bisa menghubungi WhatsApp Layanan Jago di nomor +628137064201, atau melalui aplikasi Bank jago dengan memilih Opsi Lupa Username atau Password.
Cara membuka blokir Bank JAGO akun Terkunci Anda bisa menghubungi WhatsApp Layanan Jago di nomor +628137064201, atau melalui aplikasi Bank jago dengan memilih Opsi Lupa Username atau Password.
Cara membuka blokir Bank JAGO akun Terkunci Anda bisa menghubungi WhatsApp Layanan Jago di nomor +628137064201, atau melalui aplikasi Bank jago dengan memilih Opsi Lupa Username atau Password.
Cara membuka blokir Bank JAGO akun Terkunci Anda bisa menghubungi WhatsApp Layanan Jago di nomor +628137064201, atau melalui aplikasi Bank jago dengan memilih Opsi Lupa Username atau Password.
Cara membuka blokir Bank JAGO akun Terkunci Anda bisa menghubungi WhatsApp Layanan Jago di nomor +628137064201, atau melalui aplikasi Bank jago dengan memilih Opsi Lupa Username atau Password.