Skip to content
Reference

License

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

On this page

Lettern is free and open source, under the MIT license. 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 license 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 licenses. Plugin authors choose their own license, and Lettern's own free plugins are MIT too.

A paid plugin from the store carries its own license: paid once, per site. Commerce and Sync are paid, each with its terms in LICENSE.md in its own folder. A plugin's license 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 license key as the login:

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

A site with no paid plugin has no Licenses tab, no notice and nothing to check.

#What a license state can do

A paid plugin's license never stops a public site. The most any state does is show a banner in the admin, to people who can manage the license. 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 license code.

#How it is checked

A license 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 on the Licenses tab of Plugins, 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 license
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 Licenses tab. 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 Licenses tab
No license, 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 licenseA 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 license 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 License tokens for the format.