Introduction
The Craft community reacts to COVID, plus Craft news, tips, plugins and more.
Hello Craft friends. I hope this finds you doing well.
The pandemic is affecting all of our lives, so of course, it impacts the Craft community. In Top Stories, you'll see updated Dot All timelines and offers of free licenses available to devs building projects to help out those affected by COVID. We've also got an issue full of updates, tips and more.
If you have a link to share, head over to the submit a link page. It helps with putting each issue together.
Thank you to the sponsors of this issue.
Fortrabbit is a preferred hosting provider for Craft CMS, offering a modern PHP application platform tailored for Craft, with Git deployments and Composer support. Try fortrabbit today.
Freeform is the feature-filled form plugin for Craft CMS that includes ready-to-use templates to get you up and running quickly. Learn about the power of Freeform.
Let's hit the links.
-John Morton
Top Stories
Update on Dot All: extensions and refund news
As this issue was wrapping up, I heard from Leah who's putting together Dot All. She said, "We've extended the Dot All early-bird discount, and we will be offering refunds if we have to cancel the event. We're also extending the call for speaker deadline."
You can see on the Dot All site that the early bird pricing is now available until May 1. The Call for Speaker extension date is now May 8, 2020.
Free licenses for COVID19 response
I’ve seen several offers from Craft developers to help in the fight by offering free licenses for Craft-based projects related to COVID response.
- Craft CMS and Commerce Lite
- Freeform and Calendar by Solspace
- Campaign and Blitz by PutYourLightsOn
- Snipcart by Working Concept
Developers, if I’ve missed your plugin, please Tweet about it and send a link to the link submission page.
News
Craft 3.4.13 released
Craft 3.4.13 put some additional polish on Craft API calls. For example, the 400
error message for a GraphQL call now tells you when the Bearer token was missing. There are additional updates, so read the changelog at the link above.
Craft Commerce 3.1 and New TaxJar Integration Released
Commerce hit version 3.1 with improved ordering and GraphQL support. You can read about 3.1 in this post from the Craft team. You’ll find the TaxJar plugin mentioned in the article in the Plugged In section later in the newsletter. For a full list of the updates, heck out the changelog.
Podcast: COVID-19 Edition III with Brandon Kelly by Mitchell Kimbrough
Mitchell Kimbrough and Brandon Kelly talk about the current state of the Craft economy and discuss their predictions for where things are headed in the next few months.
The crystal ball for 3.5
Anticipation for 3.5 is growing. Take an official peek at what to come at the milestones for Craft 3.5 on Github.
Featured Sponsor

Craft CMS Hosting Partner
We like to automate ALL THE THINGS — except customer support.
Get started with a free trial today! And ask whenever you have any questions.
Tools, tips, and fundamentals
Migrating from Craft 2 to Craft 3 - Webinar ⭐️
This webinar is happening in just a few hours. Sign up now and join in.
Craft tip on checking for preview pages
Andrew shared this tip on why you need to still check for both isLivePreview
& isPreview
in your templates.
About Database Connection Settings in Craft
If you've been using Craft for a while, you're probably familiar with the database configuration being broken up into individual settings for the user, password, and the database name. As noted in the link to the Craft docs above, as of Craft 3.4, you'll have a DB_DSN
instead.
What's a DSN? As mentioned on Wikipedia, a DSN, is a Data Source Name. A DSN is "a string that has an associated data structure used to describe a connection to a data source."
In your .env
file, for example, it would follow this structure.
DB_DSN="mysql:host=<host>;port=<port>;dbname=<dbname>"
In other words, as mentioned by Andrew in Discord, it is "a combination of the settings in db.php
turned into a string."
Can you do without Supertable or Neo?
Piotr has a tip on avoiding complexity in your field creation when you want to have a matrix in a matrix.
Login Form | Craft 3 Documentation
Need to log someone in from the front end of your Craft site? You can find out how in this page from the official docs.
Element API endpoints and caching
Jalen brought up an interesting question in Discord recently about Element API endpoints. If you cache them, is the cache automatically busted (i.e. refreshed) when an element changes? The answer is, no, they are not. Element API endpoints are all time-based.
In your element-api.php
file in your config/
folder, you'd set it like this:
'cache' => 'PT1M', // one minute
Craft CMS Updates Twitter Feed
Do you need an easy way to keep up on the Craft releases in your social media newsfeed? The Craft team has created a Twitter account for releases of Craft and plugins. Click the link above and then follow the account.
API endpoints for Craft Releases
You may have seen the page on Github showing the Craft releases.
There is an API endpoint for this information that Brandon shared on Discord that you might find useful: https://api.craftcms.com/v1/package/craftcms/cms
Here are some examples of how you can query the endpoint.
https://api.craftcms.com/v1/package/craftcms/cms?include=releases
https://api.craftcms.com/v1/package/craftcms/cms?include=releases&minStability=beta
https://api.craftcms.com/v1/package/craftcms/cms?include=releases&minStability=beta&constraint=%5E3.4.0-beta.1
What does the %5E
mean in that last link? It makes the contents URL-encoded.
Perfecting your technique
An Annotated Docker Config for Frontend Web Development ⭐️
A local development environment with Docker allows you to shrink-wrap the devops your project needs as config, making onboarding frictionless
Creating map-based navigation for Craft CMS | Craft Snippets
Piotr shows how to use path
elements inside an SVG to create navigation, specifically he demonstrates by using an SVG of a geographic map divided into regions where each region is a link. The links can be controlled through the Craft control panel using the Retcon plugin.
Element Exporter Types | Craft 3 Documentation
Craft 3.4 gives plugins & modules the ability to create custom element exporters.
Controllers | Craft 3 Documentation
If you haven't read the Controlllers section of the docs recently, they've been updated. Specifically, on how Craft's controllers extend the Yii controllers and included additional enhancements.
Sponsor

Effortlessly build beautiful forms in minutes with Freeform!
Freeform is the most reliable, intuitive and powerful form building plugin for Craft. Everything is at your fingertips in our elegant form builder. It gives you full control to create simple or complex multi-page forms, as well as connect your forms to many popular API integrations. Templating is easy and highly customizable. Our ready-to-go templates and features like built-in AJAX and Conditional Rules Logic will have you ready in minutes! No other form plugin even comes close to comparing! You can trust Freeform (and the team behind it) to deliver the quality and support you expect and deserve.
Plugged In
TaxJar for Craft Commerce
This plugin provides a tax integration between Craft Commerce and TaxJar.
It replaces Craft Commerce’s built-in tax engine, offloading the work of managing tax rates, tax zones, and tax categories to TaxJar.
GraphQL Srcset
Adds the @srcset GraphQL directive for generating a comma-separated list of image transforms.
Seeder
Seeder allows you to quickly create dummy entries through the command line. And you can just as easily remove the dummy data when you're done building the site.
IBAN Field
This plugin adds a field type to store and validate IBAN codes. It provides a Twig extension to format IBANs in different formats.
Conditional Fields
Conditional field layouts are coming to Craft CMS version 4 core. If you can't wait for that though, this plugin offers a Craft 3 stop-gap solution.
Bitbucket Pipeline Deployment
Uses the Bitbucket API to run pipelines and deploy to any number of services.
Cache Permissions
Plugin allows you to restrict who can clear each cache group based on their user group.
Query string to Object
Craft CMS filter to convert Query String to Object.
{% set obj = craft.app.request.queryStringWithoutPath | queryToObj %}
Dimensions
The Craft Commerce dimensions field is great, but sometimes you need more than one instance or to add to other elements. This adds a standalone field type so it can be added like any other field.
Reactions Work
Let your users react with “likes”, “wow”, “amazed” or up to 5 of your own custom reactions to any Craft element.
Yii, Twig, PHP & More
Friendly Exception: An interface for an exception to be friendly
An exception interface that provides a friendly name and a possible solution. Error handlers may consider the interface to render additional information right at the error screen.
It’s not Craft, but it’s interesting.
devMode.fm // Alpine.js is like Tailwind CSS for JavaScript
On this episode we have the author of Alpine.js, Caleb Porzio, on to discuss his very lightweight JavaScript library that just might be exactly what you need.
As Brandon mentioned on Twitter, something's in the air.
devMode.fm // Remote Working & Pair Programming with Tuple
The devMode crew is joined by Ben Orenstein to discuss Tuple, dubbed “The best remote pair programming app on macOS”.
devMode.fm // Bluetick.io's Mike Taber on Building your own SaaS
Thinking of staying at home and building a Software as a Service? Give this one a listen.
PingPing - Simple Website Monitoring
There has been at least one list of website monitoring services mentioned in the newsletter. PingPing, shared recently in Discord, is another option you can check out if you're looking for this type of service.
A Guide to Handling Browser Events by Sarah Chima
In this article, we will discuss how we can handle events that occur in a browser. We will also discuss how to prevent default actions and what event propagation is.