Changes for page How to Customize XWiki Without Creating Upgrade Problems
Last modified by Agnease on 2026/05/26 11:00
Summary
-
Page properties (2 modified, 0 added, 0 removed)
-
Objects (0 modified, 0 added, 1 removed)
Details
- Page properties
-
- Title
-
... ... @@ -1,1 +1,1 @@ 1 - XWikiCustomDevelopmentWithout Upgrade Problems | Agnease1 +xwiki-custom-development - Content
-
... ... @@ -11,11 +11,10 @@ 11 11 </div> 12 12 </div> 13 13 14 - <h1 id="hero-title"> WhyXWikicustomdevelopmentneedsstructure,documentationandupgradeawareness</h1>14 + <h1 id="hero-title">How to customize XWiki safely without creating upgrade problems</h1> 15 15 16 16 <p class="resource-summary"> 17 - XWiki can be adapted to complex business needs. The important part is to keep custom work documented, 18 - versioned and easy to validate during future upgrades. 17 + Custom code does not have to make XWiki fragile. The real risk is unmanaged customization, not customization itself. 19 19 </p> 20 20 </div> 21 21 </section> ... ... @@ -23,155 +23,178 @@ 23 23 <section class="resource-page"> 24 24 <div class="container"> 25 25 <div class="resource-layout"> 26 - <aside class="resource-sidebar" aria-label="Page summary"> 27 - <h4>In this guide</h4> 28 - <ul> 29 - <li><a href="#why-customize">Why customize XWiki</a></li> 30 - <li><a href="#where-risk-appears">Where risk appears</a></li> 31 - <li><a href="#safe-model">Safe model</a></li> 32 - <li><a href="#upgrade-validation">Upgrade validation</a></li> 33 - <li><a href="#practical-checklist">Checklist</a></li> 34 - <li><a href="#strategic-advantage">Strategic advantage</a></li> 35 - </ul> 36 - </aside> 37 37 38 38 <article class="resource-content"> 39 39 40 40 <p> 41 - Many organizationschooseXWikibecause it cangrowbeyonda simpledocumentationspace.A platformmaystart42 - with pages,attachmentsandpermissions,then evolve into structured applications, approvalworkflows,custom43 - dashboards,brandedPDF exports,integrations orinternaltools builtaroundthe company’s realprocesses.29 + XWiki is often selected because it can adapt to real business processes. Teams can start with standard wiki 30 + features, then add structured pages, templates, dashboards, workflows, PDF exports, integrations, macros, 31 + UI extensions or Java components when the organization needs more than generic content editing. 44 44 </p> 45 45 46 46 <p> 47 - This flexibility is valuable, but it also raises a legitimate concern: will custom development make upgrades 48 - harder? The answer depends less on the existence of custom code and more on the way it is organized. A controlled 49 - customization can remain stable for years. An undocumented change applied directly in production can become a 50 - maintenance problem after the next upgrade. 35 + This flexibility is a major advantage, but it also creates a common concern: if the platform is customized too 36 + much, will future upgrades become expensive or risky? The answer depends less on how much customization exists 37 + and more on how that customization is designed, tracked, documented and tested. 51 51 </p> 52 52 53 53 <div class="resource-note"> 54 54 <p> 55 - <strong>The main point:</strong> custom code is not the problem. Uncontrolled customcode is.XWiki can be56 - customizedsafely whenchangesareseparatedfromstandardpages,tracked,documentedandtested.42 + <strong>The main point:</strong> custom development is not the problem. Uncontrolled custom development is. 43 + When delivered in a controlled way, custom XWiki features can remain stable across multiple upgrades. 57 57 </p> 58 58 </div> 59 59 60 - <h2 id="why-customize">Why XWiki customdevelopmentexists</h2>47 + <h2 id="why-customize">Why organizations customize XWiki</h2> 61 61 62 62 <p> 63 - Avoiding all customization may look safer at first, but it can create other costs. Users may start maintaining 64 - side spreadsheets, sending approvals by email, duplicating data in external tools or bypassing the wiki because 65 - it does not match their daily work. In these cases, a well-designed XWiki customization can simplify the process 66 - and improve adoption. 50 + Many organizations can use XWiki successfully with standard features. But production platforms often evolve 51 + beyond generic pages and spaces. They need to reflect internal processes, compliance requirements, document 52 + governance, reporting needs or integrations with other business systems. 67 67 </p> 68 68 55 + <p>Typical XWiki customizations include:</p> 56 + 57 + <ul> 58 + <li>custom document metadata, classes, sheets and templates</li> 59 + <li>structured applications for internal processes</li> 60 + <li>approval workflows and controlled document lifecycles</li> 61 + <li>custom dashboards, reports and LiveData views</li> 62 + <li>branded PDF exports and document templates</li> 63 + <li>UI extensions, panels, macros and page actions</li> 64 + <li>integrations with authentication, storage, CRM, ticketing or AI systems</li> 65 + <li>scheduled jobs, notifications and automation</li> 66 + </ul> 67 + 69 69 <p> 70 - Typical examples include custom metadata for documents, templates for recurring content, dashboards for teams, 71 - approval flows, notifications, PDF layouts, page actions, UI extensions, macros and integrations with systems 72 - such as authentication providers, ticketing tools, storage services, CRM platforms or AI assistants. These 73 - features can be implemented at different levels, from wiki pages and scripts to packaged Java extensions. 69 + Avoiding all customization can create hidden costs: manual workarounds, duplicated tools, weak adoption and 70 + processes that remain outside the knowledge platform. The goal is not to customize everything. The goal is to 71 + customize the right things in a maintainable way. 74 74 </p> 75 75 76 - <h2 id=" where-risk-appears">Where customization becomes risky</h2>74 + <h2 id="customization-risks">Where customization becomes risky</h2> 77 77 78 78 <p> 79 - Problems usually appear when nobody can quickly explain where a customization is implemented, why it exists or 80 - how it should be tested. Business logic mixed into regular content pages, standard pages changed without notes, 81 - scripts that exist only in production, hardcoded group names or missing upgrade checks are common signs that the 82 - customization process needs more structure. 77 + XWiki makes it easy to add logic in wiki pages, Velocity scripts, Groovy scripts, templates, panels, macros, 78 + UI extensions and Java components. That power needs discipline. A customization becomes risky when nobody can 79 + quickly explain where it is implemented, why it exists and how it should be validated after an upgrade. 83 83 </p> 84 84 82 + <p>Common warning signs include:</p> 83 + 84 + <ul> 85 + <li>business logic mixed directly into regular content pages</li> 86 + <li>standard XWiki pages modified without documentation</li> 87 + <li>important scripts existing only in production</li> 88 + <li>no source control or release history for custom code</li> 89 + <li>hardcoded users, groups, page names, URLs or workflow states</li> 90 + <li>custom features missing from upgrade validation plans</li> 91 + <li>urgent fixes applied in production and never cleaned up later</li> 92 + </ul> 93 + 94 + <h2 id="safe-model">A safer model for XWiki custom development</h2> 95 + 96 + <h3>1. Separate custom code from standard XWiki pages</h3> 85 85 <p> 86 - Thisis especiallyimportantinXWiki becausecustomlogiccanlive inseveral places: classes,objects,sheets,87 - templates, Velocityor Groovyscripts,panels, UI extensions, macros,scheduled jobsand Javacomponents.The88 - flexibilityisuseful,buteachimportantcustomizationshould have aclear location andaclearmaintenance89 - pa th.98 + Custom pages, classes, templates, scripts and configuration should usually live in dedicated technical spaces, 99 + such as a company-specific <code>Code</code>, <code>Applications</code>, <code>Templates</code> or 100 + <code>Config</code> area. This keeps the difference between standard distribution content and company-specific 101 + logic clear during upgrades. 90 90 </p> 91 91 92 - <h2 id="safe-model">A safer model for XWiki custom work</h2> 93 - 94 - <h3>1. Keep custom code separate from standard XWiki pages</h3> 104 + <h3>2. Document each important customization</h3> 95 95 <p> 96 - Custom classes, scripts, templates and configuration should usually live in dedicated technical spaces, for 97 - example a company-specific <code>Code</code>, <code>Applications</code>, <code>Templates</code> or 98 - <code>Config</code> area. This makes it easier to see what belongs to the standard distribution and what belongs 99 - to the organization. 106 + Every significant customization should have a short technical note: what it does, where it is implemented, who 107 + requested it, what pages or components are involved, what assumptions it makes and how it should be tested. 100 100 </p> 101 101 102 - <h3> 2.Documentthepurpose, notonly the implementation</h3>110 + <h3>3. Track wiki-based customizations</h3> 103 103 <p> 104 - Ashort technicalnoteisoften enough:what thecustomizationdoes,whouses it,whereitisimplemented,what105 - assumptionsitmakesandwhatshould becheckedafteranupgrade.This turns custom work from a hidden script106 - i ntoa maintainable partof theplatform.112 + Many practical features can be built directly in the wiki using XWiki classes, objects, sheets, templates, 113 + Velocity, Groovy, UI extensions or dashboards. These should still be grouped, documented and exported or 114 + versioned when they become important for the business. 107 107 </p> 108 108 109 - <h3> 3.Trackimportant changesinaversioncontrolsystem</h3>117 + <h3>4. Use Java extensions for larger or long-term features</h3> 110 110 <p> 111 - Seriouscustomdevelopmentshouldnotexistonlyinsidethe productionwiki.Javacode,scripts,XARpackages,112 - deploymentfiles and importanttemplatesshouldbe storedina versioncontrolsystem,suchasGit. Thisgives113 - theteam a historyofwhatchanged,whenitchangedandwhy.119 + When a customization becomes complex, reusable or business-critical, a Java extension is often a better 120 + long-term solution. This is especially useful for event listeners, custom services, reusable macros, scheduled 121 + jobs, integrations, workflow logic, APIs or advanced PDF export behavior. 114 114 </p> 115 115 116 - <h3> 4.Choose therightimplementationlevel</h3>124 + <h3>5. Use Git for serious custom development</h3> 117 117 <p> 118 - Many useful features can start as wiki-based customizations using XWiki classes, sheets, templates, Velocity or 119 - UI extensions. When a feature becomes complex, reusable or business-critical, packaging it as an extension is 120 - often a better long-term option. Event listeners, custom services, scheduled jobs, integrations and advanced 121 - workflow logic usually benefit from this approach. 126 + Important customizations should be stored in source control. Git makes it possible to understand what changed, 127 + when it changed, why it changed and whether the change can be safely rolled back or adapted for a new XWiki 128 + version. 122 122 </p> 123 123 124 - <h3> 5. Keep configurationoutsidethe code</h3>131 + <h3>6. Keep configuration separate from code</h3> 125 125 <p> 126 126 Group names, target spaces, template references, email recipients, external URLs and workflow settings should 127 - not be hardcoded when they are likely to change. Configuration pages or preference objects make the feature128 - easier to ad apt withoutrewriting the implementation.134 + not be hardcoded when they are likely to change. Configuration pages or preference objects make the solution 135 + easier to adjust without editing the implementation. 129 129 </p> 130 130 131 - <h2 id="upgrade-validation">Validate custom features during upgrades</h2> 132 - 138 + <h3>7. Test custom features during every upgrade</h3> 133 133 <p> 134 - A successful upgrade is not only one where XWiki starts and standard pages load. The upgrade plan should also 135 - include the features that make the instance specific to the organization: custom dashboards, templates, macros, 136 - workflows, permissions, notifications, PDF exports, scheduled jobs and integrations. 140 + A successful upgrade is not only one where the server starts. Custom dashboards, workflows, macros, PDF exports, 141 + notifications, integrations, permissions and scheduled jobs should be part of the validation checklist. 137 137 </p> 138 138 144 + <h2 id="tracking-checklist">Practical tracking checklist</h2> 145 + 146 + <ul class="resource-checklist"> 147 + <li>List all important custom pages, templates, sheets, macros, scripts and Java extensions.</li> 148 + <li>Identify which customizations are business-critical and which are historical or optional.</li> 149 + <li>Move technical logic into dedicated spaces instead of regular content pages where possible.</li> 150 + <li>Store Java code, scripts, XAR packages and deployment files in Git.</li> 151 + <li>Document the purpose, owner, technical location and validation steps for each customization.</li> 152 + <li>Use staging or a temporary clone to test custom features before production upgrades.</li> 153 + <li>Review hardcoded references to users, groups, spaces, page names, URLs and external systems.</li> 154 + <li>Remove obsolete customizations instead of carrying them through every upgrade cycle.</li> 155 + <li>Package larger features as extensions when they become reusable or business-critical.</li> 156 + </ul> 157 + 158 + <h2 id="delivery-process">A controlled delivery process</h2> 159 + 139 139 <p> 140 - For each important customization, the team should know what to test and what a successful result looks like. A 141 - staging environment or temporary clone is usually the safest place to run this validation before production is 142 - touched. 161 + Custom code should be treated as part of the platform architecture, not as a temporary patch. A practical 162 + delivery process can be simple, but it should be repeatable. 143 143 </p> 144 144 145 - <div class="resource-note"> 146 - <p> 147 - <strong>A practical rule:</strong> production can receive urgent fixes when necessary, but it should not become 148 - the only place where the real version of a customization exists. After the emergency, the change should be 149 - reviewed, documented and added to the normal maintenance process. 150 - </p> 151 - </div> 165 + <ol> 166 + <li><strong>Clarify the need:</strong> define the business problem and the users affected.</li> 167 + <li><strong>Choose the right implementation level:</strong> wiki pages, scripts, XAR package or Java extension.</li> 168 + <li><strong>Develop outside production:</strong> use a development or staging environment for non-trivial work.</li> 169 + <li><strong>Track the change:</strong> store code, scripts, configuration and documentation in a maintainable form.</li> 170 + <li><strong>Validate the behavior:</strong> test permissions, rendering, workflows, exports, jobs and integrations.</li> 171 + <li><strong>Deploy with notes:</strong> record what changed and what should be checked during future upgrades.</li> 172 + </ol> 152 152 153 - <h2 id=" practical-checklist">A compactchecklist</h2>174 + <h2 id="common-mistakes">Common mistakes to avoid</h2> 154 154 155 - <ul class="resource-checklist">156 - <li> Separatecustompages,scriptsandconfigurationfrom standardXWikicontent.</li>157 - <li> Document thebusiness purpose, technicallocationandvalidationsteps.</li>158 - <li> Useaversion controlsystem,suchas Git,for code andimportantassets.</li>159 - <li> Testcustomfeatures onstagingbeforeproductionupgrades.</li>160 - <li> Reviewoldcustomizationsand removewhatisno longerused.</li>176 + <ul> 177 + <li><strong>Changing standard pages without a plan.</strong> Direct changes are harder to compare, explain and preserve.</li> 178 + <li><strong>Using production as the development environment.</strong> Quick fixes may be necessary, but they should be reviewed and integrated properly afterwards.</li> 179 + <li><strong>Leaving scripts undocumented.</strong> A script that nobody understands becomes a maintenance risk.</li> 180 + <li><strong>Hardcoding business assumptions.</strong> Roles, groups, spaces and external systems change over time.</li> 181 + <li><strong>Testing only standard XWiki features during upgrades.</strong> Custom behavior is often where the real upgrade risk is found.</li> 161 161 </ul> 162 162 163 163 <h2 id="strategic-advantage">Custom code can become a strategic advantage</h2> 164 164 165 165 <p> 166 - Manyuseful platformfeaturesstart as custom developmentforoneconcreteneed. A workflow,dashboard,167 - integration or structured application may firstsolvea privatebusiness problem, then become a reusable168 - internal component or even a public extension.This is how practical solutions often mature.187 + Some of the most useful solutions in a platform environment start as custom code for a real project. A workflow, 188 + dashboard, macro, integration or structured application may begin as a private need, then become a reusable 189 + internal product or even a public extension. 169 169 </p> 170 170 171 171 <p> 172 - The goal is not to customize everything. The goal is to customize the right parts, in a way that can be 173 - understood and maintained later. When custom work is separated, documented, versioned and tested, XWiki can stay 174 - flexible without becoming fragile. 193 + This is why the question should not be whether XWiki custom development should be avoided. The better question 194 + is how to make it maintainable. When customizations are separated, documented, versioned and tested, they can 195 + help the organization build a knowledge platform that matches its real work instead of forcing users into 196 + disconnected tools and manual workarounds. 175 175 </p> 176 176 177 177 <div class="resource-cta"> ... ... @@ -178,16 +178,29 @@ 178 178 <h3>Need help reviewing XWiki customizations?</h3> 179 179 <p> 180 180 If your XWiki instance includes custom scripts, dashboards, workflows, templates, integrations or Java 181 - extensions, a customization review can help identify what is safe, what needs documentation and what should be182 - tested before the next upgrade. 203 + extensions, a customization review can help identify what is safe, what needs documentation and what should 204 + be tested before the next upgrade. 183 183 </p> 184 184 <a class="btn btn-primary" href="$xwiki.getURL('contact.WebHome')">Request a customization review</a> 185 185 </div> 186 186 187 187 </article> 210 + 211 + <aside class="resource-sidebar" aria-label="Page summary"> 212 + <h4>In this guide</h4> 213 + <ul> 214 + <li><a href="#why-customize">Why customize XWiki</a></li> 215 + <li><a href="#customization-risks">Customization risks</a></li> 216 + <li><a href="#safe-model">Safe model</a></li> 217 + <li><a href="#tracking-checklist">Tracking checklist</a></li> 218 + <li><a href="#delivery-process">Delivery process</a></li> 219 + <li><a href="#common-mistakes">Common mistakes</a></li> 220 + <li><a href="#strategic-advantage">Strategic advantage</a></li> 221 + </ul> 222 + </aside> 223 + 188 188 </div> 189 189 </div> 190 190 </section> 191 - 192 192 {{/html}} 193 193 {{/velocity}}
- Agnease.Code.SEODetailsClass[0]
-
- metaDescription
-
... ... @@ -1,1 +1,0 @@ 1 -Learn how to organize XWiki custom development, scripts, extensions and templates so your platform stays easier to maintain, document and upgrade.