Drupal Planet

Affinity Bridge: Pros and Cons of Docker

15 godzin 35 minutes ago
Pros and Cons of Docker 08/20/2018 - 09:00 Docker planet drupal Mark

Docker is gaining traction in the software development industry at such a phenomenal rate that more and more teams are adopting it into their processes. Keeping everyone on the same page with technology stacks has become increasingly difficult as the technology itself becomes more complex. There are countless technical articles on Medium extolling the virtues of Docker and how it can help mitigate these types of problems. Now that I have been using Docker as a local development environment for over a year, I’d like to talk about the pros and cons of making the switch.

  Pros

Docker on Mac and Windows are better than ever.

Docker is getting more and more mature by the day, especially as more developers are turning to it for the development and production environments. Docker for Mac and Docker for Windows reduces much of the complexity of leveraging Docker on non-Linux environments through abstraction. It now works as simply as any other application in your environment -- install it in the same fashion as your other tools like your text editor and browser -- and you are off to the races.

 

Docker gives you consistency across your team.

Another aspect of Docker that I love is the reliability that you have the same setup as your team. This is great for a couple reasons: there is so much value in being able to run with the assumption that your entire team is using the same setup, and it enables you to run scripts and processes that will empower your entire development team to perform common operations with a simple command.

 

Docker eases the pain of debugging environments.

Our processes used to consist of having to track down pages and pages of documentation, only to find that this documentation is out of date and needs to be updated, so where do I end up? Spending days pouring over posts on Stack Overflow trying to find out how to update the services I’ve been using on my machine, which are probably different than everyone else’s on my team. So each developer needs to do that exploration independently because each solution will be slightly different. With Docker, you can easily isolate and eliminate environment issues across your team without needing to know how someone’s machine is setup.

 

Interesting avenues of automation open up with Docker.

As someone who is fascinated with automation, I’ve always tried to find shortcuts to doing the boring, repetitive jobs that take too much time to do manually. Have to update the database on the development server? Ok, great, you just need to look up the password for the development server (which could be any of 4 different places, depending on the project) and once that’s done, you realize you also don’t have the password for the live or staging environment, so you have to wait 3 days for the call from the IT firm that manages that server to give you credentials. With a Docker infrastructure, you can easily transfer the environment (with some small utility changes) to the CI system of choice. Most of the prominent CI solutions available today integrate well with Docker.

 

Docker speeds up the provisioning process.

You can avoid wild goose chases by providing all you need from within the docker container, potentially using a set of shared ssh keys, or requiring users to use personal keys on an identity service (best case scenario, but impractical for some teams).

 

Docker for Mac and Windows is more stable than ever before.

Even with its rapid development cycle, the team working on Docker for Mac have done an exceptional job keeping the platform as stable as possible. This is important because the app auto-updates. Despite the fact that I am on the Edge version of the platform (which seems to update weekly), I have only had one issue that caused me to have to rollback. I ended up losing a day of development time to this bug, but after I found a way to rollback gracefully, the following day there was a bugfix released to remedy the issue. Despite this one small glitch, I still stand by Docker because I had more conflicts when I was relying on Homebrew or compiling binaries for services manually.

 

The Docker community is huge and resources are plentiful.

There are a huge number of images (last count on Docker Hub has it at 100,000+) to pull from for free from Docker Hub. These images are blueprints to creating your containers which will house all of your services for your application. You will find varying success on the level of documentation each of these images provide, but for the most part they are ready to plug into your application.

  Cons

Despite all of these good things, everything is not sunshine and rainbows with Docker, though. There are many things about Docker that can be tricky to grok with and it helps to have someone on your team familiar with the technology.

Docker has some gaps in documentation.

Docker is moving at a fast pace and it is very hard to keep up with the latest advances and changes. While there is some fantastic documentation, there seem to be some gaps specifically within the docs for the abstraction layers (Docker for Mac, Docker for Windows).

 

Docker has performance problems on non-native environments.

Despite Mac being based on the native Unix layer, Docker still requires the actual Linux kernel (usually Ubuntu) in order to perform its operations. What Docker for Mac provides for you is an abstracted VM containing the kernel, which you never interact with directly. You will interact with the containers within that VM, but they are networked together with your host in a way that you will rarely need any information about the VM itself.

 

Using Docker (or any VM-based architecture) locally has one drawback which can be significant based on your stack and your team’s needs. The disk mounting / volume shares Docker for Mac provides are getting better with every release, but I have seen some pretty substantial drop offs of performance when doing intensive database operations.

 

Docker for Mac performance: A Test Case

My test case was using Docker for Mac and installing a web application framework (in my case, Drupal). On natively-compiled services (ie Homebrew), I could install Drupal in 45 seconds. Originally, with settings out of the box, Docker for Mac clocked in at 20 minutes and 32 seconds. I knew this couldn’t be reality, so I ended up twisting some knobs and flipping some switches (probably worth a follow-up article at some point) and got it down to 6 minutes, 47 seconds. While this is a significant improvement over the factory settings, it still leaves a lot to be desired in terms of performance.

 

There can be a significant learning curve to migrating to Docker.

Learning Docker is a significant time sink. There are a lot of concepts that are just different enough from a Virtual Machine infrastructure to cause confusion and make unlearning concepts from other areas a bit more of a challenge, even for experienced developers.

 

Is Docker right for me?

Identify your pain points.

Determining whether Docker is right for you is really up to your team. If you find yourself using a fairly reliable stack and on consistent development platforms, perhaps Docker is an unnecessary abstraction to add to your team’s workflow. However, if your team struggles with developer support on a platform level, Docker just might be the thing that makes the difference.

 

Docker can involve a large paradigm shift on a team.

Having a Mac on a local, sandboxed workstation can be beneficial— and many development teams stop here. However, should your use case and expertise on the team allow for it, it is also possible to have Docker as a deployment target on your servers. You will find this best suited for when you have supporting architecture to aid in your CI/CD processes. As expected, most of these components require a specific level of expertise. If you have an infrastructure based on VMs or even bare metal, this approach will come with a significant effort to build up the stack and train the developers/DevOps on how to use it.

 

Reliable, but at a cost.

Ultimately, I find Docker to be extremely reliable and use it in my projects which require cross-platform support. In many open source projects, for example, it is great to meet people where they are at and allow them to bring whatever they have access to. Docker can be extremely beneficial in this cases.

 

Let us know how you are using Docker.

Please reach out and let us know how Docker has been working for your team and leave a short pros/cons list of your own for the edification of others!

 

(Whale image courtesy of Max Pixel)

Hook 42: Drupal 8 Interviews: Spotlight on Andrew Dunkle from Go Overseas

18 godzin 33 minutes ago

Andrew Dunkle is the CTO of Go Overseas. Go Overseas is a platform that strives to help people find meaningful travel experiences abroad. They often describe themselves as the Yelp or Airbnb of study abroad programs. Volunteers, recent high school graduates, or anyone who is looking to travel in a more impactful way can use the site to find opportunities. Andrew and his business partner Mitch co-founded the company in 2008, while teaching together in Taiwan. They recognized the need for a platform to provide information and encouragement about taking the opportunity to go overseas and give back at the same time.

Mass.gov Digital Services: Custom dashboards: Surfacing data where Mass.gov authors need it

21 godzin 4 minutes ago
Helping content creators make data-driven decisions with custom data dashboards

Our analytics dashboards help Mass.gov content authors make data-driven decisions to improve their content. All content has a purpose, and these tools helps make sure each page on Mass.gov fulfills its purpose.

Before the dashboards were developed, performance data was scattered among multiple tools and databases, including Google Analytics, Siteimprove, and Superset. These required additional logins, permissions, and advanced understanding of how to interpret what you were seeing. Our dashboards take all of this data and compile it into something that’s focused and easy to understand.

We made the decision to embed dashboards directly into our content management system (CMS), so authors can simply click a tab when they’re editing content.

GIF showing how a content author navigates to the analytics dashboard in the Mass.gov CMS.How we got here

The content performance team spent more than 8 months diving into web data and analytics to develop and test data-driven indicators. Over the testing period, we looked at a dozen different indicators, from pageviews and exit rates to scroll-depth and reading grade levels. We tested as many potential indicators as we could to see what was most useful. Fortunately, our data team helped us content folks through the process and provided valuable insight.

Love data? Check out our 2017 data and machine learning recap.

We chose a sample set of more than 100 of the most visited pages on Mass.gov. We made predictions about what certain indicators said about performance, and then made content changes to see how it impacted data related to each indicator.

We reached out to 5 partner agencies to help us validate the indicators we thought would be effective. These partners worked to implement our suggestions and we monitored how these changes affected the indicators. This led us to discover the nuances of creating a custom, yet scalable, scoring system.

Line chart showing test results validating user feedback data as a performance indicator.

For example, we learned that a number of indicators we were testing behaved differently depending on the type of page we were analyzing. It’s easy to tell if somebody completed the desired action on a transactional page by tracking their click to an off-site application. It’s much more difficult to know if a user got the information they were looking for when there’s no action to take. This is why we’re planning to continually explore, iterate on, and test indicators until we find the right recipe.

How the dashboards work

Using the strategies developed with our partners, we watched, and over time, saw the metrics move. At that point, we knew we had a formula that would work.

We rolled indicators up into 4 simple categories:

  • Findability — Is it easy for users to find a page?
  • Outcomes — If the page is transactional, are users taking the intended action? If the page is focused on directing users to other pages, are they following the right links?
  • Content quality — Does the page have any broken links? Is the content written at an appropriate reading level?
  • User satisfaction — How many people didn’t find what they were looking for?
Screenshot of dashboard results as they appear in the Mass.gov CMS.

Each category receives a score on a scale of 0–4. These scores are then averaged to produce an overall score. Scoring a 4 means a page is checking all the boxes and performing as expected, while a 0 means there are some improvements to be made to increase the page’s overall performance.

All dashboards include general recommendations on how authors can improve pages by category. If these suggestions aren’t enough to produce the boost they were looking for, authors can meet with a content strategist from Digital Services to dive deeper into their content and create a more nuanced strategy.

GIF showing how a user navigates to the “Improve Your Content” tab in a Mass.gov analytics dashboard.Looking ahead

We realize we can’t totally measure everything through quantitative data, so these scores aren’t the be-all, end-all when it comes to measuring content performance. We’re a long way off from automating the work a good editor or content strategist can do.

Also, it’s important to note these dashboards are still in the beta phase. We’re fortunate to work with partner organizations who understand the bumps in the proverbial development road. There are bugs to work out and usability enhancements to make. As we learn more, we’ll continue to refine them. We plan to add dashboards to more content types each quarter, eventually offering a dashboard and specific recommendations for the 20+ content types in our CMS.

Interested in a career in civic tech? Find job openings at Digital Services.

Custom dashboards: Surfacing data where Mass.gov authors need it was originally published in MA Digital Services on Medium, where people are continuing the conversation by highlighting and responding to this story.

OpenSense Labs: Preventing Brute Force Attacks with Drupal Login Security Module

22 godziny 15 minutes ago
Preventing Brute Force Attacks with Drupal Login Security Module Raman Mon, 08/20/2018 - 14:50

The internet is a wild place. You never know who’s on the hunt for vulnerabilities of your site. In fact, the moment you deploy your application on the web, you are inviting all sorts of requests on your server. Apart from genuine users, these could potentially be automated scripts (mostly harmless), bots or crawlers, ethical/non-ethical hackers or some curious geeks (like me).

One of the key areas of interest for them is to exploit the authentication or login system of an application. Compromising the security of your users’ accounts can lead to severe consequences such as the leak of their personal information, misuse of their identity (or your platform), and can even cause financial losses. 

It is of utmost importance to ensure that healthy security standards are implemented. These include enforcing strong Password Policies, employing salted password hashing, adopting HTTPS, preventing brute force attacks, utilizing two-factor authentication and so on.

Securing a Drupal site is a vast topic in itself, but in this article, we will focus on understanding the default flood control mechanism and then later explore the usage of Login Security, a contributed module, to enhance the security.

Default Flood Control Mechanism of Drupal

In Drupal, User, a core module, is responsible for providing the features related to user account management such as authentication, logging in/out, password management, registration, roles, and permissions. It also does a basic yet effective prevention against brute force attacks using its flood control mechanism.

Flood Control of Drupal in Action

Whenever a user authentication fails, it is considered as a flood event and its entry is made in the “flood” schema storing the event type, user identifier, timestamp, and expiration of this flood event. There are two ways (flood event types) in which Drupal keeps a track of login failures – IP address based, and user account based. 

Flood database table

By default, a user account gets blocked if there have been 5 login failures for that user account within a span of 6 hours, and an IP address gets blocked if there have been 50 login failures from that IP address within an hour. Thus, preventing an attacker to run through a series of passwords until the correct one is obtained.

However, there are mainly three limitations of this default mechanism. 

  • There is no user interface for site administrators to configure the allowed number of login attempts and blocking time period.
  • Anyone can abuse this behavior and get a user’s (including admin’s) account blocked on purpose. There should be a way to unblock the users through admin UI (Flood Unblock module can also be used for this purpose) or preventing this abuse by not revealing the error messages to the attacker.
  • There should be some way to alert the site admin or the user whose account is being exploited.

Now, let us explore how we can use Login Security to overcome these limitations.

Downloading and Installing Login Security Module

The only prerequisite of the module is the core Ban module. Once you’ve made sure, it is enabled, you may proceed with installation of the Login Security module using any of the below methods.

$ drush dl login_security && drush en -y login_security

or

$ drupal module:download login_security && drupal module:install login_security

or

$ composer require 'drupal/login_security:^1.5'

After downloading the module using composer, enable it from the admin UI available at admin/modules.

Enabling Login Security module using admin UIHow does the Login Security module work?

The module works by implementing hook_validate(), thereby overriding the default login form flow. It maintains its own schema, login_security_track, to keep a track of failed login attempts. It can detect an ongoing attack using the configured threshold value within a set time window and can also alert the site administrator through email or logs.

Login Security Track database table

It offers two types of protection against the attacks – Soft and Hard. The soft protection is similar to the default flood mechanism, that is, it temporarily blocks the user from submitting the login form. The hard protection, however, permanently bans the host IP address and changes the status of the user account to blocked. 

If needed, the site administrator can unban the IP addresses from the admin UI available at admin/config/people/ban and unblock the users from admin/people. Additionally, it can also be configured to display the last access and last login timestamp to the users to further comfort them of their security.

 A Drupal message shows the last access and login timestamp to users after successful LoginConfiguring Login Security

The module provides a configuration form under admin/config/people/login_security. So, navigate to Manage → Configuration → People → Login Security.

You may configure the following options as per your security needs and then hit “Save configuration” to apply the changes.

Configuring the Login Security module

Configuration

Default Value

Description

Track time

1

The time window for which the login failures are considered. Soft protections expire after this time

User

0

Max. number of login failures after which a user account will be permanently blocked

Soft host

0

Max. number of login failures after which an IP address will be temporarily blocked from submitting the login form

Hard host

0

Max. number of login failures after which an IP address will be completely banned using the core ban module

Attack detection

0

Max. number of login failures after which an ongoing attack is detected and a warning is logged

Disable login failure error message

False

Display the core login error messages

Notify user about remaining login attempts

False

Display the number of attempts remaining before the user account will get temporarily blocked

Display last login timestamp

False

Display a Drupal message with the last login timestamp of the user

Display last access timestamp

False

Display a Drupal message with the last activity timestamp of the user

Along with these configurations, the text within the Drupal messages on the events (failed login attempt, hard/soft IP address ban, and blocking of the users), and the email fields (address, subject, and body) can also be configured. You may use the provided tokens to send a dynamic data in the alert/message.

Configuring the alert settings of the module

Conclusion

The Login Security module adds another measure of security to a Drupal website. In particular, it allows greater control on dealing with a situation of a brute force attack. At the end of the day, however, ensuring security is not just limited to configuring the modules but also lies in the hands of people who administer and deploy the websites.

In case of any queries or suggestions, feel free to drop down a comment.

blog banner blog image Blog Type Tech Is it a good read ? On

Debug Academy: ReactJS is coming to core. Learn "React for Drupal" at Drupal Europe w/affordable hands-on training!

3 dni 1 godzina ago
Author: Shadia Mansour

JavaScript Frameworks have been taking the web by storm for years and ReactJS has become a clear frontrunner. With React, you can implement fast, slick, interactive web components without excessive complexity.

Additionally, ReactJS is the perfect fit for Drupal - the JavaScript initiative team is already working on building a ReactJS app for Drupal Core. Wouldn't it be cool to join their initiative and help them modernize Drupal's administrator UI with React? We can show you how.

Key Benefits of React w/Drupal Include:

  • Faster rendering when responding to user interactions
  • Easier development for more complex apps
  • Friendlier JS syntax (similar to SASS for CSS)
  • Fewer clicks
  • Fewer page reloads
  • and more!

Interested in learning more? At Drupal Europe, Debug Academy will be hosting a training, Elevate your Drupal 8 application with ReactJS, on Monday, September 10th. This training is an updated version of the most popular training which sold out at DrupalCon Nashville 2018, and profit from the training will be used to help support the volunteer-run Drupal Europe!

Attendees who will gain the most from this training are Drupal developers looking to gain hands-on experience with decoupled development and developers looking to learn how to use the popular JS Framework, ReactJS. Must Know JS or PHP to participate. Code & Training formatted to be accessible to developers, not exclusively for JS developers.

The first 8 people who register will receive a significantly discounted registration price of €250.00 + VAT tax (normally €400.00+).

Register for this training at Drupal Europe below!

This training is an updated version of the most popular training at DrupalCon Nashville 2018. It sold out there, so we encourage you to secure your spot soon! The first 8 people who register will receive a significantly discounted registration price of €250.00 + VAT tax (normally €400.00+).

  • Training date: Monday, September 10 from 9AM to 5PM
  • Training location: Drupal Europe in Darmstadt, Germany 

Learning Objectives: 

  • Learn to create a React Web App
  • Learn to set up Headless Drupal using Drupal 8
  • Create a React web app which communicates with a Drupal 8 task management website

Syllabus/Agenda: 

  • Learn when & why to use decoupled Drupal 8, and why React is a great choice
  • (initial set up) Install pre-built Drupal 8 website
  • Modify Drupal 8 website to prepare it for headless integration 
  • Note: Website will not be 'fully' decoupled, will only decouple one content type
  • Create React App
  • Integrate React App with Drupal 8 website (displaying data)
  • Post data to Drupal 8 website from React App

Who Will Gain the Most From This Training?: 

  • Drupal developers looking to gain experience with Decoupled development
  • Developers looking to learn how to use the popular JS Framework, ReactJS
  • Note: Must know JS or PHP to participate. Code & Training formatted to be accessible to developers, not exclusively for JS developers.

Hook 42: BADCamp 2018 Trainings

3 dni 14 godzin ago

We’re excited to be offering two training sessions at BADCamp this year! Both of them focus on widening the reach of the internet and Drupal. Accessibility and contribution are close to our hearts at Hook 42 as they both are great tools for making the web a more diverse and inclusive place. The best thing about both subjects? You don’t have to know everything to dive in and get started - starting where you are is a great way to move things forward.

OPTASY: Bringing Gutenberg to Drupal: A Modern Admin UI, a Better Editing Experience in Drupal 8

3 dni 22 godziny ago
Bringing Gutenberg to Drupal: A Modern Admin UI, a Better Editing Experience in Drupal 8 adriana.cacoveanu Fri, 08/17/2018 - 09:35

It's a robust, flexible and admin feature-packed CMS, there's no point in denying it. And yet: Drupal (still) lacks a modern UI that would make building rich web content —  such as landing pages — a breeze. But there is hope: the Gutenberg editor has been ported over, promising a better editing experience in Drupal 8.

The team behind this daring project? Frontkom, a Norwegian digital services agency that:
 

AddWeb Solution: Let’s Decode The ‘Decoupled Drupal’ Together!

4 dni 1 godzina ago

‘Coexistence is the key to our survival’, they say about humanity. The same law applies to and therefore is adapted by the technological world too. ‘Decoupled Drupal’ is the outcome of the same law, coming from the field of web architecture. After years of following the traditional web architecture, Drupal came up with something that was not ‘monolithic’ - something that we call as ‘Decoupled Drupal’ today. Let us explore and decode in detail the web architecture that ‘Decoupled Drupal’ is!

Understanding, Decoupled Drupal

, ,

Freeing the front-end from the control of the content management system and focusing on the just back-end development. The presentation layer, themes, templates - everything front-end is taken care by the adopted front-end framework. This also implies that Drupal has chosen to do what it does the best - building and bettering the content part. The decoupled Drupal exposes the content to other systems such as native applications, JavaScript application, core REST API, IoT devices, et al, which clearly states the fact that every system can easily consume content from Drupal.
 

Decoupled Drupal, also known as Headless Drupal, in simpler words is about not letting go the core and robustness of Drupal by having the control over all the core content management related responsibilities. And yet opening up the door for the productive change on the part of content appearance. Decouple Drupal is a promise of omnichannel delivery for the marketers and publishers.
 

Pick your approach!

, ,

1) Coupled Drupal

This is the most appropriate approach to be adopted for a site that does not demand much rendering and state management from the client’s end. Drupal’s built-in twig templating system is used instead of the huge and heavy JavaScript framework. The help of JQuery can also be taken if needed. Since this approach doesn’t block content marketers by the front-end developers, extra marketing expense could be cut down.

 

2) Progressively Decoupled Drupal

A website that requires client-side interaction, Progressively Decoupled Drupal is being used. Under this approach the core strength of Drupal - its HTML generation is not eliminated and yet the benefits of the Javascript framework is adapted. The best of both the frameworks raises the quality of interactive experience plus a robust back-end. Usage of JavaScript enables the content marketers to freely gather the experience and benefit from it, without much of the developer’s support.

 

3) Fully Decoupled Drupal

The entire structure here is separated in terms of the content and the presentation, where the former one is taken care by Drupal and the later one is prominently undertaken by JavaScript frameworks. With both the advantages and disadvantages attached to this approach, it is not a highly recommended one. Independence on the underlying CMS and usage of the richness of JavaScript and its community, is one of the major advantages of the fully decoupled Drupal, while the addition of complexity to the technology stack is one of the major disadvantages.

Why should you be adapting Decoupled Drupal?
 

, ,

The popularity of the Decoupled Drupal is a reason enough to confirm how beneficial it has proven to be, so far. Let us share some prominent reasons why adopting the decoupled Drupal will prove to be advantageous for you:

 

1) Intact Security

Security - the key benefit of using Drupal is kept intact since the content management and back-end is taken care of by Drupal itself. The administrative CMS is kept far from the public eye is also something that helps in keeping the security level high.

 

2) Elevated Team Performance

Drupal CMS development requires more technical expertise as compared to that of some other front-end framework. So, when an expert of Drupal has more time and scope to focus on the segment that he has an expertise upon, the outcome would naturally be of that stature. In addition, the front-end developer will also have the freedom to work on his expertise and hence would be able to give better justice to your website with an overall elevation in the team’s performance.

 

3) Broader Approach

Drupal has always been broad with its approach, be it any website or organisation. In addition, Drupal now also has the publishing functionality that streamlines the experience for content creation. Under this architecture, it’s easier to push and manage the content to other places. This widens the possibility of the same content being spread and published on multiple channels.

 

4) Flexibility

Decoupled Drupal enables and accelerates the scope flexibility, whenever the website is in need of some change or upgradation. The independence to work and focus upon one single aspect, the developers and designers are granted the flexibility to dedicate their time to their respective jobs. The elimination of dependency of the back-end developers/tools from the front-end developers/system is what lifts up the scope of flexibility.
 

Already thinking of adapting the highly-trending and powerful architecture - Decoupled Drupal? Well, our Drupal-expert team might help you get a detailed and better understanding of the same. A customized viewpoint of Decoupled Drupal for your website surely makes a huge difference. Let our Drupal developers make that difference for you!

I hope this blog helps you to expand your Decoupled Drupal knowledge …Thanks! If you need more assistance regarding Drupal Development Services, feel free to contact us now.

PreviousNext: Introducing the Element Class Formatter module for Drupal 8

4 dni 3 godziny ago

Allow sitebuilders to easily add classes onto field elements with the new element_class_formatter module.

by Rikki Bochow / 17 August 2018

Adding classes onto a field element (for example a link or image tag - as opposed to the wrapper div) isn't always the easiest thing to do in Drupal. It requires preprocessing into the elements render array, using special Url::setOptions functions, or drilling down a combinations of objects and arrays in your Twig template.

The element_class_formatter module aims to make that process easier. At PreviousNext we love field formatters! We write custom ones where needed, and have been re-using a few generic ones for quite a while now. This module extends our generic ones into a complete set, to allow for full flexibility, sitebuilding efficiency and re-usability of code. 

To use this module, add and enable it just like any other, then visit one of your Manage Display screens. The most widely available formatter is the Wrapper (with class) one, but the others follow a similar naming convention; "Formatter name (with class)". The majority of these formatters extend a core formatter, so all the normal formatter options should still be available.

The manage display page with new (with class) field formatters selected

The field formatter settings, with all the default options

Use this module alongside Reusable style guide components with Twig embed, Display Suite with Layouts and some Bare templates to get optimum Drupal markup. Or just use it to learn how to write your own custom field formatters!

For feature requests or issues please see the modules Issue queue on Drupal.org

Tagged Field Formatters, Contrib Modules