Laravel
   HOME

TheInfoList



OR:

Laravel is a
free and open-source Free and open-source software (FOSS) is a term used to refer to groups of software consisting of both free software and open-source software where anyone is freely licensed to use, copy, study, and change the software in any way, and the source ...
PHP PHP is a general-purpose scripting language geared toward web development. It was originally created by Danish-Canadian programmer Rasmus Lerdorf in 1993 and released in 1995. The PHP reference implementation is now produced by The PHP Group. ...
web framework A web framework (WF) or web application framework (WAF) is a software framework that is designed to support the development of web applications including web services, web resources, and web APIs. Web frameworks provide a standard way to build and ...
, created by Taylor Otwell and intended for the development of web applications following the
model–view–controller Model–view–controller (MVC) is a software architectural pattern commonly used for developing user interfaces that divide the related program logic into three interconnected elements. This is done to separate internal representations of infor ...
(MVC) architectural pattern and based on Symfony. Some of the features of Laravel are a modular packaging system with a dedicated dependency manager, different ways for accessing
relational database A relational database is a (most commonly digital) database based on the relational model of data, as proposed by E. F. Codd in 1970. A system used to maintain relational databases is a relational database management system (RDBMS). Many relatio ...
s, utilities that aid in application deployment and maintenance, and its orientation toward
syntactic sugar In computer science, syntactic sugar is syntax within a programming language that is designed to make things easier to read or to express. It makes the language "sweeter" for human use: things can be expressed more clearly, more concisely, or in an ...
. The
source code In computing, source code, or simply code, is any collection of code, with or without comments, written using a human-readable programming language, usually as plain text. The source code of a program is specially designed to facilitate the wo ...
of Laravel is hosted on
GitHub GitHub, Inc. () is an Internet hosting service for software development and version control using Git. It provides the distributed version control of Git plus access control, bug tracking, software feature requests, task management, continuous ...
and licensed under the terms of
MIT License The MIT License is a permissive free software license originating at the Massachusetts Institute of Technology (MIT) in the late 1980s. As a permissive license, it puts only very limited restriction on reuse and has, therefore, high license comp ...
.


History

Taylor Otwell created Laravel as an attempt to provide a more advanced alternative to the
CodeIgniter CodeIgniter is an open-source software rapid development web framework, for use in building dynamic web sites with PHP. Popularity CodeIgniter is loosely based on the popular model–view–controller (MVC) development pattern. While controller ...
framework, which did not provide certain features such as built-in support for user
authentication Authentication (from ''authentikos'', "real, genuine", from αὐθέντης ''authentes'', "author") is the act of proving an assertion, such as the identity of a computer system user. In contrast with identification, the act of indicati ...
and
authorization Authorization or authorisation (see spelling differences) is the function of specifying access rights/privileges to resources, which is related to general information security and computer security, and to access control in particular. More for ...
. Laravel's first
beta release A software release life cycle is the sum of the stages of development and maturity for a piece of computer software ranging from its initial development to its eventual release, and including updated versions of the released version to help impro ...
was made available on June 9, 2011, followed by the Laravel 1 release later in the same month. Laravel 1 included built-in support for authentication, localisation,
models A model is an informative representation of an object, person or system. The term originally denoted the plans of a building in late 16th-century English, and derived via French and Italian ultimately from Latin ''modulus'', a measure. Models c ...
,
views A view is a sight or prospect or the ability to see or be seen from a particular place. View, views or Views may also refer to: Common meanings * View (Buddhism), a charged interpretation of experience which intensely shapes and affects thou ...
, sessions, routing and other mechanisms, but lacked support for controllers that prevented it from being a true
MVC MVC may refer to: Science and technology * Maximum-value composite procedure, an imaging procedure * Multivariable calculus, a concept in mathematics * Multivariable control, a concept in process engineering * Mechanical vapor compression, a desal ...
framework. Laravel 2 was released in September 2011, bringing various improvements from the author and community. Major new features included the support for controllers, which made Laravel 2 a fully MVC-compliant framework, built-in support for the
inversion of control In software engineering, inversion of control (IoC) is a design pattern in which custom-written portions of a computer program receive the flow of control from a generic framework. A software architecture with this design inverts control as co ...
(IoC) principle, and a templating system called ''Blade''. As a downside, support for third-party
packages Package may refer to: Containers or Enclosures * Packaging and labeling, enclosing or protecting products * Mail, items larger than a letter * Chip package or chip carrier * Electronic packaging, in electrical engineering * Automotive package, ...
was removed in Laravel 2. Laravel 3 was released in February 2012 with a set of new features including the cmd
command-line interface A command-line interpreter or command-line processor uses a command-line interface (CLI) to receive commands from a user in the form of lines of text. This provides a means of setting parameters for the environment, invoking executables and pro ...
(CLI) named ''Artisan'', built-in support for more database management systems, database migrations as a form of
version control In software engineering, version control (also known as revision control, source control, or source code management) is a class of systems responsible for managing changes to computer programs, documents, large web sites, or other collections o ...
for database layouts, support for handling
events Event may refer to: Gatherings of people * Ceremony, an event of ritual significance, performed on a special occasion * Convention (meeting), a gathering of individuals engaged in some common interest * Event management, the organization of ev ...
, and a packaging system called ''Bundles''. An increase of Laravel's userbase and popularity lined up with the release of Laravel 3. Laravel 4, codenamed ''Illuminate'', was released in May 2013. It was made as a complete rewrite of the Laravel framework, migrating its layout into a set of separate packages distributed through
Composer A composer is a person who writes music. The term is especially used to indicate composers of Western classical music, or those who are composers by occupation. Many composers are, or were, also skilled performers of music. Etymology and Defi ...
, which serves as an application-level package manager. Such a layout improved the extensibility of Laravel 4, which was paired with its official regular release schedule spanning six months between minor
point release A point release (also a dot release) is a minor release of a software project, especially one intended to fix bugs or do small cleanups rather than add significant features. Often, there are too many bugs to be fixed in a single major or minor ...
s. Other new features in the Laravel 4 release include database seeding for the initial population of databases, support for
message queue In computer science, message queues and mailboxes are software-engineering components typically used for inter-process communication (IPC), or for inter- thread communication within the same process. They use a queue for messaging – the ...
s, built-in support for sending different types of email, and support for delayed deletion of database records called ''soft deletion''. Laravel 5 was released in February 2015 as a result of internal changes that ended up in renumbering the then-future Laravel 4.3 release. New features in the Laravel 5 release include support for scheduling periodically executed tasks through a package called ''Scheduler'', an abstraction layer called ''Flysystem'' that allows remote storage to be used in the same way as local
file system In computing, file system or filesystem (often abbreviated to fs) is a method and data structure that the operating system uses to control how data is stored and retrieved. Without a file system, data placed in a storage medium would be one larg ...
s, improved handling of package assets through ''Elixir'', and simplified externally handled authentication through the optional ''Socialite'' package. Laravel 5 also introduced a new internal
directory tree In computing, a directory is a file system cataloging structure which contains references to other computer files, and possibly other directories. On many computers, directories are known as folders, or drawers, analogous to a workbench or the t ...
structure for developed applications. Lumen 5.0 is the initial release of the Lumen framework, a light derivative of Laravel optimized for speed. This initial release is based on the Laravel 5.x series of PHP components, and following versions reflect the Laravel versions with which it shares common infrastructure. As of 2022, authors no longer recommend the use of Lumen for gaining these advantages, and promote Laravel Ocotone instead. Laravel 5.1, released in June 2015, was the first release of Laravel to receive
long-term support Long-term support (LTS) is a product lifecycle management policy in which a stable release of computer software is maintained for a longer period of time than the standard edition. The term is typically reserved for open-source software, where i ...
(LTS). New LTS versions were planned for one every two years. Laravel 5.3 was released on August 23, 2016. The new features in 5.3 are focused on improving developer speed by adding additional out of the box improvements for common tasks. Laravel 5.4 was released on January 24, 2017, with many new features like Laravel Dusk, Laravel Mix, Blade Components and Slots, Markdown Emails, Automatic Facades, Route Improvements, Higher Order Messaging for Collections, and many others. Laravel 6 was released on September 3, 2019, shift blueprint code generation, introducing semantic versioning, compatibility with Laravel Vapor, improved authorization responses, improved job middleware, lazy collections, and sub-query improvements. The frontend scaffolding was removed from the main package and moved into the laravel/ui package. Laravel 7 was released on March 3, 2020, with new features like Laravel Sanctum, Custom Eloquent Casts, Blade Component Tags, Fluent String Operations and Route Model Binding Improvements. Laravel 8 was released on September 8, 2020, with new features like Laravel Jetstream, model factory classes, migration squashing,
Tailwind CSS Tailwind CSS is an open source CSS framework. The main feature of this library is that, unlike other CSS frameworks like Bootstrap, it does not provide a series of predefined classes for elements such as buttons or tables. Instead, it creat ...
for pagination views and other usability improvements. The latest Laravel version is version 9, which was released on February 8, 2022.


Release history

Versions designated LTS are supported with bug fixes for 2 years and security fixes for 3 years. Other releases are supported with bug fixes for 6 months and security fixes for 1 year. Source: Laravel


Features

The following features serve as Laravel's key design points (where not specifically noted, descriptions refer to the features of Laravel 3): * ''Bundles'' provide a modular packaging system since the release of Laravel 3, with bundled features already available for easy addition to applications. Furthermore, Laravel 4 uses Composer as a dependency manager to add framework-agnostic and Laravel-specific PHP packages available from the Packagist repository. * ''Eloquent ORM'' ( object-relational mapping) is an advanced PHP implementation of the active record pattern, providing at the same time internal methods for enforcing constraints on the relationships between
database In computing, a database is an organized collection of data stored and accessed electronically. Small databases can be stored on a file system, while large databases are hosted on computer clusters or cloud storage. The design of databases sp ...
objects. Following the active record pattern, Eloquent ORM presents
database table A table is a collection of related data held in a table format within a database. It consists of columns and rows. In relational databases, and flat file databases, a ''table'' is a set of data elements (values) using a model of vertical colum ...
s as classes, with their object instances tied to single table rows. * ''Query builder'', available since Laravel 3, provides a more direct database access alternative to the Eloquent ORM. Instead of requiring
SQL queries The SQL SELECT statement returns a result set of records, from one or more tables. A SELECT statement retrieves zero or more rows from one or more database tables or database views. In most applications, SELECT is the most commonly used data man ...
to be written directly, Laravel's query builder provides a set of classes and
methods Method ( grc, μέθοδος, methodos) literally means a pursuit of knowledge, investigation, mode of prosecuting such inquiry, or system. In recent centuries it more often means a prescribed process for completing a task. It may refer to: *Scien ...
capable of building queries programmatically. It also allows selectable caching of the results of executed queries. * ''Application logic'' is an integral part of developed applications, implemented either by using controllers or as part of the route declarations. The
syntax In linguistics, syntax () is the study of how words and morphemes combine to form larger units such as phrases and sentences. Central concerns of syntax include word order, grammatical relations, hierarchical sentence structure ( constituency) ...
used to define application logic is similar to the one used by
Sinatra Francis Albert Sinatra (; December 12, 1915 – May 14, 1998) was an American singer and actor. Nicknamed the "Chairman of the Board" and later called "Ol' Blue Eyes", Sinatra was one of the most popular entertainers of the 1940s, 1950s, and ...
framework. * ''Reverse routing'' defines a relationship between the links and routes, making it possible for later changes to routes to be automatically propagated into relevant links. When the links are created by using names of existing routes, the appropriate
uniform resource identifier A Uniform Resource Identifier (URI) is a unique sequence of characters that identifies a logical or physical resource used by web technologies. URIs may be used to identify anything, including real-world objects, such as people and places, conc ...
s (URIs) are automatically created by Laravel. * ''Restful controllers'' provide an optional way for separating the logic behind serving
HTTP GET The Hypertext Transfer Protocol (HTTP) is an application layer protocol in the Internet protocol suite model for distributed, collaborative, hypermedia information systems. HTTP is the foundation of data communication for the World Wide Web, w ...
and
POST Post or POST commonly refers to: *Mail, the postal system, especially in Commonwealth of Nations countries **An Post, the Irish national postal service **Canada Post, Canadian postal service **Deutsche Post, German postal service **Iraqi Post, Ira ...
requests. * ''Class auto loading'' provides automated loading of PHP classes without the need for manual maintenance of inclusion paths. On-demand loading prevents inclusion of unnecessary components, so only the actually used components are loaded. * '' View composers'' serve as customizable logical code units that can be executed when a view is loaded. * ''Blade'' templating engine combines one or more templates with a
data model A data model is an abstract model that organizes elements of data and standardizes how they relate to one another and to the properties of real-world entities. For instance, a data model may specify that the data element representing a car be co ...
to produce resulting views, doing that by transpiling the templates into cached PHP code for improved performance. Blade also provides a set of its own
control structure In computer science, control flow (or flow of control) is the order in which individual statements, instructions or function calls of an imperative program are executed or evaluated. The emphasis on explicit control flow distinguishes an ''imp ...
s such as conditional statements and loops, which are internally mapped to their PHP counterparts. Furthermore, Laravel services may be called from Blade templates, and the templating engine itself can be extended with custom directives. * ''IoC containers'' make it possible for new objects to be generated by following the
inversion of control In software engineering, inversion of control (IoC) is a design pattern in which custom-written portions of a computer program receive the flow of control from a generic framework. A software architecture with this design inverts control as co ...
(IoC) principle, in which the framework calls into the application- or task-specific code, with optional instantiating and referencing of new objects as singletons. * ''Migrations'' provide a
version control In software engineering, version control (also known as revision control, source control, or source code management) is a class of systems responsible for managing changes to computer programs, documents, large web sites, or other collections o ...
system for
database schema The database schema is the structure of a database described in a formal language supported by the database management system (DBMS). The term "schema" refers to the organization of data as a blueprint of how the database is constructed (divide ...
s, making it possible to associate changes in the application's
codebase In software development, a codebase (or code base) is a collection of source code used to build a particular software system, application, or software component. Typically, a codebase includes only human-written source code files; thus, a codeb ...
and required changes in the database layout. As a result, this feature simplifies the
deployment Deployment may refer to: Engineering and software Concepts * Blue-green deployment, a method of installing changes to a web, app, or database server by swapping alternating production and staging servers * Continuous deployment, a software e ...
and updating of Laravel-based applications. * '' Database seeding'' provides a way to populate database tables with selected default data that can be used for application
testing An examination (exam or evaluation) or test is an educational assessment intended to measure a test-taker's knowledge, skill, aptitude, physical fitness, or classification in many other topics (e.g., beliefs). A test may be administered verba ...
or be performed as part of the initial application setup. * ''
Unit test In computer programming, unit testing is a software testing method by which individual units of source code—sets of one or more computer program modules together with associated control data, usage procedures, and operating procedures&md ...
ing'' is provided as an integral part of Laravel, which itself contains unit tests that detect and prevent regressions in the framework. Unit tests can be run through the provided
command-line utility A console application is a computer program designed to be used via a text-only computer interface, such as a text terminal, the command-line interface of some operating systems (Unix, DOS, etc.) or the text-based interface included with most gr ...
. * ''Automatic pagination'' simplifies the task of implementing pagination, replacing the usual manual implementation approaches with automated methods integrated into Laravel. * ''Form request'' is a feature of Laravel 5 that serves as the base for
form Form is the shape, visual appearance, or configuration of an object. In a wider sense, the form is the way something happens. Form also refers to: *Form (document), a document (printed or electronic) with spaces in which to write or enter data ...
input validation by internally binding
event Event may refer to: Gatherings of people * Ceremony, an event of ritual significance, performed on a special occasion * Convention (meeting), a gathering of individuals engaged in some common interest * Event management, the organization of e ...
listeners, resulting in automated invoking of the form validation methods and generation of the actual form. *''Homestead'' - a
Vagrant Vagrancy is the condition of homelessness without regular employment or income. Vagrants (also known as bums, vagabonds, rogues, tramps or drifters) usually live in poverty and support themselves by begging, scavenging, petty theft, temporar ...
virtual machine In computing, a virtual machine (VM) is the virtualization/emulation of a computer system. Virtual machines are based on computer architectures and provide functionality of a physical computer. Their implementations may involve specialized hardw ...
that provides Laravel developers with all the tools necessary to develop Laravel straight out of the box, including,
Ubuntu Ubuntu ( ) is a Linux distribution based on Debian and composed mostly of free and open-source software. Ubuntu is officially released in three editions: '' Desktop'', ''Server'', and ''Core'' for Internet of things devices and robots. All ...
, Gulp, Bower and other development tools that are useful in developing full scale web applications. *Lazy Collection - This feature of the PHP framework Laravel primarily enables you to deal with heavy loads of data, while keeping the memory usage low. Moreover, when you switch from all ( _ to cursor ( ), just one expressive model is moved within the memory at a time as cursor ( ) makes use of the LazyCollection instance.


First-party packages

Ready-to-use packages provided by Laravel through Composer and Packagist include the following: * ''Cashier'', introduced in Laravel 4.2, provides an interface for managing subscription billing services provided by Stripe, such as handling
coupon In marketing, a coupon is a ticket or document that can be redeemed for a financial discount or rebate when purchasing a product. Customarily, coupons are issued by manufacturers of consumer packaged goods or by retailers, to be used in r ...
s and generating
invoice An invoice, bill or tab is a commerce, commercial document issued by a sales, seller to a buyer relating to a sale transaction and indicating the product (business), products, quantities, and agreed-upon prices for products or Service (economic ...
s. * ''Envoy'', introduced in Laravel 4.2, provides a clean, minimal syntax for defining common tasks you run on your remote servers. Using Blade style syntax, you can easily setup tasks for deployment, Artisan commands, and more. * ''Socialite'', provides simplified mechanisms for authentication with different
OAuth OAuth (short for "Open Authorization") is an open standard for access delegation, commonly used as a way for internet users to grant websites or applications access to their information on other websites but without giving them the passwords. T ...
providers, including
Facebook Facebook is an online social media and social networking service owned by American company Meta Platforms. Founded in 2004 by Mark Zuckerberg with fellow Harvard College students and roommates Eduardo Saverin, Andrew McCollum, Dustin M ...
,
Twitter Twitter is an online social media and social networking service owned and operated by American company Twitter, Inc., on which users post and interact with 280-character-long messages known as "tweets". Registered users can post, like, and ...
,
Google Google LLC () is an American multinational technology company focusing on search engine technology, online advertising, cloud computing, computer software, quantum computing, e-commerce, artificial intelligence, and consumer electronics. ...
,
GitHub GitHub, Inc. () is an Internet hosting service for software development and version control using Git. It provides the distributed version control of Git plus access control, bug tracking, software feature requests, task management, continuous ...
and
Bitbucket Bitbucket is a Git-based source code repository hosting service owned by Atlassian. Bitbucket offers both commercial plans and free accounts with an unlimited number of private repositories. Services Bitbucket Cloud Bitbucket Cloud (previ ...
. * ''Passport'', introduced in Laravel 5.3, provides a full OAuth2 server implementation for your Laravel application in a matter of minutes. * ''Scout'', introduced in Laravel 5.3, provides a simple, driver based solution for adding full-text search to your Eloquent models. * ''Dusk'', introduced in Laravel 5.4, provides an expressive, easy-to-use browser automation and testing API. * ''Horizon'', introduced in Laravel 5.5, provides a visual dashboard and code-driven configuration for your Laravel powered
Redis Redis (; Remote Dictionary Server) is an in-memory data structure store, used as a distributed, in-memory key–value database, cache and message broker, with optional durability. Redis supports different kinds of abstract data structures, su ...
queues. * ''Telescope'', introduced in Laravel 5.7, provides insight into the requests coming into your application, exceptions, log entries, database queries, queued jobs, mail, notifications, cache operations, scheduled tasks, variable dumps and more. * ''Sanctum'', introduced in Laravel 7.0, provides a featherweight authentication system for SPAs (single page applications), mobile applications, and simple, token based APIs. Firstly called Laravel Airlock, it has been renamed due to a trademark dispute regarding the name ‘Airlock.' * ''Jetstream'', introduced in Laravel 8.0, this providing an application scaffold for Laravel. This package effectively builds on the idea of the UI tools built into past Laravel applications allowing the user to pick between two options, Livewire + Blade or Inertia.js + Vue. This package works with Laravel Fortify. There was some controversy with Taylor Otwell and Laravel users shortly after Laravel's release due to some believing old application scaffolds were being deprecated in favour of Jetstream. It has since been clarified this is not the case. * ''Fortify'', introduced in Laravel 8.0, providing an application scaffold for Laravel. Fortify is used to handle the manage of typical user tasks, building upon typical authentication to provide things like teams and two-factor authentication mechanisms. The package works closely with Laravel Jetstream. Fortify is somewhat based on features which were originally created for Laravel Spark. *''Breeze,'' Laravel Breeze is a minimal, simple implementation of all of Laravel's authentication features, including login, registration, password reset, email verification, and password confirmation. Laravel Breeze's default view layer is made up of simple Blade templates styled with Tailwind CSS. Breeze provides a wonderful starting point for beginning a fresh Laravel application. Laravel's
command-line interface A command-line interpreter or command-line processor uses a command-line interface (CLI) to receive commands from a user in the form of lines of text. This provides a means of setting parameters for the environment, invoking executables and pro ...
(CLI), called ''Artisan'', was initially introduced in Laravel 3 with a limited set of capabilities. Laravel's later migration to a Composer-based architecture allowed Artisan to incorporate different components from the Symfony framework, resulting in the availability of additional Artisan features in Laravel 4. The features of Artisan are mapped to different subcommands of the command-line utility, providing functionality that aids in managing and building Laravel-based applications. Common uses of Artisan include managing database migrations and seeding, publishing package assets, and generating boilerplate code for new controllers and migrations; the latter frees the developer from creating proper code
skeletons A skeleton is the structural frame that supports the body of an animal. There are several types of skeletons, including the exoskeleton, which is the stable outer shell of an organism, the endoskeleton, which forms the support structure inside ...
. The functionality and capabilities of Artisan can also be expanded by implementing new custom commands, which, for example, may be used to automate application-specific recurring tasks.


Conferences

''Laracon'' is the official Laravel conference centered around the Laravel framework, covering its development, uses, and related general
software development Software development is the process of conceiving, specifying, designing, programming, documenting, testing, and bug fixing involved in creating and maintaining applications, frameworks, or other software components. Software development invol ...
topics. Laracon has taken place in the
United States The United States of America (U.S.A. or USA), commonly known as the United States (U.S. or US) or America, is a country primarily located in North America. It consists of 50 states, a federal district, five major unincorporated territorie ...
,
Europe Europe is a large peninsula conventionally considered a continent in its own right because of its great physical size and the weight of its history and traditions. Europe is also considered a Continent#Subcontinents, subcontinent of Eurasia ...
and online in the past. Typically, the conference happens in the
United States The United States of America (U.S.A. or USA), commonly known as the United States (U.S. or US) or America, is a country primarily located in North America. It consists of 50 states, a federal district, five major unincorporated territorie ...
and
Europe Europe is a large peninsula conventionally considered a continent in its own right because of its great physical size and the weight of its history and traditions. Europe is also considered a Continent#Subcontinents, subcontinent of Eurasia ...
every year. 2017 was the first year a Laracon was held as an online event only. 2018 was the first year a Laracon was held in Australia. Each year the conference has a different variety of sponsors and organizers, but Laravel, Laravel News and UserScape are usually the primary organizers. While the numerous Laracon conferences are officially run, a number of other conferences are run under the name of Laravel Live. Currently, there are yearly held Laravel Live UK and Laravel Live India conferences. While these are not officially run, they have the permission of Taylor Otwell to use the name Laravel.


See also

* Comparison of web frameworks *
Comparison of web template engines The following table lists the various web template engines used in Web template systems and a brief rundown of their features. See also * Template processor * Web template system A web template system in web publishing lets web designers ...
*
October October is the tenth month of the year in the Julian and Gregorian calendars and the sixth of seven months to have a length of 31 days. The eighth month in the old calendar of Romulus , October retained its name (from Latin and Greek ''ôct ...
, a
content management system A content management system (CMS) is computer software used to manage the creation and modification of digital content (content management).''Managing Enterprise Content: A Unified Content Strategy''. Ann Rockley, Pamela Kostur, Steve Manning. New ...
built upon Laravel *
Vue.js Vue.js (commonly referred to as Vue; pronounced "view") is an open-source model–view–viewmodel front end JavaScript framework for building user interfaces and single-page applications. It was created by Evan You, and is maintained by him ...
, a front-end framework that's shipped by default within Laravel
How to create a contact us form in Laravel 9 and store the form data in MySQL database


References


Further reading

* Laravel Design Patterns and Best Practices, Packt, , July 2014, by Arda Kılıçdağı and H. İbrahim Yilmaz


External links

* {{Web frameworks Free software programmed in PHP PHP frameworks Software using the MIT license Web frameworks