<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: The State of Embed</title>
    <description>The latest articles on DEV Community by The State of Embed (@etso).</description>
    <link>https://dev.to/etso</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4151031%2F56328592-92fa-4b68-98dc-71bec524653d.png</url>
      <title>DEV Community: The State of Embed</title>
      <link>https://dev.to/etso</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/etso"/>
    <language>en</language>
    <item>
      <title>The Fun Starts When You Stop Building Dashboards.</title>
      <dc:creator>The State of Embed</dc:creator>
      <pubDate>Wed, 21 Oct 2026 16:30:00 +0000</pubDate>
      <link>https://dev.to/etso/the-fun-starts-when-you-stop-building-dashboards-k6k</link>
      <guid>https://dev.to/etso/the-fun-starts-when-you-stop-building-dashboards-k6k</guid>
      <description>&lt;p&gt;&lt;em&gt;I've spent the last decade building applications around analytics engines.&lt;/em&gt; I've spent the better part of a decade building applications around BI tools. I've built plenty of dashboards too, &lt;em&gt;unfortunately&lt;/em&gt;. But the work I enjoy most is building web and mobile applications with custom interfaces, workflows and connections to other services. Occasionally, that means connecting things that probably had no business talking to an analytics engine.&lt;/p&gt;

&lt;p&gt;After all these years, I'd still rather do that than build another sales dashboard. Dashboards are useful. People rely on them to do their jobs. But as a software engineer, there's only so much excitement I can get from putting another bar chart next to a KPI card. I'd rather build an application that uses analytics as part of the work someone is already doing.&lt;/p&gt;

&lt;h2&gt;
  
  
  That time we connected Qlik to Alexa
&lt;/h2&gt;

&lt;p&gt;In my &lt;a href="https://dev.to/etso/how-did-we-get-here-a-decade-of-building-on-qlik-3hio"&gt;first article&lt;/a&gt;, I mentioned experimenting in the early days of Qlik Sense integrating with Amazon Alexa. &lt;em&gt;Yes, Alexa&lt;/em&gt;. This was years before software vendors started putting a chatbot into anything with a screen. Yes! it's practical value was debatable, but it was very cool. &lt;/p&gt;

&lt;p&gt;I doubt anyone was going to replace their dashboards with a smart speaker. I wanted to see whether I could use the Qlik engine through a voice interface. Ask a question, interpret it, send a request to Qlik and get an answer back. &lt;em&gt;And it worked.&lt;/em&gt; I found that far more exciting than the latest chart type. I could build our own interface around Qlik's engine. I've approached analytics that way ever since.&lt;/p&gt;

&lt;h2&gt;
  
  
  Unpopular opinion
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;“I find traditional BI work a bit boring sometimes.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;“Data are fun” that was going to be the title of this blog before I settled on “The state of embed”. The data can be fascinating, I enjoy finding patterns and figuring out how things relate to each other. It's delivering the results that gets repetitive.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Another dashboard.&lt;/li&gt;
&lt;li&gt;Another set of filters.&lt;/li&gt;
&lt;li&gt;Another request to make the numbers bigger.&lt;/li&gt;
&lt;li&gt;Another stakeholder who wants the entire application exported to Excel.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;After enough of those requests, I start wondering why we deliver analytics this way. Why does someone need to leave the application they're already using to open a separate BI tool? Why should they have to set filters for a customer they've already selected? The application could pass that context to the analytics engine and show the relevant data. Then the user could act on what they find without leaving their work. That's the appeal of embedded analytics for me.&lt;/p&gt;

&lt;h2&gt;
  
  
  Stop making people go looking for analytics
&lt;/h2&gt;

&lt;p&gt;Imagine you're building a customer management application. The application already knows which customer you're looking at and what permissions you have. An embedded analytics engine could use that context. You could show the customer's purchasing history and compare it with similar customers, all on the same screen.&lt;/p&gt;

&lt;p&gt;You could also combine that data with information from other services or use it to trigger an action in another system. You control how the user explores the data. You can reuse the BI work you've already done.&lt;/p&gt;

&lt;p&gt;If you've spent years building data models, business measures and security rules in Qlik, Power BI or Tableau, recreating them from scratch holds little appeal. I'd rather use those models and rules in an application with an interface I control. The engine handles the analytics. The application handles how people use the results. Getting the two to work together can be painful. I've written an &lt;a href="https://dev.to/etso/qlik-embed-the-replacement-for-capability-apis-that-still-isnt-ready-9jf"&gt;entire article about my frustrations with qlik-embed&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What AI adds to the application
&lt;/h2&gt;

&lt;p&gt;Lately, I've been thinking about what AI could add to these applications. AI generating dashboards doesn't excite me much. It's impressive. I wrote about it in my &lt;a href="https://dev.to/etso/everyones-a-bi-developer-now-apparently-52hb"&gt;previous article&lt;/a&gt;. I'd rather use AI to help someone investigate data and act on it inside an application.&lt;/p&gt;

&lt;p&gt;In the Alexa experiment, we had to write much of the logic for interpreting questions ourselves. The language tools available at the time were limited. LLMs, tool calling and MCP make those experiments easier to build today. Someone asks a question. The application supplies the context, the model chooses from the tools you've made available, and the analytics engine returns a result using its existing business rules and permissions.&lt;/p&gt;

&lt;p&gt;You decide which users can access each tool and when an action needs confirmation. You can also connect the answer to other services. Imagine a user reviewing an unusual sales trend inside their CRM. They could investigate the numbers and inspect the relevant transactions there. With the right permissions, they could then create a follow-up task for their account manager.&lt;/p&gt;

&lt;p&gt;Now that's something I'd enjoy building. None of this requires giving an LLM unrestricted access to your database. You can limit it to specific operations that enforce your existing permissions and business logic. You still have to get authentication, authorisation, data quality and error handling right. An LLM doesn't remove that work.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I keep building around analytics engines
&lt;/h2&gt;

&lt;p&gt;Much of the discussion about embedded analytics focuses on business benefits. People use the data more, spend less time switching applications and make decisions sooner. Those are reasonable goals. I'm sure someone in a boardroom has a lovely PowerPoint explaining them.&lt;/p&gt;

&lt;p&gt;My interest is more personal.&lt;/p&gt;

&lt;p&gt;I like figuring out how to connect two systems that weren't designed to work together. I want control over the interface and what someone can do with the data. And I'd rather reuse an analytics engine's data models, measures and permissions than build all of that myself. That's what I enjoyed about connecting Qlik to Alexa.&lt;/p&gt;

&lt;p&gt;Today's AI tools give me a way to try that idea again, with less hand-written logic for interpreting questions.&lt;/p&gt;

&lt;p&gt;I still want to build applications where someone can ask about their data, investigate the answer and do something useful with it. Maybe above everything else l want to build something that leaves people asking "&lt;strong&gt;&lt;em&gt;How in the state of embed did you do that?&lt;/em&gt;&lt;/strong&gt;"&lt;/p&gt;

</description>
      <category>softwaredevelopment</category>
      <category>softwareengineering</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Everyone's a BI Developer Now. Apparently.</title>
      <dc:creator>The State of Embed</dc:creator>
      <pubDate>Wed, 14 Oct 2026 17:34:54 +0000</pubDate>
      <link>https://dev.to/etso/everyones-a-bi-developer-now-apparently-52hb</link>
      <guid>https://dev.to/etso/everyones-a-bi-developer-now-apparently-52hb</guid>
      <description>&lt;p&gt;&lt;em&gt;AI can build your dashboard in minutes. Knowing whether the numbers are right is another matter.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I love AI.&lt;/p&gt;

&lt;p&gt;I use it every day to write code, explore unfamiliar technologies, challenge my thinking and occasionally figure out why something I wrote three years ago makes absolutely no sense.&lt;br&gt;
I'm also using AI to help write this article, which is rather ironic considering what I'm about to say.&lt;/p&gt;

&lt;p&gt;But while I'm genuinely excited about what AI is making possible, &lt;strong&gt;I'm becoming increasingly uncomfortable with how quickly we're confusing the ability to &lt;em&gt;do something&lt;/em&gt; with the ability to &lt;em&gt;understand what we're doing&lt;/em&gt;.&lt;/strong&gt; And nowhere is that becoming more apparent than in business intelligence.&lt;/p&gt;

&lt;h2&gt;
  
  
  Whatever happened to data literacy?
&lt;/h2&gt;

&lt;p&gt;In my &lt;a href="https://dev.to/etso/how-did-we-get-here-a-decade-of-building-on-qlik-3hio"&gt;first article&lt;/a&gt;, I talked about Qlik's Data Literacy initiative and why I thought it was one of the better things the company had done.&lt;/p&gt;

&lt;p&gt;I genuinely believed in it.&lt;/p&gt;

&lt;p&gt;I was fortunate enough to have mentors who taught me about data, challenged how I approached problems and helped me build a career around something I initially knew very little about. Data literacy was about giving people the skills to question information, understand relationships and make better decisions.&lt;/p&gt;

&lt;p&gt;Fast-forward to today, and we've got LLMs that can interrogate databases, generate SQL, create visualisations and explain the results without requiring someone to understand much about the underlying technology.&lt;/p&gt;

&lt;p&gt;Recently, I watched a &lt;a href="https://youtu.be/ZxmCu3ymat8" rel="noopener noreferrer"&gt;demonstration of Claude building dashboards and publishing them to Tableau&lt;/a&gt;. And I thought it was brilliant. Someone who's never touched Tableau can potentially create something useful in an afternoon. Someone learning BI can experiment without spending weeks figuring out which buttons to click.&lt;/p&gt;

&lt;p&gt;I welcome that.&lt;/p&gt;

&lt;p&gt;But the ease with which we can now create analytics has me wondering whether we're starting to undervalue the skills needed to understand them. Because learning how to build a dashboard was never supposed to be the point of data literacy.&lt;/p&gt;

&lt;h2&gt;
  
  
  AI is a skill multiplier
&lt;/h2&gt;

&lt;p&gt;I've always maintained that AI is a skill multiplier. As a software engineer, I can use AI to build things faster, experiment with unfamiliar frameworks and learn concepts I might otherwise have spent days researching.&lt;/p&gt;

&lt;p&gt;Sometimes it writes better code than I would have. Other times it produces absolute nonsense, and I spend longer explaining why it's wrong than I would have spent writing the thing myself. But I'm generally learning throughout that process. I can review the code, challenge decisions and recognise when something doesn't look right. And when I don't understand something, I have enough foundational knowledge to know what I need to investigate.&lt;/p&gt;

&lt;p&gt;Now, give me the same AI tools and ask me to practise law. Would you trust me to represent you in court because I have a ChatGPT Pro subscription? I certainly wouldn't. So why should we approach business-critical analytics any differently?&lt;/p&gt;

&lt;p&gt;Someone who doesn't understand data modelling, business definitions or even basic statistical concepts can now generate a dashboard that looks remarkably professional. That dashboard might even be correct. But would they know if it wasn't?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Using AI to accelerate learning is very different from using AI to avoid learning.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;And I think that's a distinction worth keeping as these tools become more accessible.&lt;/p&gt;

&lt;h2&gt;
  
  
  Everyone's a BI developer now. Apparently.
&lt;/h2&gt;

&lt;p&gt;With tools like Claude, Tableau Agent, Power BI Copilot and Qlik Answers, the technical barriers to analytics development are getting smaller. I've spent more hours than I care to admit formatting charts, dealing with obscure APIs and trying to explain why someone's preferred dashboard layout is a terrible idea.&lt;/p&gt;

&lt;p&gt;If AI can take some of that work away, please do. But let's consider a fairly ordinary reporting scenario.&lt;/p&gt;

&lt;p&gt;Imagine asking an AI assistant to build a sales dashboard.&lt;br&gt;
It connects to your database, generates the queries and produces a rather impressive-looking dashboard showing that revenue has increased by 15%.&lt;/p&gt;

&lt;p&gt;Excellent.&lt;/p&gt;

&lt;p&gt;Except your business defines revenue differently from the way the model calculated it.&lt;/p&gt;

&lt;p&gt;Perhaps cancelled orders weren't excluded. Perhaps customers were duplicated because of an incorrect join. Or perhaps the comparison includes a reporting period that shouldn't be there. The dashboard still looks fantastic. The charts work. The filters work. The numbers even reconcile with the SQL the AI generated. Unfortunately, the SQL is answering the wrong question.&lt;/p&gt;

&lt;p&gt;Now, to be fair, some of the major BI platforms have already recognised this problem.&lt;/p&gt;

&lt;p&gt;Qlik Answers can work with existing application logic and governed measures. Microsoft provides guidance on preparing semantic models for Copilot. These aren't necessarily systems handing an LLM unrestricted access to a production database.&lt;/p&gt;

&lt;p&gt;Good.&lt;/p&gt;

&lt;p&gt;That's exactly the direction these tools should be heading. But someone still has to define those measures, maintain the models and understand the business rules. And more importantly, someone needs to recognise when a technically correct answer is answering the wrong question. &lt;/p&gt;

&lt;p&gt;We've spent years building semantic models, defining metrics, implementing access controls and establishing governance processes. I'd rather we didn't forget why we needed those things simply because someone demonstrated a particularly impressive dashboard in a five-minute video.&lt;/p&gt;

&lt;h2&gt;
  
  
  Trust, but verify
&lt;/h2&gt;

&lt;p&gt;Anyone who's worked in software engineering should be familiar with this concept. We review code, write tests and validate assumptions before releasing applications into production.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;At least, we're supposed to.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The fact that an LLM generated the code doesn't exempt it from review. So why would analytics be any different? If an AI-generated dashboard tells me revenue increased by 15%, I want to know;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Where that number came from?&lt;/li&gt;
&lt;li&gt;What measure was used? &lt;/li&gt;
&lt;li&gt;Were the correct filters applied? &lt;/li&gt;
&lt;li&gt;Are the joins producing duplicate records? &lt;/li&gt;
&lt;li&gt;Are we comparing the same reporting periods? &lt;/li&gt;
&lt;li&gt;Who actually owns the definition of revenue?&lt;/li&gt;
&lt;li&gt;And can I inspect the calculation rather than simply trusting the explanation the LLM has given me?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This doesn't have to mean manually checking every number on every dashboard. But for business-critical reporting, somebody should be able to demonstrate that the calculations are correct and the underlying assumptions are appropriate.&lt;/p&gt;

&lt;p&gt;Otherwise, all we've done is automate the creation of something we don't fully understand. Which brings me to another thing that's been bothering me.&lt;/p&gt;

&lt;h2&gt;
  
  
  Are we even asking the right questions?
&lt;/h2&gt;

&lt;p&gt;Conversational analytics.&lt;/p&gt;

&lt;p&gt;Qlik Answers, Tableau Agent, Power BI Copilot and the growing number of MCP integrations promising to let us talk to our data.&lt;/p&gt;

&lt;p&gt;I like the concept.&lt;/p&gt;

&lt;p&gt;Being able to ask questions in natural language instead of navigating through endless dashboards and filters is genuinely useful. And some products are already suggesting follow-up questions and helping users explore their data. But I've been thinking about the limits of that experience.&lt;/p&gt;

&lt;p&gt;Let's return to our sales dashboard.&lt;br&gt;
It tells me revenue increased by 15%.&lt;br&gt;
I ask the AI assistant why, and it explains that sales increased in three regions, with one product category performing particularly well.&lt;/p&gt;

&lt;p&gt;That sounds useful.&lt;br&gt;
And it is.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;But what if the more important observation is that profitability has fallen?&lt;/li&gt;
&lt;li&gt;What if that revenue increase came almost entirely from one customer?&lt;/li&gt;
&lt;li&gt;What if the underlying data is incomplete?&lt;/li&gt;
&lt;li&gt;Or what if we're comparing two periods that shouldn't be compared?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A good analyst might recognise those possibilities and investigate further. Someone without that experience might accept the explanation and move on.&lt;/p&gt;

&lt;p&gt;To be clear, modern AI systems can identify anomalies, suggest investigations and surface relationships that a human might miss. With the right context and analytical capabilities, they could do this exceptionally well. That's the part I'm excited about.&lt;/p&gt;

&lt;p&gt;But there's a difference between an assistant that helps me investigate my data and one that simply provides convincing answers to whatever I happen to ask.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What happens when people don't know which questions they should be asking?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It's something I keep coming back to.&lt;/p&gt;

&lt;p&gt;We've made it easier than ever to ask questions about data. I'm just not sure we've spent enough time considering whether that translates into better decisions. Sometimes we're simply giving people a more expensive way to confirm what they already believe.&lt;/p&gt;

&lt;h2&gt;
  
  
  Perhaps AI could actually make us more data literate
&lt;/h2&gt;

&lt;p&gt;This is where I think there's a genuinely interesting opportunity. Imagine an AI assistant that doesn't simply tell me revenue increased by 15%, but challenges how I'm interpreting that result.&lt;/p&gt;

&lt;p&gt;It might point out that one customer accounts for most of the growth. It might flag that profitability moved in the opposite direction. It might explain why the comparison is potentially misleading.&lt;/p&gt;

&lt;p&gt;Better still, it could show me the underlying calculations and help me understand why those details matter. I'd be far more interested in an assistant that challenges my assumptions than one that produces another beautiful chart.&lt;/p&gt;

&lt;p&gt;And perhaps that's how we should be thinking about AI and data literacy. &lt;/p&gt;

&lt;p&gt;I don't want to discourage anyone from experimenting with these technologies.&lt;/p&gt;

&lt;p&gt;Quite the opposite.&lt;/p&gt;

&lt;p&gt;If someone can build their first dashboard in an afternoon rather than spending weeks learning a BI platform, I think that's progress. If an experienced analyst can spend less time formatting visualisations and more time investigating what the data means, even better. But I don't think we should confuse removing technical barriers with removing the need for expertise.&lt;/p&gt;

&lt;p&gt;The tools are getting better. The opportunities are enormous.&lt;/p&gt;

&lt;p&gt;I'd just like us to put the same enthusiasm into helping people understand the results as we do into helping them generate them.&lt;/p&gt;

&lt;p&gt;Because ultimately, &lt;strong&gt;if AI gives everyone the ability to create analytics, who's making sure they understand what they've created?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;And would they recognise when it's wrong?&lt;/p&gt;

</description>
      <category>ai</category>
      <category>businessintelligence</category>
      <category>dataanalytics</category>
      <category>discuss</category>
    </item>
    <item>
      <title>Qlik Embed: The Replacement for Capability APIs That Still Isn’t Ready</title>
      <dc:creator>The State of Embed</dc:creator>
      <pubDate>Wed, 07 Oct 2026 18:35:21 +0000</pubDate>
      <link>https://dev.to/etso/qlik-embed-the-replacement-for-capability-apis-that-still-isnt-ready-9jf</link>
      <guid>https://dev.to/etso/qlik-embed-the-replacement-for-capability-apis-that-still-isnt-ready-9jf</guid>
      <description>&lt;p&gt;I want qlik-embed to work. A simpler integration, modern authentication and less code to maintain should make moving away from the Capability APIs an easy decision.&lt;/p&gt;

&lt;p&gt;I am using it now. OAuth integration was the deciding factor, with the push towards embedded AI adding another reason to switch. If I could have integrated OAuth as easily with the Capability APIs, I would have stayed with them without thinking twice.&lt;/p&gt;

&lt;p&gt;Qlik calls it its &lt;a href="https://qlik.dev/embed/qlik-embed/" rel="noopener noreferrer"&gt;primary embedding framework&lt;/a&gt;. For a straightforward chart, I can see why. For an application with extensions, maps, custom styling and its own error handling, the migration comes with compromises that are difficult to accept.&lt;/p&gt;

&lt;h2&gt;
  
  
  Performance improved, until I needed iframes
&lt;/h2&gt;

&lt;p&gt;My first attempts appeared to load the same scripts across multiple charts. The overhead was enough for me to shelve the switch. Performance has improved massively since then, and Qlik deserves credit for that.&lt;/p&gt;

&lt;p&gt;But the improvement feels uneven once I need &lt;code&gt;iframe="true"&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Legacy extensions still take me back to iframe rendering through &lt;code&gt;classic/chart&lt;/code&gt;. Qlik documents experimental &lt;code&gt;preview="true"&lt;/code&gt; support for extensions and more chart types in &lt;code&gt;analytics/chart&lt;/code&gt;. &lt;a href="https://qlik.dev/embed/qlik-embed/parameters/" rel="noopener noreferrer"&gt;UI documentation&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In my testing, that preview behaves as read-only. I cannot make selections, and it adds an unnecessary outline around the charts. I couldn't find either behaviour explained in the documentation. Broader chart support is of limited use when I lose the interaction that makes Qlik useful in the first place.&lt;/p&gt;

&lt;p&gt;The iframe fallback brings back the performance cost I was trying to escape.&lt;/p&gt;

&lt;h2&gt;
  
  
  Native charts should be the easy part
&lt;/h2&gt;

&lt;p&gt;Maps are my clearest example. They are native Qlik charts, so I expected them to work through the modern chart component.&lt;/p&gt;

&lt;p&gt;The current compatibility table explicitly excludes maps from standard &lt;code&gt;analytics/chart&lt;/code&gt; support. Its &lt;code&gt;classic/chart&lt;/code&gt; path requires an iframe. Qlik explains that tenant resources such as map tiles and uploaded images cannot currently be authenticated outside that mode. &lt;a href="https://qlik.dev/embed/foundational-knowledge/visualizations/" rel="noopener noreferrer"&gt;Chart compatibility&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That helps explain the image failures I've encountered. It doesn't make the outcome any less frustrating. A native chart that needs tenant-hosted assets can send me straight back to the heavier rendering path. For maps, already expensive in my applications, that extra overhead has made the experience unusable in some cases.&lt;/p&gt;

&lt;p&gt;Even branding can trigger the same compromise. Qlik documents that custom theme fonts need iframe mode when embedding across domains, with a possible performance impact. A font should not become an architectural decision. &lt;a href="https://qlik.dev/extend/create-custom-themes/" rel="noopener noreferrer"&gt;Custom theme documentation&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Less integration code, less control
&lt;/h2&gt;

&lt;p&gt;With the Capability APIs, I controlled more of the chart lifecycle. During migration, reproducing my global error handling, custom loading states, chart error messages and authentication retries has been harder than it should be.&lt;/p&gt;

&lt;p&gt;There is still API access. &lt;code&gt;refApi&lt;/code&gt; exposes the embedded app for operations such as selections and bookmarks. My frustration is with controlling the surrounding experience consistently. &lt;a href="https://qlik.dev/embed/qlik-embed/customize/interact-with-ref-api/" rel="noopener noreferrer"&gt;refApi documentation&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;One recent example was trying to remove or restyle Qlik's interaction blocker inside an embedded extension. My React application could reach the outer container, but the cross-origin iframe prevented it from changing the internal element. Moving that styling into Qlik meant depending on internal selectors that Qlik itself warns are unsupported. &lt;a href="https://qlik.dev/extend/create-custom-themes/" rel="noopener noreferrer"&gt;Qlik's CSS guidance&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A small visual adjustment had become a tenant-side workaround. That is the loss of control I mean.&lt;/p&gt;

&lt;h2&gt;
  
  
  New features make the choice feel compulsory
&lt;/h2&gt;

&lt;p&gt;Qlik Answers adds to the pressure. Its ready-made embedded experience is delivered through qlik-embed. It isn't something my existing Capability API integration simply gains. &lt;a href="https://qlik.dev/embed/qlik-embed/parameters/" rel="noopener noreferrer"&gt;Assistant components&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The documentation now labels &lt;code&gt;ai/assistant&lt;/code&gt; as legacy and lists &lt;code&gt;ai/agentic-assistant&lt;/code&gt; for the agentic experience. My rule with Qlik is simple. If it says legacy, I avoid it. In my experience, it brings more problems than it is worth.&lt;/p&gt;

&lt;p&gt;The assistant still feels bolted on in my application. Getting it to match the surrounding typography, spacing and branding has been harder than I expected.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://qlik.dev/apis/rest/assistants/" rel="noopener noreferrer"&gt;Answers APIs&lt;/a&gt; provide another route for building my own interface. I appreciate having that option. It also means taking on more development to get the integrated experience I wanted from the component.&lt;/p&gt;

&lt;h2&gt;
  
  
  There are reasons to keep going
&lt;/h2&gt;

&lt;p&gt;OAuth is a welcome standard authentication route, even though I've encountered session problems with Cloud hubs and embedded applications open together in the same browser. Qlik's &lt;a href="https://qlik.dev/embed/qlik-embed/authenticate/connect-qlik-embed/" rel="noopener noreferrer"&gt;authentication guidance&lt;/a&gt; is also far ahead of what I had a decade ago.&lt;/p&gt;

&lt;p&gt;A component with a few parameters is easier to start with than manually orchestrating visualization calls. Nebula.js and picasso.js give me another way to build charts with more control, if I have the patience or enough AI tokens to do the work. &lt;a href="https://qlik.dev/extend/extensions/nebula-js/quickstart/first-extension/" rel="noopener noreferrer"&gt;Nebula.js&lt;/a&gt; and &lt;a href="https://qlik.dev/toolkits/picasso-js/" rel="noopener noreferrer"&gt;picasso.js&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I use qlik-embed because it gives me the OAuth integration and access to new AI components I need. I still need reliable maps, images and extensions, alongside enough control to make them feel part of my application. Until those everyday requirements stop pushing me into costly workarounds, I can't call it a complete replacement.&lt;/p&gt;

</description>
      <category>bi</category>
      <category>webdev</category>
      <category>qlik</category>
      <category>analytics</category>
    </item>
    <item>
      <title>How Did We Get Here? A Decade of Building on Qlik</title>
      <dc:creator>The State of Embed</dc:creator>
      <pubDate>Wed, 30 Sep 2026 18:37:25 +0000</pubDate>
      <link>https://dev.to/etso/how-did-we-get-here-a-decade-of-building-on-qlik-3hio</link>
      <guid>https://dev.to/etso/how-did-we-get-here-a-decade-of-building-on-qlik-3hio</guid>
      <description>&lt;p&gt;Let me get something out of the way first.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This is a frustration post.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I have been working in software engineering for more than 13 years, and I have been building with and extending Qlik since Qlik Sense 2.2.&lt;/p&gt;

&lt;p&gt;I don't claim to know everything about Qlik. I don't claim to speak for every customer, developer, partner or user. But after spending the better part of a decade building real software around the platform, maintaining it, upgrading it, breaking it, fixing it and occasionally swearing at it, I think I have earned the right to have an opinion.&lt;/p&gt;

&lt;p&gt;And my opinion is that somewhere along the way, Qlik stopped feeling like a platform that wanted developers around.&lt;/p&gt;

&lt;p&gt;The frustrating part?&lt;/p&gt;

&lt;p&gt;It wasn't always like this.&lt;/p&gt;

&lt;h2&gt;
  
  
  When building on Qlik was genuinely exciting
&lt;/h2&gt;

&lt;p&gt;I started extending Qlik around the Qlik Sense 2.2 era, back in 2016.&lt;/p&gt;

&lt;p&gt;And honestly, it was exciting.&lt;/p&gt;

&lt;p&gt;Sense was still relatively young. The APIs weren't perfect. Documentation was very patchy. There were things you learned because somebody had figured them out, written a blog post about them, uploaded something to Qlik Branch or answered a question buried three pages deep in the Community. But that was fine. We understood that we were early.&lt;/p&gt;

&lt;p&gt;More importantly, the platform felt like it was &lt;strong&gt;ours to experiment with&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Nobody was writing love letters to AngularJS, but it was stable. RequireJS wasn't exactly the future of frontend development either, but again: it worked. And once you understood the Capability APIs, extensions, mashups and the Engine API, you could do some ridiculous things.&lt;/p&gt;

&lt;p&gt;Integrating D3?&lt;/p&gt;

&lt;p&gt;Sure.&lt;/p&gt;

&lt;p&gt;Building completely custom interfaces over the Qlik engine?&lt;/p&gt;

&lt;p&gt;Absolutely.&lt;/p&gt;

&lt;p&gt;Connecting Qlik to Amazon Alexa because somebody asked whether a dashboard could talk?&lt;/p&gt;

&lt;p&gt;Why not?&lt;/p&gt;

&lt;p&gt;There was a feeling that the Qlik engine was this incredibly powerful thing and the APIs were there to let you do whatever you could imagine with it.&lt;/p&gt;

&lt;p&gt;The sky genuinely felt like the limit.&lt;/p&gt;

&lt;p&gt;Qlik itself described Sense 2.2 as bringing "powerful new developer APIs and capabilities", including new app integration and visualization APIs. That was the direction of travel at the time: give developers more ways into the platform.&lt;/p&gt;

&lt;p&gt;And around that technology, a community was forming.&lt;/p&gt;

&lt;h2&gt;
  
  
  Qlik Branch actually felt like a community
&lt;/h2&gt;

&lt;p&gt;Qlik Branch mattered.&lt;/p&gt;

&lt;p&gt;Not because everything on it was production-ready. It wasn't.&lt;br&gt;
Not because every extension was brilliant. They weren't.&lt;br&gt;
It mattered because people were &lt;strong&gt;building things&lt;/strong&gt;.&lt;br&gt;
People were experimenting.&lt;/p&gt;

&lt;p&gt;People shared extensions, libraries, techniques and ideas simply because they thought they were useful.&lt;/p&gt;

&lt;p&gt;At the launch of the Trusted Extension Developer programme, Qlik itself described Branch as a community of around 30,000 members sharing and collaborating on open-source projects.&lt;/p&gt;

&lt;p&gt;Think about that for a second.&lt;/p&gt;

&lt;p&gt;Thirty thousand people around an analytics platform, many of them creating things that Qlik itself hadn't thought to build.&lt;br&gt;
That is incredibly valuable.&lt;br&gt;
There was a sense that you were part of something bigger than whatever project you happened to be working on that week.&lt;/p&gt;

&lt;p&gt;And the same Qlik also talked loudly about data literacy.&lt;br&gt;
I loved that initiative. Maybe more than most.&lt;/p&gt;

&lt;p&gt;I didn't come from some prestigious data science background. I was fortunate enough to have mentors who took the time to teach me about data, analytics and software. People shared what they knew with me, and eventually I built a career from it.&lt;/p&gt;

&lt;p&gt;So the idea that data literacy shouldn't belong to some small group of specialists genuinely meant something to me.&lt;/p&gt;

&lt;p&gt;Qlik made courses available for free through the Data Literacy Project and talked about making the ability to understand and challenge data accessible to everyone.&lt;/p&gt;

&lt;p&gt;That was a version of Qlik I could believe in.&lt;br&gt;
A great engine. An open developer ecosystem. Free educational initiatives. A growing community. It wasn't perfect. But it felt like it was going somewhere.&lt;/p&gt;

&lt;p&gt;Then something changed.&lt;/p&gt;

&lt;h2&gt;
  
  
  From community to programme
&lt;/h2&gt;

&lt;p&gt;Qlik Branch eventually gave way to a much more controlled ecosystem.&lt;/p&gt;

&lt;p&gt;The Trusted Extension Developer programme — TED — was supposed to provide confidence that extensions had been tested for quality, security and compatibility. On paper, that makes perfect sense.&lt;/p&gt;

&lt;p&gt;Enterprise customers need governance. You cannot install arbitrary JavaScript into production environments and hope for the best.&lt;br&gt;
My problem wasn't the idea. My problem was the experience.&lt;/p&gt;

&lt;p&gt;Getting through the process felt increasingly opaque. Applications appeared to disappear into a black hole. Waiting times could be ridiculous, and from where I was sitting it became much easier to find established vendors and partner-backed organisations in that ecosystem than the hobbyist developer who had built something interesting over a weekend.&lt;/p&gt;

&lt;p&gt;Maybe that wasn't intentional.&lt;/p&gt;

&lt;p&gt;But intent doesn't really matter when that is the experience your developer community has. The old feeling of:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Build something cool and show us what you've made."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;started feeling more like:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Who are you, who do you work for, and what commercial relationship do you have with us?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That is a very different developer ecosystem. And somewhere around that period I started feeling that Qlik was becoming less interested in developers who simply wanted to learn, experiment and build.&lt;/p&gt;

&lt;h2&gt;
  
  
  Then Qlik Sense Desktop stopped being free
&lt;/h2&gt;

&lt;p&gt;For me, this was one of the clearest signals. On 14 July 2020, free access to Qlik Sense Desktop ended. From that point onward you needed to authenticate it against an appropriate Qlik Sense Enterprise or SaaS environment.&lt;/p&gt;

&lt;p&gt;I remember thinking:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why would you put another barrier between developers and your technology?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A developer downloading your product, experimenting locally, breaking things and learning your APIs is not a cost centre. That person might be the reason your product gets introduced into their next company. That student might become a consultant. That hobbyist might build an extension thousands of customers eventually use.&lt;/p&gt;

&lt;p&gt;Microsoft understands this. AWS understands this. Cloudflare understands this. Stripe understands this. GitHub understands this. Developers need somewhere inexpensive — ideally free — to play.&lt;/p&gt;

&lt;p&gt;For a while Cloud still provided a reasonably accessible route in.&lt;br&gt;
Then that changed too. Today, Qlik Cloud Analytics Starter begins at $300 per month, billed annually, for ten users. That might be perfectly reasonable pricing for a small business buying an analytics platform.&lt;/p&gt;

&lt;p&gt;It is not a playground. There is a difference. And I think Qlik has increasingly forgotten it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Cloud-first era
&lt;/h2&gt;

&lt;p&gt;Then came the aggressive push toward Qlik Cloud. This is where things really started becoming difficult for me. I understand SaaS. I build SaaS applications. I understand rolling releases. I understand why vendors don't want dozens of supported versions running indefinitely. I understand CI/CD, feature flags, backwards compatibility and why sometimes things have to change.&lt;/p&gt;

&lt;p&gt;What I don't accept is treating production integrations like collateral damage. When I build an application against somebody else's API, I am trusting them. If that application serves thousands of users, their API becomes infrastructure.&lt;/p&gt;

&lt;p&gt;Changes matter.&lt;/p&gt;

&lt;p&gt;And over the years I have seen Cloud changes break integrations, extensions and embedded applications in ways that have required urgent investigation from developers who changed absolutely nothing themselves.&lt;/p&gt;

&lt;p&gt;To Qlik's credit, the developer changelog today is much better than what we had historically. Deprecations are increasingly documented and newer API namespace migrations promise defined notice periods.&lt;/p&gt;

&lt;p&gt;Good.&lt;/p&gt;

&lt;p&gt;That is exactly what should happen. But developers remember the incidents that got us here.&lt;/p&gt;

&lt;h2&gt;
  
  
  And then there was qlik-embed
&lt;/h2&gt;

&lt;p&gt;For years, a huge amount of custom Qlik development was built using the Capability APIs.&lt;/p&gt;

&lt;p&gt;Were they modern? Absolutely not.&lt;/p&gt;

&lt;p&gt;AngularJS and RequireJS should probably be displayed in a museum at this point. But the Capability APIs were known. We understood them.&lt;br&gt;
We understood their limitations. We understood their weird behaviours. And importantly, we had years of production knowledge around them.&lt;/p&gt;

&lt;p&gt;Then came the next answer: &lt;strong&gt;qlik-embed&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Qlik now explicitly describes qlik-embed as its primary embedding framework and recommends it for new integrations. Conceptually, I agree with the direction. Web components. Modern authentication.&lt;br&gt;
Better compatibility with browser restrictions around third-party cookies. React and Svelte integrations. A path away from AngularJS and RequireJS.&lt;/p&gt;

&lt;p&gt;All sensible.&lt;/p&gt;

&lt;p&gt;The problem is that developers don't build production applications from architecture diagrams.&lt;/p&gt;

&lt;p&gt;We build them from APIs.&lt;/p&gt;

&lt;p&gt;And especially during its earlier releases, trying to reproduce functionality that had become routine with the Capability APIs could become an exercise in figuring out whether something was unsupported, undocumented, broken or simply implemented completely differently.&lt;/p&gt;

&lt;p&gt;Even today I regularly find things that should be straightforward turning into experimentation. Error handling remains one of my biggest frustrations. You shouldn't need archaeological skills to figure out why an embedded image failed to render.&lt;/p&gt;

&lt;p&gt;You shouldn't need to experiment with three different approaches to perform something that sounds trivial.&lt;/p&gt;

&lt;p&gt;And performance remains something I watch very carefully.&lt;/p&gt;

&lt;p&gt;This is particularly frustrating because modern browser authentication is one of the strongest reasons to move. Qlik's current guidance pushes OAuth2 SPA and OAuth2 Impersonation for embedded Qlik Cloud applications, with qlik-embed sitting at the centre of that experience.&lt;/p&gt;

&lt;p&gt;So eventually you aren't really deciding whether you like the new framework. You're deciding how long you can avoid migrating.&lt;/p&gt;

&lt;h2&gt;
  
  
  The API-key incident that finally got me
&lt;/h2&gt;

&lt;p&gt;Then we come to the change that pushed me into actually starting this account, although it took me a while to get to it.&lt;/p&gt;

&lt;p&gt;API keys.&lt;/p&gt;

&lt;p&gt;Qlik deprecated the old Developer role and moved API-key management into the new &lt;strong&gt;Manage API keys&lt;/strong&gt; permission model. Security-wise? Fine. Actually, I agree with the principle.&lt;/p&gt;

&lt;p&gt;API-key creation should be governed by explicit permissions.&lt;/p&gt;

&lt;p&gt;The problem is what happened operationally.&lt;/p&gt;

&lt;p&gt;In environments I was responsible for, integrations that had been happily working suddenly weren't. Automations failed. Applications failed. Production systems that depended on API authentication needed intervention.&lt;/p&gt;

&lt;p&gt;And while trying to work out what had happened, we eventually discovered that permissions needed to be changed.&lt;/p&gt;

&lt;p&gt;Qlik's own changelog now acknowledges that users and groups which weren't migrated to the new Manage API keys permission &lt;strong&gt;may experience disruptions&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That sentence is doing quite a lot of work.&lt;/p&gt;

&lt;p&gt;Because an "API disruption" isn't an abstract inconvenience when somebody has built production software around your platform. It means engineers being pulled into incidents. It means customers asking why something stopped working. It means somebody explaining that nothing changed in &lt;em&gt;our&lt;/em&gt; release, but something changed underneath us.&lt;/p&gt;

&lt;p&gt;And every time this happens, trust gets slightly smaller.&lt;/p&gt;

&lt;h2&gt;
  
  
  The frustrating thing is that Qlik is still brilliant
&lt;/h2&gt;

&lt;p&gt;This is where I probably confuse anyone expecting this account to simply be a Qlik hate blog.&lt;/p&gt;

&lt;p&gt;I don't hate Qlik. Quite the opposite. &lt;strong&gt;I think the Qlik engine is fantastic.&lt;/strong&gt; The associative model remains one of the most interesting ideas in analytics. There are things I can do in Qlik that remain irritatingly difficult in competing products.&lt;/p&gt;

&lt;p&gt;Even outside the Qlik community, you still see developers and BI practitioners saying exactly that. In one r/BusinessIntelligence discussion about moving from Tableau to Qlik, developers praised the associative engine and Qlik's flexibility.&lt;/p&gt;

&lt;p&gt;In another discussion comparing alternatives to Power BI, people specifically called out Qlik's JavaScript embedding capabilities and Nebula as strengths.&lt;/p&gt;

&lt;p&gt;So this isn't nostalgia from somebody refusing to learn another tool. The technology has real strengths. Which makes watching the surrounding developer experience deteriorate even more frustrating.&lt;/p&gt;

&lt;h2&gt;
  
  
  And now, obviously, AI
&lt;/h2&gt;

&lt;p&gt;Because apparently no software article written in 2026 can avoid AI. Qlik has Qlik Answers. Qlik has agents. Qlik has MCP.&lt;/p&gt;

&lt;p&gt;And to be fair, giving external LLMs access to governed Qlik data through MCP is genuinely interesting. I like MCP. I like the idea of connecting my own model to my Qlik tenant.&lt;/p&gt;

&lt;p&gt;But even here there is a Qlik-shaped catch. Your LLM costs money.&lt;br&gt;
Fine. Then your Qlik MCP usage also consumes Qlik Answers capacity.&lt;/p&gt;

&lt;p&gt;Qlik's own MCP FAQ says that &lt;strong&gt;five MCP tool calls consume one Qlik question&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;And your LLM subscription or API usage is separate. As of writing, Qlik Cloud Premium includes 1,000 Answers/MCP questions per month.&lt;br&gt;
Which means developers building agents need to think very carefully about tool-call design.&lt;/p&gt;

&lt;p&gt;An agent that wanders through tools unnecessarily isn't merely inefficient. It is spending your Qlik capacity while it thinks.&lt;br&gt;
Build an agent badly enough and you can burn through a resource shared by everyone else surprisingly quickly.&lt;/p&gt;

&lt;p&gt;This is the kind of detail that disappears underneath the words &lt;strong&gt;AI-powered analytics&lt;/strong&gt; on a pricing page. It is also exactly the kind of thing developers actually need to talk about.&lt;/p&gt;

&lt;h2&gt;
  
  
  I'm clearly not the only person wondering what happened
&lt;/h2&gt;

&lt;p&gt;One thing that pushed me toward writing publicly was looking outside the traditional Qlik bubble.&lt;/p&gt;

&lt;p&gt;There was a 2024 Reddit thread from someone moving from Power BI to Qlik who basically said:&lt;/p&gt;

&lt;p&gt;Where is everybody?&lt;/p&gt;

&lt;p&gt;They could find endless Power BI material, but struggled to find equivalent Qlik communities, YouTube channels and independent resources.&lt;/p&gt;

&lt;p&gt;Another developer replied that the Microsoft ecosystem simply has far more people publicly advocating for and teaching the platform.&lt;/p&gt;

&lt;p&gt;That matters.&lt;/p&gt;

&lt;p&gt;Communities don't die because somebody closes a forum. They die slowly. One person stops writing extensions. Another stops blogging. Someone else decides maintaining their open-source library isn't worth it. A consultant stops recommending the platform.&lt;/p&gt;

&lt;p&gt;A developer looking for something to learn picks Power BI instead because they can download it and find 5,000 tutorials.&lt;/p&gt;

&lt;p&gt;Eventually somebody asks:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Where did all the developers go?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Perhaps the better question is:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What reasons did we give them to stay?&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  So what is &lt;em&gt;The State of Embed&lt;/em&gt;?
&lt;/h2&gt;

&lt;p&gt;I don't know how much any of this can actually change. I'm one developer on the internet writing under a pseudonym.&lt;/p&gt;

&lt;p&gt;Qlik is a large company with enterprise customers, revenue targets, shareholders, sales organisations, product roadmaps and priorities that are significantly bigger than whether I enjoyed building mashups in 2016.&lt;/p&gt;

&lt;p&gt;I understand that.&lt;/p&gt;

&lt;p&gt;But I also don't think that means those of us actually building on these platforms should stop talking about what they are like to use.&lt;/p&gt;

&lt;p&gt;And that is really why this account exists.&lt;/p&gt;

&lt;p&gt;This isn't going to be a weekly exercise in shouting &lt;strong&gt;Qlik bad, Power BI good&lt;/strong&gt; or &lt;strong&gt;Tableau good, Qlik bad&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;They all have problems. Trust me, we'll get to them.&lt;/p&gt;

&lt;p&gt;I want to talk about embedded analytics from the perspective that rarely makes it into vendor presentations:&lt;/p&gt;

&lt;p&gt;The person who actually has to build the thing. What works. What doesn't. What the documentation forgot to mention. What breaks in production. &lt;/p&gt;

&lt;p&gt;What looks fantastic in a demo but becomes painful when you need to support 5,000 users. The API that saved three weeks of development. The API that stole three weeks of development. The clever workaround you probably shouldn't need. And occasionally, yes, the things that annoy me enough to write several thousand words about them.&lt;/p&gt;

&lt;p&gt;Because the criticism here comes from somewhere important:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I still care about the product.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I want Qlik to be better. I want Qlik to be a platform developers are excited to discover again. I want someone with curiosity and a laptop to be able to stumble into Qlik, build something completely unnecessary with it on a Saturday afternoon, publish it on Sunday and accidentally start a career.&lt;/p&gt;

&lt;p&gt;That world existed once. &lt;/p&gt;

&lt;p&gt;I know because it helped create mine. Maybe we can't get all of it back. But at the very least, those of us who have been here long enough should stop pretending that nothing was lost along the way.&lt;/p&gt;

&lt;p&gt;So this is &lt;em&gt;The State of Embed&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;No sales deck.&lt;br&gt;
No Gartner quadrant.&lt;br&gt;
No partner-approved messaging.&lt;/p&gt;

&lt;p&gt;Just what happens when the dashboard ends...&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;and the code begins.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>career</category>
      <category>software</category>
      <category>softwareengineering</category>
      <category>qlik</category>
    </item>
  </channel>
</rss>
