<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-us">
  <title type="text">Tiki RSS feed for the wiki pages</title>
  <subtitle type="text">Latest wiki page changes.</subtitle>
  <logo>https://dev.tiki.org/dl652</logo>
  <updated>2026-10-13T21:54:10+00:00</updated>
  <generator uri="https://getlaminas.org" version="2">Laminas_Feed_Writer</generator>
  <link rel="alternate" type="text/html" href="https://dev.tiki.org/"/>
  <link rel="self" type="application/atom+xml" href="https://dev.tiki.org/tiki-wiki_rss.php"/>
  <id>https://dev.tiki.org/</id>
  <entry>
    <title type="html"><![CDATA[Release Steps]]></title>
    <summary type="html"><![CDATA[<blockquote>- &lt;table class=&quot;wikitable table table-striped table-hover&quot;&gt;&lt;tr&gt;&lt;td class=&quot;wikicell&quot; &gt; &lt;strong&gt;OPTION 1 &lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;wikicell&quot; &gt;Clone the branch you need to create the release for in a separate folder to separate it with your development instance by doing the following. Note that the bellow command is an example, so replace the branch value with that you want to work on, the reference repository by the path of your development instance to gain time when cloning and the target folder by that you want. Also remember to ensure that the reference repository is up to date and contains the required objects for successful cloning.&lt;br /&gt;&lt;div class=&quot;codelisting_container&quot;&gt;&lt;div class=&quot;icon_copy_code far fa-clipboard&quot; tabindex=&quot;0&quot;  data-clipboard-target=&quot;#codebox1<del class="diffchar deleted"><strong>7</strong></del>&quot; &gt;&lt;span class=&quot;copy_code_tooltiptext&quot;&gt;Copy to clipboard&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;codelisting&quot;  data-theme=&quot;default&quot;  data-wrap=&quot;1&quot;  dir=&quot;ltr&quot;  style=&quot;white-space:pre-wrap; overflow-wrap: break-word; word-wrap: break-word;&quot; id=&quot;codebox1<del class="diffchar deleted"><strong>7</strong></del>&quot; &gt;&lt;div class=&quot;code&quot;&gt;git clone --branch=29.x --shared --reference=./tiki https://gitlab.com/tikiwiki/tiki.git tiki29release&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</blockquote><blockquote>+ &lt;table class=&quot;wikitable table table-striped table-hover&quot;&gt;&lt;tr&gt;&lt;td class=&quot;wikicell&quot; &gt; &lt;strong&gt;OPTION 1 &lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;wikicell&quot; &gt;Clone the branch you need to create the release for in a separate folder to separate it with your development instance by doing the following. Note that the bellow command is an example, so replace the branch value with that you want to work on, the reference repository by the path of your development instance to gain time when cloning and the target folder by that you want. Also remember to ensure that the reference repository is up to date and contains the required objects for successful cloning.&lt;br /&gt;&lt;div class=&quot;codelisting_container&quot;&gt;&lt;div class=&quot;icon_copy_code far fa-clipboard&quot; tabindex=&quot;0&quot;  data-clipboard-target=&quot;#codebox1&quot; &gt;&lt;span class=&quot;copy_code_tooltiptext&quot;&gt;Copy to clipboard&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;codelisting&quot;  data-theme=&quot;default&quot;  data-wrap=&quot;1&quot;  dir=&quot;ltr&quot;  style=&quot;white-space:pre-wrap; overflow-wrap: break-word; word-wrap: break-word;&quot; id=&quot;codebox1&quot; &gt;&lt;div class=&quot;code&quot;&gt;git clone --branch=29.x --shared --reference=./tiki https://gitlab.com/tikiwiki/tiki.git tiki29release&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</blockquote><blockquote>- &lt;table class=&quot;wikitable table table-striped table-hover&quot;&gt;&lt;tr&gt;&lt;td class=&quot;wikicell&quot; &gt; &lt;strong&gt;OPTION 2&lt;/strong&gt; &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;wikicell&quot; &gt;checkout the correct branch, i.e the branch you want to create the release for and make sure your origin is &lt;a class=&quot;wiki external&quot; target=&quot;_blank&quot; title=&quot;External link&quot; href=&quot;https://gitlab.com/tikiwiki/tiki.git&quot; rel=&quot;external&quot;&gt;https://gitlab.com/tikiwiki/tiki.git&lt;/a&gt;. For example, if you want to create the 29.1 release, do&lt;br /&gt;&lt;div class=&quot;codelisting_container&quot;&gt;&lt;div class=&quot;icon_copy_code far fa-clipboard&quot; tabindex=&quot;0&quot;  data-clipboard-target=&quot;#codebox<del class="diffchar deleted"><strong>18</strong></del>&quot; &gt;&lt;span class=&quot;copy_code_tooltiptext&quot;&gt;Copy to clipboard&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;codelisting&quot;  data-theme=&quot;default&quot;  data-wrap=&quot;1&quot;  dir=&quot;ltr&quot;  style=&quot;white-space:pre-wrap; overflow-wrap: break-word; word-wrap: break-word;&quot; id=&quot;codebox<del class="diffchar deleted"><strong>18</strong></del>&quot; &gt;&lt;div class=&quot;code&quot;&gt;git checkout 29.x&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt; &lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</blockquote><blockquote>+ &lt;table class=&quot;wikitable table table-striped table-hover&quot;&gt;&lt;tr&gt;&lt;td class=&quot;wikicell&quot; &gt; &lt;strong&gt;OPTION 2&lt;/strong&gt; &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;wikicell&quot; &gt;checkout the correct branch, i.e the branch you want to create the release for and make sure your origin is &lt;a class=&quot;wiki external&quot; target=&quot;_blank&quot; title=&quot;External link&quot; href=&quot;https://gitlab.com/tikiwiki/tiki.git&quot; rel=&quot;external&quot;&gt;https://gitlab.com/tikiwiki/tiki.git&lt;/a&gt;. For example, if you want to create the 29.1 release, do&lt;br /&gt;&lt;div class=&quot;codelisting_container&quot;&gt;&lt;div class=&quot;icon_copy_code far fa-clipboard&quot; tabindex=&quot;0&quot;  data-clipboard-target=&quot;#codebox<ins class="diffchar inserted"><strong>2</strong></ins>&quot; &gt;&lt;span class=&quot;copy_code_tooltiptext&quot;&gt;Copy to clipboard&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;codelisting&quot;  data-theme=&quot;default&quot;  data-wrap=&quot;1&quot;  dir=&quot;ltr&quot;  style=&quot;white-space:pre-wrap; overflow-wrap: break-word; word-wrap: break-word;&quot; id=&quot;codebox<ins class="diffchar inserted"><strong>2</strong></ins>&quot; &gt;&lt;div class=&quot;code&quot;&gt;git checkout 29.x&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt; &lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</blockquote><blockquote>- &lt;div class=&quot;codelisting_container&quot;&gt;&lt;div class=&quot;icon_copy_code far fa-clipboard&quot; tabindex=&quot;0&quot;  data-clipboard-target=&quot;#codebox<del class="diffchar deleted"><strong>19</strong></del>&quot; &gt;&lt;span class=&quot;copy_code_tooltiptext&quot;&gt;Copy to clipboard&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;codelisting&quot;  data-theme=&quot;off&quot;  data-wrap=&quot;1&quot;  dir=&quot;ltr&quot;  style=&quot;white-space:pre-wrap; overflow-wrap: break-word; word-wrap: break-word;&quot; id=&quot;codebox<del class="diffchar deleted"><strong>19</strong></del>&quot; &gt;&lt;div class=&quot;code&quot;&gt;sh ./setup.sh&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;</blockquote><blockquote>+ &lt;div class=&quot;codelisting_container&quot;&gt;&lt;div class=&quot;icon_copy_code far fa-clipboard&quot; tabindex=&quot;0&quot;  data-clipboard-target=&quot;#codebox<ins class="diffchar inserted"><strong>3</strong></ins>&quot; &gt;&lt;span class=&quot;copy_code_tooltiptext&quot;&gt;Copy to clipboard&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;codelisting&quot;  data-theme=&quot;off&quot;  data-wrap=&quot;1&quot;  dir=&quot;ltr&quot;  style=&quot;white-space:pre-wrap; overflow-wrap: break-word; word-wrap: break-word;&quot; id=&quot;codebox<ins class="diffchar inserted"><strong>3</strong></ins>&quot; &gt;&lt;div class=&quot;code&quot;&gt;sh ./setup.sh&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;</blockquote><blockquote>- &lt;br /&gt;&lt;div class=&quot;codelisting_container&quot;&gt;&lt;div class=&quot;icon_copy_code far fa-clipboard&quot; tabindex=&quot;0&quot;  data-clipboard-target=&quot;#codebox<del class="diffchar deleted"><strong>20</strong></del>&quot; &gt;&lt;span class=&quot;copy_code_tooltiptext&quot;&gt;Copy to clipboard&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;codelisting&quot;  data-theme=&quot;off&quot;  data-wrap=&quot;1&quot;  dir=&quot;ltr&quot;  style=&quot;white-space:pre-wrap; overflow-wrap: break-word; word-wrap: break-word;&quot; id=&quot;codebox<del class="diffchar deleted"><strong>20</strong></del>&quot; &gt;&lt;div class=&quot;code&quot;&gt;function TWVersion()</blockquote><blockquote>+ &lt;br /&gt;&lt;div class=&quot;codelisting_container&quot;&gt;&lt;div class=&quot;icon_copy_code far fa-clipboard&quot; tabindex=&quot;0&quot;  data-clipboard-target=&quot;#codebox<ins class="diffchar inserted"><strong>4</strong></ins>&quot; &gt;&lt;span class=&quot;copy_code_tooltiptext&quot;&gt;Copy to clipboard&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;codelisting&quot;  data-theme=&quot;off&quot;  data-wrap=&quot;1&quot;  dir=&quot;ltr&quot;  style=&quot;white-space:pre-wrap; overflow-wrap: break-word; word-wrap: break-word;&quot; id=&quot;codebox<ins class="diffchar inserted"><strong>4</strong></ins>&quot; &gt;&lt;div class=&quot;code&quot;&gt;function TWVersion()</blockquote><blockquote>- &lt;br /&gt;&lt;div class=&quot;codelisting_container&quot;&gt;&lt;div class=&quot;icon_copy_code far fa-clipboard&quot; tabindex=&quot;0&quot;  data-clipboard-target=&quot;#codebox<del class="diffchar deleted"><strong>21</strong></del>&quot; &gt;&lt;span class=&quot;copy_code_tooltiptext&quot;&gt;Copy to clipboard&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;codelisting&quot;  data-theme=&quot;off&quot;  data-wrap=&quot;1&quot;  dir=&quot;ltr&quot;  style=&quot;white-space:pre-wrap; overflow-wrap: break-word; word-wrap: break-word;&quot; id=&quot;codebox<del class="diffchar deleted"><strong>21</strong></del>&quot; &gt;&lt;div class=&quot;code&quot;&gt;// Set everything else, including defaults.</blockquote><blockquote>+ &lt;br /&gt;&lt;div class=&quot;codelisting_container&quot;&gt;&lt;div class=&quot;icon_copy_code far fa-clipboard&quot; tabindex=&quot;0&quot;  data-clipboard-target=&quot;#codebox<ins class="diffchar inserted"><strong>5</strong></ins>&quot; &gt;&lt;span class=&quot;copy_code_tooltiptext&quot;&gt;Copy to clipboard&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;codelisting&quot;  data-theme=&quot;off&quot;  data-wrap=&quot;1&quot;  dir=&quot;ltr&quot;  style=&quot;white-space:pre-wrap; overflow-wrap: break-word; word-wrap: break-word;&quot; id=&quot;codebox<ins class="diffchar inserted"><strong>5</strong></ins>&quot; &gt;&lt;div class=&quot;code&quot;&gt;// Set everything else, including defaults.</blockquote><blockquote>- &lt;br /&gt; &lt;div class=&quot;codelisting_container&quot;&gt;&lt;div class=&quot;icon_copy_code far fa-clipboard&quot; tabindex=&quot;0&quot;  data-clipboard-target=&quot;#codebox<del class="diffchar deleted"><strong>22</strong></del>&quot; &gt;&lt;span class=&quot;copy_code_tooltiptext&quot;&gt;Copy to clipboard&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;codelisting&quot;  data-theme=&quot;off&quot;  data-syntax=&quot;shell&quot;  data-wrap=&quot;1&quot;  dir=&quot;ltr&quot;  style=&quot;white-space:pre-wrap; overflow-wrap: break-word; word-wrap: break-word;&quot; id=&quot;codebox<del class="diffchar deleted"><strong>22</strong></del>&quot; &gt;&lt;div class=&quot;code&quot;&gt;[REL] Preparing \$VERSION release&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;</blockquote><blockquote>+ &lt;br /&gt; &lt;div class=&quot;codelisting_container&quot;&gt;&lt;div class=&quot;icon_copy_code far fa-clipboard&quot; tabindex=&quot;0&quot;  data-clipboard-target=&quot;#codebox<ins class="diffchar inserted"><strong>6</strong></ins>&quot; &gt;&lt;span class=&quot;copy_code_tooltiptext&quot;&gt;Copy to clipboard&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;codelisting&quot;  data-theme=&quot;off&quot;  data-syntax=&quot;shell&quot;  data-wrap=&quot;1&quot;  dir=&quot;ltr&quot;  style=&quot;white-space:pre-wrap; overflow-wrap: break-word; word-wrap: break-word;&quot; id=&quot;codebox<ins class="diffchar inserted"><strong>6</strong></ins>&quot; &gt;&lt;div class=&quot;code&quot;&gt;[REL] Preparing \$VERSION release&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;</blockquote><blockquote>- &lt;br /&gt;&lt;div class=&quot;codecaption&quot;&gt;Display Basic Help&lt;/div&gt;&lt;div class=&quot;codelisting_container&quot;&gt;&lt;div class=&quot;icon_copy_code far fa-clipboard&quot; tabindex=&quot;0&quot;  data-clipboard-target=&quot;#codebox<del class="diffchar deleted"><strong>23</strong></del>&quot; &gt;&lt;span class=&quot;copy_code_tooltiptext&quot;&gt;Copy to clipboard&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;codelisting&quot;  data-theme=&quot;off&quot;  data-syntax=&quot;shell&quot;  data-wrap=&quot;1&quot;  dir=&quot;ltr&quot;  style=&quot;white-space:pre-wrap; overflow-wrap: break-word; word-wrap: break-word;&quot; id=&quot;codebox<del class="diffchar deleted"><strong>23</strong></del>&quot; &gt;&lt;div class=&quot;code&quot;&gt;php doc/devtools/release.php --help&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;  to get the command help and see different options that can be used.</blockquote><blockquote>+ &lt;br /&gt;&lt;div class=&quot;codecaption&quot;&gt;Display Basic Help&lt;/div&gt;&lt;div class=&quot;codelisting_container&quot;&gt;&lt;div class=&quot;icon_copy_code far fa-clipboard&quot; tabindex=&quot;0&quot;  data-clipboard-target=&quot;#codebox<ins class="diffchar inserted"><strong>7</strong></ins>&quot; &gt;&lt;span class=&quot;copy_code_tooltiptext&quot;&gt;Copy to clipboard&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;codelisting&quot;  data-theme=&quot;off&quot;  data-syntax=&quot;shell&quot;  data-wrap=&quot;1&quot;  dir=&quot;ltr&quot;  style=&quot;white-space:pre-wrap; overflow-wrap: break-word; word-wrap: break-word;&quot; id=&quot;codebox<ins class="diffchar inserted"><strong>7</strong></ins>&quot; &gt;&lt;div class=&quot;code&quot;&gt;php doc/devtools/release.php --help<ins class="diffchar inserted"><strong><br>php src/devtools/release.php --help #since Tiki31 path changed</strong></ins>&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;  to get the command help and see different options that can be used.</blockquote><blockquote>- &lt;div class=&quot;codelisting_container&quot;&gt;&lt;div class=&quot;icon_copy_code far fa-clipboard&quot; tabindex=&quot;0&quot;  data-clipboard-target=&quot;#codebox<del class="diffchar deleted"><strong>24</strong></del>&quot; &gt;&lt;span class=&quot;copy_code_tooltiptext&quot;&gt;Copy to clipboard&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;codelisting&quot;  data-theme=&quot;off&quot;  data-wrap=&quot;1&quot;  dir=&quot;ltr&quot;  style=&quot;white-space:pre-wrap; overflow-wrap: break-word; word-wrap: break-word;&quot; id=&quot;codebox<del class="diffchar deleted"><strong>24</strong></del>&quot; &gt;&lt;div class=&quot;code&quot;&gt;php8.1 doc/devtools/release.php 29.0 preRC1  --devmode&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;</blockquote><blockquote>+ &lt;div class=&quot;codelisting_container&quot;&gt;&lt;div class=&quot;icon_copy_code far fa-clipboard&quot; tabindex=&quot;0&quot;  data-clipboard-target=&quot;#codebox<ins class="diffchar inserted"><strong>8</strong></ins>&quot; &gt;&lt;span class=&quot;copy_code_tooltiptext&quot;&gt;Copy to clipboard&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;codelisting&quot;  data-theme=&quot;off&quot;  data-wrap=&quot;1&quot;  dir=&quot;ltr&quot;  style=&quot;white-space:pre-wrap; overflow-wrap: break-word; word-wrap: break-word;&quot; id=&quot;codebox<ins class="diffchar inserted"><strong>8</strong></ins>&quot; &gt;&lt;div class=&quot;code&quot;&gt;php8.1 doc/devtools/release.php 29.0 preRC1  --devmode<ins class="diffchar inserted"><strong> <br>php8.1 src/devtools/release.php 31.0 preRC1  --devmode  #since Tiki31 path changed</strong></ins>&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;</blockquote><blockquote>- &lt;div class=&quot;codelisting_container&quot;&gt;&lt;div class=&quot;icon_copy_code far fa-clipboard&quot; tabindex=&quot;0&quot;  data-clipboard-target=&quot;#codebox<del class="diffchar deleted"><strong>25</strong></del>&quot; &gt;&lt;span class=&quot;copy_code_tooltiptext&quot;&gt;Copy to clipboard&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;codelisting&quot;  data-theme=&quot;off&quot;  data-wrap=&quot;1&quot;  dir=&quot;ltr&quot;  style=&quot;white-space:pre-wrap; overflow-wrap: break-word; word-wrap: break-word;&quot; id=&quot;codebox<del class="diffchar deleted"><strong>25</strong></del>&quot; &gt;&lt;div class=&quot;code&quot;&gt;php8.1 doc/devtools/release.php 29.1 pre --devmode&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;</blockquote><blockquote>+ &lt;div class=&quot;codelisting_container&quot;&gt;&lt;div class=&quot;icon_copy_code far fa-clipboard&quot; tabindex=&quot;0&quot;  data-clipboard-target=&quot;#codebox<ins class="diffchar inserted"><strong>9</strong></ins>&quot; &gt;&lt;span class=&quot;copy_code_tooltiptext&quot;&gt;Copy to clipboard&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;codelisting&quot;  data-theme=&quot;off&quot;  data-wrap=&quot;1&quot;  dir=&quot;ltr&quot;  style=&quot;white-space:pre-wrap; overflow-wrap: break-word; word-wrap: break-word;&quot; id=&quot;codebox<ins class="diffchar inserted"><strong>9</strong></ins>&quot; &gt;&lt;div class=&quot;code&quot;&gt;php8.1 doc/devtools/release.php 29.1 pre --devmode<ins class="diffchar inserted"><strong><br>php8.1 doc/devtools/release.php 31.0 pre  --devmode  #since Tiki31 path changed</strong></ins>&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;</blockquote><blockquote>- &lt;div class=&quot;codelisting_container&quot;&gt;&lt;div class=&quot;icon_copy_code far fa-clipboard&quot; tabindex=&quot;0&quot;  data-clipboard-target=&quot;#codebox<del class="diffchar deleted"><strong>26</strong></del>&quot; &gt;&lt;span class=&quot;copy_code_tooltiptext&quot;&gt;Copy to clipboard&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;codelisting&quot;  data-theme=&quot;off&quot;  data-syntax=&quot;shell&quot;  data-wrap=&quot;1&quot;  dir=&quot;ltr&quot;  style=&quot;white-space:pre-wrap; overflow-wrap: break-word; word-wrap: break-word;&quot; id=&quot;codebox<del class="diffchar deleted"><strong>26</strong></del>&quot; &gt;&lt;div class=&quot;code&quot;&gt;php doc/devtools/release.php 26.1&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;</blockquote><blockquote>+ &lt;div class=&quot;codelisting_container&quot;&gt;&lt;div class=&quot;icon_copy_code far fa-clipboard&quot; tabindex=&quot;0&quot;  data-clipboard-target=&quot;#codebox<ins class="diffchar inserted"><strong>10</strong></ins>&quot; &gt;&lt;span class=&quot;copy_code_tooltiptext&quot;&gt;Copy to clipboard&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;codelisting&quot;  data-theme=&quot;off&quot;  data-syntax=&quot;shell&quot;  data-wrap=&quot;1&quot;  dir=&quot;ltr&quot;  style=&quot;white-space:pre-wrap; overflow-wrap: break-word; word-wrap: break-word;&quot; id=&quot;codebox<ins class="diffchar inserted"><strong>10</strong></ins>&quot; &gt;&lt;div class=&quot;code&quot;&gt;php doc/devtools/release.php 26.1<ins class="diffchar inserted"><strong><br>php src/devtools/release.php 31.1 # since tiki31 path changed</strong></ins>&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;</blockquote><blockquote>- &lt;div class=&quot;codecaption&quot;&gt;Unnecessary for Tiki31 and later&lt;/div&gt;&lt;div class=&quot;codelisting_container&quot;&gt;&lt;div class=&quot;icon_copy_code far fa-clipboard&quot; tabindex=&quot;0&quot;  data-clipboard-target=&quot;#codebox<del class="diffchar deleted"><strong>27</strong></del>&quot; &gt;&lt;span class=&quot;copy_code_tooltiptext&quot;&gt;Copy to clipboard&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;codelisting&quot;  data-theme=&quot;off&quot;  data-syntax=&quot;shell&quot;  data-wrap=&quot;1&quot;  dir=&quot;ltr&quot;  style=&quot;white-space:pre-wrap; overflow-wrap: break-word; word-wrap: break-word;&quot; id=&quot;codebox<del class="diffchar deleted"><strong>27</strong></del>&quot; &gt;&lt;div class=&quot;code&quot;&gt;php -d mysqli.default_host=HOST -d mysqli.default_user=USER -d mysqli.default_pw=PASS doc/devtools/release.php 28.2&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt; (replace the version number with the corresponding release version)</blockquote><blockquote>+ &lt;div class=&quot;codecaption&quot;&gt;Unnecessary for Tiki31 and later&lt;/div&gt;&lt;div class=&quot;codelisting_container&quot;&gt;&lt;div class=&quot;icon_copy_code far fa-clipboard&quot; tabindex=&quot;0&quot;  data-clipboard-target=&quot;#codebox<ins class="diffchar inserted"><strong>11</strong></ins>&quot; &gt;&lt;span class=&quot;copy_code_tooltiptext&quot;&gt;Copy to clipboard&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;codelisting&quot;  data-theme=&quot;off&quot;  data-syntax=&quot;shell&quot;  data-wrap=&quot;1&quot;  dir=&quot;ltr&quot;  style=&quot;white-space:pre-wrap; overflow-wrap: break-word; word-wrap: break-word;&quot; id=&quot;codebox<ins class="diffchar inserted"><strong>11</strong></ins>&quot; &gt;&lt;div class=&quot;code&quot;&gt;php -d mysqli.default_host=HOST -d mysqli.default_user=USER -d mysqli.default_pw=PASS doc/devtools/release.php 28.2&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt; (replace the version number with the corresponding release version)</blockquote><blockquote>- &lt;div class=&quot;codecaption&quot;&gt;Unnecessary for Tiki31 and later, use simplified command instead&lt;/div&gt;&lt;div class=&quot;codelisting_container&quot;&gt;&lt;div class=&quot;icon_copy_code far fa-clipboard&quot; tabindex=&quot;0&quot;  data-clipboard-target=&quot;#codebox2<del class="diffchar deleted"><strong>8</strong></del>&quot; &gt;&lt;span class=&quot;copy_code_tooltiptext&quot;&gt;Copy to clipboard&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;codelisting&quot;  data-theme=&quot;off&quot;  data-syntax=&quot;shell&quot;  data-wrap=&quot;1&quot;  dir=&quot;ltr&quot;  style=&quot;white-space:pre-wrap; overflow-wrap: break-word; word-wrap: break-word;&quot; id=&quot;codebox2<del class="diffchar deleted"><strong>8</strong></del>&quot; &gt;&lt;div class=&quot;code&quot;&gt;php -d mysqli.default_host=HOST -d mysqli.default_user=USER -d mysqli.default_pw=PASS doc/devtools/release.php 29.0 RC1&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;</blockquote><blockquote>+ &lt;div class=&quot;codecaption&quot;&gt;Unnecessary for Tiki31 and later, use simplified command instead&lt;/div&gt;&lt;div class=&quot;codelisting_container&quot;&gt;&lt;div class=&quot;icon_copy_code far fa-clipboard&quot; tabindex=&quot;0&quot;  data-clipboard-target=&quot;#codebox<ins class="diffchar inserted"><strong>1</strong></ins>2&quot; &gt;&lt;span class=&quot;copy_code_tooltiptext&quot;&gt;Copy to clipboard&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;codelisting&quot;  data-theme=&quot;off&quot;  data-syntax=&quot;shell&quot;  data-wrap=&quot;1&quot;  dir=&quot;ltr&quot;  style=&quot;white-space:pre-wrap; overflow-wrap: break-word; word-wrap: break-word;&quot; id=&quot;codebox<ins class="diffchar inserted"><strong>1</strong></ins>2&quot; &gt;&lt;div class=&quot;code&quot;&gt;php -d mysqli.default_host=HOST -d mysqli.default_user=USER -d mysqli.default_pw=PASS doc/devtools/release.php 29.0 RC1&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;</blockquote><blockquote>- &lt;div class=&quot;codecaption&quot;&gt;Check for changes made by the release script before validating commits&lt;/div&gt;&lt;div class=&quot;codelisting_container&quot;&gt;&lt;div class=&quot;icon_copy_code far fa-clipboard&quot; tabindex=&quot;0&quot;  data-clipboard-target=&quot;#codebox<del class="diffchar deleted"><strong>29</strong></del>&quot; &gt;&lt;span class=&quot;copy_code_tooltiptext&quot;&gt;Copy to clipboard&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;codelisting&quot;  data-theme=&quot;off&quot;  data-syntax=&quot;shell&quot;  data-wrap=&quot;1&quot;  dir=&quot;ltr&quot;  style=&quot;white-space:pre-wrap; overflow-wrap: break-word; word-wrap: break-word;&quot; id=&quot;codebox<del class="diffchar deleted"><strong>29</strong></del>&quot; &gt;&lt;div class=&quot;code&quot;&gt;git  status</blockquote><blockquote>+ &lt;div class=&quot;codecaption&quot;&gt;Check for changes made by the release script before validating commits&lt;/div&gt;&lt;div class=&quot;codelisting_container&quot;&gt;&lt;div class=&quot;icon_copy_code far fa-clipboard&quot; tabindex=&quot;0&quot;  data-clipboard-target=&quot;#codebox<ins class="diffchar inserted"><strong>13</strong></ins>&quot; &gt;&lt;span class=&quot;copy_code_tooltiptext&quot;&gt;Copy to clipboard&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;codelisting&quot;  data-theme=&quot;off&quot;  data-syntax=&quot;shell&quot;  data-wrap=&quot;1&quot;  dir=&quot;ltr&quot;  style=&quot;white-space:pre-wrap; overflow-wrap: break-word; word-wrap: break-word;&quot; id=&quot;codebox<ins class="diffchar inserted"><strong>13</strong></ins>&quot; &gt;&lt;div class=&quot;code&quot;&gt;git  status</blockquote><blockquote>- &lt;div class=&quot;codelisting_container&quot;&gt;&lt;div class=&quot;icon_copy_code far fa-clipboard&quot; tabindex=&quot;0&quot;  data-clipboard-target=&quot;#codebox<del class="diffchar deleted"><strong>30</strong></del>&quot; &gt;&lt;span class=&quot;copy_code_tooltiptext&quot;&gt;Copy to clipboard&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;codelisting&quot;  data-theme=&quot;off&quot;  data-syntax=&quot;shell&quot;  data-wrap=&quot;1&quot;  dir=&quot;ltr&quot;  style=&quot;white-space:pre-wrap; overflow-wrap: break-word; word-wrap: break-word;&quot; id=&quot;codebox<del class="diffchar deleted"><strong>30</strong></del>&quot; &gt;&lt;div class=&quot;code&quot;&gt;cd ~/tikipack/$VERSION</blockquote><blockquote>+ &lt;div class=&quot;codelisting_container&quot;&gt;&lt;div class=&quot;icon_copy_code far fa-clipboard&quot; tabindex=&quot;0&quot;  data-clipboard-target=&quot;#codebox<ins class="diffchar inserted"><strong>14</strong></ins>&quot; &gt;&lt;span class=&quot;copy_code_tooltiptext&quot;&gt;Copy to clipboard&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;codelisting&quot;  data-theme=&quot;off&quot;  data-syntax=&quot;shell&quot;  data-wrap=&quot;1&quot;  dir=&quot;ltr&quot;  style=&quot;white-space:pre-wrap; overflow-wrap: break-word; word-wrap: break-word;&quot; id=&quot;codebox<ins class="diffchar inserted"><strong>14</strong></ins>&quot; &gt;&lt;div class=&quot;code&quot;&gt;cd ~/tikipack/$VERSION</blockquote><blockquote>- &lt;div class=&quot;codelisting_container&quot;&gt;&lt;div class=&quot;icon_copy_code far fa-clipboard&quot; tabindex=&quot;0&quot;  data-clipboard-target=&quot;#codebox<del class="diffchar deleted"><strong>3</strong></del>1&quot; &gt;&lt;span class=&quot;copy_code_tooltiptext&quot;&gt;Copy to clipboard&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;codelisting&quot;  data-theme=&quot;off&quot;  data-wrap=&quot;1&quot;  dir=&quot;ltr&quot;  style=&quot;white-space:pre-wrap; overflow-wrap: break-word; word-wrap: break-word;&quot; id=&quot;codebox<del class="diffchar deleted"><strong>3</strong></del>1&quot; &gt;&lt;div class=&quot;code&quot;&gt;User jsmith seeks to put tiki-12.1.* .7z .zip .tgz .bz2 to the 12.1 directory of his project, tikiwiki:</blockquote><blockquote>+ &lt;div class=&quot;codelisting_container&quot;&gt;&lt;div class=&quot;icon_copy_code far fa-clipboard&quot; tabindex=&quot;0&quot;  data-clipboard-target=&quot;#codebox1<ins class="diffchar inserted"><strong>5</strong></ins>&quot; &gt;&lt;span class=&quot;copy_code_tooltiptext&quot;&gt;Copy to clipboard&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;codelisting&quot;  data-theme=&quot;off&quot;  data-wrap=&quot;1&quot;  dir=&quot;ltr&quot;  style=&quot;white-space:pre-wrap; overflow-wrap: break-word; word-wrap: break-word;&quot; id=&quot;codebox1<ins class="diffchar inserted"><strong>5</strong></ins>&quot; &gt;&lt;div class=&quot;code&quot;&gt;User jsmith seeks to put tiki-12.1.* .7z .zip .tgz .bz2 to the 12.1 directory of his project, tikiwiki:</blockquote><blockquote>- &lt;div class=&quot;codelisting_container&quot;&gt;&lt;div class=&quot;icon_copy_code far fa-clipboard&quot; tabindex=&quot;0&quot;  data-clipboard-target=&quot;#codebox<del class="diffchar deleted"><strong>32</strong></del>&quot; &gt;&lt;span class=&quot;copy_code_tooltiptext&quot;&gt;Copy to clipboard&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;codelisting&quot;  data-theme=&quot;off&quot;  data-wrap=&quot;1&quot;  dir=&quot;ltr&quot;  style=&quot;white-space:pre-wrap; overflow-wrap: break-word; word-wrap: break-word;&quot; id=&quot;codebox<del class="diffchar deleted"><strong>32</strong></del>&quot; &gt;&lt;div class=&quot;code&quot;&gt;[REL]Closing release 12.1beta&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;</blockquote><blockquote>+ &lt;div class=&quot;codelisting_container&quot;&gt;&lt;div class=&quot;icon_copy_code far fa-clipboard&quot; tabindex=&quot;0&quot;  data-clipboard-target=&quot;#codebox<ins class="diffchar inserted"><strong>16</strong></ins>&quot; &gt;&lt;span class=&quot;copy_code_tooltiptext&quot;&gt;Copy to clipboard&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;codelisting&quot;  data-theme=&quot;off&quot;  data-wrap=&quot;1&quot;  dir=&quot;ltr&quot;  style=&quot;white-space:pre-wrap; overflow-wrap: break-word; word-wrap: break-word;&quot; id=&quot;codebox<ins class="diffchar inserted"><strong>16</strong></ins>&quot; &gt;&lt;div class=&quot;code&quot;&gt;[REL]Closing release 12.1beta&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;</blockquote>]]></summary>
    <published>2026-10-08T21:08:48+00:00</published>
    <updated>2026-10-08T21:08:48+00:00</updated>
    <link rel="alternate" type="text/html" href="https://dev.tiki.org/tiki-index.php?page=Release+Steps"/>
    <id>https://dev.tiki.org/tiki-index.php?page=Release+Steps</id>
  </entry>
  <entry>
    <title type="html"><![CDATA[How to Submit a new item on the Wishlist]]></title>
    <summary type="html"><![CDATA[<blockquote>- &lt;br /&gt;&lt;div id=&#039;toc&#039;&gt;&lt;ul class=&quot;toc&quot;&gt;&lt;/ul&gt;&lt;!--toc--&gt;&lt;/div&gt;</blockquote><blockquote>+ &lt;br /&gt;&lt;div id=&#039;toc&#039;&gt;&lt;ul class=&quot;toc&quot;<ins class="diffchar inserted"><strong>&gt;&lt;li&gt;&lt;a href=&#039;#Tutorial&#039; class=&#039;link&#039;&gt; Tutorial&lt;/a&gt;<br>&lt;/li&gt;&lt;li&gt;&lt;a href=&#039;#Read_first&#039; class=&#039;link&#039;&gt; Read first&lt;/a&gt;<br>&lt;/li&gt;&lt;li&gt;&lt;a href=&#039;#Fields_to_be_filled_in&#039; class=&#039;link&#039;&gt; Fields to be filled in&lt;/a&gt;<br>&lt;ul&gt;&lt;li&gt;&lt;a href=&#039;#Rating&#039; class=&#039;link&#039;&gt; Rating&lt;/a&gt;<br>&lt;/li&gt;&lt;li&gt;&lt;a href=&#039;#Subject&#039; class=&#039;link&#039;&gt; Subject&lt;/a&gt;<br>&lt;/li&gt;&lt;li&gt;&lt;a href=&#039;#Priority&#039; class=&#039;link&#039;&gt; Priority&lt;/a&gt;<br>&lt;/li&gt;&lt;li&gt;&lt;a href=&#039;#Feature&#039; class=&#039;link&#039;&gt; Feature&lt;/a&gt;<br>&lt;/li&gt;&lt;li&gt;&lt;a href=&#039;#Data_type&#039; class=&#039;link&#039;&gt; Data type&lt;/a&gt;<br>&lt;/li&gt;&lt;li&gt;&lt;a href=&#039;#Version&#039; class=&#039;link&#039;&gt; Version&lt;/a&gt;<br>&lt;/li&gt;&lt;li&gt;&lt;a href=&#039;#Problem&#039; class=&#039;link&#039;&gt; Problem&lt;/a&gt;<br>&lt;/li&gt;&lt;li&gt;&lt;a href=&#039;#Solution&#039; class=&#039;link&#039;&gt; Solution&lt;/a&gt;<br>&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&#039;#Demonstrate_your_Bug_on_show.tiki.org_show.t.o_&#039; class=&#039;link&#039;&gt; Demonstrate your Bug on show.tiki.org (show.t.o)&lt;/a&gt;<br>&lt;/li&gt;&lt;li&gt;&lt;a href=&#039;#Related_Projects&#039; class=&#039;link&#039;&gt; Related Projects&lt;/a&gt;&lt;/li</strong></ins>&gt;&lt;/ul&gt;&lt;!--toc--&gt;&lt;/div&gt;</blockquote><blockquote>-     &lt;div id=&quot;kaltura_player<del class="diffchar deleted"><strong>2</strong></del>&quot; style=&quot;position:absolute;top:0;left:0;width:100%;height:100%&quot;&gt;&lt;/div&gt;</blockquote><blockquote>+     &lt;div id=&quot;kaltura_player<ins class="diffchar inserted"><strong>1</strong></ins>&quot; style=&quot;position:absolute;top:0;left:0;width:100%;height:100%&quot;&gt;&lt;/div&gt;</blockquote><blockquote>- <br /></blockquote><blockquote>+ <div  class="alert alert-info alert-dismissible" role="alert"><button type="button" id="btn-close" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button><div class="alert-heading h4"><span class="icon icon-information fas fa-info-circle "   ></span>&nbsp;<span class="rboxtitle">Please note</span></div><div class="rboxcontent" style="display: inline">Show.tiki.org is not configured properly so the information below is not applicable currently </div></div></blockquote><blockquote>+ </blockquote><blockquote>+ </blockquote><blockquote>- &lt;/li&gt;&lt;li&gt; &lt;a href=&quot;How-to-figure-out-which-commit-causes-a-bug&quot; title=&quot;&quot; class=&quot;wiki wiki_page&quot;&gt;How to figure out wh<del class="diffchar deleted"><strong>at revis</strong></del>i<del class="diffchar deleted"><strong>on</strong></del> <del class="diffchar deleted"><strong>nu</strong></del>m<del class="diffchar deleted"><strong>ber</strong></del> causes a bug&lt;/a&gt;</blockquote><blockquote>+ &lt;/li&gt;&lt;li&gt; &lt;a href=&quot;How-to-figure-out-which-commit-causes-a-bug&quot; title=&quot;<ins class="diffchar inserted"><strong>How to figure out which commit causes a bug</strong></ins>&quot; class=&quot;wiki wiki_page&quot;&gt;How to figure out whi<ins class="diffchar inserted"><strong>ch</strong></ins> <ins class="diffchar inserted"><strong>co</strong></ins>m<ins class="diffchar inserted"><strong>mit</strong></ins> causes a bug&lt;/a&gt;</blockquote>]]></summary>
    <published>2026-10-06T12:18:54+00:00</published>
    <updated>2026-10-06T12:18:54+00:00</updated>
    <link rel="alternate" type="text/html" href="https://dev.tiki.org/tiki-index.php?page=How+to+Submit+a+new+item+on+the+Wishlist"/>
    <id>https://dev.tiki.org/tiki-index.php?page=How+to+Submit+a+new+item+on+the+Wishlist</id>
  </entry>
  <entry>
    <title type="html"><![CDATA[rss_gabarit]]></title>
    <published>2026-09-28T19:37:08+00:00</published>
    <updated>2026-09-28T19:37:08+00:00</updated>
    <link rel="alternate" type="text/html" href="https://dev.tiki.org/tiki-index.php?page=rss_gabarit"/>
    <id>https://dev.tiki.org/tiki-index.php?page=rss_gabarit</id>
  </entry>
  <entry>
    <title type="html"><![CDATA[Decision Analysis for Image Editing Library in Tiki]]></title>
    <summary type="html"><![CDATA[<blockquote>+ </blockquote><blockquote>+ </blockquote><blockquote>- &lt;br /&gt;The main points are<del class="diffchar deleted"><strong> the</strong></del> license<del class="diffchar deleted"><strong>,</strong></del> project activity<del class="diffchar deleted"><strong>,</strong></del> bundle size<del class="diffchar deleted"><strong>,</strong></del> browser and mobile support<del class="diffchar deleted"><strong>,</strong></del> accessibility<del class="diffchar deleted"><strong>,</strong></del> Vue compatibility<del class="diffchar deleted"><strong>,</strong></del> image quality<del class="diffchar deleted"><strong>,</strong></del> integration effort<del class="diffchar deleted"><strong>,</strong></del> and long-term maintenance. Existing use in Tiki or WikiSuite should also count in an option&#039;s favor.</blockquote><blockquote>+ &lt;br /&gt;The main points are<ins class="diffchar inserted"><strong>:<br>&lt;/p&gt;<br><br>&lt;ul&gt;&lt;li&gt;</strong></ins> license<ins class="diffchar inserted"><strong>;<br>&lt;/li&gt;&lt;li&gt;</strong></ins> project activity<ins class="diffchar inserted"><strong> and recent maintenance;<br>&lt;/li&gt;&lt;li&gt;</strong></ins> bundle size<ins class="diffchar inserted"><strong>;<br>&lt;/li&gt;&lt;li&gt;</strong></ins> browser and mobile support<ins class="diffchar inserted"><strong>;<br>&lt;/li&gt;&lt;li&gt;</strong></ins> accessibility<ins class="diffchar inserted"><strong>;<br>&lt;/li&gt;&lt;li&gt;</strong></ins> Vue compatibility<ins class="diffchar inserted"><strong>;<br>&lt;/li&gt;&lt;li&gt;</strong></ins> image quality<ins class="diffchar inserted"><strong>;<br>&lt;/li&gt;&lt;li&gt;</strong></ins> integration effort<ins class="diffchar inserted"><strong>;</strong></ins> and<ins class="diffchar inserted"><strong><br>&lt;/li&gt;&lt;li&gt;</strong></ins> long-term maintenance.<ins class="diffchar inserted"><strong><br>&lt;p&gt;<br>&lt;/li&gt;&lt;/ul&gt;&lt;br</strong></ins> <ins class="diffchar inserted"><strong>/&gt;</strong></ins>Existing use in Tiki or WikiSuite should also count in an option&#039;s favor<ins class="diffchar inserted"><strong>. It is also useful to check whether established upload or image-management projects use the same library</strong></ins>.</blockquote><blockquote>- &lt;br /&gt;Cropper.js is focused on cropping and image transforms. It handles the difficult selection and transform logic, works independently of a particular framework, and is MIT licensed<del class="diffchar deleted"><strong>. The current MR shows that it can be integrated with the File Gallery uploader</strong></del>.</blockquote><blockquote>+ &lt;br /&gt;Cropper.js is focused on cropping and image transforms. It handles the difficult selection and transform logic, works independently of a particular framework, and is MIT licensed.</blockquote><blockquote>- &lt;p&gt;The tradeoff is that it would be a new Tiki dependency. Tiki still needs to provide the modal, controls, mobile layout, accessibility, effects, and upload integration. Canvas is also still used to render the final image and turn it back into a file.</blockquote><blockquote>+ <ins class="diffchar inserted"><strong>&lt;p&gt;The current MR shows that it can be integrated with the File Gallery uploader.<br>&lt;/p&gt;<br><br>&lt;p&gt;Cropper.js supports the main operations needed here, including cropping, rotation, scaling, and flipping. Basic effects can still be applied when rendering the final result with Canvas.<br>&lt;/p&gt;<br><br></strong></ins>&lt;p&gt;The trade<ins class="diffchar inserted"><strong>-</strong></ins>off is that it would be a new Tiki dependency. Tiki still needs to provide the modal, controls, mobile layout, accessibility, effects, and upload integration. Canvas is also still used to render the final image and turn it back into a file.<ins class="diffchar inserted"><strong><br>&lt;/p&gt;<br><br>&lt;p&gt;Cropper.js is also used by Uppy in its official image editor plugin:<br>&lt;br /&gt;&lt;a class=&quot;wiki external&quot; target=&quot;_blank&quot; title=&quot;External link&quot; href=&quot;https://uppy.io/docs/image-editor/&quot; rel=&quot;external&quot;&gt;Uppy Image Editor&lt;/a&gt;&lt;img src=&quot;img/icons/green_question.png&quot; alt=&quot;Question&quot; width=&quot;16&quot; height=&quot;16&quot; name=&quot;link-external&quot; title=&quot;Question&quot; class=&quot;icon&quot; /&gt;<br>&lt;/p&gt;<br><br>&lt;p&gt;This is useful as an external example of Cropper.js being used as part of an established upload workflow.<br>&lt;/p&gt;<br><br>&lt;p&gt;Reference:<br>&lt;br /&gt;&lt;a class=&quot;wiki external&quot; target=&quot;_blank&quot; title=&quot;External link&quot; href=&quot;https://github.com/fengyuanchen/cropperjs&quot; rel=&quot;external&quot;&gt;Cropper.js&lt;/a&gt;&lt;img src=&quot;img/icons/green_question.png&quot; alt=&quot;Question&quot; width=&quot;16&quot; height=&quot;16&quot; name=&quot;link-external&quot; title=&quot;Question&quot; class=&quot;icon&quot; /&gt;</strong></ins></blockquote><blockquote>- &lt;br /&gt;The H5P integration already ships image-editing code based on Darkroom.js and Fabric.js.<del class="diffchar deleted"><strong> </strong></del>However, that code expects the H5P editor environment and its globals and assets. It is not a standalone component that the Vue uploader can import directly<del class="diffchar deleted"><strong>, so r</strong></del>eusing it would require separating and maintaining the <del class="diffchar deleted"><strong>H5P</strong></del>-specific parts.</blockquote><blockquote>+ &lt;br /&gt;The H5P integration already ships image-editing code based on Darkroom.js and Fabric.js.<ins class="diffchar inserted"><strong><br>&lt;/p&gt;<br><br>&lt;p&gt;</strong></ins>However, that code expects the H5P editor environment and its globals and assets. It is not a standalone component that the Vue uploader can import directly<ins class="diffchar inserted"><strong>.<br>&lt;/p&gt;<br><br>&lt;p&gt;R</strong></ins>eusing it would require separating<ins class="diffchar inserted"><strong> the H5P-specific parts</strong></ins> and maintaining th<ins class="diffchar inserted"><strong>at int</strong></ins>e<ins class="diffchar inserted"><strong>gration</strong></ins> <ins class="diffchar inserted"><strong>separately.<br>&lt;/p&gt;<br><br>&lt;p&gt;Darkroom.js itself is discontinued:<br>&lt;br /&gt;&lt;a class=&quot;wiki external&quot; target=&quot;_blank&quot; title=&quot;External link&quot; href=&quot;https://github.com/MattKetmo/darkroomjs&quot; rel=&quot;external&quot;&gt;Darkroom.js&lt;/a&gt;&lt;img src=&quot;img/icons/green_question.png&quot; alt=&quot;Question&quot; width=&quot;16&quot; height=&quot;16&quot; name=&quot;link</strong></ins>-<ins class="diffchar inserted"><strong>external&quot; title=&quot;Que</strong></ins>s<ins class="diffchar inserted"><strong>tion&quot; class=&quot;icon&quot; /&gt;<br>&lt;/</strong></ins>p<ins class="diffchar inserted"><strong>&gt;<br><br>&lt;p&gt;Fabric.js is still activ</strong></ins>e<ins class="diffchar inserted"><strong> and </strong></ins>c<ins class="diffchar inserted"><strong>an be used </strong></ins>i<ins class="diffchar inserted"><strong>ndependently:<br>&lt;br /&gt;&lt;a class=&quot;wiki external&quot; target=&quot;_blank&quot; title=&quot;External link&quot; hre</strong></ins>f<ins class="diffchar inserted"><strong>=&quot;https://fabr</strong></ins>ic<ins class="diffchar inserted"><strong>js.com/&quot;</strong></ins> <ins class="diffchar inserted"><strong>rel=&quot;external&quot;&gt;Fabric.js&lt;/a&gt;&lt;img src=&quot;img/icons/green_question.</strong></ins>p<ins class="diffchar inserted"><strong>ng&quot; </strong></ins>a<ins class="diffchar inserted"><strong>lt=&quot;Question&quot; width=&quot;16&quot; height=&quot;16&quot; name=&quot;link-exte</strong></ins>r<ins class="diffchar inserted"><strong>nal&quot; </strong></ins>t<ins class="diffchar inserted"><strong>itle=&quot;Que</strong></ins>s<ins class="diffchar inserted"><strong>tion&quot; class=&quot;icon&quot; /&gt;<br>&lt;/p&gt;<br><br>&lt;p&gt;Fabric</strong></ins>.<ins class="diffchar inserted"><strong>js is a general-purpose canvas library, not a ready-made image cropper. Tiki would still need to build much of the editing interface and interaction logic.<br>&lt;/p&gt;<br><br>&lt;p&gt;Reference:<br>&lt;br /&gt;&lt;a class=&quot;wiki external&quot; target=&quot;_blank&quot; title=&quot;External link&quot; href=&quot;https://doc.tiki.org/H5P&quot; rel=&quot;external&quot;&gt;Tiki H5P documentation&lt;/a&gt;&lt;img src=&quot;img/icons/green_question.png&quot; alt=&quot;Question&quot; width=&quot;16&quot; height=&quot;16&quot; name=&quot;link-external&quot; title=&quot;Question&quot; class=&quot;icon&quot; /&gt;</strong></ins></blockquote><blockquote>- &lt;br /&gt;Canvas works well for effects and<del class="diffchar deleted"><strong> for</strong></del> exporting the edited image<del class="diffchar deleted"><strong>,</strong></del> <del class="diffchar deleted"><strong>and i</strong></del>t <del class="diffchar deleted"><strong>doe</strong></del>s<del class="diffchar deleted"><strong> n</strong></del>o<del class="diffchar deleted"><strong>t</strong></del> a<del class="diffchar deleted"><strong>dd a dependency. The d</strong></del>o<del class="diffchar deleted"><strong>wns</strong></del>id<del class="diffchar deleted"><strong>e i</strong></del>s <del class="diffchar deleted"><strong>th</strong></del>a<del class="diffchar deleted"><strong>t Tiki woul</strong></del>d<del class="diffchar deleted"><strong> have to mainta</strong></del>in a<del class="diffchar deleted"><strong>ll crop selectio</strong></del>n<del class="diffchar deleted"><strong>, transf</strong></del>o<del class="diffchar deleted"><strong>rm, mouse, </strong></del>t<del class="diffchar deleted"><strong>ouc</strong></del>h<del class="diffchar deleted"><strong>, and pr</strong></del>e<del class="diffchar deleted"><strong>view behavio</strong></del>r <del class="diffchar deleted"><strong>itself. That is much more custom co</strong></del>de<del class="diffchar deleted"><strong> than using Canvas only for final r</strong></del>ende<del class="diffchar deleted"><strong>ri</strong></del>n<del class="diffchar deleted"><strong>g</strong></del>.</blockquote><blockquote>+ &lt;br /&gt;<ins class="diffchar inserted"><strong>The browser </strong></ins>Canvas<ins class="diffchar inserted"><strong> API</strong></ins> works well for<ins class="diffchar inserted"><strong> applying</strong></ins> effects and exporting the edited image<ins class="diffchar inserted"><strong>.</strong></ins> <ins class="diffchar inserted"><strong>I</strong></ins>t <ins class="diffchar inserted"><strong>al</strong></ins>so a<ins class="diffchar inserted"><strong>v</strong></ins>oids ad<ins class="diffchar inserted"><strong>d</strong></ins>in<ins class="diffchar inserted"><strong>g</strong></ins> another de<ins class="diffchar inserted"><strong>p</strong></ins>enden<ins class="diffchar inserted"><strong>cy</strong></ins>.</blockquote><blockquote>+ <p>The downside is that Tiki would have to maintain the crop selection, transforms, mouse interactions, touch interactions, previews, controls, and other editor behavior itself.</blockquote><blockquote>+ </p></blockquote><blockquote>+ </blockquote><blockquote>+ <p>That would require much more custom code than using Canvas mainly for final rendering.</blockquote><blockquote>+ </p></blockquote><blockquote>+ </blockquote><blockquote>+ <p>Reference:</blockquote><blockquote>+ <br /><a class="wiki external" target="_blank" title="External link" href="https://developer.mozilla.org/en-US/docs/Web/API/Canvas_API" rel="external">MDN Canvas API</a><img src="img/icons/green_question.png" alt="Question" width="16" height="16" name="link-external" title="Question" class="icon" /></blockquote><blockquote>+ </p></blockquote><blockquote>+ </blockquote><blockquote>+ <h2 class="showhide_heading d-flex justify-content-start" id="TOAST_UI_Image_Editor"> TOAST UI Image&nbsp;Editor<a href="#TOAST_UI_Image_Editor" class="heading-link" aria-label="heading link"><span class="icon icon-link fas fa-link "   ></span></a></h2></blockquote><blockquote>+ <br />TOAST UI Image Editor provides cropping, rotation, flipping, filters, drawing, text, masks, and other editing tools.</blockquote><blockquote>+ </blockquote><blockquote>+ <p>It covers the required features, but it provides much more functionality than the current Tiki use case needs.</blockquote><blockquote>+ </p></blockquote><blockquote>+ </blockquote><blockquote>+ <p>It would also add a larger editor interface and more code to the uploader. Recent maintenance activity is limited, which makes it less attractive as a new dependency.</blockquote><blockquote>+ </p></blockquote><blockquote>+ </blockquote><blockquote>+ <p>References:</blockquote><blockquote>+ <br /><a class="wiki external" target="_blank" title="External link" href="https://github.com/nhn/tui.image-editor" rel="external">TOAST UI Image Editor</a><img src="img/icons/green_question.png" alt="Question" width="16" height="16" name="link-external" title="Question" class="icon" /></blockquote><blockquote>+ <br /><a class="wiki external" target="_blank" title="External link" href="https://www.npmjs.com/package/tui-image-editor" rel="external">TOAST UI Image Editor on npm</a><img src="img/icons/green_question.png" alt="Question" width="16" height="16" name="link-external" title="Question" class="icon" /></blockquote><blockquote>+ </p></blockquote><blockquote>+ </blockquote><blockquote>+ <h2 class="showhide_heading d-flex justify-content-start" id="Filerobot_Image_Editor"> Filerobot Image&nbsp;Editor<a href="#Filerobot_Image_Editor" class="heading-link" aria-label="heading link"><span class="icon icon-link fas fa-link "   ></span></a></h2></blockquote><blockquote>+ <p></blockquote><blockquote>+ <br />Filerobot Image Editor is an MIT-licensed image editor with cropping, rotation, filters, text, shapes, and other tools.</blockquote><blockquote>+ </p></blockquote><blockquote>+ </blockquote><blockquote>+ <p>It is actively maintained, but it offers more functionality than we currently need.</blockquote><blockquote>+ </p></blockquote><blockquote>+ </blockquote><blockquote>+ <p>Its integrations are also mainly focused on React, so using it in the Vue uploader would require extra integration work.</blockquote><blockquote>+ </p></blockquote><blockquote>+ </blockquote><blockquote>+ <p>Reference:</blockquote><blockquote>+ <br /><a class="wiki external" target="_blank" title="External link" href="https://github.com/scaleflex/filerobot-image-editor" rel="external">Filerobot Image Editor</a><img src="img/icons/green_question.png" alt="Question" width="16" height="16" name="link-external" title="Question" class="icon" /></blockquote><blockquote>+ </p></blockquote><blockquote>+ </blockquote><blockquote>+ <h2 class="showhide_heading d-flex justify-content-start" id="Croppie"> Croppie<a href="#Croppie" class="heading-link" aria-label="heading link"><span class="icon icon-link fas fa-link "   ></span></a></h2></blockquote><blockquote>+ <p></blockquote><blockquote>+ <br />Croppie is a small MIT-licensed cropping library.</blockquote><blockquote>+ </p></blockquote><blockquote>+ </blockquote><blockquote>+ <p>It is mainly focused on cropping and does not cover the full set of operations required for this implementation.</blockquote><blockquote>+ </p></blockquote><blockquote>+ </blockquote><blockquote>+ <p>Its recent maintenance activity is also limited.</blockquote><blockquote>+ </p></blockquote><blockquote>+ </blockquote><blockquote>+ <p>References:</blockquote><blockquote>+ <br /><a class="wiki external" target="_blank" title="External link" href="https://github.com/Foliotek/Croppie" rel="external">Croppie</a><img src="img/icons/green_question.png" alt="Question" width="16" height="16" name="link-external" title="Question" class="icon" /></blockquote><blockquote>+ <br /><a class="wiki external" target="_blank" title="External link" href="https://www.npmjs.com/package/croppie" rel="external">Croppie on npm</a><img src="img/icons/green_question.png" alt="Question" width="16" height="16" name="link-external" title="Question" class="icon" /></blockquote><blockquote>+ </p></blockquote><blockquote>+ </blockquote><blockquote>+ <h2 class="showhide_heading d-flex justify-content-start" id="vue-advanced-cropper"> vue-advanced-cropper<a href="#vue-advanced-cropper" class="heading-link" aria-label="heading link"><span class="icon icon-link fas fa-link "   ></span></a></h2></blockquote><blockquote>+ <p></blockquote><blockquote>+ <br />vue-advanced-cropper is designed specifically for Vue and would fit naturally into a Vue component.</blockquote><blockquote>+ </p></blockquote><blockquote>+ </blockquote><blockquote>+ <p>However, it  mainly focuses on cropping and does not provide the full set of image editing features needed here.</blockquote><blockquote>+ </p></blockquote><blockquote>+ </blockquote><blockquote>+ <p>Its recent release activity is also limited.</blockquote><blockquote>+ </p></blockquote><blockquote>+ </blockquote><blockquote>+ <p>References:</blockquote><blockquote>+ <br /><a class="wiki external" target="_blank" title="External link" href="https://github.com/advanced-cropper/vue-advanced-cropper" rel="external">vue-advanced-cropper</a><img src="img/icons/green_question.png" alt="Question" width="16" height="16" name="link-external" title="Question" class="icon" /></blockquote><blockquote>+ <br /><a class="wiki external" target="_blank" title="External link" href="https://www.npmjs.com/package/vue-advanced-cropper" rel="external">vue-advanced-cropper on npm</a><img src="img/icons/green_question.png" alt="Question" width="16" height="16" name="link-external" title="Question" class="icon" /></blockquote><blockquote>+ </p></blockquote><blockquote>+ </blockquote><blockquote>+ <h2 class="showhide_heading d-flex justify-content-start" id="Konva.js"> Konva.js<a href="#Konva.js" class="heading-link" aria-label="heading link"><span class="icon icon-link fas fa-link "   ></span></a></h2></blockquote><blockquote>+ <p></blockquote><blockquote>+ <br />Konva.js is an active MIT-licensed 2D canvas framework.</blockquote><blockquote>+ </p></blockquote><blockquote>+ </blockquote><blockquote>+ <p>It provides useful tools for creating image and drawing interfaces, but it is more general than needed for this feature.</blockquote><blockquote>+ </p></blockquote><blockquote>+ </blockquote><blockquote>+ <p>As with Fabric.js or native Canvas, Tiki would still need to build most of the image editing interface and behavior.</blockquote><blockquote>+ </p></blockquote><blockquote>+ </blockquote><blockquote>+ <p>Reference:</blockquote><blockquote>+ <br /><a class="wiki external" target="_blank" title="External link" href="https://konvajs.org/" rel="external">Konva.js</a><img src="img/icons/green_question.png" alt="Question" width="16" height="16" name="link-external" title="Question" class="icon" /></blockquote><blockquote>+ </p></blockquote><blockquote>+ </blockquote><blockquote>+ <h2 class="showhide_heading d-flex justify-content-start" id="Pintura"> Pintura<a href="#Pintura" class="heading-link" aria-label="heading link"><span class="icon icon-link fas fa-link "   ></span></a></h2></blockquote><blockquote>+ <p></blockquote><blockquote>+ <br />Pintura is a complete image editor with cropping, rotation, filters, annotations, and other features.</blockquote><blockquote>+ </p></blockquote><blockquote>+ </blockquote><blockquote>+ <p>Technically, it covers the requirements well, but it uses a commercial license.</blockquote><blockquote>+ </p></blockquote><blockquote>+ </blockquote><blockquote>+ <p>The licensing model does not meet the requirements for adding it as a dependency to Tiki.</blockquote><blockquote>+ </p></blockquote><blockquote>+ </blockquote><blockquote>+ <p>References:</blockquote><blockquote>+ <br /><a class="wiki external" target="_blank" title="External link" href="https://pqina.nl/pintura/" rel="external">Pintura</a><img src="img/icons/green_question.png" alt="Question" width="16" height="16" name="link-external" title="Question" class="icon" /></blockquote><blockquote>+ <br /><a class="wiki external" target="_blank" title="External link" href="https://pqina.nl/pintura/license/" rel="external">Pintura license</a><img src="img/icons/green_question.png" alt="Question" width="16" height="16" name="link-external" title="Question" class="icon" /></blockquote><blockquote>+ <br /><a class="wiki external" target="_blank" title="External link" href="https://pqina.nl/pintura/pricing/" rel="external">Pintura pricing</a><img src="img/icons/green_question.png" alt="Question" width="16" height="16" name="link-external" title="Question" class="icon" /></blockquote><blockquote>+ </p></blockquote><blockquote>+ </blockquote><blockquote>+ <h2 class="showhide_heading d-flex justify-content-start" id="Other_options_checked"> Other options&nbsp;checked<a href="#Other_options_checked" class="heading-link" aria-label="heading link"><span class="icon icon-link fas fa-link "   ></span></a></h2></blockquote><blockquote>+ <p></blockquote><blockquote>+ <br />We also reviewed a few other libraries.</blockquote><blockquote>+ </p></blockquote><blockquote>+ </blockquote><blockquote>+ <h3 class="showhide_heading d-flex justify-content-start" id="Jcrop"> Jcrop<a href="#Jcrop" class="heading-link" aria-label="heading link"><span class="icon icon-link fas fa-link "   ></span></a></h3></blockquote><blockquote>+ <p></blockquote><blockquote>+ <br />Jcrop is an older jQuery-based cropping library.</blockquote><blockquote>+ </p></blockquote><blockquote>+ </blockquote><blockquote>+ <p>It mainly provides crop selection and does not cover the full set of required image operations.</blockquote><blockquote>+ </p></blockquote><blockquote>+ </blockquote><blockquote>+ <p>It is also not a good fit for a new Vue-based implementation.</blockquote><blockquote>+ </p></blockquote><blockquote>+ </blockquote><blockquote>+ <p>Reference:</blockquote><blockquote>+ <br /><a class="wiki external" target="_blank" title="External link" href="https://github.com/tapmodo/Jcrop" rel="external">Jcrop</a><img src="img/icons/green_question.png" alt="Question" width="16" height="16" name="link-external" title="Question" class="icon" /></blockquote><blockquote>+ </p></blockquote><blockquote>+ </blockquote><blockquote>+ <h3 class="showhide_heading d-flex justify-content-start" id="imgAreaSelect"> imgAreaSelect<a href="#imgAreaSelect" class="heading-link" aria-label="heading link"><span class="icon icon-link fas fa-link "   ></span></a></h3></blockquote><blockquote>+ <p></blockquote><blockquote>+ <br />imgAreaSelect is another older jQuery-based image selection and cropping plugin.</blockquote><blockquote>+ </p></blockquote><blockquote>+ </blockquote><blockquote>+ <p>It does not provide the required rotation, flipping, or effects.</blockquote><blockquote>+ </p></blockquote><blockquote>+ </blockquote><blockquote>+ <p>Reference:</blockquote><blockquote>+ <br /><a class="wiki external" target="_blank" title="External link" href="https://github.com/odyniec/imgareaselect" rel="external">imgAreaSelect</a><img src="img/icons/green_question.png" alt="Question" width="16" height="16" name="link-external" title="Question" class="icon" /></blockquote><blockquote>+ </p></blockquote><blockquote>+ </blockquote><blockquote>+ <h3 class="showhide_heading d-flex justify-content-start" id="CamanJS"> CamanJS<a href="#CamanJS" class="heading-link" aria-label="heading link"><span class="icon icon-link fas fa-link "   ></span></a></h3></blockquote><blockquote>+ <p></blockquote><blockquote>+ <br />CamanJS focuses mainly on image filters.</blockquote><blockquote>+ </p></blockquote><blockquote>+ </blockquote><blockquote>+ <p>It does not provide a complete crop-and-transform workflow and is no longer actively maintained.</blockquote><blockquote>+ </p></blockquote><blockquote>+ </blockquote><blockquote>+ <p>Reference:</blockquote><blockquote>+ <br /><a class="wiki external" target="_blank" title="External link" href="https://github.com/meltingice/CamanJS" rel="external">CamanJS</a><img src="img/icons/green_question.png" alt="Question" width="16" height="16" name="link-external" title="Question" class="icon" /></blockquote><blockquote>+ </p></blockquote><blockquote>+ </blockquote><blockquote>+ <h3 class="showhide_heading d-flex justify-content-start" id="react-easy-crop"> react-easy-crop<a href="#react-easy-crop" class="heading-link" aria-label="heading link"><span class="icon icon-link fas fa-link "   ></span></a></h3></blockquote><blockquote>+ <p></blockquote><blockquote>+ <br />react-easy-crop is actively maintained and provides a good cropping interface.</blockquote><blockquote>+ </p></blockquote><blockquote>+ </blockquote><blockquote>+ <p>However, it is built for React, while the current File Gallery uploader uses Vue.</blockquote><blockquote>+ </p></blockquote><blockquote>+ </blockquote><blockquote>+ <p>Using it would introduce another frontend framework for a relatively small feature.</blockquote><blockquote>+ </p></blockquote><blockquote>+ </blockquote><blockquote>+ <p>Reference:</blockquote><blockquote>+ <br /><a class="wiki external" target="_blank" title="External link" href="https://github.com/ValentinH/react-easy-crop" rel="external">react-easy-crop</a><img src="img/icons/green_question.png" alt="Question" width="16" height="16" name="link-external" title="Question" class="icon" /></blockquote><blockquote>+ </p></blockquote><blockquote>+ </blockquote><blockquote>+ <h3 class="showhide_heading d-flex justify-content-start" id="ngx-image-cropper"> ngx-image-cropper<a href="#ngx-image-cropper" class="heading-link" aria-label="heading link"><span class="icon icon-link fas fa-link "   ></span></a></h3></blockquote><blockquote>+ <p></blockquote><blockquote>+ <br />ngx-image-cropper is actively maintained and provides image cropping for Angular applications.</blockquote><blockquote>+ </p></blockquote><blockquote>+ </blockquote><blockquote>+ <p>It is designed for Angular and therefore does not fit the current Vue-based uploader.</blockquote><blockquote>+ </p></blockquote><blockquote>+ </blockquote><blockquote>+ <p>Reference:</blockquote><blockquote>+ <br /><a class="wiki external" target="_blank" title="External link" href="https://github.com/Mawi137/ngx-image-cropper" rel="external">ngx-image-cropper</a><img src="img/icons/green_question.png" alt="Question" width="16" height="16" name="link-external" title="Question" class="icon" /></blockquote><blockquote>+ </p></blockquote><blockquote>+ </blockquote><blockquote>- &lt;br /&gt;Cropper.js looks like the strongest option so far.<del class="diffchar deleted"><strong> </strong></del>It r<del class="diffchar deleted"><strong>em</strong></del>oves <del class="diffchar deleted"><strong>m</strong></del>ost o<del class="diffchar deleted"><strong>f</strong></del> the custom c<del class="diffchar deleted"><strong>r</strong></del>o<del class="diffchar deleted"><strong>p</strong></del> l<del class="diffchar deleted"><strong>og</strong></del>ic and is eas<del class="diffchar deleted"><strong>i</strong></del>er t<del class="diffchar deleted"><strong>o r</strong></del>euse <del class="diffchar deleted"><strong>her</strong></del>e t<del class="diffchar deleted"><strong>h</strong></del>an t<del class="diffchar deleted"><strong>h</strong></del>e <del class="diffchar deleted"><strong>H5P</strong></del> e<del class="diffchar deleted"><strong>d</strong></del>itor<del class="diffchar deleted"><strong>.</strong></del> <del class="diffchar deleted"><strong>Th</strong></del>is r<del class="diffchar deleted"><strong>em</strong></del>ains a p<del class="diffchar deleted"><strong>r</strong></del>eli<del class="diffchar deleted"><strong>m</strong></del>ina<del class="diffchar deleted"><strong>ry</strong></del> <del class="diffchar deleted"><strong>v</strong></del>ie<del class="diffchar deleted"><strong>w</strong></del> u<del class="diffchar deleted"><strong>n</strong></del>til t<del class="diffchar deleted"><strong>h</strong></del>e re<del class="diffchar deleted"><strong>m</strong></del>ai<del class="diffchar deleted"><strong>n</strong></del>in<del class="diffchar deleted"><strong>g</strong></del> alternatives <del class="diffchar deleted"><strong>an</strong></del>d <del class="diffchar deleted"><strong>b</strong></del>undle <del class="diffchar deleted"><strong>im</strong></del>pact are c<del class="diffchar deleted"><strong>h</strong></del>ec<del class="diffchar deleted"><strong>k</strong></del>ed and t<del class="diffchar deleted"><strong>h</strong></del>e <del class="diffchar deleted"><strong>T</strong></del>i<del class="diffchar deleted"><strong>k</strong></del>i developer com<del class="diffchar deleted"><strong>m</strong></del>unit<del class="diffchar deleted"><strong>y</strong></del> <del class="diffchar deleted"><strong>h</strong></del>as had a chance to co<del class="diffchar deleted"><strong>mm</strong></del>ent.&lt;/p&gt;</blockquote><blockquote>+ &lt;br /&gt;Cropper.js<ins class="diffchar inserted"><strong> still</strong></ins> looks like the strongest option so far.<ins class="diffchar inserted"><strong><br>&lt;/p&gt;<br><br>&lt;p&gt;</strong></ins>It <ins class="diffchar inserted"><strong>p</strong></ins>rov<ins class="diffchar inserted"><strong>id</strong></ins>es <ins class="diffchar inserted"><strong>the cr</strong></ins>o<ins class="diffchar inserted"><strong>p and tran</strong></ins>s<ins class="diffchar inserted"><strong>form behavior tha</strong></ins>t <ins class="diffchar inserted"><strong>w</strong></ins>o<ins class="diffchar inserted"><strong>uld</strong></ins> <ins class="diffchar inserted"><strong>o</strong></ins>th<ins class="diffchar inserted"><strong>erwise require som</strong></ins>e custom co<ins class="diffchar inserted"><strong>de,</strong></ins> <ins class="diffchar inserted"><strong>whi</strong></ins>l<ins class="diffchar inserted"><strong>e stay</strong></ins>i<ins class="diffchar inserted"><strong>ng fo</strong></ins>c<ins class="diffchar inserted"><strong>used</strong></ins> <ins class="diffchar inserted"><strong>on the m</strong></ins>a<ins class="diffchar inserted"><strong>i</strong></ins>n<ins class="diffchar inserted"><strong> nee</strong></ins>d<ins class="diffchar inserted"><strong>s</strong></ins> <ins class="diffchar inserted"><strong>of th</strong></ins>is <ins class="diffchar inserted"><strong>f</strong></ins>e<ins class="diffchar inserted"><strong>ature.<br>&lt;/p&gt;<br><br>&lt;p&gt;It h</strong></ins>as<ins class="diffchar inserted"><strong> sev</strong></ins>er<ins class="diffchar inserted"><strong>al</strong></ins> <ins class="diffchar inserted"><strong>advan</strong></ins>t<ins class="diffchar inserted"><strong>ag</strong></ins>e<ins class="diffchar inserted"><strong>s:<br>&lt;/p&gt;<br><br>&lt;</strong></ins>u<ins class="diffchar inserted"><strong>l&gt;&lt;li&gt; MIT licen</strong></ins>se<ins class="diffchar inserted"><strong>;<br>&lt;/li&gt;&lt;li&gt;</strong></ins> <ins class="diffchar inserted"><strong>activ</strong></ins>e <ins class="diffchar inserted"><strong>main</strong></ins>t<ins class="diffchar inserted"><strong>en</strong></ins>an<ins class="diffchar inserted"><strong>ce;<br>&lt;/li&gt;&lt;li&gt;</strong></ins> <ins class="diffchar inserted"><strong>framework-independen</strong></ins>t<ins class="diffchar inserted"><strong> d</strong></ins>e<ins class="diffchar inserted"><strong>sign;<br>&lt;/li&gt;&lt;li&gt;</strong></ins> <ins class="diffchar inserted"><strong>support</strong></ins> <ins class="diffchar inserted"><strong>for th</strong></ins>e<ins class="diffchar inserted"><strong> ma</strong></ins>i<ins class="diffchar inserted"><strong>n crop and </strong></ins>t<ins class="diffchar inserted"><strong>ransf</strong></ins>or<ins class="diffchar inserted"><strong>m</strong></ins> <ins class="diffchar inserted"><strong>operat</strong></ins>i<ins class="diffchar inserted"><strong>on</strong></ins>s<ins class="diffchar inserted"><strong>;<br>&lt;/li&gt;&lt;li&gt;</strong></ins> <ins class="diffchar inserted"><strong>st</strong></ins>ra<ins class="diffchar inserted"><strong>ightforward use </strong></ins>ins<ins class="diffchar inserted"><strong>ide</strong></ins> a <ins class="diffchar inserted"><strong>Vue com</strong></ins>p<ins class="diffchar inserted"><strong>on</strong></ins>e<ins class="diffchar inserted"><strong>nt;<br>&lt;/</strong></ins>li<ins class="diffchar inserted"><strong>&gt;&lt;l</strong></ins>i<ins class="diffchar inserted"><strong>&gt; a</strong></ins>n<ins class="diffchar inserted"><strong> existing implement</strong></ins>a<ins class="diffchar inserted"><strong>tion</strong></ins> i<ins class="diffchar inserted"><strong>n merg</strong></ins>e <ins class="diffchar inserted"><strong>req</strong></ins>u<ins class="diffchar inserted"><strong>es</strong></ins>t<ins class="diffchar inserted"><strong> !10413; and<br>&lt;/l</strong></ins>i<ins class="diffchar inserted"><strong>&gt;&lt;</strong></ins>l<ins class="diffchar inserted"><strong>i&gt;</strong></ins> <ins class="diffchar inserted"><strong>use by Uppy in i</strong></ins>t<ins class="diffchar inserted"><strong>s official imag</strong></ins>e <ins class="diffchar inserted"><strong>edito</strong></ins>r<ins class="diffchar inserted"><strong> plugin.<br>&lt;p&gt;<br>&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Th</strong></ins>e<ins class="diffchar inserted"><strong> </strong></ins>a<ins class="diffchar inserted"><strong>dd</strong></ins>i<ins class="diffchar inserted"><strong>t</strong></ins>i<ins class="diffchar inserted"><strong>o</strong></ins>n<ins class="diffchar inserted"><strong>al</strong></ins> alternatives d<ins class="diffchar inserted"><strong>o</strong></ins> <ins class="diffchar inserted"><strong>not c</strong></ins>u<ins class="diffchar inserted"><strong>rre</strong></ins>n<ins class="diffchar inserted"><strong>tly provi</strong></ins>d<ins class="diffchar inserted"><strong>e a c</strong></ins>le<ins class="diffchar inserted"><strong>ar</strong></ins> <ins class="diffchar inserted"><strong>advantage.<br>&lt;/p&gt;<br><br>&lt;</strong></ins>p<ins class="diffchar inserted"><strong>&gt;F</strong></ins>a<ins class="diffchar inserted"><strong>bri</strong></ins>c<ins class="diffchar inserted"><strong>.js, Konva.js, and na</strong></ins>t<ins class="diffchar inserted"><strong>ive</strong></ins> <ins class="diffchar inserted"><strong>C</strong></ins>a<ins class="diffchar inserted"><strong>nvas would require mo</strong></ins>re c<ins class="diffchar inserted"><strong>ustom int</strong></ins>e<ins class="diffchar inserted"><strong>rfa</strong></ins>ce<ins class="diffchar inserted"><strong> co</strong></ins>d<ins class="diffchar inserted"><strong>e.<br>&lt;/p&gt;<br><br>&lt;p&gt;TOAST UI Image Editor</strong></ins> and <ins class="diffchar inserted"><strong>Filerobo</strong></ins>t<ins class="diffchar inserted"><strong> provid</strong></ins>e <ins class="diffchar inserted"><strong>more ed</strong></ins>i<ins class="diffchar inserted"><strong>t</strong></ins>i<ins class="diffchar inserted"><strong>ng</strong></ins> <ins class="diffchar inserted"><strong>functionality than is currently nee</strong></ins>de<ins class="diffchar inserted"><strong>d.<br>&lt;/p&gt;<br><br>&lt;p&gt;Croppie and </strong></ins>v<ins class="diffchar inserted"><strong>u</strong></ins>e<ins class="diffchar inserted"><strong>-advanced-cropper do not cover a</strong></ins>l<ins class="diffchar inserted"><strong>l the required </strong></ins>oper<ins class="diffchar inserted"><strong>ations.<br>&lt;/p&gt;<br><br>&lt;p&gt;Pintura is a</strong></ins> com<ins class="diffchar inserted"><strong>plete sol</strong></ins>u<ins class="diffchar inserted"><strong>tio</strong></ins>n<ins class="diffchar inserted"><strong>, but </strong></ins>it<ins class="diffchar inserted"><strong>s</strong></ins> <ins class="diffchar inserted"><strong>commerci</strong></ins>a<ins class="diffchar inserted"><strong>l licen</strong></ins>s<ins class="diffchar inserted"><strong>ing</strong></ins> <ins class="diffchar inserted"><strong>does not fit t</strong></ins>h<ins class="diffchar inserted"><strong>e project requirements.<br>&lt;/p&gt;<br><br>&lt;p&gt;The older jQuery-b</strong></ins>a<ins class="diffchar inserted"><strong>se</strong></ins>d <ins class="diffchar inserted"><strong>libr</strong></ins>a<ins class="diffchar inserted"><strong>ries are also not good</strong></ins> c<ins class="diffchar inserted"><strong>andidates for a new Vue-based implementation.<br>&lt;/p&gt;<br><br>&lt;p&gt;T</strong></ins>h<ins class="diffchar inserted"><strong>e current </strong></ins>a<ins class="diffchar inserted"><strong>pproach of usi</strong></ins>n<ins class="diffchar inserted"><strong>g Cropper.js for </strong></ins>c<ins class="diffchar inserted"><strong>rop and transform b</strong></ins>e<ins class="diffchar inserted"><strong>havior,</strong></ins> t<ins class="diffchar inserted"><strong>hen Canvas f</strong></ins>o<ins class="diffchar inserted"><strong>r</strong></ins> <ins class="diffchar inserted"><strong>final rendering and effe</strong></ins>c<ins class="diffchar inserted"><strong>ts, appears t</strong></ins>o<ins class="diffchar inserted"><strong> provid</strong></ins>e<ins class="diffchar inserted"><strong> a reaso</strong></ins>n<ins class="diffchar inserted"><strong>able balance be</strong></ins>t<ins class="diffchar inserted"><strong>ween adding a dependency and avoiding too much custom code</strong></ins>.<ins class="diffchar inserted"><strong><br></strong></ins>&lt;/p&gt;</blockquote>]]></summary>
    <published>2026-09-16T07:36:05+00:00</published>
    <updated>2026-09-16T07:36:05+00:00</updated>
    <link rel="alternate" type="text/html" href="https://dev.tiki.org/tiki-index.php?page=Decision+Analysis+for+Image+Editing+Library+in+Tiki"/>
    <id>https://dev.tiki.org/tiki-index.php?page=Decision+Analysis+for+Image+Editing+Library+in+Tiki</id>
  </entry>
  <entry>
    <title type="html"><![CDATA[Tiki-End-to-End-Testing]]></title>
    <summary type="html"><![CDATA[<blockquote>- &lt;div  c<del class="diffchar deleted"><strong>lass=&quot;a</strong></del>le<del class="diffchar deleted"><strong>rt </strong></del>ale<del class="diffchar deleted"><strong>r</strong></del>t<del class="diffchar deleted"><strong>-war</strong></del>n<del class="diffchar deleted"><strong>ing aler</strong></del>t<del class="diffchar deleted"><strong>-dismis</strong></del>si<del class="diffchar deleted"><strong>b</strong></del>l<del class="diffchar deleted"><strong>e&quot;</strong></del> <del class="diffchar deleted"><strong>ro</strong></del>l<del class="diffchar deleted"><strong>e</strong></del>=&quot;<del class="diffchar deleted"><strong>aler</strong></del>t&quot;&gt;&lt;<del class="diffchar deleted"><strong>button</strong></del> <del class="diffchar deleted"><strong>typ</strong></del>e=<del class="diffchar deleted"><strong>&quot;but</strong></del>ton<del class="diffchar deleted"><strong>&quot; i</strong></del>d<del class="diffchar deleted"><strong>=&quot;b</strong></del>t<del class="diffchar deleted"><strong>n-clo</strong></del>s<del class="diffchar deleted"><strong>e&quot;</strong></del> class=<del class="diffchar deleted"><strong>&quot;bt</strong></del>n<del class="diffchar deleted"><strong>-close&quot;</strong></del> d<del class="diffchar deleted"><strong>a</strong></del>t<del class="diffchar deleted"><strong>a-bs</strong></del>-d<del class="diffchar deleted"><strong>i</strong></del>s<del class="diffchar deleted"><strong>mi</strong></del>s<del class="diffchar deleted"><strong>s=&quot;</strong></del>al<del class="diffchar deleted"><strong>ert&quot; ar</strong></del>ia<del class="diffchar deleted"><strong>-lab</strong></del>e<del class="diffchar deleted"><strong>l</strong></del>=<del class="diffchar deleted"><strong>&quot;Clos</strong></del>e<del class="diffchar deleted"><strong>&quot;&gt;&lt;/b</strong></del>ut<del class="diffchar deleted"><strong>ton&gt;&lt;div</strong></del> class=<del class="diffchar deleted"><strong>&quot;a</strong></del>lert<del class="diffchar deleted"><strong>-h</strong></del>ea<del class="diffchar deleted"><strong>d</strong></del>i<del class="diffchar deleted"><strong>ng h4&quot;</strong></del>&gt;&lt;sp<del class="diffchar deleted"><strong>an</strong></del> class=<del class="diffchar deleted"><strong>&quot;</strong></del>i<del class="diffchar deleted"><strong>co</strong></del>n i<del class="diffchar deleted"><strong>con</strong></del>-<del class="diffchar deleted"><strong>warn</strong></del>i<del class="diffchar deleted"><strong>ng</strong></del> <del class="diffchar deleted"><strong>fa</strong></del>s<del class="diffchar deleted"><strong> fa-</strong></del>e<del class="diffchar deleted"><strong>xc</strong></del>la<del class="diffchar deleted"><strong>mat</strong></del>ion<del class="diffchar deleted"><strong>-</strong></del>tria<del class="diffchar deleted"><strong>ng</strong></del>le<del class="diffchar deleted"><strong> &quot;   &gt;&lt;/</strong></del>s<del class="diffchar deleted"><strong>pan&gt;&amp;nbsp;&lt;span</strong></del> class=<del class="diffchar deleted"><strong>&quot;</strong></del>r<del class="diffchar deleted"><strong>b</strong></del>o<del class="diffchar deleted"><strong>x</strong></del>ti<del class="diffchar deleted"><strong>t</strong></del>le<del class="diffchar deleted"><strong>&quot;</strong></del>&gt;<del class="diffchar deleted"><strong>P</strong></del>r<del class="diffchar deleted"><strong>opos</strong></del>e<del class="diffchar deleted"><strong>d </strong></del>fe<del class="diffchar deleted"><strong>a</strong></del>tu<del class="diffchar deleted"><strong>r</strong></del>e<del class="diffchar deleted"><strong>,</strong></del> n<del class="diffchar deleted"><strong>ot</strong></del> <del class="diffchar deleted"><strong>merg</strong></del>e<del class="diffchar deleted"><strong>d</strong></del> <del class="diffchar deleted"><strong>y</strong></del>e<del class="diffchar deleted"><strong>t</strong></del>&lt;/<del class="diffchar deleted"><strong>sp</strong></del>a<del class="diffchar deleted"><strong>n</strong></del>&gt;&lt;/<del class="diffchar deleted"><strong>d</strong></del>i<del class="diffchar deleted"><strong>v</strong></del>&gt;&lt;<del class="diffchar deleted"><strong>d</strong></del>iv class=<del class="diffchar deleted"><strong>&quot;rb</strong></del>o<del class="diffchar deleted"><strong>x</strong></del>con<del class="diffchar deleted"><strong>t</strong></del>ent<del class="diffchar deleted"><strong>&quot;</strong></del> s<del class="diffchar deleted"><strong>tyl</strong></del>e<del class="diffchar deleted"><strong>=&quot;</strong></del>di<del class="diffchar deleted"><strong>spl</strong></del>a<del class="diffchar deleted"><strong>y: in</strong></del>li<del class="diffchar deleted"><strong>ne&quot;</strong></del>&gt;<del class="diffchar deleted"><strong><br></strong></del>&lt;<del class="diffchar deleted"><strong>p</strong></del>&gt;<del class="diffchar deleted"><strong>T</strong></del>hi<del class="diffchar deleted"><strong>s pa</strong></del>ge<del class="diffchar deleted"><strong> docum</strong></del>e<del class="diffchar deleted"><strong>n</strong></del>ts <del class="diffchar deleted"><strong>the P</strong></del>la<del class="diffchar deleted"><strong>ywr</strong></del>i<del class="diffchar deleted"><strong>ght</strong></del> <del class="diffchar deleted"><strong>e</strong></del>n<del class="diffchar deleted"><strong>d-</strong></del>t<del class="diffchar deleted"><strong>o-</strong></del>e<del class="diffchar deleted"><strong>nd</strong></del> test<del class="diffchar deleted"><strong> </strong></del>suite<del class="diffchar deleted"><strong> p</strong></del>r<del class="diffchar deleted"><strong>oposed </strong></del>i<del class="diffchar deleted"><strong>n &lt;</strong></del>a class=<del class="diffchar deleted"><strong>&quot;w</strong></del>ik<del class="diffchar deleted"><strong>i</strong></del> <del class="diffchar deleted"><strong>ex</strong></del>ter<del class="diffchar deleted"><strong>n</strong></del>a<del class="diffchar deleted"><strong>l&quot; </strong></del>t<del class="diffchar deleted"><strong>arg</strong></del>e<del class="diffchar deleted"><strong>t=&quot;_bl</strong></del>an<del class="diffchar deleted"><strong>k&quot;</strong></del> <del class="diffchar deleted"><strong>titl</strong></del>e<del class="diffchar deleted"><strong>=&quot;Ext</strong></del>e<del class="diffchar deleted"><strong>rn</strong></del>al<del class="diffchar deleted"><strong> </strong></del>li<del class="diffchar deleted"><strong>nk&quot;</strong></del> href=<del class="diffchar deleted"><strong>&quot;ht</strong></del>tp<del class="diffchar deleted"><strong>s://gi</strong></del>tla<del class="diffchar deleted"><strong>b.com/t</strong></del>ikiwi<del class="diffchar deleted"><strong>ki/</strong></del>t<del class="diffchar deleted"><strong>iki/-/m</strong></del>er<del class="diffchar deleted"><strong>g</strong></del>e<del class="diffchar deleted"><strong>_</strong></del>r<del class="diffchar deleted"><strong>eques</strong></del>t<del class="diffchar deleted"><strong>s</strong></del>/<del class="diffchar deleted"><strong>9887&quot;</strong></del> re<del class="diffchar deleted"><strong>l</strong></del>=<del class="diffchar deleted"><strong>&quot;</strong></del>e<del class="diffchar deleted"><strong>x</strong></del>ter<del class="diffchar deleted"><strong>n</strong></del>al<del class="diffchar deleted"><strong>&quot;</strong></del>&gt;<del class="diffchar deleted"><strong>m</strong></del>erge re<del class="diffchar deleted"><strong>ques</strong></del>t<del class="diffchar deleted"><strong> !9887</strong></del>&lt;/a&gt;&lt;i<del class="diffchar deleted"><strong>mg</strong></del> src=<del class="diffchar deleted"><strong>&quot;</strong></del>i<del class="diffchar deleted"><strong>mg/</strong></del>ico<del class="diffchar deleted"><strong>n</strong></del>s/<del class="diffchar deleted"><strong>g</strong></del>re<del class="diffchar deleted"><strong>e</strong></del>n_<del class="diffchar deleted"><strong>qu</strong></del>est<del class="diffchar deleted"><strong>i</strong></del>on<del class="diffchar deleted"><strong>.p</strong></del>ng<del class="diffchar deleted"><strong>&quot;</strong></del> a<del class="diffchar deleted"><strong>l</strong></del>t<del class="diffchar deleted"><strong>=&quot;Qu</strong></del>est<del class="diffchar deleted"><strong>i</strong></del>on<del class="diffchar deleted"><strong>&quot; w</strong></del>i<del class="diffchar deleted"><strong>dth=&quot;16&quot;</strong></del> hei<del class="diffchar deleted"><strong>gh</strong></del>t<del class="diffchar deleted"><strong>=&quot;16&quot;</strong></del> <del class="diffchar deleted"><strong>n</strong></del>a<del class="diffchar deleted"><strong>me</strong></del>=<del class="diffchar deleted"><strong>&quot;</strong></del>link<del class="diffchar deleted"><strong>-e</strong></del>xt<del class="diffchar deleted"><strong>e</strong></del>r<del class="diffchar deleted"><strong>n</strong></del>al<del class="diffchar deleted"><strong>&quot; tit</strong></del>le=<del class="diffchar deleted"><strong>&quot;Qu</strong></del>est<del class="diffchar deleted"><strong>ion&quot;</strong></del> class=<del class="diffchar deleted"><strong>&quot;</strong></del>i<del class="diffchar deleted"><strong>co</strong></del>n<del class="diffchar deleted"><strong>&quot; /</strong></del>&gt;<del class="diffchar deleted"><strong>,</strong></del> tar<del class="diffchar deleted"><strong>g</strong></del>e<del class="diffchar deleted"><strong>t</strong></del>ing<del class="diffchar deleted"><strong> &lt;s</strong></del>tro<del class="diffchar deleted"><strong>ng&gt;T</strong></del>ik<del class="diffchar deleted"><strong>i</strong></del> <del class="diffchar deleted"><strong>31&lt;/st</strong></del>r<del class="diffchar deleted"><strong>o</strong></del>ng<del class="diffchar deleted"><strong>&gt;.</strong></del> <del class="diffchar deleted"><strong>It</strong></del> i<del class="diffchar deleted"><strong>s</strong></del> <del class="diffchar deleted"><strong>&lt;s</strong></del>t<del class="diffchar deleted"><strong>r</strong></del>o<del class="diffchar deleted"><strong>ng&gt;not</strong></del> <del class="diffchar deleted"><strong>merged</strong></del> <del class="diffchar deleted"><strong>y</strong></del>e<del class="diffchar deleted"><strong>t</strong></del>&lt;/<del class="diffchar deleted"><strong>strong</strong></del>&gt;<del class="diffchar deleted"><strong>, so </strong></del>&lt;<del class="diffchar deleted"><strong>code</strong></del>&gt;<del class="diffchar deleted"><strong>tests/e2e</strong></del>/&lt;/<del class="diffchar deleted"><strong>code</strong></del>&gt; <del class="diffchar deleted"><strong>do</strong></del>es n<del class="diffchar deleted"><strong>ot</strong></del> e<del class="diffchar deleted"><strong>xi</strong></del>st i<del class="diffchar deleted"><strong>n </strong></del>a s<del class="diffchar deleted"><strong>t</strong></del>a<del class="diffchar deleted"><strong>n</strong></del>dard<del class="diffchar deleted"><strong> </strong></del>c<del class="diffchar deleted"><strong>h</strong></del>eck<del class="diffchar deleted"><strong>out: </strong></del>yo<del class="diffchar deleted"><strong>u</strong></del> n<del class="diffchar deleted"><strong>e</strong></del>ed<del class="diffchar deleted"><strong> </strong></del>the <del class="diffchar deleted"><strong>b</strong></del>ran<del class="diffchar deleted"><strong>ch</strong></del> <del class="diffchar deleted"><strong>f</strong></del>r<del class="diffchar deleted"><strong>om th</strong></del>a<del class="diffchar deleted"><strong>t m</strong></del>er<del class="diffchar deleted"><strong>ge</strong></del> r<del class="diffchar deleted"><strong>equest </strong></del>to<del class="diffchar deleted"><strong> fo</strong></del>ll<del class="diffchar deleted"><strong>ow</strong></del> <del class="diffchar deleted"><strong>t</strong></del>hi<del class="diffchar deleted"><strong>s </strong></del>page<del class="diffchar deleted"><strong>. D</strong></del>e<del class="diffchar deleted"><strong>t</strong></del>a<del class="diffchar deleted"><strong>ils m</strong></del>a<del class="diffchar deleted"><strong>y s</strong></del>t<del class="diffchar deleted"><strong>ill</strong></del> c<del class="diffchar deleted"><strong>h</strong></del>an<del class="diffchar deleted"><strong>ge</strong></del> w<del class="diffchar deleted"><strong>h</strong></del>i<del class="diffchar deleted"><strong>l</strong></del>e <del class="diffchar deleted"><strong>the</strong></del> <del class="diffchar deleted"><strong>mer</strong></del>ge <del class="diffchar deleted"><strong>r</strong></del>e<del class="diffchar deleted"><strong>qu</strong></del>e<del class="diffchar deleted"><strong>s</strong></del>t<del class="diffchar deleted"><strong> </strong></del>i<del class="diffchar deleted"><strong>s</strong></del> <del class="diffchar deleted"><strong>und</strong></del>er<del class="diffchar deleted"><strong> r</strong></del>evie<del class="diffchar deleted"><strong>w. O</strong></del>n<del class="diffchar deleted"><strong>c</strong></del>e<del class="diffchar deleted"><strong> i</strong></del>t <del class="diffchar deleted"><strong>i</strong></del>s mer<del class="diffchar deleted"><strong>g</strong></del>ed<del class="diffchar deleted"><strong>,</strong></del> remo<del class="diffchar deleted"><strong>v</strong></del>e t<del class="diffchar deleted"><strong>hi</strong></del>s<del class="diffchar deleted"><strong> box.<br></strong></del>&lt;/<del class="diffchar deleted"><strong>p</strong></del>&gt;<br><del class="diffchar deleted"><strong> </strong></del>&lt;/<del class="diffchar deleted"><strong>d</strong></del>i<del class="diffchar deleted"><strong>v</strong></del>&gt;&lt;/<del class="diffchar deleted"><strong>d</strong></del>i<del class="diffchar deleted"><strong>v</strong></del>&gt;<del class="diffchar deleted"><strong><br><br><br></strong></del>&lt;<del class="diffchar deleted"><strong>p</strong></del>&gt;<del class="diffchar deleted"><strong><br></strong></del>&lt;<del class="diffchar deleted"><strong>b</strong></del>r /&gt;&lt;<del class="diffchar deleted"><strong>d</strong></del>i<del class="diffchar deleted"><strong>v </strong></del>i<del class="diffchar deleted"><strong>d</strong></del>=&#039;toc&#039;&gt;&lt;<del class="diffchar deleted"><strong>d</strong></del>i<del class="diffchar deleted"><strong>v</strong></del> <del class="diffchar deleted"><strong>id</strong></del>=&#039;to<del class="diffchar deleted"><strong>c</strong></del>titl<del class="diffchar deleted"><strong>e</strong></del>&#039;&gt;<del class="diffchar deleted"><strong>&lt;</strong></del>h<del class="diffchar deleted"><strong>3&gt;</strong></del>Table<del class="diffchar deleted"><strong> </strong></del>o<del class="diffchar deleted"><strong>f</strong></del> c<del class="diffchar deleted"><strong>o</strong></del>n<del class="diffchar deleted"><strong>t</strong></del>e<del class="diffchar deleted"><strong>nt</strong></del>s&lt;/<del class="diffchar deleted"><strong>h3</strong></del>&gt;&lt;/<del class="diffchar deleted"><strong>d</strong></del>i<del class="diffchar deleted"><strong>v</strong></del>&gt;&lt;<del class="diffchar deleted"><strong>u</strong></del>l class=<del class="diffchar deleted"><strong>&quot;</strong></del>t<del class="diffchar deleted"><strong>oc&quot;</strong></del>&gt;&lt;/ul&gt;&lt;!--toc--&gt;&lt;/div&gt;</blockquote><blockquote>+ <ins class="diffchar inserted"><strong>&lt;p&gt;</strong></ins>&lt;div <ins class="diffchar inserted"><strong>id=&#039;toc&#039;&gt;&lt;div</strong></ins> <ins class="diffchar inserted"><strong>id=&#039;to</strong></ins>c<ins class="diffchar inserted"><strong>tit</strong></ins>le<ins class="diffchar inserted"><strong>&#039;&gt;&lt;h3&gt;T</strong></ins>a<ins class="diffchar inserted"><strong>b</strong></ins>le<ins class="diffchar inserted"><strong> of con</strong></ins>t<ins class="diffchar inserted"><strong>e</strong></ins>nts<ins class="diffchar inserted"><strong>&lt;/h3&gt;&lt;/d</strong></ins>i<ins class="diffchar inserted"><strong>v&gt;&lt;u</strong></ins>l <ins class="diffchar inserted"><strong>c</strong></ins>l<ins class="diffchar inserted"><strong>ass</strong></ins>=&quot;t<ins class="diffchar inserted"><strong>oc</strong></ins>&quot;&gt;&lt;<ins class="diffchar inserted"><strong>li&gt;&lt;a</strong></ins> <ins class="diffchar inserted"><strong>hr</strong></ins>e<ins class="diffchar inserted"><strong>f</strong></ins>=<ins class="diffchar inserted"><strong>&#039;#End-</strong></ins>to<ins class="diffchar inserted"><strong>-E</strong></ins>nd<ins class="diffchar inserted"><strong>_Tes</strong></ins>ts<ins class="diffchar inserted"><strong>&#039;</strong></ins> class=<ins class="diffchar inserted"><strong>&#039;li</strong></ins>n<ins class="diffchar inserted"><strong>k&#039;&gt;</strong></ins> <ins class="diffchar inserted"><strong>En</strong></ins>d<ins class="diffchar inserted"><strong>-</strong></ins>t<ins class="diffchar inserted"><strong>o</strong></ins>-<ins class="diffchar inserted"><strong>En</strong></ins>d<ins class="diffchar inserted"><strong> Te</strong></ins>s<ins class="diffchar inserted"><strong>t</strong></ins>s<ins class="diffchar inserted"><strong>&lt;/</strong></ins>a<ins class="diffchar inserted"><strong>&gt;<br>&lt;ul&gt;&lt;</strong></ins>li<ins class="diffchar inserted"><strong>&gt;&lt;</strong></ins>a<ins class="diffchar inserted"><strong> hr</strong></ins>e<ins class="diffchar inserted"><strong>f</strong></ins>=<ins class="diffchar inserted"><strong>&#039;#Pr</strong></ins>e<ins class="diffchar inserted"><strong>req</strong></ins>u<ins class="diffchar inserted"><strong>isi</strong></ins>t<ins class="diffchar inserted"><strong>es&#039;</strong></ins> class=<ins class="diffchar inserted"><strong>&#039;</strong></ins>l<ins class="diffchar inserted"><strong>ink&#039;&gt; Pr</strong></ins>er<ins class="diffchar inserted"><strong>equisi</strong></ins>te<ins class="diffchar inserted"><strong>s&lt;/</strong></ins>a<ins class="diffchar inserted"><strong>&gt;<br>&lt;/l</strong></ins>i&gt;&lt;<ins class="diffchar inserted"><strong>li&gt;&lt;a href=&#039;#Fir</strong></ins>s<ins class="diffchar inserted"><strong>t-time_setu</strong></ins>p<ins class="diffchar inserted"><strong>&#039;</strong></ins> class=<ins class="diffchar inserted"><strong>&#039;l</strong></ins>in<ins class="diffchar inserted"><strong>k&#039;&gt;</strong></ins> <ins class="diffchar inserted"><strong>F</strong></ins>i<ins class="diffchar inserted"><strong>rst</strong></ins>-<ins class="diffchar inserted"><strong>t</strong></ins>i<ins class="diffchar inserted"><strong>me</strong></ins> se<ins class="diffchar inserted"><strong>tup&lt;/a&gt;<br>&lt;/</strong></ins>l<ins class="diffchar inserted"><strong>i&gt;&lt;li&gt;&lt;</strong></ins>a<ins class="diffchar inserted"><strong> href=&#039;#Env</strong></ins>i<ins class="diffchar inserted"><strong>r</strong></ins>on<ins class="diffchar inserted"><strong>men</strong></ins>t<ins class="diffchar inserted"><strong>_va</strong></ins>ria<ins class="diffchar inserted"><strong>b</strong></ins>les<ins class="diffchar inserted"><strong>&#039;</strong></ins> class=<ins class="diffchar inserted"><strong>&#039;link&#039;&gt; Envi</strong></ins>ro<ins class="diffchar inserted"><strong>nmen</strong></ins>t<ins class="diffchar inserted"><strong> var</strong></ins>i<ins class="diffchar inserted"><strong>ab</strong></ins>le<ins class="diffchar inserted"><strong>s&lt;/a</strong></ins>&gt;<ins class="diffchar inserted"><strong><br>&lt;/li&gt;&lt;li&gt;&lt;a h</strong></ins>ref<ins class="diffchar inserted"><strong>=&#039;#T</strong></ins>e<ins class="diffchar inserted"><strong>s</strong></ins>t<ins class="diffchar inserted"><strong>_</strong></ins>u<ins class="diffchar inserted"><strong>s</strong></ins>e<ins class="diffchar inserted"><strong>rs&#039;</strong></ins> <ins class="diffchar inserted"><strong>class=&#039;li</strong></ins>n<ins class="diffchar inserted"><strong>k&#039;&gt;</strong></ins> <ins class="diffchar inserted"><strong>T</strong></ins>e<ins class="diffchar inserted"><strong>st</strong></ins> <ins class="diffchar inserted"><strong>us</strong></ins>e<ins class="diffchar inserted"><strong>rs</strong></ins>&lt;/a&gt;<ins class="diffchar inserted"><strong><br></strong></ins>&lt;/<ins class="diffchar inserted"><strong>l</strong></ins>i&gt;&lt;<ins class="diffchar inserted"><strong>l</strong></ins>i<ins class="diffchar inserted"><strong>&gt;&lt;a href=&#039;#Automatic_en</strong></ins>v<ins class="diffchar inserted"><strong>ironment_seeding&#039;</strong></ins> class=<ins class="diffchar inserted"><strong>&#039;link&#039;&gt; Aut</strong></ins>o<ins class="diffchar inserted"><strong>mati</strong></ins>c<ins class="diffchar inserted"><strong> envir</strong></ins>on<ins class="diffchar inserted"><strong>m</strong></ins>ent se<ins class="diffchar inserted"><strong>e</strong></ins>di<ins class="diffchar inserted"><strong>ng&lt;/</strong></ins>a<ins class="diffchar inserted"><strong>&gt;<br>&lt;/</strong></ins>li&gt;&lt;<ins class="diffchar inserted"><strong>li</strong></ins>&gt;<ins class="diffchar inserted"><strong>&lt;a </strong></ins>h<ins class="diffchar inserted"><strong>ref=&#039;#Runn</strong></ins>i<ins class="diffchar inserted"><strong>n</strong></ins>g<ins class="diffchar inserted"><strong>_th</strong></ins>e<ins class="diffchar inserted"><strong>_t</strong></ins>e<ins class="diffchar inserted"><strong>s</strong></ins>ts<ins class="diffchar inserted"><strong>&#039;</strong></ins> <ins class="diffchar inserted"><strong>c</strong></ins>la<ins class="diffchar inserted"><strong>ss=&#039;l</strong></ins>i<ins class="diffchar inserted"><strong>nk&#039;&gt;</strong></ins> <ins class="diffchar inserted"><strong>Ru</strong></ins>n<ins class="diffchar inserted"><strong>ning </strong></ins>t<ins class="diffchar inserted"><strong>h</strong></ins>e tests<ins class="diffchar inserted"><strong>&lt;/a&gt;<br>&lt;</strong></ins>u<ins class="diffchar inserted"><strong>l&gt;&lt;l</strong></ins>i<ins class="diffchar inserted"><strong>&gt;&lt;a href=&#039;#In</strong></ins>ter<ins class="diffchar inserted"><strong>act</strong></ins>i<ins class="diffchar inserted"><strong>ve_</strong></ins>a<ins class="diffchar inserted"><strong>nd_debug_modes&#039;</strong></ins> class=<ins class="diffchar inserted"><strong>&#039;l</strong></ins>i<ins class="diffchar inserted"><strong>n</strong></ins>k<ins class="diffchar inserted"><strong>&#039;&gt;</strong></ins> <ins class="diffchar inserted"><strong>In</strong></ins>tera<ins class="diffchar inserted"><strong>c</strong></ins>t<ins class="diffchar inserted"><strong>iv</strong></ins>e<ins class="diffchar inserted"><strong> </strong></ins>an<ins class="diffchar inserted"><strong>d</strong></ins> <ins class="diffchar inserted"><strong>d</strong></ins>e<ins class="diffchar inserted"><strong>bug mod</strong></ins>e<ins class="diffchar inserted"><strong>s&lt;/</strong></ins>a<ins class="diffchar inserted"><strong>&gt;<br>&lt;/</strong></ins>l<ins class="diffchar inserted"><strong>i&gt;&lt;</strong></ins>li<ins class="diffchar inserted"><strong>&gt;&lt;a</strong></ins> href=<ins class="diffchar inserted"><strong>&#039;#Viewing_</strong></ins>t<ins class="diffchar inserted"><strong>he_HTML_re</strong></ins>p<ins class="diffchar inserted"><strong>or</strong></ins>t<ins class="diffchar inserted"><strong>&#039; c</strong></ins>la<ins class="diffchar inserted"><strong>ss=&#039;l</strong></ins>i<ins class="diffchar inserted"><strong>n</strong></ins>k<ins class="diffchar inserted"><strong>&#039;&gt; V</strong></ins>i<ins class="diffchar inserted"><strong>e</strong></ins>wi<ins class="diffchar inserted"><strong>ng </strong></ins>t<ins class="diffchar inserted"><strong>h</strong></ins>e<ins class="diffchar inserted"><strong> HTML </strong></ins>re<ins class="diffchar inserted"><strong>po</strong></ins>rt<ins class="diffchar inserted"><strong>&lt;</strong></ins>/<ins class="diffchar inserted"><strong>a&gt;<br>&lt;/li&gt;&lt;li&gt;&lt;a</strong></ins> <ins class="diffchar inserted"><strong>h</strong></ins>re<ins class="diffchar inserted"><strong>f</strong></ins>=<ins class="diffchar inserted"><strong>&#039;#Ov</strong></ins>e<ins class="diffchar inserted"><strong>rriding_</strong></ins>t<ins class="diffchar inserted"><strong>h</strong></ins>e<ins class="diffchar inserted"><strong>_</strong></ins>r<ins class="diffchar inserted"><strong>eporter&#039; cl</strong></ins>a<ins class="diffchar inserted"><strong>ss=&#039;</strong></ins>l<ins class="diffchar inserted"><strong>ink&#039;</strong></ins>&gt;<ins class="diffchar inserted"><strong> Ov</strong></ins>er<ins class="diffchar inserted"><strong>ridin</strong></ins>g<ins class="diffchar inserted"><strong> th</strong></ins>e re<ins class="diffchar inserted"><strong>por</strong></ins>t<ins class="diffchar inserted"><strong>er</strong></ins>&lt;/a&gt;<ins class="diffchar inserted"><strong><br></strong></ins>&lt;<ins class="diffchar inserted"><strong>/l</strong></ins>i<ins class="diffchar inserted"><strong>&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;a</strong></ins> <ins class="diffchar inserted"><strong>href=&#039;#Directory_</strong></ins>s<ins class="diffchar inserted"><strong>t</strong></ins>r<ins class="diffchar inserted"><strong>u</strong></ins>c<ins class="diffchar inserted"><strong>ture&#039; class</strong></ins>=<ins class="diffchar inserted"><strong>&#039;l</strong></ins>i<ins class="diffchar inserted"><strong>nk&#039;&gt; D</strong></ins>i<ins class="diffchar inserted"><strong>re</strong></ins>c<ins class="diffchar inserted"><strong>t</strong></ins>o<ins class="diffchar inserted"><strong>ry </strong></ins>s<ins class="diffchar inserted"><strong>tructure&lt;</strong></ins>/<ins class="diffchar inserted"><strong>a&gt;<br>&lt;/li&gt;&lt;li&gt;&lt;a h</strong></ins>re<ins class="diffchar inserted"><strong>f=&#039;#Addi</strong></ins>n<ins class="diffchar inserted"><strong>g</strong></ins>_<ins class="diffchar inserted"><strong>a_new_t</strong></ins>est<ins class="diffchar inserted"><strong>_d</strong></ins>o<ins class="diffchar inserted"><strong>mai</strong></ins>n<ins class="diffchar inserted"><strong>&#039; class=&#039;link&#039;&gt; Addi</strong></ins>ng a<ins class="diffchar inserted"><strong> new </strong></ins>test<ins class="diffchar inserted"><strong> d</strong></ins>o<ins class="diffchar inserted"><strong>mai</strong></ins>n<ins class="diffchar inserted"><strong>&lt;/a&gt;<br>&lt;/l</strong></ins>i<ins class="diffchar inserted"><strong>&gt;&lt;li&gt;&lt;a</strong></ins> h<ins class="diffchar inserted"><strong>r</strong></ins>e<ins class="diffchar inserted"><strong>f=&#039;#F</strong></ins>i<ins class="diffchar inserted"><strong>x</strong></ins>t<ins class="diffchar inserted"><strong>ures&#039;</strong></ins> <ins class="diffchar inserted"><strong>cl</strong></ins>a<ins class="diffchar inserted"><strong>ss</strong></ins>=<ins class="diffchar inserted"><strong>&#039;</strong></ins>link<ins class="diffchar inserted"><strong>&#039;&gt; Fi</strong></ins>xt<ins class="diffchar inserted"><strong>u</strong></ins>r<ins class="diffchar inserted"><strong>es&lt;/</strong></ins>a<ins class="diffchar inserted"><strong>&gt;<br>&lt;u</strong></ins>l<ins class="diffchar inserted"><strong>&gt;&lt;</strong></ins>l<ins class="diffchar inserted"><strong>i&gt;&lt;a hr</strong></ins>e<ins class="diffchar inserted"><strong>f</strong></ins>=<ins class="diffchar inserted"><strong>&#039;#Th</strong></ins>e<ins class="diffchar inserted"><strong>_boot</strong></ins>st<ins class="diffchar inserted"><strong>rap&#039;</strong></ins> class=<ins class="diffchar inserted"><strong>&#039;l</strong></ins>in<ins class="diffchar inserted"><strong>k&#039;</strong></ins>&gt; <ins class="diffchar inserted"><strong>The boo</strong></ins>t<ins class="diffchar inserted"><strong>str</strong></ins>a<ins class="diffchar inserted"><strong>p&lt;/a&gt;<br>&lt;/li&gt;&lt;li&gt;&lt;a h</strong></ins>re<ins class="diffchar inserted"><strong>f=&#039;#Wir</strong></ins>ing<ins class="diffchar inserted"><strong>_a_fix</strong></ins>t<ins class="diffchar inserted"><strong>u</strong></ins>r<ins class="diffchar inserted"><strong>e_t</strong></ins>o<ins class="diffchar inserted"><strong>_a_spec&#039; class=&#039;l</strong></ins>i<ins class="diffchar inserted"><strong>n</strong></ins>k<ins class="diffchar inserted"><strong>&#039;&gt;</strong></ins> <ins class="diffchar inserted"><strong>Wi</strong></ins>r<ins class="diffchar inserted"><strong>i</strong></ins>ng <ins class="diffchar inserted"><strong>a</strong></ins> <ins class="diffchar inserted"><strong>f</strong></ins>i<ins class="diffchar inserted"><strong>xture</strong></ins> to <ins class="diffchar inserted"><strong>a</strong></ins> <ins class="diffchar inserted"><strong>sp</strong></ins>e<ins class="diffchar inserted"><strong>c</strong></ins>&lt;/<ins class="diffchar inserted"><strong>a</strong></ins>&gt;<ins class="diffchar inserted"><strong><br></strong></ins>&lt;<ins class="diffchar inserted"><strong>/li</strong></ins>&gt;<ins class="diffchar inserted"><strong>&lt;</strong></ins>/<ins class="diffchar inserted"><strong>ul&gt;</strong></ins>&lt;/<ins class="diffchar inserted"><strong>li</strong></ins>&gt;<ins class="diffchar inserted"><strong>&lt;li&gt;&lt;a</strong></ins> <ins class="diffchar inserted"><strong>href=&#039;#T</strong></ins>es<ins class="diffchar inserted"><strong>t_suites&#039;</strong></ins> <ins class="diffchar inserted"><strong>class=&#039;li</strong></ins>n<ins class="diffchar inserted"><strong>k&#039;&gt;</strong></ins> <ins class="diffchar inserted"><strong>T</strong></ins>est <ins class="diffchar inserted"><strong>su</strong></ins>i<ins class="diffchar inserted"><strong>tes&lt;/a&gt;<br>&lt;ul&gt;&lt;li&gt;&lt;</strong></ins>a <ins class="diffchar inserted"><strong>href=&#039;#</strong></ins>s<ins class="diffchar inserted"><strong>h</strong></ins>a<ins class="diffchar inserted"><strong>re</strong></ins>d<ins class="diffchar inserted"><strong>-secrets_:_Sh</strong></ins>ar<ins class="diffchar inserted"><strong>e</strong></ins>d<ins class="diffchar inserted"><strong>_Se</strong></ins>c<ins class="diffchar inserted"><strong>r</strong></ins>e<ins class="diffchar inserted"><strong>ts_and_Tra</strong></ins>ck<ins class="diffchar inserted"><strong>er_Encr</strong></ins>y<ins class="diffchar inserted"><strong>pti</strong></ins>o<ins class="diffchar inserted"><strong>n&#039;</strong></ins> <ins class="diffchar inserted"><strong>class=&#039;li</strong></ins>n<ins class="diffchar inserted"><strong>k&#039;&gt; shar</strong></ins>ed<ins class="diffchar inserted"><strong>-secre</strong></ins>t<ins class="diffchar inserted"><strong>s/: S</strong></ins>h<ins class="diffchar inserted"><strong>ar</strong></ins>e<ins class="diffchar inserted"><strong>d</strong></ins> <ins class="diffchar inserted"><strong>Sec</strong></ins>r<ins class="diffchar inserted"><strong>ets </strong></ins>an<ins class="diffchar inserted"><strong>d</strong></ins> <ins class="diffchar inserted"><strong>T</strong></ins>ra<ins class="diffchar inserted"><strong>ck</strong></ins>er <ins class="diffchar inserted"><strong>Enc</strong></ins>r<ins class="diffchar inserted"><strong>yp</strong></ins>t<ins class="diffchar inserted"><strong>i</strong></ins>o<ins class="diffchar inserted"><strong>n&lt;/a&gt;<br>&lt;/</strong></ins>l<ins class="diffchar inserted"><strong>i&gt;&lt;</strong></ins>l<ins class="diffchar inserted"><strong>i&gt;&lt;a</strong></ins> h<ins class="diffchar inserted"><strong>ref=&#039;#w</strong></ins>i<ins class="diffchar inserted"><strong>ki-</strong></ins>page<ins class="diffchar inserted"><strong>s_:_Wiki_Pag</strong></ins>e<ins class="diffchar inserted"><strong>_M</strong></ins>a<ins class="diffchar inserted"><strong>n</strong></ins>a<ins class="diffchar inserted"><strong>gemen</strong></ins>t<ins class="diffchar inserted"><strong>&#039;</strong></ins> c<ins class="diffchar inserted"><strong>l</strong></ins>a<ins class="diffchar inserted"><strong>ss=&#039;li</strong></ins>n<ins class="diffchar inserted"><strong>k&#039;&gt;</strong></ins> wi<ins class="diffchar inserted"><strong>ki-pag</strong></ins>e<ins class="diffchar inserted"><strong>s/:</strong></ins> <ins class="diffchar inserted"><strong>Wiki</strong></ins> <ins class="diffchar inserted"><strong>Pa</strong></ins>ge <ins class="diffchar inserted"><strong>Manag</strong></ins>e<ins class="diffchar inserted"><strong>m</strong></ins>e<ins class="diffchar inserted"><strong>n</strong></ins>t<ins class="diffchar inserted"><strong>&lt;/a&gt;<br>&lt;/l</strong></ins>i<ins class="diffchar inserted"><strong>&gt;&lt;li&gt;&lt;a</strong></ins> <ins class="diffchar inserted"><strong>hr</strong></ins>e<ins class="diffchar inserted"><strong>f=&#039;#smoke_:_F</strong></ins>r<ins class="diffchar inserted"><strong>am</strong></ins>e<ins class="diffchar inserted"><strong>work_and_En</strong></ins>vi<ins class="diffchar inserted"><strong>ronm</strong></ins>en<ins class="diffchar inserted"><strong>t_Smok</strong></ins>e<ins class="diffchar inserted"><strong>_Tes</strong></ins>t<ins class="diffchar inserted"><strong>s&#039;</strong></ins> <ins class="diffchar inserted"><strong>cla</strong></ins>s<ins class="diffchar inserted"><strong>s=&#039;link&#039;&gt;</strong></ins> <ins class="diffchar inserted"><strong>s</strong></ins>m<ins class="diffchar inserted"><strong>ok</strong></ins>e<ins class="diffchar inserted"><strong>/: F</strong></ins>r<ins class="diffchar inserted"><strong>am</strong></ins>e<ins class="diffchar inserted"><strong>work an</strong></ins>d <ins class="diffchar inserted"><strong>Envi</strong></ins>r<ins class="diffchar inserted"><strong>onm</strong></ins>e<ins class="diffchar inserted"><strong>nt S</strong></ins>mo<ins class="diffchar inserted"><strong>k</strong></ins>e <ins class="diffchar inserted"><strong>Tes</strong></ins>ts&lt;/<ins class="diffchar inserted"><strong>a</strong></ins>&gt;<br>&lt;/<ins class="diffchar inserted"><strong>l</strong></ins>i&gt;&lt;/<ins class="diffchar inserted"><strong>ul&gt;&lt;/l</strong></ins>i&gt;&lt;<ins class="diffchar inserted"><strong>li</strong></ins>&gt;&lt;<ins class="diffchar inserted"><strong>a h</strong></ins>r<ins class="diffchar inserted"><strong>ef=&#039;#Self-Contained_Mode&#039;</strong></ins> <ins class="diffchar inserted"><strong>class=&#039;link&#039;&gt; Self-Contained Mode&lt;</strong></ins>/<ins class="diffchar inserted"><strong>a</strong></ins>&gt;<ins class="diffchar inserted"><strong><br></strong></ins>&lt;<ins class="diffchar inserted"><strong>/l</strong></ins>i<ins class="diffchar inserted"><strong>&gt;&lt;l</strong></ins>i<ins class="diffchar inserted"><strong>&gt;&lt;a href</strong></ins>=&#039;<ins class="diffchar inserted"><strong>#CI_in</strong></ins>t<ins class="diffchar inserted"><strong>egrati</strong></ins>o<ins class="diffchar inserted"><strong>n&#039; </strong></ins>c<ins class="diffchar inserted"><strong>lass=&#039;link</strong></ins>&#039;&gt;<ins class="diffchar inserted"><strong> CI integration</strong></ins>&lt;<ins class="diffchar inserted"><strong>/a&gt;<br>&lt;ul&gt;&lt;l</strong></ins>i<ins class="diffchar inserted"><strong>&gt;&lt;a</strong></ins> <ins class="diffchar inserted"><strong>href</strong></ins>=&#039;<ins class="diffchar inserted"><strong>#Accessing_</strong></ins>t<ins class="diffchar inserted"><strong>he_HTML_rep</strong></ins>o<ins class="diffchar inserted"><strong>rt_ar</strong></ins>ti<ins class="diffchar inserted"><strong>fac</strong></ins>t<ins class="diffchar inserted"><strong>&#039; c</strong></ins>l<ins class="diffchar inserted"><strong>ass=&#039;link</strong></ins>&#039;&gt;<ins class="diffchar inserted"><strong> Accessing t</strong></ins>h<ins class="diffchar inserted"><strong>e H</strong></ins>T<ins class="diffchar inserted"><strong>ML report </strong></ins>a<ins class="diffchar inserted"><strong>rtifact&lt;/a&gt;<br>&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&#039;#Trou</strong></ins>ble<ins class="diffchar inserted"><strong>sh</strong></ins>o<ins class="diffchar inserted"><strong>oting&#039;</strong></ins> c<ins class="diffchar inserted"><strong>lass=&#039;li</strong></ins>n<ins class="diffchar inserted"><strong>k&#039;&gt; Troubl</strong></ins>es<ins class="diffchar inserted"><strong>hooting</strong></ins>&lt;/<ins class="diffchar inserted"><strong>a</strong></ins>&gt;<ins class="diffchar inserted"><strong><br></strong></ins>&lt;/<ins class="diffchar inserted"><strong>l</strong></ins>i&gt;&lt;l<ins class="diffchar inserted"><strong>i&gt;&lt;a href=&#039;#Related_pages&#039;</strong></ins> class=<ins class="diffchar inserted"><strong>&#039;link&#039;&gt; Rela</strong></ins>t<ins class="diffchar inserted"><strong>ed pages&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li</strong></ins>&gt;&lt;/ul&gt;&lt;!--toc--&gt;&lt;/div&gt;</blockquote><blockquote>- &lt;div class=&quot;codelisting_container&quot;&gt;&lt;div class=&quot;icon_copy_code far fa-clipboard&quot; tabindex=&quot;0&quot;  data-clipboard-target=&quot;#codebox<del class="diffchar deleted"><strong>49</strong></del>&quot; &gt;&lt;span class=&quot;copy_code_tooltiptext&quot;&gt;Copy to clipboard&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;codelisting&quot;  data-theme=&quot;off&quot;  data-syntax=&quot;bash&quot;  data-wrap=&quot;1&quot;  dir=&quot;ltr&quot;  style=&quot;white-space:pre-wrap; overflow-wrap: break-word; word-wrap: break-word;&quot; id=&quot;codebox<del class="diffchar deleted"><strong>49</strong></del>&quot; &gt;&lt;div class=&quot;code&quot;&gt;tests/e2e/bin/e2e-setup.sh          # setup + smoke run</blockquote><blockquote>+ &lt;div class=&quot;codelisting_container&quot;&gt;&lt;div class=&quot;icon_copy_code far fa-clipboard&quot; tabindex=&quot;0&quot;  data-clipboard-target=&quot;#codebox<ins class="diffchar inserted"><strong>33</strong></ins>&quot; &gt;&lt;span class=&quot;copy_code_tooltiptext&quot;&gt;Copy to clipboard&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;codelisting&quot;  data-theme=&quot;off&quot;  data-syntax=&quot;bash&quot;  data-wrap=&quot;1&quot;  dir=&quot;ltr&quot;  style=&quot;white-space:pre-wrap; overflow-wrap: break-word; word-wrap: break-word;&quot; id=&quot;codebox<ins class="diffchar inserted"><strong>33</strong></ins>&quot; &gt;&lt;div class=&quot;code&quot;&gt;tests/e2e/bin/e2e-setup.sh          # setup + smoke run</blockquote><blockquote>- &lt;div class=&quot;codelisting_container&quot;&gt;&lt;div class=&quot;icon_copy_code far fa-clipboard&quot; tabindex=&quot;0&quot;  data-clipboard-target=&quot;#codebox<del class="diffchar deleted"><strong>50</strong></del>&quot; &gt;&lt;span class=&quot;copy_code_tooltiptext&quot;&gt;Copy to clipboard&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;codelisting&quot;  data-theme=&quot;off&quot;  data-syntax=&quot;bash&quot;  data-wrap=&quot;1&quot;  dir=&quot;ltr&quot;  style=&quot;white-space:pre-wrap; overflow-wrap: break-word; word-wrap: break-word;&quot; id=&quot;codebox<del class="diffchar deleted"><strong>50</strong></del>&quot; &gt;&lt;div class=&quot;code&quot;&gt;npm install                    # @playwright/test is a root devDependency</blockquote><blockquote>+ &lt;div class=&quot;codelisting_container&quot;&gt;&lt;div class=&quot;icon_copy_code far fa-clipboard&quot; tabindex=&quot;0&quot;  data-clipboard-target=&quot;#codebox<ins class="diffchar inserted"><strong>34</strong></ins>&quot; &gt;&lt;span class=&quot;copy_code_tooltiptext&quot;&gt;Copy to clipboard&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;codelisting&quot;  data-theme=&quot;off&quot;  data-syntax=&quot;bash&quot;  data-wrap=&quot;1&quot;  dir=&quot;ltr&quot;  style=&quot;white-space:pre-wrap; overflow-wrap: break-word; word-wrap: break-word;&quot; id=&quot;codebox<ins class="diffchar inserted"><strong>34</strong></ins>&quot; &gt;&lt;div class=&quot;code&quot;&gt;npm install                    # @playwright/test is a root devDependency</blockquote><blockquote>- &lt;div class=&quot;codelisting_container&quot;&gt;&lt;div class=&quot;icon_copy_code far fa-clipboard&quot; tabindex=&quot;0&quot;  data-clipboard-target=&quot;#codebox5<del class="diffchar deleted"><strong>1</strong></del>&quot; &gt;&lt;span class=&quot;copy_code_tooltiptext&quot;&gt;Copy to clipboard&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;codelisting&quot;  data-theme=&quot;off&quot;  data-syntax=&quot;bash&quot;  data-wrap=&quot;1&quot;  dir=&quot;ltr&quot;  style=&quot;white-space:pre-wrap; overflow-wrap: break-word; word-wrap: break-word;&quot; id=&quot;codebox5<del class="diffchar deleted"><strong>1</strong></del>&quot; &gt;&lt;div class=&quot;code&quot;&gt;cp tests/e2e/.env.template tests/e2e/.env&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;</blockquote><blockquote>+ &lt;div class=&quot;codelisting_container&quot;&gt;&lt;div class=&quot;icon_copy_code far fa-clipboard&quot; tabindex=&quot;0&quot;  data-clipboard-target=&quot;#codebox<ins class="diffchar inserted"><strong>3</strong></ins>5&quot; &gt;&lt;span class=&quot;copy_code_tooltiptext&quot;&gt;Copy to clipboard&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;codelisting&quot;  data-theme=&quot;off&quot;  data-syntax=&quot;bash&quot;  data-wrap=&quot;1&quot;  dir=&quot;ltr&quot;  style=&quot;white-space:pre-wrap; overflow-wrap: break-word; word-wrap: break-word;&quot; id=&quot;codebox<ins class="diffchar inserted"><strong>3</strong></ins>5&quot; &gt;&lt;div class=&quot;code&quot;&gt;cp tests/e2e/.env.template tests/e2e/.env&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;</blockquote><blockquote>- &lt;div class=&quot;codelisting_container&quot;&gt;&lt;div class=&quot;icon_copy_code far fa-clipboard&quot; tabindex=&quot;0&quot;  data-clipboard-target=&quot;#codebox<del class="diffchar deleted"><strong>52</strong></del>&quot; &gt;&lt;span class=&quot;copy_code_tooltiptext&quot;&gt;Copy to clipboard&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;codelisting&quot;  data-theme=&quot;off&quot;  data-syntax=&quot;bash&quot;  data-wrap=&quot;1&quot;  dir=&quot;ltr&quot;  style=&quot;white-space:pre-wrap; overflow-wrap: break-word; word-wrap: break-word;&quot; id=&quot;codebox<del class="diffchar deleted"><strong>52</strong></del>&quot; &gt;&lt;div class=&quot;code&quot;&gt;php tests/e2e/fixtures/bootstrap.php create_test_users.php&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;</blockquote><blockquote>+ &lt;div class=&quot;codelisting_container&quot;&gt;&lt;div class=&quot;icon_copy_code far fa-clipboard&quot; tabindex=&quot;0&quot;  data-clipboard-target=&quot;#codebox<ins class="diffchar inserted"><strong>36</strong></ins>&quot; &gt;&lt;span class=&quot;copy_code_tooltiptext&quot;&gt;Copy to clipboard&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;codelisting&quot;  data-theme=&quot;off&quot;  data-syntax=&quot;bash&quot;  data-wrap=&quot;1&quot;  dir=&quot;ltr&quot;  style=&quot;white-space:pre-wrap; overflow-wrap: break-word; word-wrap: break-word;&quot; id=&quot;codebox<ins class="diffchar inserted"><strong>36</strong></ins>&quot; &gt;&lt;div class=&quot;code&quot;&gt;php tests/e2e/fixtures/bootstrap.php create_test_users.php&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;</blockquote><blockquote>- &lt;div class=&quot;codelisting_container&quot;&gt;&lt;div class=&quot;icon_copy_code far fa-clipboard&quot; tabindex=&quot;0&quot;  data-clipboard-target=&quot;#codebox<del class="diffchar deleted"><strong>5</strong></del>3&quot; &gt;&lt;span class=&quot;copy_code_tooltiptext&quot;&gt;Copy to clipboard&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;codelisting&quot;  data-theme=&quot;off&quot;  data-syntax=&quot;bash&quot;  data-wrap=&quot;1&quot;  dir=&quot;ltr&quot;  style=&quot;white-space:pre-wrap; overflow-wrap: break-word; word-wrap: break-word;&quot; id=&quot;codebox<del class="diffchar deleted"><strong>5</strong></del>3&quot; &gt;&lt;div class=&quot;code&quot;&gt;npm run test:e2e         # all suites</blockquote><blockquote>+ &lt;div class=&quot;codelisting_container&quot;&gt;&lt;div class=&quot;icon_copy_code far fa-clipboard&quot; tabindex=&quot;0&quot;  data-clipboard-target=&quot;#codebox3<ins class="diffchar inserted"><strong>7</strong></ins>&quot; &gt;&lt;span class=&quot;copy_code_tooltiptext&quot;&gt;Copy to clipboard&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;codelisting&quot;  data-theme=&quot;off&quot;  data-syntax=&quot;bash&quot;  data-wrap=&quot;1&quot;  dir=&quot;ltr&quot;  style=&quot;white-space:pre-wrap; overflow-wrap: break-word; word-wrap: break-word;&quot; id=&quot;codebox3<ins class="diffchar inserted"><strong>7</strong></ins>&quot; &gt;&lt;div class=&quot;code&quot;&gt;npm run test:e2e         # all suites</blockquote><blockquote>- &lt;div class=&quot;codelisting_container&quot;&gt;&lt;div class=&quot;icon_copy_code far fa-clipboard&quot; tabindex=&quot;0&quot;  data-clipboard-target=&quot;#codebox<del class="diffchar deleted"><strong>54</strong></del>&quot; &gt;&lt;span class=&quot;copy_code_tooltiptext&quot;&gt;Copy to clipboard&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;codelisting&quot;  data-theme=&quot;off&quot;  data-syntax=&quot;bash&quot;  data-wrap=&quot;1&quot;  dir=&quot;ltr&quot;  style=&quot;white-space:pre-wrap; overflow-wrap: break-word; word-wrap: break-word;&quot; id=&quot;codebox<del class="diffchar deleted"><strong>54</strong></del>&quot; &gt;&lt;div class=&quot;code&quot;&gt;cd tests/e2e</blockquote><blockquote>+ &lt;div class=&quot;codelisting_container&quot;&gt;&lt;div class=&quot;icon_copy_code far fa-clipboard&quot; tabindex=&quot;0&quot;  data-clipboard-target=&quot;#codebox<ins class="diffchar inserted"><strong>38</strong></ins>&quot; &gt;&lt;span class=&quot;copy_code_tooltiptext&quot;&gt;Copy to clipboard&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;codelisting&quot;  data-theme=&quot;off&quot;  data-syntax=&quot;bash&quot;  data-wrap=&quot;1&quot;  dir=&quot;ltr&quot;  style=&quot;white-space:pre-wrap; overflow-wrap: break-word; word-wrap: break-word;&quot; id=&quot;codebox<ins class="diffchar inserted"><strong>38</strong></ins>&quot; &gt;&lt;div class=&quot;code&quot;&gt;cd tests/e2e</blockquote><blockquote>- &lt;div class=&quot;codelisting_container&quot;&gt;&lt;div class=&quot;icon_copy_code far fa-clipboard&quot; tabindex=&quot;0&quot;  data-clipboard-target=&quot;#codebox<del class="diffchar deleted"><strong>55</strong></del>&quot; &gt;&lt;span class=&quot;copy_code_tooltiptext&quot;&gt;Copy to clipboard&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;codelisting&quot;  data-theme=&quot;off&quot;  data-syntax=&quot;bash&quot;  data-wrap=&quot;1&quot;  dir=&quot;ltr&quot;  style=&quot;white-space:pre-wrap; overflow-wrap: break-word; word-wrap: break-word;&quot; id=&quot;codebox<del class="diffchar deleted"><strong>55</strong></del>&quot; &gt;&lt;div class=&quot;code&quot;&gt;# Open Playwright UI: browse, filter, and re-run tests interactively</blockquote><blockquote>+ &lt;div class=&quot;codelisting_container&quot;&gt;&lt;div class=&quot;icon_copy_code far fa-clipboard&quot; tabindex=&quot;0&quot;  data-clipboard-target=&quot;#codebox<ins class="diffchar inserted"><strong>39</strong></ins>&quot; &gt;&lt;span class=&quot;copy_code_tooltiptext&quot;&gt;Copy to clipboard&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;codelisting&quot;  data-theme=&quot;off&quot;  data-syntax=&quot;bash&quot;  data-wrap=&quot;1&quot;  dir=&quot;ltr&quot;  style=&quot;white-space:pre-wrap; overflow-wrap: break-word; word-wrap: break-word;&quot; id=&quot;codebox<ins class="diffchar inserted"><strong>39</strong></ins>&quot; &gt;&lt;div class=&quot;code&quot;&gt;# Open Playwright UI: browse, filter, and re-run tests interactively</blockquote><blockquote>- &lt;div class=&quot;codelisting_container&quot;&gt;&lt;div class=&quot;icon_copy_code far fa-clipboard&quot; tabindex=&quot;0&quot;  data-clipboard-target=&quot;#codebox<del class="diffchar deleted"><strong>56</strong></del>&quot; &gt;&lt;span class=&quot;copy_code_tooltiptext&quot;&gt;Copy to clipboard&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;codelisting&quot;  data-theme=&quot;off&quot;  data-syntax=&quot;bash&quot;  data-wrap=&quot;1&quot;  dir=&quot;ltr&quot;  style=&quot;white-space:pre-wrap; overflow-wrap: break-word; word-wrap: break-word;&quot; id=&quot;codebox<del class="diffchar deleted"><strong>56</strong></del>&quot; &gt;&lt;div class=&quot;code&quot;&gt;cd tests/e2e</blockquote><blockquote>+ &lt;div class=&quot;codelisting_container&quot;&gt;&lt;div class=&quot;icon_copy_code far fa-clipboard&quot; tabindex=&quot;0&quot;  data-clipboard-target=&quot;#codebox<ins class="diffchar inserted"><strong>40</strong></ins>&quot; &gt;&lt;span class=&quot;copy_code_tooltiptext&quot;&gt;Copy to clipboard&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;codelisting&quot;  data-theme=&quot;off&quot;  data-syntax=&quot;bash&quot;  data-wrap=&quot;1&quot;  dir=&quot;ltr&quot;  style=&quot;white-space:pre-wrap; overflow-wrap: break-word; word-wrap: break-word;&quot; id=&quot;codebox<ins class="diffchar inserted"><strong>40</strong></ins>&quot; &gt;&lt;div class=&quot;code&quot;&gt;cd tests/e2e</blockquote><blockquote>- &lt;div class=&quot;codelisting_container&quot;&gt;&lt;div class=&quot;icon_copy_code far fa-clipboard&quot; tabindex=&quot;0&quot;  data-clipboard-target=&quot;#codebox<del class="diffchar deleted"><strong>57</strong></del>&quot; &gt;&lt;span class=&quot;copy_code_tooltiptext&quot;&gt;Copy to clipboard&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;codelisting&quot;  data-theme=&quot;off&quot;  data-syntax=&quot;bash&quot;  data-wrap=&quot;1&quot;  dir=&quot;ltr&quot;  style=&quot;white-space:pre-wrap; overflow-wrap: break-word; word-wrap: break-word;&quot; id=&quot;codebox<del class="diffchar deleted"><strong>57</strong></del>&quot; &gt;&lt;div class=&quot;code&quot;&gt;npx playwright test --reporter=list   # terminal only</blockquote><blockquote>+ &lt;div class=&quot;codelisting_container&quot;&gt;&lt;div class=&quot;icon_copy_code far fa-clipboard&quot; tabindex=&quot;0&quot;  data-clipboard-target=&quot;#codebox<ins class="diffchar inserted"><strong>41</strong></ins>&quot; &gt;&lt;span class=&quot;copy_code_tooltiptext&quot;&gt;Copy to clipboard&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;codelisting&quot;  data-theme=&quot;off&quot;  data-syntax=&quot;bash&quot;  data-wrap=&quot;1&quot;  dir=&quot;ltr&quot;  style=&quot;white-space:pre-wrap; overflow-wrap: break-word; word-wrap: break-word;&quot; id=&quot;codebox<ins class="diffchar inserted"><strong>41</strong></ins>&quot; &gt;&lt;div class=&quot;code&quot;&gt;npx playwright test --reporter=list   # terminal only</blockquote><blockquote>- &lt;div class=&quot;codelisting_container&quot;&gt;&lt;div class=&quot;icon_copy_code far fa-clipboard&quot; tabindex=&quot;0&quot;  data-clipboard-target=&quot;#codebox<del class="diffchar deleted"><strong>58</strong></del>&quot; &gt;&lt;span class=&quot;copy_code_tooltiptext&quot;&gt;Copy to clipboard&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;codelisting&quot;  data-theme=&quot;off&quot;  data-wrap=&quot;1&quot;  dir=&quot;ltr&quot;  style=&quot;white-space:pre-wrap; overflow-wrap: break-word; word-wrap: break-word;&quot; id=&quot;codebox<del class="diffchar deleted"><strong>58</strong></del>&quot; &gt;&lt;div class=&quot;code&quot;&gt;tests/e2e/</blockquote><blockquote>+ &lt;div class=&quot;codelisting_container&quot;&gt;&lt;div class=&quot;icon_copy_code far fa-clipboard&quot; tabindex=&quot;0&quot;  data-clipboard-target=&quot;#codebox<ins class="diffchar inserted"><strong>42</strong></ins>&quot; &gt;&lt;span class=&quot;copy_code_tooltiptext&quot;&gt;Copy to clipboard&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;codelisting&quot;  data-theme=&quot;off&quot;  data-wrap=&quot;1&quot;  dir=&quot;ltr&quot;  style=&quot;white-space:pre-wrap; overflow-wrap: break-word; word-wrap: break-word;&quot; id=&quot;codebox<ins class="diffchar inserted"><strong>42</strong></ins>&quot; &gt;&lt;div class=&quot;code&quot;&gt;tests/e2e/</blockquote><blockquote>- &lt;div class=&quot;codelisting_container&quot;&gt;&lt;div class=&quot;icon_copy_code far fa-clipboard&quot; tabindex=&quot;0&quot;  data-clipboard-target=&quot;#codebox<del class="diffchar deleted"><strong>59</strong></del>&quot; &gt;&lt;span class=&quot;copy_code_tooltiptext&quot;&gt;Copy to clipboard&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;codelisting&quot;  data-theme=&quot;off&quot;  data-syntax=&quot;bash&quot;  data-wrap=&quot;1&quot;  dir=&quot;ltr&quot;  style=&quot;white-space:pre-wrap; overflow-wrap: break-word; word-wrap: break-word;&quot; id=&quot;codebox<del class="diffchar deleted"><strong>59</strong></del>&quot; &gt;&lt;div class=&quot;code&quot;&gt;php tests/e2e/fixtures/bootstrap.php &amp;lt;script&amp;gt; [base64(JSON input)]&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;</blockquote><blockquote>+ &lt;div class=&quot;codelisting_container&quot;&gt;&lt;div class=&quot;icon_copy_code far fa-clipboard&quot; tabindex=&quot;0&quot;  data-clipboard-target=&quot;#codebox<ins class="diffchar inserted"><strong>43</strong></ins>&quot; &gt;&lt;span class=&quot;copy_code_tooltiptext&quot;&gt;Copy to clipboard&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;codelisting&quot;  data-theme=&quot;off&quot;  data-syntax=&quot;bash&quot;  data-wrap=&quot;1&quot;  dir=&quot;ltr&quot;  style=&quot;white-space:pre-wrap; overflow-wrap: break-word; word-wrap: break-word;&quot; id=&quot;codebox<ins class="diffchar inserted"><strong>43</strong></ins>&quot; &gt;&lt;div class=&quot;code&quot;&gt;php tests/e2e/fixtures/bootstrap.php &amp;lt;script&amp;gt; [base64(JSON input)]&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;</blockquote><blockquote>- &lt;div class=&quot;codelisting_container&quot;&gt;&lt;div class=&quot;icon_copy_code far fa-clipboard&quot; tabindex=&quot;0&quot;  data-clipboard-target=&quot;#codebox<del class="diffchar deleted"><strong>60</strong></del>&quot; &gt;&lt;span class=&quot;copy_code_tooltiptext&quot;&gt;Copy to clipboard&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;codelisting&quot;  data-theme=&quot;off&quot;  data-syntax=&quot;php&quot;  data-wrap=&quot;1&quot;  dir=&quot;ltr&quot;  style=&quot;white-space:pre-wrap; overflow-wrap: break-word; word-wrap: break-word;&quot; id=&quot;codebox<del class="diffchar deleted"><strong>60</strong></del>&quot; &gt;&lt;div class=&quot;code&quot;&gt;&amp;lt;?php</blockquote><blockquote>+ &lt;div class=&quot;codelisting_container&quot;&gt;&lt;div class=&quot;icon_copy_code far fa-clipboard&quot; tabindex=&quot;0&quot;  data-clipboard-target=&quot;#codebox<ins class="diffchar inserted"><strong>44</strong></ins>&quot; &gt;&lt;span class=&quot;copy_code_tooltiptext&quot;&gt;Copy to clipboard&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;codelisting&quot;  data-theme=&quot;off&quot;  data-syntax=&quot;php&quot;  data-wrap=&quot;1&quot;  dir=&quot;ltr&quot;  style=&quot;white-space:pre-wrap; overflow-wrap: break-word; word-wrap: break-word;&quot; id=&quot;codebox<ins class="diffchar inserted"><strong>44</strong></ins>&quot; &gt;&lt;div class=&quot;code&quot;&gt;&amp;lt;?php</blockquote><blockquote>- &lt;div class=&quot;codelisting_container&quot;&gt;&lt;div class=&quot;icon_copy_code far fa-clipboard&quot; tabindex=&quot;0&quot;  data-clipboard-target=&quot;#codebox<del class="diffchar deleted"><strong>61</strong></del>&quot; &gt;&lt;span class=&quot;copy_code_tooltiptext&quot;&gt;Copy to clipboard&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;codelisting&quot;  data-theme=&quot;off&quot;  data-syntax=&quot;php&quot;  data-wrap=&quot;1&quot;  dir=&quot;ltr&quot;  style=&quot;white-space:pre-wrap; overflow-wrap: break-word; word-wrap: break-word;&quot; id=&quot;codebox<del class="diffchar deleted"><strong>61</strong></del>&quot; &gt;&lt;div class=&quot;code&quot;&gt;return [</blockquote><blockquote>+ &lt;div class=&quot;codelisting_container&quot;&gt;&lt;div class=&quot;icon_copy_code far fa-clipboard&quot; tabindex=&quot;0&quot;  data-clipboard-target=&quot;#codebox<ins class="diffchar inserted"><strong>45</strong></ins>&quot; &gt;&lt;span class=&quot;copy_code_tooltiptext&quot;&gt;Copy to clipboard&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;codelisting&quot;  data-theme=&quot;off&quot;  data-syntax=&quot;php&quot;  data-wrap=&quot;1&quot;  dir=&quot;ltr&quot;  style=&quot;white-space:pre-wrap; overflow-wrap: break-word; word-wrap: break-word;&quot; id=&quot;codebox<ins class="diffchar inserted"><strong>45</strong></ins>&quot; &gt;&lt;div class=&quot;code&quot;&gt;return [</blockquote><blockquote>- &lt;div class=&quot;codelisting_container&quot;&gt;&lt;div class=&quot;icon_copy_code far fa-clipboard&quot; tabindex=&quot;0&quot;  data-clipboard-target=&quot;#codebox6<del class="diffchar deleted"><strong>2</strong></del>&quot; &gt;&lt;span class=&quot;copy_code_tooltiptext&quot;&gt;Copy to clipboard&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;codelisting&quot;  data-theme=&quot;off&quot;  data-syntax=&quot;typescript&quot;  data-wrap=&quot;1&quot;  dir=&quot;ltr&quot;  style=&quot;white-space:pre-wrap; overflow-wrap: break-word; word-wrap: break-word;&quot; id=&quot;codebox6<del class="diffchar deleted"><strong>2</strong></del>&quot; &gt;&lt;div class=&quot;code&quot;&gt;import { useSuiteFixtures } from &amp;quot;../../common/fixtures&amp;quot;;</blockquote><blockquote>+ &lt;div class=&quot;codelisting_container&quot;&gt;&lt;div class=&quot;icon_copy_code far fa-clipboard&quot; tabindex=&quot;0&quot;  data-clipboard-target=&quot;#codebox<ins class="diffchar inserted"><strong>4</strong></ins>6&quot; &gt;&lt;span class=&quot;copy_code_tooltiptext&quot;&gt;Copy to clipboard&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;codelisting&quot;  data-theme=&quot;off&quot;  data-syntax=&quot;typescript&quot;  data-wrap=&quot;1&quot;  dir=&quot;ltr&quot;  style=&quot;white-space:pre-wrap; overflow-wrap: break-word; word-wrap: break-word;&quot; id=&quot;codebox<ins class="diffchar inserted"><strong>4</strong></ins>6&quot; &gt;&lt;div class=&quot;code&quot;&gt;import { useSuiteFixtures } from &amp;quot;../../common/fixtures&amp;quot;;</blockquote><blockquote>- &lt;div class=&quot;codelisting_container&quot;&gt;&lt;div class=&quot;icon_copy_code far fa-clipboard&quot; tabindex=&quot;0&quot;  data-clipboard-target=&quot;#codebox<del class="diffchar deleted"><strong>63</strong></del>&quot; &gt;&lt;span class=&quot;copy_code_tooltiptext&quot;&gt;Copy to clipboard&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;codelisting&quot;  data-theme=&quot;off&quot;  data-syntax=&quot;bash&quot;  data-wrap=&quot;1&quot;  dir=&quot;ltr&quot;  style=&quot;white-space:pre-wrap; overflow-wrap: break-word; word-wrap: break-word;&quot; id=&quot;codebox<del class="diffchar deleted"><strong>63</strong></del>&quot; &gt;&lt;div class=&quot;code&quot;&gt;# 1. Provision once (writes db/local.php, installs the schema, sets the admin password).</blockquote><blockquote>+ &lt;div class=&quot;codelisting_container&quot;&gt;&lt;div class=&quot;icon_copy_code far fa-clipboard&quot; tabindex=&quot;0&quot;  data-clipboard-target=&quot;#codebox<ins class="diffchar inserted"><strong>47</strong></ins>&quot; &gt;&lt;span class=&quot;copy_code_tooltiptext&quot;&gt;Copy to clipboard&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;codelisting&quot;  data-theme=&quot;off&quot;  data-syntax=&quot;bash&quot;  data-wrap=&quot;1&quot;  dir=&quot;ltr&quot;  style=&quot;white-space:pre-wrap; overflow-wrap: break-word; word-wrap: break-word;&quot; id=&quot;codebox<ins class="diffchar inserted"><strong>47</strong></ins>&quot; &gt;&lt;div class=&quot;code&quot;&gt;# 1. Provision once (writes db/local.php, installs the schema, sets the admin password).</blockquote><blockquote>- &lt;div class=&quot;codelisting_container&quot;&gt;&lt;div class=&quot;icon_copy_code far fa-clipboard&quot; tabindex=&quot;0&quot;  data-clipboard-target=&quot;#codebox<del class="diffchar deleted"><strong>6</strong></del>4&quot; &gt;&lt;span class=&quot;copy_code_tooltiptext&quot;&gt;Copy to clipboard&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;codelisting&quot;  data-theme=&quot;off&quot;  data-wrap=&quot;1&quot;  dir=&quot;ltr&quot;  style=&quot;white-space:pre-wrap; overflow-wrap: break-word; word-wrap: break-word;&quot; id=&quot;codebox<del class="diffchar deleted"><strong>6</strong></del>4&quot; &gt;&lt;div class=&quot;code&quot;&gt;https://gitlab.com/tikiwiki/tiki/-/jobs/&amp;lt;job-id&amp;gt;/artifacts/file/tests/e2e/playwright-report/index.html&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;</blockquote><blockquote>+ &lt;div class=&quot;codelisting_container&quot;&gt;&lt;div class=&quot;icon_copy_code far fa-clipboard&quot; tabindex=&quot;0&quot;  data-clipboard-target=&quot;#codebox4<ins class="diffchar inserted"><strong>8</strong></ins>&quot; &gt;&lt;span class=&quot;copy_code_tooltiptext&quot;&gt;Copy to clipboard&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;codelisting&quot;  data-theme=&quot;off&quot;  data-wrap=&quot;1&quot;  dir=&quot;ltr&quot;  style=&quot;white-space:pre-wrap; overflow-wrap: break-word; word-wrap: break-word;&quot; id=&quot;codebox4<ins class="diffchar inserted"><strong>8</strong></ins>&quot; &gt;&lt;div class=&quot;code&quot;&gt;https://gitlab.com/tikiwiki/tiki/-/jobs/&amp;lt;job-id&amp;gt;/artifacts/file/tests/e2e/playwright-report/index.html&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;</blockquote>]]></summary>
    <published>2026-09-14T19:13:46+00:00</published>
    <updated>2026-09-14T19:13:46+00:00</updated>
    <link rel="alternate" type="text/html" href="https://dev.tiki.org/tiki-index.php?page=Tiki-End-to-End-Testing"/>
    <id>https://dev.tiki.org/tiki-index.php?page=Tiki-End-to-End-Testing</id>
  </entry>
  <entry>
    <title type="html"><![CDATA[Tiki Test Plan for new site admin]]></title>
    <published>2026-09-10T15:46:59+00:00</published>
    <updated>2026-09-10T15:46:59+00:00</updated>
    <link rel="alternate" type="text/html" href="https://dev.tiki.org/tiki-index.php?page=Tiki+Test+Plan+for+new+site+admin"/>
    <id>https://dev.tiki.org/tiki-index.php?page=Tiki+Test+Plan+for+new+site+admin</id>
  </entry>
  <entry>
    <title type="html"><![CDATA[Backport Policy]]></title>
    <published>2026-09-09T10:33:08+00:00</published>
    <updated>2026-09-09T10:33:08+00:00</updated>
    <link rel="alternate" type="text/html" href="https://dev.tiki.org/tiki-index.php?page=Backport+Policy"/>
    <id>https://dev.tiki.org/tiki-index.php?page=Backport+Policy</id>
  </entry>
  <entry>
    <title type="html"><![CDATA[Where to commit]]></title>
    <summary type="html"><![CDATA[<blockquote>- &lt;div id=&quot;wpfancytable<del class="diffchar deleted"><strong>2</strong></del>-div&quot; class=&quot;table-responsive ts-wrapperdiv &quot;&gt;	&lt;table class=&quot;table table-striped table-hover  normal&quot; id=&quot;wpfancytable<del class="diffchar deleted"><strong>2</strong></del>&quot;&gt;	&lt;thead class=&quot;&quot;&gt;		&lt;tr&gt;			&lt;th&gt;&lt;strong&gt;Name&lt;/strong&gt; &lt;/th&gt;			&lt;th&gt;&lt;strong&gt;Currently this is git branch&lt;/strong&gt;&lt;/th&gt;			&lt;th&gt; &lt;strong&gt;What is allowed in this branch&lt;/strong&gt; &lt;/th&gt;			&lt;th&gt; &lt;strong&gt;Before commiting here, first commit to&lt;/strong&gt;&lt;/th&gt;		&lt;/tr&gt;	&lt;/thead&gt;	&lt;tbody&gt;		&lt;tr&gt;			&lt;td&gt;&lt;strong&gt;Dev&lt;/strong&gt; &lt;/td&gt;			&lt;td&gt; &lt;a class=&quot;wiki external&quot; target=&quot;_blank&quot; title=&quot;External link&quot; href=&quot;https://gitlab.com/tikiwiki/tiki/commits/master&quot; rel=&quot;external&quot;&gt;&lt;strong&gt;master&lt;/strong&gt; (trunk)&lt;/a&gt;&lt;img src=&quot;img/icons/green_question.png&quot; alt=&quot;Question&quot; width=&quot;16&quot; height=&quot;16&quot; name=&quot;link-external&quot; title=&quot;Question&quot; class=&quot;icon&quot; /&gt; (future 31x) &lt;/td&gt;			&lt;td&gt; Functional [ENH]ancements and new features &lt;br /&gt;  [FIX]es and [TRA]nslations &lt;br /&gt; Most development (new features) happens here &lt;br /&gt; This is the place for [REF]actoring or cosmetic changes. &lt;br /&gt;  Features must be functional but don’t have to be fully complete. &lt;br /&gt; In theory, should be releasable at any time.  Also: &lt;a id=&quot;mo<del class="diffchar deleted"><strong>2</strong></del>-link&quot; href=&quot;javascript:void(0)&quot; class=&quot;plugin-mouseover-anchor&quot;&gt;Update language strings&lt;/a&gt;&lt;span id=&quot;mo<del class="diffchar deleted"><strong>2</strong></del>&quot; class=&quot;plugin-mouseover&quot; style=&quot;display: none; position: absolute; width: 400px; height: 200px;    pointer-events: none;&quot;&gt;If you must change the English version (but are not changing the meaning and so the translations are still valid, please use &lt;a href=&quot;Mass-spelling-correction&quot; title=&quot;Mass spelling correction&quot; class=&quot;wiki wiki_page&quot;&gt;mass spelling correction&lt;/a&gt;. If you can&#039;t use that, just add to pending text corrections.&lt;/span&gt;. If you commit to master, and after you want to commit to a stable branch, please see how to &lt;a href=&quot;Git-cherry-pick&quot; title=&quot;Git cherry-pick&quot; class=&quot;wiki wiki_page&quot;&gt;git cherry-pick&lt;/a&gt;. &lt;/td&gt;			&lt;td&gt; This is the first place to propose a merge request (MR)&lt;/td&gt;		&lt;/tr&gt;		&lt;tr&gt;			&lt;td&gt;&lt;strong&gt;Next Stable (branched, unreleased) &lt;/strong&gt; &lt;/td&gt;			&lt;td&gt; None  &lt;/td&gt;			&lt;td&gt; Exists only between the time Dev has been branched into the next stable, and the next stable .0 release has been released. Bug fixes and Translations only &lt;/td&gt;			&lt;td&gt; Dev&lt;/td&gt;		&lt;/tr&gt;		&lt;tr&gt;			&lt;td&gt;&lt;strong&gt;Current Stable (released)&lt;/strong&gt; &lt;/td&gt;			&lt;td&gt;  &lt;a class=&quot;wiki external&quot; target=&quot;_blank&quot; title=&quot;External link&quot; href=&quot;https://gitlab.com/tikiwiki/tiki/-/tree/30.x&quot; rel=&quot;external&quot;&gt;branches/30.x&lt;/a&gt;&lt;img src=&quot;img/icons/green_question.png&quot; alt=&quot;Question&quot; width=&quot;16&quot; height=&quot;16&quot; name=&quot;link-external&quot; title=&quot;Question&quot; class=&quot;icon&quot; /&gt;   &lt;/td&gt;			&lt;td&gt; Bug fixes and minor safe enhancements &lt;/td&gt;			&lt;td&gt; Dev, Next Stable (if any)&lt;/td&gt;		&lt;/tr&gt;		&lt;tr&gt;			&lt;td&gt;&lt;strong&gt;Previous Stable&lt;/strong&gt; &lt;/td&gt;			&lt;td&gt; None &lt;/td&gt;			&lt;td&gt; Exists only until .1 release of Current Stable has been released. Then EoL or becomes the Previous Stable LTS &lt;/td&gt;			&lt;td&gt; Dev, Current Stable&lt;/td&gt;		&lt;/tr&gt;		&lt;tr&gt;			&lt;td&gt;&lt;strong&gt;Previous Stable LTS&lt;/strong&gt; &lt;/td&gt;			&lt;td&gt; &lt;a class=&quot;wiki external&quot; target=&quot;_blank&quot; title=&quot;External link&quot; href=&quot;https://gitlab.com/tikiwiki/tiki/-/tree/27.x&quot; rel=&quot;external&quot;&gt;branches/27.x&lt;/a&gt;&lt;img src=&quot;img/icons/green_question.png&quot; alt=&quot;Question&quot; width=&quot;16&quot; height=&quot;16&quot; name=&quot;link-external&quot; title=&quot;Question&quot; class=&quot;icon&quot; /&gt; &lt;/td&gt;			&lt;td&gt; Minor safe enhancements, fixes and translations backported from Current Stable or Next Stable &lt;/td&gt;			&lt;td&gt; Dev, Current Stable or Next Stable&lt;/td&gt;		&lt;/tr&gt;		&lt;tr&gt;			&lt;td&gt;&lt;strong&gt;Security fixes only LTS (previous LTS)&lt;/strong&gt; &lt;/td&gt;			&lt;td&gt; &lt;a class=&quot;wiki external&quot; target=&quot;_blank&quot; title=&quot;External link&quot; href=&quot;https://gitlab.com/tikiwiki/tiki/-/tree/24.x&quot; rel=&quot;external&quot;&gt;branches/24.x&lt;/a&gt;&lt;img src=&quot;img/icons/green_question.png&quot; alt=&quot;Question&quot; width=&quot;16&quot; height=&quot;16&quot; name=&quot;link-external&quot; title=&quot;Question&quot; class=&quot;icon&quot; /&gt; &lt;/td&gt;			&lt;td&gt; Security fixes only &lt;/td&gt;			&lt;td&gt; Dev, Current Stable or Next Stable, Previous Stable LTS&lt;/td&gt;		&lt;/tr&gt;	&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;</blockquote><blockquote>+ &lt;div id=&quot;wpfancytable<ins class="diffchar inserted"><strong>1</strong></ins>-div&quot; class=&quot;table-responsive ts-wrapperdiv &quot;&gt;	&lt;table class=&quot;table table-striped table-hover  normal&quot; id=&quot;wpfancytable<ins class="diffchar inserted"><strong>1</strong></ins>&quot;&gt;	&lt;thead class=&quot;&quot;&gt;		&lt;tr&gt;			&lt;th&gt;&lt;strong&gt;Name&lt;/strong&gt; &lt;/th&gt;			&lt;th&gt;&lt;strong&gt;Currently this is git branch&lt;/strong&gt;&lt;/th&gt;			&lt;th&gt; &lt;strong&gt;What is allowed in this branch&lt;/strong&gt; &lt;/th&gt;			&lt;th&gt; &lt;strong&gt;Before commiting here, first commit to&lt;/strong&gt;&lt;/th&gt;		&lt;/tr&gt;	&lt;/thead&gt;	&lt;tbody&gt;		&lt;tr&gt;			&lt;td&gt;&lt;strong&gt;Dev&lt;/strong&gt; &lt;/td&gt;			&lt;td&gt; &lt;a class=&quot;wiki external&quot; target=&quot;_blank&quot; title=&quot;External link&quot; href=&quot;https://gitlab.com/tikiwiki/tiki/commits/master&quot; rel=&quot;external&quot;&gt;&lt;strong&gt;master&lt;/strong&gt; (trunk)&lt;/a&gt;&lt;img src=&quot;img/icons/green_question.png&quot; alt=&quot;Question&quot; width=&quot;16&quot; height=&quot;16&quot; name=&quot;link-external&quot; title=&quot;Question&quot; class=&quot;icon&quot; /&gt; (future 31x) &lt;/td&gt;			&lt;td&gt; Functional [ENH]ancements and new features &lt;br /&gt;  [FIX]es and [TRA]nslations &lt;br /&gt; Most development (new features) happens here &lt;br /&gt; This is the place for [REF]actoring or cosmetic changes. &lt;br /&gt;  Features must be functional but don’t have to be fully complete. &lt;br /&gt; In theory, should be releasable at any time.  Also: &lt;a id=&quot;mo<ins class="diffchar inserted"><strong>1</strong></ins>-link&quot; href=&quot;javascript:void(0)&quot; class=&quot;plugin-mouseover-anchor&quot;&gt;Update language strings&lt;/a&gt;&lt;span id=&quot;mo<ins class="diffchar inserted"><strong>1</strong></ins>&quot; class=&quot;plugin-mouseover&quot; style=&quot;display: none; position: absolute; width: 400px; height: 200px;    pointer-events: none;&quot;&gt;If you must change the English version (but are not changing the meaning and so the translations are still valid, please use &lt;a href=&quot;Mass-spelling-correction&quot; title=&quot;Mass spelling correction&quot; class=&quot;wiki wiki_page&quot;&gt;mass spelling correction&lt;/a&gt;. If you can&#039;t use that, just add to pending text corrections.&lt;/span&gt;. If you commit to master, and after you want to commit to a stable branch, please see how to &lt;a href=&quot;Git-cherry-pick&quot; title=&quot;Git cherry-pick&quot; class=&quot;wiki wiki_page&quot;&gt;git cherry-pick&lt;/a&gt;. &lt;/td&gt;			&lt;td&gt; This is the first place to propose a merge request (MR)&lt;/td&gt;		&lt;/tr&gt;		&lt;tr&gt;			&lt;td&gt;&lt;strong&gt;Next Stable (branched, unreleased) &lt;/strong&gt; &lt;/td&gt;			&lt;td&gt; None  &lt;/td&gt;			&lt;td&gt; Exists only between the time Dev has been branched into the next stable, and the next stable .0 release has been released. Bug fixes and Translations only &lt;/td&gt;			&lt;td&gt; Dev&lt;/td&gt;		&lt;/tr&gt;		&lt;tr&gt;			&lt;td&gt;&lt;strong&gt;Current Stable (released)&lt;/strong&gt; &lt;/td&gt;			&lt;td&gt;  &lt;a class=&quot;wiki external&quot; target=&quot;_blank&quot; title=&quot;External link&quot; href=&quot;https://gitlab.com/tikiwiki/tiki/-/tree/30.x&quot; rel=&quot;external&quot;&gt;branches/30.x&lt;/a&gt;&lt;img src=&quot;img/icons/green_question.png&quot; alt=&quot;Question&quot; width=&quot;16&quot; height=&quot;16&quot; name=&quot;link-external&quot; title=&quot;Question&quot; class=&quot;icon&quot; /&gt;   &lt;/td&gt;			&lt;td&gt; Bug fixes and minor safe enhancements &lt;/td&gt;			&lt;td&gt; Dev, Next Stable (if any)&lt;/td&gt;		&lt;/tr&gt;		&lt;tr&gt;			&lt;td&gt;&lt;strong&gt;Previous Stable&lt;/strong&gt; &lt;/td&gt;			&lt;td&gt; None &lt;/td&gt;			&lt;td&gt; Exists only until .1 release of Current Stable has been released. Then EoL or becomes the Previous Stable LTS &lt;/td&gt;			&lt;td&gt; Dev, Current Stable&lt;/td&gt;		&lt;/tr&gt;		&lt;tr&gt;			&lt;td&gt;&lt;strong&gt;Previous Stable LTS&lt;/strong&gt; &lt;/td&gt;			&lt;td&gt; &lt;a class=&quot;wiki external&quot; target=&quot;_blank&quot; title=&quot;External link&quot; href=&quot;https://gitlab.com/tikiwiki/tiki/-/tree/27.x&quot; rel=&quot;external&quot;&gt;branches/27.x&lt;/a&gt;&lt;img src=&quot;img/icons/green_question.png&quot; alt=&quot;Question&quot; width=&quot;16&quot; height=&quot;16&quot; name=&quot;link-external&quot; title=&quot;Question&quot; class=&quot;icon&quot; /&gt; &lt;/td&gt;			&lt;td&gt; Minor safe enhancements, fixes and translations backported from Current Stable or Next Stable &lt;/td&gt;			&lt;td&gt; Dev, Current Stable or Next Stable&lt;/td&gt;		&lt;/tr&gt;		&lt;tr&gt;			&lt;td&gt;&lt;strong&gt;Security fixes only LTS (previous LTS)&lt;/strong&gt; &lt;/td&gt;			&lt;td&gt; &lt;a class=&quot;wiki external&quot; target=&quot;_blank&quot; title=&quot;External link&quot; href=&quot;https://gitlab.com/tikiwiki/tiki/-/tree/24.x&quot; rel=&quot;external&quot;&gt;branches/24.x&lt;/a&gt;&lt;img src=&quot;img/icons/green_question.png&quot; alt=&quot;Question&quot; width=&quot;16&quot; height=&quot;16&quot; name=&quot;link-external&quot; title=&quot;Question&quot; class=&quot;icon&quot; /&gt; &lt;/td&gt;			&lt;td&gt; Security fixes only &lt;/td&gt;			&lt;td&gt; Dev, Current Stable or Next Stable, Previous Stable LTS&lt;/td&gt;		&lt;/tr&gt;	&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;</blockquote><blockquote>- &lt;/li&gt;&lt;li&gt; Normally, we should not commit code to EoL branches because no more releases are planned, but some sites run fom Git and may need a little more time before upgrading. So exceptions here can be accepted<del class="diffchar deleted"><strong>.</strong></del></blockquote><blockquote>+ &lt;/li&gt;&lt;li&gt; Normally, we should not commit code to EoL branches because no more releases are planned, but some sites run f<ins class="diffchar inserted"><strong>r</strong></ins>om Git and may need a little more time before upgrading. So exceptions here can be accepted<ins class="diffchar inserted"><strong> (or the sites can just manage local patches)</strong></ins></blockquote>]]></summary>
    <published>2026-09-07T12:19:46+00:00</published>
    <updated>2026-09-07T12:19:46+00:00</updated>
    <link rel="alternate" type="text/html" href="https://dev.tiki.org/tiki-index.php?page=Where+to+commit"/>
    <id>https://dev.tiki.org/tiki-index.php?page=Where+to+commit</id>
  </entry>
  <entry>
    <title type="html"><![CDATA[Major Features Missing In Tiki]]></title>
    <summary type="html"><![CDATA[<blockquote>- &lt;/li&gt;&lt;li&gt; 2024-12 : &lt;a href=&quot;https://doc.tiki.org/Tiki28&quot; class=&quot;wiki ext_page doc&quot;&gt;What&#039;s new in Tiki 28.0&lt;/a&gt;<del class="diffchar deleted"><strong> LTS?</strong></del><br>&lt;/li&gt;&lt;li&gt; 2025-09 : &lt;a href=&quot;https://doc.tiki.org/Tiki29&quot; class=&quot;wiki ext_page doc&quot;&gt;What&#039;s new in Tiki 29.0&lt;/a&gt;<del class="diffchar deleted"><strong> LTS?</strong></del></blockquote><blockquote>+ &lt;/li&gt;&lt;li&gt; 2024-12 : &lt;a href=&quot;https://doc.tiki.org/Tiki28&quot; class=&quot;wiki ext_page doc&quot;&gt;What&#039;s new in Tiki 28.0&lt;/a&gt;<br>&lt;/li&gt;&lt;li&gt; 2025-09 : &lt;a href=&quot;https://doc.tiki.org/Tiki29&quot; class=&quot;wiki ext_page doc&quot;&gt;What&#039;s new in Tiki 29.0&lt;/a&gt;</blockquote><blockquote>- &lt;div id=&quot;wplist-<del class="diffchar deleted"><strong>2</strong></del>-div&quot; class=&quot;table-responsive ts-wrapperdiv &quot; &gt;<br>    &lt;table id=&quot;wplist-<del class="diffchar deleted"><strong>2</strong></del>&quot; class=&quot;table normal table-hover table-striped&quot; data-count=&quot;11&quot;&gt;</blockquote><blockquote>+ &lt;div id=&quot;wplist-<ins class="diffchar inserted"><strong>1</strong></ins>-div&quot; class=&quot;table-responsive ts-wrapperdiv &quot; &gt;<br>    &lt;table id=&quot;wplist-<ins class="diffchar inserted"><strong>1</strong></ins>&quot; class=&quot;table normal table-hover table-striped&quot; data-count=&quot;11&quot;&gt;</blockquote>]]></summary>
    <published>2026-08-25T20:54:51+00:00</published>
    <updated>2026-08-25T20:54:51+00:00</updated>
    <link rel="alternate" type="text/html" href="https://dev.tiki.org/tiki-index.php?page=Major+Features+Missing+In+Tiki"/>
    <id>https://dev.tiki.org/tiki-index.php?page=Major+Features+Missing+In+Tiki</id>
  </entry>
  <entry>
    <title type="html"><![CDATA[Daily Build]]></title>
    <summary type="html"><![CDATA[<blockquote>- &lt;p&gt;&lt;div id=&#039;toc&#039;&gt;&lt;div id=&#039;toctitle&#039;&gt;&lt;h3&gt;Content&lt;/h3&gt;&lt;/div&gt;&lt;ul class=&quot;toc&quot;&gt;&lt;/ul&gt;&lt;!--toc--&gt;&lt;/div&gt;</blockquote><blockquote>+ &lt;p&gt;&lt;div id=&#039;toc&#039;&gt;&lt;div id=&#039;toctitle&#039;&gt;&lt;h3&gt;Content&lt;/h3&gt;&lt;/div&gt;&lt;ul class=&quot;toc&quot;<ins class="diffchar inserted"><strong>&gt;&lt;li&gt;&lt;a href=&#039;#Current&#039; class=&#039;link&#039;&gt; Current&lt;/a&gt;<br>&lt;/li&gt;&lt;li&gt;&lt;a href=&#039;#Future&#039; class=&#039;link&#039;&gt; Future&lt;/a&gt;<br>&lt;/li&gt;&lt;li&gt;&lt;a href=&#039;#End_of_life&#039; class=&#039;link&#039;&gt; End of life&lt;/a&gt;&lt;/li</strong></ins>&gt;&lt;/ul&gt;&lt;!--toc--&gt;&lt;/div&gt;</blockquote><blockquote>- <p></blockquote><blockquote>- </li></ul></p></blockquote><blockquote>- <h2 class="showhide_heading d-flex justify-content-start" id="x"> 29.x<a href="#x" class="heading-link" aria-label="heading link"><span class="icon icon-link fas fa-link "   ></span></a></h2></blockquote><blockquote>- <ul><li> <span class="icon icon-file-download fas fa-file-download "   ></span> <a class="wiki external" target="_blank" title="External link" href="https://tiki.org/tar/lastiki_29-x.zip" rel="external">29.x</a><img src="img/icons/green_question.png" alt="Question" width="16" height="16" name="link-external" title="Question" class="icon" /> &mdash; The <strong>../branches/29.x/..</strong> branch from Git</blockquote><blockquote>- <br /><a class="wiki external" target="_blank" title="External link" href="https://tiki.org/tar/lastiki_29-x.zip.md5" rel="external">MD5</a><img src="img/icons/green_question.png" alt="Question" width="16" height="16" name="link-external" title="Question" class="icon" /></blockquote>]]></summary>
    <published>2026-08-25T20:49:07+00:00</published>
    <updated>2026-08-25T20:49:07+00:00</updated>
    <link rel="alternate" type="text/html" href="https://dev.tiki.org/tiki-index.php?page=Daily+Build"/>
    <id>https://dev.tiki.org/tiki-index.php?page=Daily+Build</id>
  </entry>
</feed>
