A software widget is a relatively simple and
easy-to-use software application or component
made for one or more different software platforms.
A desk accessory or applet is an example of
a simple, stand-alone user interface, in contrast
with a more complex application such as a
spreadsheet or word processor.
These widgets are typical examples of transient
and auxiliary applications that don't monopolize
the user's attention.
On the other hand, graphical control elements
(GUI "widgets") are examples of reusable modular
components that are used together to build
a more complex application, allowing programmers
to build user interfaces by combining simple,
smaller parts.
== Classification ==
Because the term, and the coding practice,
has been extant since at least the 1980s,
it has been applied in a number of contexts.
=== Primary types ===
A Graphical control element (GUI widget) is
part of a graphical user interface (GUI) that
allows a computer user to control and change
the appearance of elements for operating a
software application.
In this context a widget may refer to a generic
GUI element such as a check box, to an instance
of that element, or to a customized collection
of such elements used for a specific function
or application (such as a dialog box for users
to customize their computer screen appearances).
A Widget toolkit is a set of programming tools
that help developers reuse GUI widgets to
build a user interface.
A desktop widget is a specialized GUI widget
intended to run on a computer desktop for
computer users to control simple utility functions
such as clocks, messaging services, and calendars.
A mobile widget is the comparable equivalent
for mobile devices (i.e. smart phones).
A web widget is a portable application installed
and executed, typically by non-expert webmasters
on HTML-based web pages, to offer site visitors
shopping, advertisements, videos, or other
simple functionality from third party widget
publishers.
=== Types of web widgets ===
A "widget application" is a third party web
widget developed for an online social network
platform, with the user interface or the entire
application hosted by the network service.
Social network companies such as Facebook
and Myspace host these applications and provide
them underlying platform services (such as
display and storage of user-provided photos
and other content, profile information about
end users and communications features with
other users) through special-purpose application
programming interfaces.
The term is used fairly loosely, in that many
such applications are more complex internally
and in operation than the simple applets that
are called "widgets" in other contexts.
The relationship between platform and developer
is mutually beneficial, with the social network
offering hardware and software infrastructure,
and access to the social network's end user
base, and with application publishers ranging
from amateur developers to organized companies
such as RockYou! and slide.com providing content
and features that make the social network
services more useful for their members.
At present, there is no fee or payment between
developers and social network platforms, and
attempts to realize revenue from widgets (primarily
advertising by the widget applications and
sale of electronic commerce goods and services
within the widgets) have been relatively unsuccessful.
=== Types of GUI widgets ===
Disclosure widgets are specific types of GUI
widgets that may be hidden or expanded by
computer users.
A metawidget is a GUI widget for controlling
the operation of other widgets within a GUI.
== Widget Engine ==
A widget engine is the software platform on
which desktop or web widgets run.
The widget model in widget engines is attractive
because of ease of development.
Most of these widgets can be created with
a few images and about 10 to several hundred
lines of XML/JavaScript/VBScript source code.
A single host software system, such as a web
browser, runs all the loaded widgets.
This allows several desktop widgets to be
built sharing resources and code.
The term widget engine is not to be confused
with that of a widget toolkit.
Toolkits are used by GUI programmers, who
combine several widgets (reusable components)
to form a single application.
A widget in a toolkit provides a single, low
level interaction, and is prepared to communicate
with other widgets in the toolkit.
On the other hand, widget engines such as
desktop widgets and web widgets are intended
for end users.
Desktop and web widgets are stand-alone, task-oriented
applications which can be composed of several
related interactions on its own.
== Types ==
=== GUI widgets ===
A graphical control element (often called
GUI widget) represents a part of a graphical
user interface (GUI) which the user can use
to interact with the program to which the
GUI belongs to.
Graphical control elements are implemented
like subroutines.
Widget toolkits and software frameworks, like
e.g. GTK+ or Qt, contain them in software
libraries so that programmers can use them
to build GUIs for their programs.
Graphical user interface builders, such as
e.g. Glade Interface Designer, facilitate
the authoring of GUIs.
=== Desktop widgets ===
Desktop widgets (commonly just called widgets)
are interactive virtual tools that provide
single-purpose services such as showing the
user the latest news, the current weather,
the time, a calendar, a dictionary, a map
program, a calculator, desktop notes, photo
viewers, or even a language translator, among
other things.
Widgets can provide or augment the graphical
shell.
Examples of widget engines include:
Dashboard widgets of Apple Macintosh
Microsoft gadgets in Windows Vista, Windows
7, and in the Windows Live system - No longer
supported, use now discouraged by Microsoft.
Various implementations for Linux, including
Plasma widgets (available for KDE since version
4) and the widget engine used by GNOME Shell
(available for GNOME since version 3).
Both are active and under development.
Google Desktop running Google Gadgets - No
longer supported, discontinued, some security
issues re: data sharing.
Yahoo!
Widgets for Windows XP, Windows Vista, Windows
7, Windows 8, Windows 10, Mac OSX - No longer
supported by Yahoo but still functioning on
Windows, Since Mac OSX 10.11 El Capitan the
Yahoo widget dock is non-functioning but the
majority of widgets still operate as expected
and are accessible instead from the menu.
XWidgets - for Windows XP, Windows Vista,
Windows 7, Windows 8, Windows 10 and Android
- Last updated in: 2 March 2015 (Windows).
Kludgets - for Windows - Allows Mac dashboard
widgets to operate on Windows.
Open Source, not actively developed.
Opera Widgets on all platforms (desktop, mobile
TVs, gaming consoles) using the Opera browser's
rendering engine.
Opera Widgets were discontinued since the
version 12 of the browser.
Screenlets for Linux and other Unix-like operating
systems - This engine runs on X11 and is under
sporadic development
Homescreen widgets in Maemo
Homescreen widgets in AndroidOriginally, desk
accessories were developed to provide a small
degree of multitasking in operating systems
that could only held one main application
at a time, but when real multitasking OSes
became available, these were replaced by normal
applications.
=== Widget draft standard ===
On 9 November 2006, the Web Application Formats
Working Group in W3C released the first public
working draft of Widgets 1.0.
The intention is to standardise some aspects
of widgets.
The Opera browser is the first client side
widget engine to adopt this draft W3C standard.
Apache Wookie (Incubating) is the first server
side widget engine to adopt this W3C standard.
Wookie is a server that manages widget instances
and allows them to be embedded in web applications
in addition to being provided for client devices
such as Opera.
=== Mobile widgets ===
Most mobile widgets are like desktop widgets,
but for a mobile phone.
Mobile widgets can maximize screen space use
and may be especially useful in placing live
data-rich applications on the device idle-screen/home-screen/"phone-top".
Several Java ME-based mobile widget engines
exist, but the lack of standards-based APIs
for Java to control the mobile device home-screen
makes it harder for these engines to expose
widgets on the phone-top.
Several AJAX-based native widget platforms
are also available for mobile devices.
The growing pervasiveness of mobile widgets
is easily understood.
While widgets are a convenience in the online
world, they can be looked at as near-essential
in the mobile world.
The reason: the mobile device is small and
the interface is often challenging.
Wading through large amounts of information
in a mobile environment is not just a nuisance;
it is a near impossibility.
Android, of all mobile operating systems,
has supported mobile widgets natively since
April 30, 2009.
Some of the most popular widgets on the Android
operating system include DashClock, Google
Keep and HD Widgets.
=== Web widgets ===
Web browsers can also be used as widget engine
infrastructures.
The web is an environment well suited to distribution
of widgets, as it doesn't require explicit
interaction from the user to install new code
snippets.
Web widgets have unleashed some commercial
interest, due their perceived potential as
a marketing channel, mainly because they provide
interactivity and viral distribution through
social networks.
The first known web widget, Trivia Blitz,
was introduced in 1997.
It was a game applet offered by Uproar.com
(the leading online game company from 2000
- 2001) that appeared on over 35,000 websites
ranging from GeoCities personal pages to CNN
and Tower Records.
When Uproar.com was acquired by Vivendi Universal
in 2001, the widget was discontinued.
=== TV set widgets ===
Widgets are also available for TVs.Yahoo!
Widget Engine is announced as a component
of the next generation TV sets.
== Information flow of desktop widgets ==
A desktop widget is a small footprint application,
which resides on the user’s desktop using
little desktop real estate and computer resources,
such as HDD and RAM.
Its purpose is to provide relevant information
to the user in a non-intrusive manner and
using few resources.
Basically, desktop widgets enable the user
to view on demand, encapsulated information
from predetermined data sources.
Ideally, a desktop widget must present personalized
content, based on the user’s preferences.
It is supposed to provide the most important
information that a user requires on a daily
basis.
Most of the desktop widgets are available
as free downloads from the developers’ websites
