Google Apps Script

Apps Script is a scripting platform developed by Google for light-weight application development in the Google Workspace platform. Google Apps Script was initially developed by Mike Harm as a side project whilst working as a developer on Google Sheets. Google Apps Script was first publicly announced in May 2009 when a beta testing program was announced by Jonathan Rochelle, then Product Manager, Google Docs. In August 2009 Google Apps Script was subsequently made available to all Google Apps Premier and Education Edition customers. It is based on JavaScript 1.6, but also includes some portions of 1.7 and 1.8 and a subset of the ECMAScript 5 API. Apps Script projects run server-side on Google's infrastructure. According to Google, Apps Script "provides easy ways to automate tasks across Google products and third party services." Apps Script is also the tool that powers the add-ons for Google Docs, Sheets and Slides.
Example.
function doGet(e) { 
 var searchTerm = 'Script Tools'
 var ui = XmlService.createDocument(XmlService.createElement('html')).setDocType(XmlService.createDocType('html'))
 var body = XmlService.createElement('body') 
 body = buildTree(body, searchTerm);
 ui.getRootElement().addContent(body)
 return HtmlService.createHtmlOutput(XmlService.getRawFormat().format(ui))
function buildTree(node, searchTerm) {
 var ul = XmlService.createElement('ul').addContent(XmlService.createElement('p').addContent(XmlService.createText(searchTerm))); 
 // Use of the Apps Script DriveApp Service to retrieve the collections. 
 var folders = DriveApp.getFoldersByName(searchTerm).next().getFolders()
 while (folders.hasNext()){ 
 var thisFolder = folders.next(); 
 var li = XmlService.createElement('li'); 
 var resp = buildTree(li, thisFolder.getName()) 
 ul.addContent(li);
 var files = DriveApp.getFoldersByName(searchTerm).next().getFiles() 
 while (files.hasNext()) { 
 var thisFile = files.next() 
 if (thisFile.getMimeType() === "application/vnd.google-apps.document") {
 urlBase = "https://docs.google.com/document/edit?id=";
 iconHTML = "https://drive-thirdparty.googleusercontent.com/32/type/application/vnd.google-apps.document";
 else if (thisFile.getMimeType() === "application/vnd.google-apps.spreadsheet") { 
 urlBase = "https://spreadsheets.google.com/ccc?key=";
 iconHTML = "https://drive-thirdparty.googleusercontent.com/32/type/application/vnd.google-apps.spreadsheet";
 else if (thisFile.getMimeType() === "application/vnd.google-apps.script") { 
 urlBase = "https://docs.google.com/fileview?id=";
 iconHTML = "https://drive-thirdparty.googleusercontent.com/32/type/application/vnd.google-apps.script";
 else if (thisFile.getMimeType() === "application/vnd.google-apps.presentation") { 
 urlBase = "https://docs.google.com/present/edit?id=";
 iconHTML = "https://drive-thirdparty.googleusercontent.com/32/type/application/vnd.google-apps.presentation";
 else if (thisFile.getMimeType() === "application/vnd.google-apps.drawing") { 
 urlBase = "https://docs.google.com/drawings/edit?id=";
 iconHTML = "https://drive-thirdparty.googleusercontent.com/32/type/application/vnd.google-apps.drawing"; 
 else {
 urlBase = "https://docs.google.com/fileview?id=";
 iconHTML = "https://drive-thirdparty.googleusercontent.com/32/type/application/application/vnd.google-apps.unknown"; 
 
 var li = XmlService.createElement('li'); 
 var image = XmlService.createElement('img').setAttribute('src', iconHTML); 
 var fileLabel = XmlService.createElement('a').setAttribute('href', urlBase + thisFile.getId())
 .setAttribute('target', '_blank').addContent(XmlService.createText(thisFile.getName()))
 var fileLabelPanel = XmlService.createElement('div').setAttribute('style', 'display:flex;flex-direction: row;')
 fileLabelPanel.addContent(image)
 fileLabelPanel.addContent(fileLabel) 
 li.addContent(fileLabelPanel)
 ul.addContent(li)
 node.addContent(ul)
 return node; 
Add-ons.
In March 2014, Google introduced add-ons for Docs and Sheets (soon followed by Forms). The add-on stores let users add extra features to Google editors, such as mail-merging, workflows, diagrams builders... All add-ons are either 100% built with Apps Script or simply use Apps Script to display a UI in the Google editors while relying on an external backend to perform some tasks. For example, MailChimp, a mail-merging tool, has an add-on for Google Docs that communicates with MailChimp platform to send emails.
Before add-ons, it was possible to publish scripts for Google Sheets in the Script Gallery. When users installed scripts through this gallery, a copy of the Apps Script code was installed on the user's Sheet. With add-ons, the source code is not visible to the end user and everyone is using the latest version published by the developer. This new approach makes it easier to support existing code and helped convince several companies, such as MailChimp or LucidChart to invest in Apps Script.
As part of the add-ons release, Google also introduced a UI Style Guide and CSS package to help developers built add-ons that integrate smoothly into the editors. Each add-on is also reviewed by Google before its publication and developers can benefit from advice from Googlers to provide a better user experience. It is not possible to embed ads in add-ons but it is possible to monetize them.