{rhino} vs {golem} vs {leprechaun}: Which R/Shiny Library is Right for You?
Shiny dashboards created using R have become a staple for data professionals due to their flexibility, power, ease of use, and community support when carrying out <a href="https://appsilon.com/effective-shiny-dashboards-best-practices/" target="_blank" rel="noopener">data visualization</a> and analytics.
As the demand for <a href="https://appsilon.com/how-i-built-an-interactive-shiny-dashboard-in-2-days-without-any-experience-in-r/" target="_blank" rel="noopener">interactive dashboards</a> grows, so does the need for R packages that facilitate their creation.
In this article, we will delve into a comparative analysis of <strong>three</strong> notable R packages: <strong>Rhino</strong>, <strong>Golem</strong>, and <strong>Leprechaun</strong>.
By understanding the distinctions, strengths, and key features of each package, we can make informed decisions tailored to technical and business objectives.
<h4>TL;DR:</h4>
<ul><li>Rhino, Golem, and Leprechaun are three prominent R packages designed to enhance Shiny dashboard development.</li><li>Rhino focuses on enterprise-level applications, best software engineering practices, and elegant UI design.</li><li>Golem offers a toolkit for producing production-ready Shiny applications with ease of creation and deployment.</li><li>Leprechaun streamlines the process by generating efficient, dependency-free code.</li><li>Choose Rhino for robust and scalable enterprise solutions, Golem for professional, production-ready Shiny apps, and Leprechaun for minimalistic, lightweight, and easy-to-develop applications.</li></ul>
<hr />
<h2>Key Features, Advantages, and Differentiators</h2>
<h3>Rhino</h3>
<a href="https://rhinoverse.dev/#rhino" target="_blank" rel="noopener">Rhino</a> is an R package that facilitates the creation of high-quality, enterprise-level Shiny applications efficiently.
<img class="size-full wp-image-22112" src="https://webflow-prod-assets.s3.amazonaws.com/6525256482c9e9a06c7a9d3c%2F65b01958b556fdf5a54d092e_rhinoverse.webp" alt="Rhinoverse" width="1349" height="614" /> Rhinoverse
<h4>Key Features</h4>
<ul><li>Promotes best software engineering practices, code modularization, thorough testing, and elegant UI design.</li><li>Rhino offers a structured approach with an emphasis on best practices and development tools.</li><li>Aims to save development time and unify application architecture.</li><li>Quick conversion of Shiny applications to Rhino projects for enterprise use.</li></ul>
<blockquote>Looking to transform your approach to R Shiny development? <a href="https://www.youtube.com/live/QmyilJr7jXs?si=ypgYDeJW3lej7eh2" target="_blank" rel="noopener">Learn the best practices that will take your dashboards from good to exceptional</a>.</blockquote>
<h4>Advantages</h4>
<ul><li><strong><a href="https://appsilon.github.io/rhino/articles/explanation/what-is-rhino.html" target="_blank" rel="noopener">Rhino</a> provides a nested file structure</strong> for handling larger applications and enables scalability, modularization, and clear code organization with a neat separation of responsibilities.</li><li>Speeds up Shiny app development while enhancing reliability and maintainability.</li><li>Offers an enriched toolkit tailored for optimizing Shiny applications, streamlining development and fostering maintainable and high-quality applications, notably in enterprise environments.</li><li>Rhino integrates essential tools for Shiny app development, enhancing both efficiency and quality.</li><li>Rhino enables the use of Cypress for end-to-end testing and you can integrate shinytest2 (<a href="https://appsilon.github.io/rhino/articles/how-to/use-shinytest2.html" target="_blank" rel="noopener">the process is straightforward</a>) to further ensure application reliability.</li><li>Rhino incorporates a variety of linters, including those for R, JavaScript, and <a href="https://appsilon.com/how-to-make-your-css-awesome-with-sass/" target="_blank" rel="noopener">Sass</a> (enhanced CSS for styling your applications), to ensure high-quality code across different programming languages.</li><li>Rhino supports developers in crafting JavaScript code and styles, offering a setup that automatically bundles JavaScript scripts and Sass files, streamlining their integration into projects.</li><li>It features advanced logging capabilities for effective debugging, enhancing the development process.</li><li>Rhino provides a set of solutions built on industry experience, preventing the “reinventing the wheel” scenario.</li><li>Rhino's configuration with <a href="https://github.com/features/actions" target="_blank" rel="noopener noreferrer">GitHub Actions</a> automates the running of all tests and linters, ensuring consistent code quality through continuous integration.</li><li>Rhino excels in supporting a broad spectrum of tests along with a streamlined setup for end-to-end testing, ensuring robust and error-free applications.</li></ul>
<h4>Differentiators</h4>
<ul><li>Rhino apps emphasize development tools and clean configurations, minimizing generated code.</li><li>Rhino focuses on deployment in enterprises and emphasizes application logic and user experience, offering a streamlined setup for extensive testing.</li></ul>
<h3>Golem</h3>
<a href="https://golemverse.org/" target="_blank" rel="noopener noreferrer">Golem</a> is an opinionated framework tailor-made for constructing production-grade Shiny applications.
<img class="size-full wp-image-22114" src="https://webflow-prod-assets.s3.amazonaws.com/6525256482c9e9a06c7a9d3c%2F65b01959d997c04c683bd75e_golemverse.webp" alt="Golemverse" width="660" height="487" /> Golemverse
<h4>Key Features</h4>
<ul><li>Designed as a toolkit to simplify the creation, development, and deployment of Shiny applications.</li><li>Emphasizes building applications tailored for production environments.</li><li>Offers tools to abstract common engineering tasks, such as module creation, addition, and linking of external CSS or JavaScript files.</li><li>Provides guidance on testing and tools for deploying Shiny applications to various platforms.</li></ul>
<h4>Advantages</h4>
<ul><li>Golem is tailored specifically for building production-ready Shiny applications, ensuring robustness and scalability.</li><li>It offers a comprehensive toolkit that simplifies the entire Shiny app development lifecycle from creation to deployment.</li><li>Golem abstracts routine engineering tasks, enhancing efficiency.</li><li>Starting with Golem early in the project can prevent extensive refactoring later, making the development process more efficient.</li><li>Golem also guides on testing and deployment, easing the transition to production.</li></ul>
<h4>Differentiators</h4>
<ul><li>Each Golem application is contained within an R package.</li><li>The package's default architecture provides a clear roadmap for Shiny app development, supporting organized and systematic development.</li><li>Born from the need for a structured approach, Golem ensures applications are stable and maintainable.</li><li>Golem centres on abstracting away routine tasks, allowing developers to concentrate on the core application logic.</li></ul>
<h3>Leprechaun</h3>
<a href="https://leprechaun.opifex.org/#/" target="_blank" rel="noopener noreferrer">Leprechaun</a> is a specialized R package that streamlines the development of Shiny applications by generating robust, dependency-free code.
<img class="size-full wp-image-22126" src="https://wordpress.appsilon.com/wp-content/uploads/2023/11/Screenshot-2023-11-28-at-11.56.32 AM.webp" alt="Leprechaun" width="1184" height="736" /> Leprechaun
<h4>Key Features</h4>
<ul><li>Leprechaun acts as a dynamic tool, streamlining the creation of Shiny applications without adding extraneous dependencies.</li><li>It comes equipped with a myriad of functions that simplify the crafting of modules, Bootstrap elements, and other common components.</li><li>The package is geared towards generating efficient code, ensuring that the resultant applications are lightweight and performant.</li><li>One of its standout features is the ability to assist in application development while ensuring it doesn't embed itself as a dependency on the final product.</li></ul>
<h4>Advantages</h4>
<ul><li>Leprechaun facilitates the swift development of Shiny applications with its code generation capabilities.</li><li>It provides a utility-rich environment for crafting common elements like modules and Bootstrap components.</li><li>The package emphasizes lean application development, ensuring efficient code generation for lightweight applications.</li></ul>
<h4>Differentiators</h4>
<ul><li>Leprechaun does not embed itself as a dependency in the final product, showcasing its focus on self-contained output.</li><li>Its primary focus on code generation sets it apart, promoting lean and efficient application development without additional dependencies.</li></ul>
<h2>Rhino vs Golem vs Leprechaun</h2>
Let’s take a closer look at the business value, core features, scalability, ease of use and testing of the three packages.
<h3>Business Value</h3><ul><li><strong>Rhino: </strong>The enterprise-focused features of Rhino make it an optimal choice for larger organizations that require advanced capabilities like scalability, and extended manageability. For example, a Rhino-based Shiny application for managing clinical trial data as demonstrated in the Pilot 2 Shiny Application.</li></ul>
<p style="padding-left: 40px;"><strong>Example Applications:</strong></p>
<ul><li style="list-style-type: none;"><ul><li>Rhino is suitable for enterprise applications, such as dashboards for managing clinical, customer and financial data, or other sensitive information, such as this <a href="https://appsilon.com/fda-clinical-trial-submissions-with-r-shiny-rhino/" target="_blank" rel="noopener">FDA Pilot Application</a>.</li></ul>
</li>
</ul>
<video width="100%" height="auto" src="https://wordpress.appsilon.com/wp-content/uploads/2023/07/rhino_fda_pilot_r_shiny_app_e-ctd.webm" loop="true" autoplay="true" controls="true"></video>
<ul><li style="list-style-type: none;"><ul><li>It is also suitable for applications that handle large datasets and complex calculations; or dashboards that need to be integrated with other enterprise systems.</li></ul>
</li>
</ul>
<ul><li><strong>Golem:</strong> Golem is a good choice for anyone looking for a straightforward path to create dashboards, minimizing the need for in-depth coding.</li></ul>
<p style="padding-left: 40px;"><strong>Example Applications:</strong></p>
<ul><li style="list-style-type: none;"><ul><li>Golem is suitable for applications that need to be created and deployed quickly, such as dashboards for prototyping new ideas, a new marketing campaign, and visualising statistical results from research.</li><li>For example, <a href="https://github.com/Nottingham-and-Nottinghamshire-ICS/healthcareSPC" target="_blank" rel="noopener">healthcareSPC</a>, an application focused on healthcare statistical process control.</li></ul>
</li>
</ul>
<img class=" wp-image-22120" src="https://webflow-prod-assets.s3.amazonaws.com/6525256482c9e9a06c7a9d3c%2F65b0195c84868bab9cbff3d5_healthcarespc.webp" alt="Healthcare Statistical Process Control" width="691" height="494" /> Healthcare Statistical Process Control
<ul><li><strong>Leprechaun:</strong> This is well suited for projects that emphasize minimalism and low dependencies, as this package offers a straightforward approach to dashboard development.</li></ul>
<p style="padding-left: 40px;"><strong>Example Applications:</strong></p>
<ul><li style="list-style-type: none;"><ul><li>Leprechaun is suitable for dashboards that need to be lightweight and efficient and for people who have limited coding experience, such as a dashboard for displaying data from a wearable fitness tracker.</li><li>Another example is this application that visualizes movie data, <a href="https://mjfrigaard.github.io/shiny-app-pkgs/leprechaun.html" target="_blank" rel="noopener">moviesApp</a>.</li></ul>
</li>
</ul>
<img class=" wp-image-22122" src="https://webflow-prod-assets.s3.amazonaws.com/6525256482c9e9a06c7a9d3c%2F65b0195de4aa53755402dc0b_moviesapp.webp" alt="moviesApp" width="706" height="526" /> moviesApp
<h3>Core Features</h3><ul><li><strong>Rhino:</strong> Rhino’s architecture is designed for complex, enterprise-level applications, supporting advanced data processing and visualization needs while providing superior modularization capabilities. It also allows for seamless integration with databases and other corporate systems, making it ideal for complex organization environments.</li><li><strong>Golem:</strong> Golem offers a variety of templates, allowing for rapid construction of functional dashboards and emphasizes modular design for easier maintenance and scalability of applications.</li><li><strong>Leprechaun:</strong> Leprechaun focuses on creating efficient and straightforward dashboards, eliminating unnecessary features and complexities. It is unique in its approach to generating efficient, clean code, making it suitable for projects with limited development resources.</li></ul>
<h3>Ease of Use</h3><ul><li><strong>Rhino:</strong> While robust, it requires a steeper learning curve to utilize its full range of features effectively, as Rhino relies heavily on modules and encapsulation, which not all R developers may not be familiar with. Regardless, Rhino has an <strong>intuitive design</strong> and<strong> possesses extensive resources,</strong> including <a href="https://appsilon.github.io/rhino/articles/explanation/application-structure.html" target="_blank" rel="noopener">documentation</a>, tutorials, <a href="https://appsilon.com/tag/rhino/" target="_blank" rel="noopener">blogs</a> and community for learning and troubleshooting.</li><li><strong>Golem:</strong> Golem’s design makes it accessible for beginners and intermediate users and benefits from community and resources as well.</li><li><strong>Leprechaun:</strong> Leprechaun is easy to use and provides resources for quick learning and implementation.</li></ul>
<h3>Testing</h3><ul><li><strong>Rhino:</strong> Rhino stands out as it extends beyond supporting the “<strong>testthat”</strong> suite, which is common in R packages, by offering a <a href="https://appsilon.com/shinytest2-vs-cypress-e2e-testing/#rhino" target="_blank" rel="noopener">structured setup for end-to-end tests</a>. This setup enhances the testing capabilities, ensuring robustness across the entire application workflow.</li><li><strong>Golem:</strong> Golem supports testing the <strong>“testthat”</strong> suite, aligning with common practices in R packages. This enables developers to create and manage unit tests efficiently.</li><li><strong>Leprechaun:</strong> Leprechaun’s primary focus is on code generation for Shiny applications. While it doesn’t specify a built-in testing framework, it facilitates the use of external libraries for testing purposes. Requiring additional setup compared to Rhino.</li></ul>
<h2>Conclusion</h2>
In the world of Shiny dashboards, there is no one-size-fits-all solution. Rhino, Golem, and Leprechaun each present unique benefits catering to specific needs:
<strong>Rhino</strong> emerges as a <strong>robust</strong> choice for those navigating the complex waters of <strong>larger enterprise applications</strong>, subtly hinting at a more <strong>structured approach</strong> to testing that could resonate with organizational robustness and precision.
<strong>Golem</strong>, on the other hand, aligns well with endeavours that value <strong>rapid</strong>, almost effortless dashboard creation, freeing up time for other pivotal tasks.
<strong>Leprechaun</strong> stands out for those preferring a <strong>lightweight</strong>, <strong>minimalistic</strong> approach, seamlessly melding with existing Shiny projects.
Armed with these insights, you're better positioned to gravitate toward a package that seamlessly dovetails with <strong>both</strong> your <strong>technical</strong> and <strong>business needs</strong>.
<blockquote>Dive into the latest Shiny trends and techniques – <a href="https://appsilon.us16.list-manage.com/subscribe?u=c042d7c0dbf57c5c6f8b54598&id=870d5bfc05" target="_blank" rel="noopener">join Shiny Weekly and start exploring a treasure trove of resources and insights for Shiny app developers</a>.</blockquote>