Skip to content
Reference

Licence

Lettern is free and open source under the MIT licence, for any use on any number of sites. Paid plugins carry a licence of their own.

On this page

Lettern is free and open source, under the MIT licence. The text is LICENSE.md, in the root of every release, and the source is on GitHub.

Use it for anything, on as many sites as you like. There is no key, no limit and no banner, and core updates and security updates are free.

The MIT licence covers the code, not the Lettern name or logo. If you publish a changed copy, give it a name and logo of your own.

#What stays yours

Your content, templates and plugins are yours. Third-party components keep their own licences. Plugin authors choose their own licence, and Lettern's own free plugins are MIT too.

A paid plugin from the store carries its own licence: paid once, per site. Commerce and Sync are paid, each with its terms in LICENSE.md in its own folder. A plugin's licence covers that plugin only: it says nothing about Lettern, and Lettern doesn't need one.

With Composer, a paid plugin comes from the store's own repository, with your site's domain and licence key as the login:

Terminal
composer config repositories.store composer https://lettern.org/composer
composer config http-basic.lettern.org example.com "<licence key>"
composer require letterncms/commerce

A site with no paid plugin has no licence screen, no banner and nothing to check.

#What a licence state can do

A paid plugin's licence never stops a public site. The most any state does is show a banner in the admin, to people who can manage the licence. Public pages, static builds, the API, sign-in, editing and publishing are the same in every state, and a public request doesn't even load the licence code.

#How it is checked

A licence is a signed key that the site checks by itself, with no network. To install a paid plugin from the store, paste the key on its listing. Once a paid plugin is on, you can also paste it under Licence in the admin, run php cms license:set <key>, or set CMS_LICENSE. It is stored in config/license.key, so a clone or a copy on staging keeps it.

HostNeeds a licence
localhost, an IP address, a single-word host, .test, .local, .internal, .example, .invalid, any port other than 80 or 443No
A first label such as dev., staging., test., uat., qa., preview. on a host with three labels or moreNo
Preview platforms such as ddev.site, ngrok.io and gitpod.ioNo
Everything else, .dev and .app includedYes

The site URL you configured decides, not the request, so a proxy doesn't change the answer and neither does a spoofed header.

StateWhat you see
Licensed, or a host that needs noneNothing
Update window overA line on the Licence screen. The plugin keeps working, with patches and minor releases of the versions covered
The server can't check signatures, or the key is newer than this copyA line on the Licence screen
No licence, another domain, a refund, a new major outside the windowA banner you can dismiss for 7 days
A term that ended, a chargeback, a revoked licenceA banner that stays

#What is sent

Once a day at most, while someone is signed in to the admin and never on a public page, a site with a paid plugin and a key asks for a current one: the licence id and revision, the site URL, and the Lettern and PHP versions. It runs in the background, with a 3-second limit. If it fails, nothing changes. CMS_LICENSE_OFFLINE=true turns it off, and you can paste a new key by hand instead.

See Licence tokens for the format.