WARFRAME Wiki
Advertisement
WARFRAME Wiki

The Development Guide aims to help community developers get up to speed on contributing to this wiki's codebase. Mostly this pertains to back-end scripts in module pages as they are the most accessible, but contributions to front-end scripts may be allowed if you ask an administrator for permission.

Last updated: Thu, 18 Apr 2024 15:27:48 +0000 (UTC) by User:Flaicher

Resources[]

If you are new to programming on a MediaWiki-based wiki or come from different programming backgrounds (web developers and backend engineers are welcome!), here are some resources to help you get started with understanding the Lua programming language, what libraries are available to use, wikitext basics, and the architecture in which code gets deployed to be used within wiki articles:

Lua

As a scripting language, Lua has similar features and paradigms as JavaScript, Ruby, and Python. If you are familiar with the latter, Lua is relatively quick to learn and can be used in functional (e.g. Module:Math), procedural (e.g. Module:Weapons/infobox), or object-oriented programming (e.g. Module:InfoboxBuilder).

Wikitext markup

Wiki markup is another type of a high-level markup language the renders content to HTML to display on webpages.

Glossary[]

Main article: WARFRAME Wiki:Glossary

Wiki Terminology[]

These terms are applicable to almost any MediaWiki-based wiki, especially on the Fandom site, and are not exclusively used in context of the WARFRAME Wiki.

Terms Explanation
API Refers to MediaWiki's Action API (https://warframe.fandom.com/api.php) or third-party ones such as those maintained by Warframe Community Developers (https://github.com/WFCD)
Arg Shorthand for argument, as in the value that gets passed to template parameters or module function variables.
AWB AutoWikiBrowser, a tool for making semi/fully automatic edits on the wiki
Backend In the context of wiki editors, refers to pages/Lua scripts in the Module namespace.
Cargo Refers to Extension:Cargo which adds support for structured data on wikis, allowing database queries on wiki pages through parser functions. This is not available to be requested on Fandom wikis as of 18:28, 21 October 2021 (UTC) and is only enabled on some Gamepedia wikis like w:c:Terraria.
Codex Refers to the Codex toolkit for building UI based on Wikimedia Design System. Built on Vue.js.
CSS Refers to the wiki's styling spreadsheet on MediaWiki:Common.css or any other stylesheets
Expand (a template) Refers to the recursive practice of turning a template call into its raw wikitext or HTML equilvalent through Special:ExpandTemplates
Database An informal term that refers to any /data subpage of module pages, containing Lua tables that act as NoSQL databases of WARFRAME's contents. Any data in /data subpages will be rebuilt every time a page is loaded as these are not "true" databases and are executable Lua programs instead. As such, there is no support for features like transactions or data caching.
Docbunto Module:Docbunto, the auto-documentation generator for Lua modules; this wiki's fork of the module can be found here
DPL Extension:DynamicPageList, a parser function used for querying pages in certain categories or namespaces
Frame Frame object
Frontend In the context of wiki editors, refers to pages/JavaScript scripts/CSS stylesheets in the MediaWiki namespace.
Infobox A fixed-format table that is at the top-right corner of an article containing a basic summary and/or stats of the article topic. Usually contains the article name, an accompanied image for SEO, an item description, and basic general information. See Help:Infobox for more details.
Invoke (a module) Calling a module's function through this syntax: {{#invoke:<module_name>|<function_name>|<param_1>|<param_2>|...}}
Lede or Lead The introductory paragraph(s) of an article. These are not under a section header and are typically to the left of the article's infobox.
Luafication/Luafying Informal term to describe the porting of a template page to a module to build wikitext. Instead of transcluding a template, there will be an invoke call to a module's function.
M:<module_name> Shorthand for Module:<module_name>
Mbox Shorthand for message boxes that are typically located on the top of articles or right after a section header to alert readers on something about the article.
Memory The memory allocated server-side for running back-end Lua scripts on Module pages (default 50MB)
Module Refers to a module page or the Lua package on the wiki that is in the module page; module, package, and library may be used interchangably
mw MediaWiki, the wiki engine that this wiki is built on, written in PHP. May also refer to the MediaWiki namespace if stylized as "MW".
Namespace The name of a collection of articles to differentiate their purpose on the wiki. Most articles reside in the "Main" namespace which is not explicitly shown in article names. Other namespaces include "Module" for Lua scripts and "MediaWiki" for JS scripts. See Help:Namespaces.
NewPP Preprocessor report on wikitext preprocessing/rendering performance
Null edit Publishing an edit that makes no changes to the page to forcefully refresh the page so it can show all properly linked articles: Wikipedia:Purge#Null_edit. Commonly used to force pages to show up on the appropriate category page.
OOUI MediaWiki library that is used to create responsive UI elements in JavaScript. See mw:OOUI for more details.
Parser function A function that can be called on pages typically used in the syntax of {{#functionname:arg1|arg2|...}}. They are backed by a PHP callback function that works closely with the wikitext parser for generating robust content on the wiki, extending the wikitext markup language. See Manual:Parser_functions for more details.
Parsoid A (soon-to-be) core MediaWiki library that provides runtime bidirectional parsing of wikitext into HTML and vice versa. See Parsoid for more details.
PortableInfobox Fandom's implementation of an infobox that can display on both desktop and mobile platforms. See Portable_Infoboxes for more details.
Redlink A hyperlink that links to a non-existent page on the wiki. For example, this is a broken link.
RegEx Regular expressions; in the context of Lua, they can also refer to patterns which are similar to RegEx, but have syntactic differences. See Extension:Scribunto/Lua_reference_manual#Patterns for more details.
Sandbox A test page for experimenting with wikitext and modules; e.g. User:Cephalon Scientia/Sandbox
Scribunto The MediaWiki extension that allows Lua scripting on the wiki; Extension:Scribunto
Skin The customizable user interface of the wiki. As of 2021-06-25, Fandom offers Oasis (soon to be sunsetted/unsupported) and FandomDesktop skins by default. See Manual:Skins for more details.
Submodule A module page that is a subpage of another module, sometimes called the "main" module. An example is Module:Weapons/infobox being a submodule of Module:Weapons.
Substitution The act of converting transcluded content on pages to their wikitext equilvalent when the page is saved. Can be thought of as "template substitution" to make page content independent from the template(s) used. See Help:Substitution for more details.
T:<template_name> Shorthand for Template:<template_name>
Tabber <tabber> tags that allows for tabbed content. See Extension:Tabber for more details.
Table Can refer to Module:Table, Lua tables (see https://www.tutorialspoint.com/lua/lua_tables.htm), HTML tables (see https://developer.mozilla.org/en-US/docs/Learn/HTML/Tables/Basics), or wikitables (see wikipedia:Help:Table)
Tag On articles, it may refer to HTML tags or unique wiki-markup tags that add additional functions. See Manual:Tag_extensions. Regarding edits, it may refer to labels that are tagged onto edits for maintenance reasons. See Manual:Tags.
TOC Table of contents
Transclusion The action of including content from other pages by reference. See Transclusion for more details.
Purge
PWB Pywikibot, Python library for automating edits
Unpacking Refers to the extraction of arguments in a table/array/dictionary to be passed into a function using unpack()
VE Shorthand for VisualEditor, a rich-text editor for MediaWiki
WVUI Abbreviation of Wikimedia Vue UI, Wikimedia Foundation's Vue.js UI components. Superseded by Codex since September 2021.
Wikilink A hyperlink that links to other pages on the wiki. They can be added by using the square brackets when editing pages: [[Page name]]. See Help:Links for more details.

Fandom Terminology[]

Terms Explanation
Discussions API Fandom's API for accessing warframe.fandom.com/f
Fandom (stylized as FANDOM sometimes) The company that hosts this wiki, develops the platform the wiki is built on, provides community support, and hosts development tools through https://dev.fandom.com/wiki/Fandom_Developers_Wiki
Fandom Design System Framework of Fandom's visual language for consistent user experience and interface throughout the Fandom branding. See https://fandomdesignsystem.com/?path=/story/introduction--page for more details.
FandomDesktop The desktop wiki skin that is being used on UCP since June 2021 (previously used Oasis skin, and before that, Hydra), featuring light/dark themes, expanded articles, table of contents button, and other features. See community:Help:FandomDesktop.
FandomMobile The mobile wiki skin that is being used on UCP since Feburary 2021, featuring light/dark themes, better galleries, table of contents button, and other features. See community:Help:FandomMobile.
Gamepedia Wiki hosting service for video games owned by Curse LCC before being acquired by Fandom in December 2018.
Global Navigation On desktop view, the leftmost vertical bar that contain links to wiki verticals and and the user profile. See community:Help:Customization policy.
Modal Refers to the Modal JS library which helps in creating overlay elements on Fandom wikis to display to the user (modal boxes/windows)
Nirvana Fandom's application framework. Endpoints include /wikia.php or /api/v1 on every Fandom wiki. See https://dev.fandom.com/wiki/Nirvana for more details.
Phalanx Fandom's global blocking and spam control system. See community:Help:Spam.
Site Navigation On desktop view, the topmost horizontal bar that contain intrawiki links. See community:Help:Navigation.
SOAP Stands for Spam Obliteration and Prevention, a group of volunteers that have privileges for cleaning vandalism on wikis. See community:SOAP.
Theme Designer Admin tool that allows easy customization of the wiki's color theme, header color, background image, and logo. See community:Help:Theme Designer.
UCP Unified Community Platform, the official name of the platform that Fandom and Gamepedia wikis are running on. See Help:Unified Community Platform for more details.
Wikia The name of Fandom wikis and the company before their rebranding in October 2016.
Wiki vertical Name of one of the major categories that a Fandom wiki belongs to: "Games", "Anime", "Movies", "TV", and "Video". Other categories include "books", "music", and "lifestyle".

Warframe Terminology[]

Main article: Glossary

Community acronyms, slang, and (technical) terms surrounding the WARFRAME game and supporting software.

Terms Explanation
DE Digital Extremes, the creators of WARFRAME
Drop Tables Loot tables in which a reward is randomly pulled from based on the rarity weighting assigned to items and biases applied to make some items more/less likely to be picked (canonically in the form of JSON files)
Evolution Engine The proprietary game engine that WARFRAME is built on.
Game Object Represents a discrete playable item within the game. These have properties and functionality attached to them to determine its behavior and interactions with players.
Mobile Export WARFRAME's mobile API used by Warframe Companion and other services; sample endpoint: http://content.warframe.com/MobileExport/Manifest/ExportWeapons.json
PBR Physically based rendering. A graphics rendering technique that takes into account surface material when modelling reflections and lighting.
Public Export Another name for Mobile Export
TennoGen WARFRAME's program for community artists and modellers to create custom skins and models for WARFRAME's assets for a chance of them being sold in-game. It is hosted on the Steam Workshop.
WFCD Warframe Community Developers GitHub group at https://github.com/WFCD for tools accessing WARFRAME's APIs
World State WARFRAME's API for accessing the state of the Star Chart

Metagame Terminology[]

Player-defined terms that are used to describe metagame concepts about WARFRAME. These are often shared with common game lingo within the gaming community. This only covers terms relevant to the wiki and wiki editing.

Terms Explanation
Ammo efficiency
  • Describes how efficient a weapon is in using its ammo to kill enemies. High ammo efficient weapons are able to use less ammo to kill the same amount of enemies compared to a low ammo efficient weapon.
  • Another measurement of ammo efficiency is how long a weapon is able to sustain its usage when killing enemies. Since enemies have a chance to drop different types of ammo pickups (each giving different amounts of ammo), an ammo efficient weapon should be able to be used for a long time since there is a net gain in ammo while killing enemies. Ammo inefficient weapons will typically experience a net loss in ammo when killing enemies since they don't do enough damage per shot.
  • Not to be confused with the "Ammo Efficiency" stat provided by some mods like Mod TT 20px Zazvat-Kar or Arcanes like FocusVoidFuel Void Fuel.
BiS Best in slot. Describes an item that is the best performant item in a particular mod slot or loadout slot. Very rarely used in context of WARFRAME with how flexible and varied the modding/loadout system is. See opportunity cost for a related term.
Burst DPS Burst damage per second. Theoretical damage output that is dealt over a short period of time (called a "burst" or an "explosion of damage"). If there is a graph that plots total damage vs. time elapsed, burst DPS will be the equivalent to the slope of the tangent to the curve.
CC Crowd control effects that
Content island Describes a gameplay environment or design where player progression and gameplay replayability is centered around certain regions in the game instead of encompassing more regions and/or mechanics that is more universally relevant in the context of the game. This term is more relevant to Landscape environments and Empyrean/Railjack gamemode.
Derived stat A player-made stat that is calculated from fundamental stats. These are typically used to standardize how stats are compared between two different objects when direct comparisons of fundamental stats omit context and situational variables.
Diminishing returns Similar to real-world usage of the term, refers to effects that produce marginal benefit the longer it is in effect or the more instances it is in effect. For example, most Bosses in WARFRAME have a crowd control (CC) resistance mechanic where the more times a specific CC ability is used on them, the weaker the CC effect (strength-wise like from knockdowns to stuns or duration-wise).
DPS Damage per second.
  • A standard way of measuring theoretical damage output within a set period of time. There are many ways of calculating DPS depending on the period of time (burst DPS for instantaneous point in time or sustained DPS for over an extended period of time).
  • May also refer to a player role that is primarily the damage outputer of a squad. Examples include MesaIcon272 Mesa and SarynIcon272 Saryn.
DR Commonly refers to sources of Damage Reduction, but may be rarely used to refer to crowd control diminishing return effects from Bosses or mini-bosses.
Drop rate Refers to a player's experience of a particular item drop occurring. This is dependent on factors such as the item's individual drop chance, the chance that the drop table in which the item is in is chosen to pull rewards from, enemy spawn rate, enemy kill rate, mission objective completion time, etc. As such, not every player will experience the same drop rate. In general, the game is balanced in giving a mission reward every 5 minutes of mission playtime. For item drops from enemies, reward balance may vary depending on the toughness of enemies and their spawn rate.
EHP Effective health points. A standard way of measuring theoretical health hit points which is the number of health points that an avatar can absorb before going into a death state. This usually takes into account Armor and other sources of Damage Reduction which will increase EHP even though the actual health value doesn't change. Other EHP calculations may also include damage types absorbed which have different Damage Type Modifiers.
Forced Procs Status effects that are guaranteed to occur when a particular attack hits an enemy regardless of the attack's damage distribution or status chance. This characteristic of a weapon's attack isn't shown to players in-game but is internally implemented as an array of status effects.
Fundamental stat Describes the most basic, raw, low-level stat that a gameplay element can be represented as. For example, if DPS is a derived stat, then we say the fundamental stats that make up DPS are damage and fire rate. Can also be thought as a SI base unit in video game terminology.
Gameplay loop A series of cyclical gameplay events that a player will encounter throughout playing a game. Usually this consists of a push-and-pull system of rewards and gameplay to incentivize players to invest their time into the game.

For example, say a player wants some new weapon, so they need play missions to obtain the blueprints and resources necessary to create that weapon. Then they need to level up their weapon so it can be more powerful. Once the player faces content that is difficult to the point said new weapon is not sufficient, they will need to find a new weapon to invest in.

HCET The precedence of primary elemental damage types which are applied to create secondary elemental damage types when dealing with Kuva/Tenet weapons: DmgFireSmall64 Heat, DmgColdSmall64 Cold, DmgElectricitySmall64 Electricity, DmgToxinSmall64 Toxin.
KPM Kills per minute. A standard metric of measuring how efficient a player's loadout is at killing enemies. Arguably a better metric than theoretical DPS in measuring how well a loadout performs in real-game scenarios.
Malus A stat penalty, the opposite of a bonus. This term is rarely used amongst English-native players who instead say "negative" or "negative bonus" as a substitute. See wikipedia:malus for its etymology.
Opportunity cost The relative cost (or loss) from installing a mod/Arcane over another mod/Arcane that improves the same stat. Since there is a limited number of mods/Arcanes that can installed on a particular item, players have to choose which mods/Arcanes to use when building their loadout in a balance of stat gains and sacrifices. The opportunity cost can be calculated by the difference of the provided stat bonus/malus.

Opportunity cost can be extended to equipping weapons in certain slots. For example, there is an opportunity cost in equipping a weaker primary weapon like the Braton Braton over a powerful one like the KuvaBramma Kuva Bramma.

Power creep Describes a gradual process where newer content/items supersede older content/items in terms of gameplay performance because of the philosophy of "newer is better". Used in negative light because older content is "forgotten" and "forces" players to get newer items to complete newer content or make older content more time efficient.
Proc Programmed random occurrence. Refers to events that happen based on RNG such as Status Effects and Critical Hits. Most of the time players use the term to refer to status effects since they are significant in changing gameplay decisions and playstyle mid-game.
Raw DPS Raw damage per second. A DPS calculation that does not rely on random events such as critical hits that will periodically increase damage dealt.
RNG Random number generator. Refers to any randomized event that occurs due to machine generated random numbers (pseudorandom number generator or PRNG). All random events in WARFRAME are deterministic because of this, but this is only relevant to events that occur repeatedly over a long-period of time or repeated an enormous number of times. We can assume numbers generated by the game's RNG will be uniformly distributed, thus we can model the occurrence of an event using a geometric distribution.
Support A player role that is primarily the healer, crowd controller, and/or buffer/debuffer. Examples include TrinityIcon272 Trinity and WispIcon272 Wisp.
Sustained DPS Sustained damage per second. Theoretical damage output that is consistent over a long period of time. Usually takes into account reload time after emptying a magazine and thus will be typically lower than burst DPS values.
Tank(ing) WARFRAME doesn't have the traditional MMO tank role so it is used to refer to characters or enemies that have relatively high amounts of effective health (e.g. InarosIcon272 Inaros) or is able to absorb lots of damage without dying (e.g. RhinoIcon272 Rhino's IronSkin130xWhite Iron Skin).
TTK Time-to-kill. The amount of time required to defeat a particular enemy. High TTK means that it will take a relatively longer time to kill a particular enemy and vice versa. Low TTK against high-level enemies is usually a good metric in measuring a weapon's performance as it means that:
  • The weapon defeats an enemy in as few shots as possible (high damage per shot and ammo efficient)
  • Or is able to deal lots of damage in the shortest amount of time (high DPS).

User-Defined Terminology[]

Other terms on this wiki that do not fit in the above sections:

Terms Explanation
Faux Frame Refers to a Lua table that mimics a Frame object by storing an args table containing arguments. For example, local faux = { args = { "Argument 1", "Argument 2", namedArg = "Named Argument 1" } }. Ideally these should not be used and you should pass arguments directly to the function instead.
(Infobox) Override Refers to template arguments that are set by editors to override default arguments. Usually used in reference to infoboxes.
Sister Wiki WARFRAME Wikis that are in localized in other languages. For example, the French WARFRAME Wiki on https://warframe.fandom.com/fr/wiki/
Subject Matter Expert In context of WARFRAME, refers to individuals who are extremely knowledgeable about the game, its mechanics, and the community it has. Usually these are veteran members of the WARFRAME community.
Regarding /data module subpages
On this wiki MongoDB Equivalent SQL Equivalent
(Database/Table) Entry (BSON) Document (Database) Record or row
(Lua) Table Collection Table
"Database" or /data subpage or data store Database Database
Index
Column/Key Field Column
Indexed key Primary key
N/A Embedded documents Table joins
N/A Aggregation pipeline Aggregation

Development Checklist[]

  1. Does your code follow WARFRAME Wiki:Programming Standards?
  2. Did you purge an article's cache before reviewing changes?
    • Sometimes changes to the codebase will not be applied immediately due to page caching. Add the ?action=purge query string to the URL to access purge cache button.
  3. Did you have another person review your code before pushing big changes?
  4. Does your code pass all unit tests whenever applicable?
  5. Did you create new unit tests whenever applicable? If your functions output wikitext, make sure to test them out on a page to find visual errors.
  6. Did you consider accessibility on mobile platforms and FANDOM app if applicable? As of 23:10, 23 November 2021 (UTC), about 45% of traffic to this wiki are from mobile users.
    • Add ?mobileaction=toggle_view_mobile and ?mobileaction=toggle_view_desktop query strings to toggle between desktop and mobile browser views on desktop
    • There is no easy way to view page experience in the FANDOM app without logging in and going directly to the pages where a module is invoked.
  7. If making a new module:
  8. If deleting or refactoring a function:
    • Did you null edit all the possible pages it may be used to double check if there are script errors anywhere?
  9. If dealing anything related to the presentation of content, did you look at the site as an anonymous (logged out) user? This is to ensure that the site is readable without custom user CSS.
  10. For front-end scripts, did you test to see what happens if a user has JavaScript disabled in their browser? Ensure basic functionality still works (like a static text rather than an animated one) or leave a notice mentioning to enable JavaScript to get the feature.
  11. Did you check generated content in other browsers? Sometimes Chromium-based browsers render HTML/CSS differently from other browsers. As of 23:06, 23 November 2021 (UTC), the top 4 web browsers that visit this wiki are:
    1. Google Chrome (~72%)
    2. Safari (~16%)
    3. Firefox (~8%)
    4. Microsoft Edge (~5%)

Modules List[]

Best Practices[]

Style Guide[]

Main article: WARFRAME Wiki:Programming Standards

See WARFRAME Wiki:Programming Standards for more details on code styling and best practices on developing on this wiki.

User Experience Guidelines[]

  • Do not communicate to the reader with only color, make sure there is additional text as fallback and use different shape designs for color/visual accessibility reasons.
    • Examples include denoting different classes of items such as "tiers" or "rarities".
  • Do not use hover overs or collapsible content for important information to the reader. These features should be used to enhance the user experience, not to detract from it.
    • Collapsibles are appropriate for long tables (to lessen the amount of scrolling) or detailed content that explains concepts in-depth to the reader outside of general practicality (e.g. explanations of math formulas; most people do not want to know the calculus behind results)
  • Frontend scripts should be responsive and enhance the user experience, not slowing down performance. Any content that is derived from these scripts should be available on the appropriate pages for users to manually deduce. For example, the formula used in the enemy health scaling slider on Template:Enemy is available for readers on Enemy Level Scaling.
  • Any content that is auto-generated from modules should be available on the appropriate pages for users to manually deduce. For example, the formula used in the DPS calculations on Weapon Comparison is available for readers on Damage#Final Calculations.
  • Mobile users will lose some features from desktop such as frontend scripts. Ensure the site is still usable when JavaScript is turned off.
  • All content must be readable on both the wiki's light and dark themes. However, we do not expect nor guarantee the same for custom user themes so use them at your discretion.
  • For images that are flat black in color, for visibility on dark theme, wrap them around an element with class="icon" or if using wikitext [[File:]] syntax, add class=icon argument. This is so a CSS rule can target these elements for the invert filter.
    • For example [[File:ShadowsOfTheDead130xDark.png|class=icon]] produces ShadowsOfTheDead130xDark
  • Hover over content/text is denoted by a 2px thick dotted underline below content/text like so: I am a hover over
  • Avoid using colored text in articles outside of hyperlinks. Colored text is usually unreadable on either light or dark theme. If color must be presented:
    • For inline text, use a colored square with the name of the color beside it (e.g. purple)
    • For tables, designate a table column for presenting colors, using background-color CSS property to set the color of a particular table cell, and designate another table column for describing the color like so:
Sortie Rarity Classification
Rarity Weight Approx. Color Scheme Hex Code Drop Percentage
(rounded two decimals)
IconCommon Common #bd9177 55.91%
IconUncommon Uncommon #d1d0d1 33.91%
IconRare Rare #ece175 10.00%
IconLegendary Legendary #b996db 0.18%
Total 100%

Mobile[]

  • Use the following CSS classes to hide mobile-unfriendly content from mobile view or restrict content to mobile view:
    • mobileonly - only show HTML element in mobile view
    • nomobile - completely removes HTML element, can be used to reduce webpage size
    • mobile-hidden - uses style="display:none;" to hide HTML element

Examples[]

Best Better Bad
Viral DamageDmgViralSmall64 Viral Viral or Viral or DmgViralSmall64 N/A
BansheeIcon272
Banshee

BaruukIcon272
Baruuk

N/A BansheeIcon272
Banshee

BaruukIcon272
Baruuk

Using colored text with high enough contrast on the respective theme for readability:

For light theme

Mod TT 20px Redirection 0.7587% 🥉
Mod TT 20px Revenge 0.7587% 🥉
Mod TT 20px Quickdraw 0.7587% 🥉
Mod TT 20px Razor Shot 0.3318% 🥈
50 Endo 0.3318% 🥈
Mod TT 20px Thunderbolt 0.0201% 🥇
Mod TT 20px Crossing Snakes 0.0201% 🥇
Mod TT 20px Undying Will 0.0201% 🥇

For dark theme

Mod TT 20px Redirection 0.7587% 🥉
Mod TT 20px Revenge 0.7587% 🥉
Mod TT 20px Quickdraw 0.7587% 🥉
Mod TT 20px Razor Shot 0.3318% 🥈
50 Endo 0.3318% 🥈
Mod TT 20px Thunderbolt 0.0201% 🥇
Mod TT 20px Crossing Snakes 0.0201% 🥇
Mod TT 20px Undying Will 0.0201% 🥇

Using different colored emojis with items grouped by rarity:

Mod TT 20px Redirection 0.7587% 🥉
Mod TT 20px Revenge 0.7587% 🥉
Mod TT 20px Quickdraw 0.7587% 🥉
Mod TT 20px Razor Shot 0.3318% 🥈
50 Endo 0.3318% 🥈
Mod TT 20px Thunderbolt 0.0201% 🥇
Mod TT 20px Crossing Snakes 0.0201% 🥇
Mod TT 20px Undying Will 0.0201% 🥇

Colored text and unsorted, unreadable on light theme:

Mod TT 20px Redirection 0.7587%
Mod TT 20px Revenge 0.7587%
Mod TT 20px Quickdraw 0.7587%
Mod TT 20px Thunderbolt 0.0201%
Mod TT 20px Razor Shot 0.3318%
Mod TT 20px Crossing Snakes 0.0201%
Mod TT 20px Undying Will 0.0201%
50 Endo 0.3318%

  • Damage appears by default in white.
  • Critical hits and stealth attacks are in yellow.
  • Orange crits, appear in orange. These are stronger than yellow crits.
  • Red crits, as their name suggests, appear in red. These are stronger than orange crits.
  • Damage against shields appears in blue, regardless of other factors such as critical hits.
  • Damage against overshields appears in purple, regardless of other factors such as critical hits.
  • Attempts to damage an invulnerable enemy appear in grey.
N/A
  • Damage appears by default in white.
  • Critical hits and stealth attacks are in yellow.
  • Orange crits, appear in orange. These are stronger than yellow crits.
  • Red crits, as their name suggests, appear in red. These are stronger than orange crits.
  • Damage against shields appears in blue, regardless of other factors such as critical hits.
  • Damage against overshields appears in purple, regardless of other factors such as critical hits.
  • Attempts to damage an invulnerable enemy appear in grey.

Stylesheets[]

Main article: community:Help:FandomDesktop conversion guide#Theming variables
View light theme CSS variables
:root {
	--theme-body-dynamic-color-1: #1e0c1b;
	--theme-body-dynamic-color-1--rgb: 30,12,27;
	--theme-body-dynamic-color-2: #3a3a3a;
	--theme-body-dynamic-color-2--rgb: 58,58,58;
	--theme-page-dynamic-color-1: #1e0c1b;
	--theme-page-dynamic-color-1--rgb: 30,12,27;
	--theme-page-dynamic-color-1--inverted: #fff;
	--theme-page-dynamic-color-1--inverted--rgb: 255,255,255;
	--theme-page-dynamic-color-2: #3a3a3a;
	--theme-page-dynamic-color-2--rgb: 58,58,58;
	--theme-sticky-nav-dynamic-color-1: #fff;
	--theme-sticky-nav-dynamic-color-1--rgb: 255,255,255;
	--theme-sticky-nav-dynamic-color-2: #e6e6e6;
	--theme-sticky-nav-dynamic-color-2--rgb: 230,230,230;
	--theme-link-dynamic-color-1: #fff;
	--theme-link-dynamic-color-1--rgb: 255,255,255;
	--theme-link-dynamic-color-2: #e6e6e6;
	--theme-link-dynamic-color-2--rgb: 230,230,230;
	--theme-accent-dynamic-color-1: #fff;
	--theme-accent-dynamic-color-1--rgb: 255,255,255;
	--theme-accent-dynamic-color-2: #e6e6e6;
	--theme-accent-dynamic-color-2--rgb: 230,230,230;
	--theme-body-background-color: #ffffff;
	--theme-body-background-color--rgb: 255,255,255;
	--theme-body-background-image: url(https://static.wikia.nocookie.net/warframe/images/b/b5/Site-background-light/revision/latest?cb=20210617231242);
	--theme-body-text-color: #1e0c1b;
	--theme-body-text-color--hover: #66295c;
	--theme-sticky-nav-background-color: #061212;
	--theme-sticky-nav-text-color: #fff;
	--theme-sticky-nav-text-color--hover: #cccccc;
	--theme-page-background-color: #eeeeee;
	--theme-page-background-color--rgb: 238,238,238;
	--theme-page-background-color--secondary: #e4e3e3;
	--theme-page-text-color: #3a3a3a;
	--theme-page-text-color--rgb: 58,58,58;
	--theme-page-text-color--hover: #6d6d6d;
	--theme-page-text-mix-color: #949494;
	--theme-page-text-mix-color-95: #e5e5e5;
	--theme-page-accent-mix-color: #989898;
	--theme-page-headings-font: 'Rubik';
	--theme-link-color: #0148c2;
	--theme-link-color--rgb: 1,72,194;
	--theme-link-color--hover: #00225c;
	--theme-link-label-color: #fff;
	--theme-accent-color: #424242;
	--theme-accent-color--rgb: 66,66,66;
	--theme-accent-color--hover: #757575;
	--theme-accent-label-color: #fff;
	--theme-border-color: #c1c1c1;
	--theme-border-color--rgb: 193,193,193;
	--theme-alert-color: #bf0017;
	--theme-alert-color--rgb: 191,0,23;
	--theme-alert-color--hover: #59000a;
	--theme-alert-label: #fff;
	--theme-warning-color: #ca6f1b;
	--theme-warning-label: #1e0c1b;
	--theme-success-color: #0c742f;
	--theme-success-color--rgb: 12,116,47;
	--theme-success-label: #fff;
	--theme-message-color: #753369;
	--theme-message-label: #fff;
	--theme-community-header-color: #0e191a;
	--theme-community-header-color--hover: #31585c;
	--theme-background-image-opacity: 100%;
}

.skin-fandomdesktop .CodeMirror {
	--codemirror-yellow: #9e8500;
	--codemirror-light-blue: #008ae7;
	--codemirror-blue: #0085f9;
	--codemirror-green: #290;
	--codemirror-red: #ef4f00;
	--codemirror-dark-red: #a11;
	--codemirror-purple: #80c;
	--codemirror-pink: #ed00ed;
	--codemirror-light-gray: #858585;
	--codemirror-gray: #6b8a8a;
}

.mw-highlight {
	--pygments-background: #e4e3e3;
	--pygments-err: #ef0000;
	--pygments-c: #408080;
	--pygments-k: #008000;
	--pygments-o: #666;
	--pygments-ch: #408080;
	--pygments-cm: #408080;
	--pygments-cp: #a26900;
	--pygments-cpf: #408080;
	--pygments-c1: #408080;
	--pygments-cs: #408080;
	--pygments-gd: #a00000;
	--pygments-gr: #ef0000;
	--pygments-gh: #000080;
	--pygments-gi: #008600;
	--pygments-go: #767676;
	--pygments-gp: #000080;
	--pygments-gu: #800080;
	--pygments-gt: #04d;
	--pygments-kc: #008000;
	--pygments-kd: #008000;
	--pygments-kn: #008000;
	--pygments-kp: #008000;
	--pygments-kr: #008000;
	--pygments-kt: #b00040;
	--pygments-m: #666;
	--pygments-s: #ba2121;
	--pygments-na: #6b7c23;
	--pygments-nb: #008000;
	--pygments-nc: #00f;
	--pygments-no: #800;
	--pygments-nd: #a2f;
	--pygments-ni: #757575;
	--pygments-ne: #d2413a;
	--pygments-nf: #00f;
	--pygments-nl: #777700;
	--pygments-nn: #00f;
	--pygments-nt: #008000;
	--pygments-nv: #19177c;
	--pygments-ow: #a2f;
	--pygments-w: #767676;
	--pygments-mb: #666;
	--pygments-mf: #666;
	--pygments-mh: #666;
	--pygments-mi: #666;
	--pygments-mo: #666;
	--pygments-sa: #ba2121;
	--pygments-sb: #ba2121;
	--pygments-sc: #ba2121;
	--pygments-dl: #ba2121;
	--pygments-sd: #ba2121;
	--pygments-s2: #ba2121;
	--pygments-se: #b26120;
	--pygments-sh: #ba2121;
	--pygments-si: #b4577d;
	--pygments-sx: #008000;
	--pygments-sr: #b4577d;
	--pygments-s1: #ba2121;
	--pygments-ss: #19177c;
	--pygments-bp: #008000;
	--pygments-fm: #00f;
	--pygments-vc: #19177c;
	--pygments-vg: #19177c;
	--pygments-vi: #19177c;
	--pygments-vm: #19177c;
	--pygments-il: #666;
}
View dark theme CSS variables
:root {
	--theme-body-dynamic-color-1: #fff;
	--theme-body-dynamic-color-1--rgb: 255,255,255;
	--theme-body-dynamic-color-2: #e6e6e6;
	--theme-body-dynamic-color-2--rgb: 230,230,230;
	--theme-page-dynamic-color-1: #fff;
	--theme-page-dynamic-color-1--rgb: 255,255,255;
	--theme-page-dynamic-color-1--inverted: #1e0c1b;
	--theme-page-dynamic-color-1--inverted--rgb: 30,12,27;
	--theme-page-dynamic-color-2: #e6e6e6;
	--theme-page-dynamic-color-2--rgb: 230,230,230;
	--theme-sticky-nav-dynamic-color-1: #fff;
	--theme-sticky-nav-dynamic-color-1--rgb: 255,255,255;
	--theme-sticky-nav-dynamic-color-2: #e6e6e6;
	--theme-sticky-nav-dynamic-color-2--rgb: 230,230,230;
	--theme-link-dynamic-color-1: #1e0c1b;
	--theme-link-dynamic-color-1--rgb: 30,12,27;
	--theme-link-dynamic-color-2: #3a3a3a;
	--theme-link-dynamic-color-2--rgb: 58,58,58;
	--theme-accent-dynamic-color-1: #fff;
	--theme-accent-dynamic-color-1--rgb: 255,255,255;
	--theme-accent-dynamic-color-2: #e6e6e6;
	--theme-accent-dynamic-color-2--rgb: 230,230,230;
	--theme-body-background-color: #000000;
	--theme-body-background-color--rgb: 0,0,0;
	--theme-body-background-image: url();
	--theme-body-text-color: #fff;
	--theme-body-text-color--hover: #cccccc;
	--theme-sticky-nav-background-color: #666666;
	--theme-sticky-nav-text-color: #fff;
	--theme-sticky-nav-text-color--hover: #cccccc;
	--theme-page-background-color: #222222;
	--theme-page-background-color--rgb: 34,34,34;
	--theme-page-background-color--secondary: #434343;
	--theme-page-text-color: #e6e6e6;
	--theme-page-text-color--rgb: 230,230,230;
	--theme-page-text-color--hover: #b3b3b3;
	--theme-page-text-mix-color: #848484;
	--theme-page-text-mix-color-95: #2c2c2c;
	--theme-page-accent-mix-color: #444444;
	--theme-page-headings-font: 'Rubik';
	--theme-link-color: #88aaee;
	--theme-link-color--rgb: 136,170,238;
	--theme-link-color--hover: #e1e9fa;
	--theme-link-label-color: #1e0c1b;
	--theme-accent-color: #666666;
	--theme-accent-color--rgb: 102,102,102;
	--theme-accent-color--hover: #999999;
	--theme-accent-label-color: #fff;
	--theme-border-color: #535353;
	--theme-border-color--rgb: 83,83,83;
	--theme-alert-color: #e2001b;
	--theme-alert-color--rgb: 226,0,27;
	--theme-alert-color--hover: #fe485e;
	--theme-alert-label: #fff;
	--theme-warning-color: #cf721c;
	--theme-warning-label: #1e0c1b;
	--theme-success-color: #0d8134;
	--theme-success-color--rgb: 13,129,52;
	--theme-success-label: #fff;
	--theme-message-color: #aa4a98;
	--theme-message-label: #fff;
	--theme-community-header-color: #FFFFFF;
	--theme-community-header-color--hover: #cccccc;
	--theme-background-image-opacity: 100%;
}

.skin-fandomdesktop .CodeMirror {
	--codemirror-yellow: #ffd700;
	--codemirror-light-blue: #adf;
	--codemirror-blue: #08f;
	--codemirror-green: #290;
	--codemirror-red: #f50;
	--codemirror-dark-red: #dd1616;
	--codemirror-purple: #a900fe;
	--codemirror-pink: #e0e;
	--codemirror-light-gray: #eee;
	--codemirror-gray: #84a0a0;
}

.mw-highlight {
	--pygments-background: #434343;
	--pygments-err: #fe6b6b;
	--pygments-c: #54a8a8;
	--pygments-k: #00b800;
	--pygments-o: #9b9b9b;
	--pygments-ch: #54a8a8;
	--pygments-cm: #54a8a8;
	--pygments-cp: #d58a00;
	--pygments-cpf: #54a8a8;
	--pygments-c1: #54a8a8;
	--pygments-cs: #54a8a8;
	--pygments-gd: #ff6d6d;
	--pygments-gr: #fe6b6b;
	--pygments-gh: #8f8fff;
	--pygments-gi: #00b400;
	--pygments-go: #9c9c9c;
	--pygments-gp: #8f8fff;
	--pygments-gu: #ff42ff;
	--pygments-gt: #6c99fe;
	--pygments-kc: #00b800;
	--pygments-kd: #00b800;
	--pygments-kn: #00b800;
	--pygments-kp: #00b800;
	--pygments-kr: #00b800;
	--pygments-kt: #fe639c;
	--pygments-m: #9b9b9b;
	--pygments-s: #e77c7c;
	--pygments-na: #91a72f;
	--pygments-nb: #00b800;
	--pygments-nc: #8e8efe;
	--pygments-no: #ff6969;
	--pygments-nd: #cb78ff;
	--pygments-ni: #9b9b9b;
	--pygments-ne: #e1817c;
	--pygments-nf: #8e8efe;
	--pygments-nl: #a0a000;
	--pygments-nn: #8e8efe;
	--pygments-nt: #00b800;
	--pygments-nv: #9492ea;
	--pygments-ow: #cb78ff;
	--pygments-w: #bbb;
	--pygments-mb: #9b9b9b;
	--pygments-mf: #9b9b9b;
	--pygments-mh: #9b9b9b;
	--pygments-mi: #9b9b9b;
	--pygments-mo: #9b9b9b;
	--pygments-sa: #e77c7c;
	--pygments-sb: #e77c7c;
	--pygments-sc: #e77c7c;
	--pygments-dl: #e77c7c;
	--pygments-sd: #e77c7c;
	--pygments-s2: #e77c7c;
	--pygments-se: #dc8742;
	--pygments-sh: #e77c7c;
	--pygments-si: #ca89a3;
	--pygments-sx: #00b800;
	--pygments-sr: #ca89a3;
	--pygments-s1: #e77c7c;
	--pygments-ss: #9492ea;
	--pygments-bp: #00b800;
	--pygments-fm: #8e8efe;
	--pygments-vc: #9492ea;
	--pygments-vg: #9492ea;
	--pygments-vi: #9492ea;
	--pygments-vm: #9492ea;
	--pygments-il: #9b9b9b;
}
  • Default on Fandom wikis (for reference):
View Fandom default light theme CSS variables
:root {
    --theme-body-dynamic-color-1: #1e0c1b;
    --theme-body-dynamic-color-1--rgb: 30, 12, 27;
    --theme-body-dynamic-color-2: #3a3a3a;
    --theme-body-dynamic-color-2--rgb: 58, 58, 58;
    --theme-page-dynamic-color-1: #1e0c1b;
    --theme-page-dynamic-color-1--rgb: 30, 12, 27;
    --theme-page-dynamic-color-1--inverted: #fff;
    --theme-page-dynamic-color-1--inverted--rgb: 255, 255, 255;
    --theme-page-dynamic-color-2: #3a3a3a;
    --theme-page-dynamic-color-2--rgb: 58, 58, 58;
    --theme-sticky-nav-dynamic-color-1: #fff;
    --theme-sticky-nav-dynamic-color-1--rgb: 255, 255, 255;
    --theme-sticky-nav-dynamic-color-2: #e6e6e6;
    --theme-sticky-nav-dynamic-color-2--rgb: 230, 230, 230;
    --theme-link-dynamic-color-1: #fff;
    --theme-link-dynamic-color-1--rgb: 255, 255, 255;
    --theme-link-dynamic-color-2: #e6e6e6;
    --theme-link-dynamic-color-2--rgb: 230, 230, 230;
    --theme-accent-dynamic-color-1: #fff;
    --theme-accent-dynamic-color-1--rgb: 255, 255, 255;
    --theme-accent-dynamic-color-2: #e6e6e6;
    --theme-accent-dynamic-color-2--rgb: 230, 230, 230;
    --theme-body-background-color: #ffc500;
    --theme-body-background-color--rgb: 255, 197, 0;
    --theme-body-background-image: url(https://static.wikia.nocookie.net/dev/images/b/b5/Site-background-light/revision/latest?cb=20210803135441);
    --theme-body-text-color: #1e0c1b;
    --theme-body-text-color--hover: #66295c;
    --theme-sticky-nav-background-color: #520044;
    --theme-sticky-nav-text-color: #fff;
    --theme-sticky-nav-text-color--hover: #cccccc;
    --theme-page-background-color: #ffffff;
    --theme-page-background-color--rgb: 255, 255, 255;
    --theme-page-background-color--secondary: #f4f3f4;
    --theme-page-text-color: #3a3a3a;
    --theme-page-text-color--rgb: 58, 58, 58;
    --theme-page-text-color--hover: #6d6d6d;
    --theme-page-text-mix-color: #9d9d9d;
    --theme-page-text-mix-color-95: #f5f5f5;
    --theme-page-accent-mix-color: #afbdbd;
    --theme-page-headings-font: 'Rubik';
    --theme-link-color: #520044;
    --theme-link-color--rgb: 82, 0, 68;
    --theme-link-color--hover: #000000;
    --theme-link-label-color: #fff;
    --theme-accent-color: #5f7a7b;
    --theme-accent-color--rgb: 95, 122, 123;
    --theme-accent-color--hover: #93abac;
    --theme-accent-label-color: #fff;
    --theme-border-color: #cecece;
    --theme-border-color--rgb: 206, 206, 206;
    --theme-alert-color: #bf0017;
    --theme-alert-color--rgb: 191, 0, 23;
    --theme-alert-color--hover: #59000a;
    --theme-alert-label: #fff;
    --theme-warning-color: #cf721c;
    --theme-warning-label: #1e0c1b;
    --theme-success-color: #0c742f;
    --theme-success-color--rgb: 12, 116, 47;
    --theme-success-label: #fff;
    --theme-message-color: #753369;
    --theme-message-label: #fff;
    --theme-community-header-color: #0e191a;
    --theme-community-header-color--hover: #31585c;
    --theme-background-image-opacity: 100%;
}

Database Design Guidelines[]

Database design guidelines can be found on WARFRAME Wiki:Updating Databases#For Developers.

Porting Templates To Lua[]

Sometimes, templates have lots of repeated wikitext or is too large to maintain with nested parser functions and complex logic. This is when a template should be rewritten as a Lua function inside a module (process called "Luafication"). This function would be invoked on the appropriate template page that is to be transcluded onto pages. See https://dev.fandom.com/wiki/Lua_templating/Converting_Wikitext_templates and Wikipedia:Guide to Scribbling for an examples of this.

Bug Reports[]

Bugs on wiki scripts can be reported on WARFRAME Wiki:Bug Reports.

Tracking Latest Wiki Activity[]

Latest edits can be viewed on Special:RecentChanges and Special:RecentChangesLinked. If you want an RSS or Atom feed of recent changes, you can use the following urls:

See mw:API:Feedrecentchanges and mw:API:Watchlist feed for documentation on what query strings can be passed into the URL to modify the feed output.

Advanced[]

Debugging[]

Error Tracing and Null Edits[]

  • Locating pages with broken scripts: Category:Pages with script errors
    • error() and assert() functions will transclude an error message with a simple stack trace for runtime errors:
      Lua error in Module:Icon at line 112: p._Pol(iconname, color, imagesize): 
      Invalid icon name "" [[Category:Icon Module error]].
      
      Backtrace:
      
          [C]: in function "assert"
          Module:Icon:112: in function "_Pol"
          Module:Weapons:2809: in function "buildMeleeComparisonString"
          Module:Weapons:2857: in function "chunk"
          mw.lua:518: ?
          [C]: ?
    • Use NewPP parser report (F12 and CTRL+F "NewPP") to view statistics on the resources used to render page and what scripts are using the most allocated time or memory. FANDOM wikis have a maximum limit of 7 second script runtime and 50 MB usage.
    • Transclusion expansion time report shows how long it took for page transclusion to happen
    • If you cannot find an error on the page, go to inspect element and search for these HTML tags: <strong class="error"><span class="scribunto-error" id="mw-scribunto-error-0">
      • Sometimes script errors are hidden behind tooltips whose HTML tags are located within <div id="tooltip-storage"> near the bottom of the page's article content container.
    • For stack traces that throw an error on numbered arguments, argument numbers are on a one-based positional index.
      • For example,
        Lua error in Module:Void/page on line 184: bad argument #13 to 'format' (number expected, got nil).
        refers to an error on argument #13 (thirteenth position) of the format() function.
    • Use https://dev.fandom.com/wiki/MassNullEdit to null edit multiple pages in Category:Pages with script errors. Null edits force the server to rebuild the page using new data instead of relying on caching.
      • Uses MediaWiki's API to submit page edits that do not modify page contents: https://warframe.fandom.com/api.php?action=help&modules=edit
      • This is one way to check where module functions are used. If performing a major refactoring of code, deleting/refactoring a function and null editing all the possible pages it may be used in can be used to double check if there are script errors anywhere.
  • It may be helpful to disable custom stylesheets and custom scripts when debugging:
    ?useuserjs=0 to end of URL to temporarily disable personal JS
    ?useusercss=0 to temporarily disable personal CSS
    ?useusercss=0&useuserjs=0 for both
    ?usesitecss=0 to disable wiki's locally defined CSS in MediaWiki namespace
    ?usesitejs=0 to disable wiki's locally defined JS in MediaWiki namespace
    ?safemode=1 to load page without on-site CSS and JS
  • In your browser's development console, you can type in mw.config.get('ScribuntoErrors') to get an array of Scribunto error messages on the article. It will be null if there are no script errors on the page.

Viewing Module Output and Purging Cache[]

  • If you want to print things out to the console, use mw.log() for general use or mw.logObject() for tables.
    • Outputs can be viewed in the SourceEditor on articles in the "Parser profiling data" section or in the debug console when editing modules.
    • Make sure to remove these calls or comment them out from live code as they do take up allocated Lua memory and time.
  • mw.dumpObject() may be helpful in outputing table contents to a human-readable format in error() or assert().
  • If a function outputs wikitext to be rendered by the frame, then it may be helpful to add a unique category link to the output to see what pages that function is used around the wiki.
  • Visual errors are harder to detect and usually require manually going to pages and reviewing generated content by modules.
    • Special:ExpandTemplates can be helpful in rendering the raw wikitext and HTML returned by a function.
    • Add the ?action=purge query string to the URL to purge the page's cache server-side to ensure latest edits are persisted and are used for rendering the page.

NewPP Report and Performance[]

NewPP parser report provides additional performance details on rendering wikitext on articles.

  • FANDOM wikis have a maximum limit of 7-second Lua script runtime and 50 MB of memory usage per page. This limit is not per {{#invoke:}} on a page. Multiple {{#invoke:}} calls on a single page will contribute towards the same time and resource limit.
  • Fastest way to find NewPP report is by opening up the browser's developer tool (F12) and CTRL+F for NewPP in DOM and Style Inspector. Alternative ways include:
    • Scrolling to the bottom of the element containing the article's content as NewPP will always be appended when wikitext is parsed (<div class="mw-parser-output">)
    • In SourceEditor, click "Show Preview" and scroll down to "Parser profiling data:"
  • Sometimes Lua profiles are not clear about the function(s) that take up the most time. Any function names that start with mw are from base Lua libraries that are included in the Scribunto extension. See the GitHub repo of Extension:Scribunto.
  • Module performance can be measured using os.time() and os.difftime() functions.[1]
  • Special:ExpandTemplates can be used to see how the parser takes in wikitext input and generate the resultant HTML.

Example report for Weapon Comparison page when Lua time usage exceeds 7 seconds (see Wikipedia:Template_limits for more details one what each line means):

NewPP limit report
Cached time: 20210806221243
Cache expiry: 1209600
Dynamic content: false
CPU time usage: 10.012 seconds
Real time usage: 10.020 seconds
Preprocessor visited node count: 1980/1000000
Preprocessor generated node count: 0/1000000
Post‐expand include size: 734758/2097152 bytes
Template argument size: 64/2097152 bytes
Highest expansion depth: 8/40
Expensive parser function count: 0/100
Unstrip recursion depth: 1/20
Unstrip post‐expand size: 1561684/5000000 bytes
Lua time usage: 7.006/7.000 seconds
Lua memory usage: 36.13 MB/50 MB
Lua Profile:
    <mw.lua:683>                                                    1680 ms       24.0%
    upper                                                            680 ms        9.7%
    Scribunto_LuaSandboxCallback::formatNum                          640 ms        9.1%
    type                                                             520 ms        7.4%
    contains <Module:Table:144>                                      440 ms        6.3%
    (for generator) <mw.lua:665>                                     360 ms        5.1%
    <mw.lua:695>                                                     340 ms        4.9%
    _getVersion <Module:Version:49>                                  340 ms        4.9%
    assert                                                           340 ms        4.9%
    <mw.language.lua:62>                                             280 ms        4.0%
    [others]                                                        1380 ms       19.7%
ExtLoops count: 0
NewPP limit report
Row Description Example
Cached time Time that report is made or Lua script is ran in YYYYMMDDHHMMSS format 20210806221243
Cache expiry Expiry time of cached content in seconds 1209600
Dynamic content false
CPU time usage Time spent running code on CPU 10.012 seconds
Real time usage Elapsed time spent, including time spent waiting for code to be ran on CPU 10.020 seconds
Preprocessor visited node count How many XML tree nodes that have been visited, corresponding to the page's HTML structure 1980/1000000
Preprocessor generated node count How many XML tree nodes that have been created, corresponding to the page's HTML structure. See Category:Pages where node count is exceeded 0/1000000
Post‐expand include size Sum of the lengths of the expanded wikitexts generated by templates, parser functions and template variables 734758/2097152 bytes
Template argument size Total length of template arguments in bytes that have been substituted 64/2097152 bytes
Highest expansion depth How many nested templates, parser functions, template variables, and template parameters are being expanded. See Category:Pages where expansion depth is exceeded and Help:Expansion depth 8/40
Expensive parser function count How many expensive parser functions are called. See Category:Pages with too many expensive parser function calls and mw:Help:Magic words#Statistics 0/100
Unstrip recursion depth How many recursive strip markers that are unstripped 1/20
Unstrip post‐expand size Page size after unstripping strip markers 1561684/5000000 bytes
Lua time usage Total CPU time usage by Lua script 7.006/7.000 seconds
Lua memory usage Total memory usage by Lua script 36.13 MB/50 MB
Lua Profile How long specific Lua functions are being executed as logged by Lua profiler
ExtLoops count How many loops are executed by Extension:Loops parser function 0

Transclusion Expansion Time[]

Similar to NewPP, a report on how long transclusions of other articles' content took can be found in a comment in the source HTML.

Example report for Weapon Comparison:

Transclusion expansion time report (%,ms,calls,template)
100.00% 7103.518      1 -total
 31.58% 2243.389      1 Weapon_Comparison/Melee
 30.39% 2158.848      1 Weapon_Comparison/Primary
 19.33% 1373.271      1 Weapon_Comparison/Secondary
  8.06%  572.752      1 Weapon_Comparison/Railjack
  3.09%  219.421      1 Weapon_Comparison/Arch-Melee
  3.06%  217.634      1 Weapon_Comparison/Arch-Gun
  2.20%  156.619      1 Weapon_Comparison/Amp
  1.41%  100.116      1 Weapon_Comparison/Robotic
  0.22%   15.854      1 Weapon_Comparison/Melee/Skin

Query Strings and Action API[]

Internationalization and Localization[]

Since the wiki's modules are being forked and used in our sister wikis in other languages, our modules should be internationalized (i18n) as much as possible so that content can be easily localized (l10n) in other wikis' locale.

  • i18n is primarily done through Module:I18n. Import this module to the module you want to i18n and load messages through loadMessages(pageName) where pageName is the full page name where messages are stored. Then use i18n:msg(messageKey) to get a localized message based on its key. See w:c:dev:Global_Lua_Modules/I18n for more details and full documentation on the module.
  • Translation menu can be found on Special:BlankPage/I18nEdit.

Using an External Text Editor[]

External editors will have to use MediaWiki's API to fetch page content and update pages. Use at your own risk. The wiki is not responsible for any problems these third-party software may cause. You must have Lua binaries and executable installed to run Lua scripts on your local machine.

Technology Stack[]

Main article: WARFRAME Wiki:Solution Stack

The technology stack of the wiki from the perspective of script editors (disregarding hosting services, actual databases, and things in the scope of Fandom developers):

Module Dependency Graph[]

As of 06:15, 7 August 2021 (UTC), our codebase's module dependencies look like this:

EN WARFRAME Wiki Dependency Graph

See Module:DependencyGraph for the DOT file that produces this graph.

External Links[]

Further Reading[]

Third-Party Lua Packages[]

  • https://luarocks.org/ - LuaRocks is a package manager for Lua modules outside of the MediaWiki environment; this website may be a good resource to look for community-based packages to port to this wiki or any other MediaWiki-based wiki

References[]

Advertisement