Skip to main content
Con's place

Data-driven rendering: A universal UI language

Developing consistent, scalable UI can be tedious and time-consuming. Traditionally, developers write HTML, templates, or components manually. But what if UI could be rendered dynamically, using only structured data? This is what I call data-driven rendering, where the UI is generated based on data, whether on the server or client side, without developers needing to manually code it.

Traditional view technologies vs. data-driven rendering

Comparing the chaos of a construction site symbolizing the traditional technologies vs the order of a factory assembly line

Traditional MVC-style templating systems have been widely used to build dynamic web applications. These frameworks allow developers to generate HTML on the server side with embedded logic. However, they still rely on explicitly defined templates and manual UI coding, which presents several challenges. Check out below a typical Razor template:

@page "/example"
<h3>Simple Form</h3>

<input type="text" placeholder="First name" />
<input type="text" placeholder="Last name" />

<button>Submit</button>

Even with Razor’s templating capabilities, developers still need to define UI components manually, making maintenance and scalability more challenging.

  • Manual component definitions: Even though these technologies help with templating, developers still need to write and maintain a large number of views manually.
  • Limited reusability: MVCs often mix business logic with UI code, making it harder to reuse components across different applications without modifications.
  • Scalability challenges: As applications grow, maintaining a vast number of templates and views becomes increasingly complex.

Data-driven rendering libraries (like the govcy-frontend-renderer) eliminates these limitations by fully separating the UI from the logic. Instead of manually coding templates for every scenario, a data-driven renderer can dynamically construct UI elements based on structured data (e.g., JSON). This allows applications to scale more efficiently and reduces development overhead by removing the need for repetitive template creation.

Check out below a data-driven template:

let jsonTemplate = [
{
"element": "textInput",
"params": {"label": { "en": "First name", "el":"Όνομα"} }
},
{
"element": "textInput",
"params": {"label": { "en": "Last name", "el":"Επώνυμο"} }
},
{
"element": "button",
"params": {"text": { "en": "Submit", "el":"Υποβολή"} }
}
];

Defining the UI as data gives developers greater flexibility and ease of use. For example, suppose you want to add an h1 element to the example above. All you need to do is just add a new item to the array:

jsonTemplate.unshift({
"element": "textElement",
"params": {"text": { "en": "Title", "el":"Τίτλος"}, "type": "h1"}
} );

What’s more, defining UI as structured data like JSON creates a universal UI language across your organization. Instead of scattered conventions, you get a single, consistent format that every service, designer, and developer can use. This makes your design system not just a style guide, but an executable blueprint that is easier to test, easier to document, and easier to scale.

The beauty of data-driven rendering

Data-driven rendering simplifies UI development in many ways. Here are some of it’s key advantages.

Saving time and promoting best practices

One of the biggest advantages of data-driven rendering is how much time it saves developers. By automating UI generation, developers spend less time writing repetitive code and more time focusing on business logic.

Additionally, data-driven rendering enforces coding best practices by ensuring that all UI elements are generated in a consistent manner. This reduces the likelihood of errors, eliminates redundant code, and promotes modularity. With a centralized rendering approach, teams can enforce accessibility, security, and performance optimizations without requiring every developer to manually implement these best practices.

Easier maintenance and feature expansion

Data-driven rendering makes it significantly easier for teams to maintain a product over time. Since the UI is generated dynamically, making updates or implementing new features requires modifying the data or renderer logic rather than refactoring large chunks of code. This means teams can adapt quickly to changes, whether they are design updates, accessibility improvements, or functional enhancements.

Another major benefit is the reduction of boilerplate code. When UI elements are defined in a structured format, there is far less duplicate code, making the overall codebase cleaner and easier to manage. This not only reduces technical debt but also allows developers to focus on solving more complex problems rather than manually updating UI components.

With more time freed from repetitive UI coding, teams can dedicate their efforts to innovation, improving user experience, and delivering new features faster. The streamlined workflow leads to better collaboration between designers and developers, ensuring that the product evolves efficiently over time.

Empowering non-developers to enhance the product

One of the most exciting benefits of data-driven rendering is that it enables non-developers to contribute to UI development. With a well-designed administration platform, product managers, designers, and content editors can modify the UI without needing to write code.

  • Low-code/no-code flexibility: Business users can update forms, modify layouts, or introduce new UI elements using a structured interface instead of relying on developers.
  • Faster iteration cycles: Non-technical teams can make UI changes without waiting for engineering resources, leading to quicker updates and more agile development.
  • More efficient collaboration: Developers can focus on building and improving the rendering engine, while non-developers manage the visual and functional aspects of the product.
Example service designed on figma
At DSF we use Figma as an administration platform where designers define a service and it's UI, and a Figma plugin to export the data definition of the UI.

This shift reduces development bottlenecks and enables teams to iterate faster, improving user experience without increasing engineering overhead.

Other benefits of data-driven rendering

No more manually writing UI code

Instead of hardcoding templates, developers can define data structures, and a renderer takes care of the rest. This means less time spent on markup and more focus on logic.

Consistency across applications

When all UI is generated using a renderer, consistency is ensured because the same set of rules applies everywhere. There’s no risk of one developer implementing a component slightly differently from another.

Easier maintenance

Since UI is driven by structured data, changes only need to be made in one place. If the design evolves, updating the renderer automatically updates all interfaces that depend on it.

Better accessibility & compliance

A well-designed renderer ensures that every UI element adheres to best practices, including accessibility and design standards, without requiring developers to think about them individually.

Faster prototyping & iteration

With data-driven rendering, UI updates can be done by simply modifying the data. This allows designers and developers to iterate quickly without rewriting templates.

Multi-platform support

By separating the UI definition from its rendering logic, the same data can be used to generate interfaces for web, mobile, or other platforms seamlessly.

Real-world applications

Data-driven rendering is widely used in various industries and tools. Some well-known examples include:

  • Google Forms: Forms are generated dynamically based on structured form data, eliminating the need to manually code each form.
  • Notion: Pages and blocks are rendered dynamically from structured content, making it easy to reorganize and display data.
  • CMS-based websites: Platforms like WordPress and Contentful dynamically generate web pages from stored content.
  • Design systems & component libraries: UI libraries like Material UI or Bootstrap often include systems that dynamically generate components based on predefined configurations.
  • Dashboard & data visualization tools: Tools like Tableau and Power BI dynamically render charts and UI components based on input data.

Final thoughts

Data-driven rendering isn’t just a development technique, it’s a mindset shift. It enables automation, reduces redundancy, and makes UI more scalable and maintainable. If you’re building applications with repetitive UI structures, consider leveraging a renderer to simplify your workflow.

© Constantinos Evangelou, 2025