Skip to main content
Latest release:

The Hex team was at dbt Coalesce in San Diego last week, and I had the tremendous good fortune to meet a ton of you in person! Thank you so much for coming by and saying hello 🙇.

Also at Coalesce:

  • Hex won dbt’s Innovation Partner of the Year Award for our Semantic Layer integration (blog).
  • Me and my colleague Matt spoke about the metadata architecture behind Hex Magic (recording).
  • Amanda from our data team gave a fantastic talk about how we do marketing attribution (recording).
  • Honestly just a ton of great talks that have nothing to do with Hex! They’re all on Youtube— binge away.

But that was last week, and I think we agree: the past is over. This week, I’ve got some lovely new Hex features for you across the entire platform, from dbt to debugging. Read on for the updates!

📏 dbt Semantic Layer Cell

Hex’s integration with the dbt Semantic Layer makes it easy to bring trusted metrics and dimensions into your Hex projects, with a drag & drop UI that now features metric search and a snazzy improved layout.

We’ve completely overhauled this cell to support the new v1.6 of the Semantic Layer and use the new dbt Discovery API. We’ve also opened this integration up to more data connections: It’s now available for BigQuery, Redshift, Databricks, and Snowflake connections!

With this cell, technical users can have confidence that the foundational data for their analyses are standardized and approved, and less technical users can use the simple UI to explore company data without writing any code.

Check out the docs to see how to set it up.

☃️ (even more) Native Snowpark DataFrames

Hex already had the best environment for Snowpark work, with one-click sessions and the ability to initiate Snowpark workflows from a SQL cell. Now, Snowpark DataFrames in Hex have the same level of support as pandas DataFrames, fully supporting:

  • Chart and Table display cells
  • Pivot, Filter, and Writeback cells
  • Polyglot SQL → Python → SQL workflows. Just like other DataFrames, now you can query a Snowpark df with SQL, operate on it in Python, query that output df in SQL, and so on.

To answer your first question: We’re not just doing a df.toPandas() in the background! When you use a Snowpark DataFrame in a native Hex cell, the full results are still not pulled into memory— Hex pushes down any chart aggregations, transformation logic, or writeback instructions all the way down to Snowflake, and only fetches that operation’s results into memory.

🐛 Debug mode

Using debug mode to fix a published app.

It can be hard to figure out what’s wrong with a broken Hex app! You can’t be sure if changes have been made to the notebook since it was last published. You restart & run all, but don’t see the problem— wait, what input parameter values were you using? It can be a total slog.

Debug mode fixes that. Now, if you get an error in a published app, you can enter Debug mode. This gives you a side-by-side view of the app version that’s erroring (with all the input parameters and filters that might be causing problems) and the notebook that reflects that specific app state.

I debugged four old broken apps to test this, and it felt so natural! It was so easy I was actually sort of unimpressed, until I turned the feature off and went to try the old way— and genuinely couldn’t figure out the problem with an app.

Other improvements

  • We’ve made improvements to workspace search to better support partial matches. “Rev” is now more likely to match “Revenue”, and so on. We’re continuing to work on improving search!
  • We now have multi-tenant HIPAA compliant hosting! Previously you had to be a single-tenant customer to get this, which can come with a lot of baggage. We’re proud to now offer it in a more standard multi-tenant environment.
  • Last week was “Hack Week” for the Hex team… so expect lots of interesting little things coming down the line. If you can guess which items from the next couple product updates are the results of Hack Week and not regularly scheduled product programming, I’ll mail you some Hex swag.

Today, we’re introducing a new version of Hex, and buckle up, because this release has everything. Cutting-edge AI features? Check. Big foundational re-writes? You bet. Shiny new design? Of course! It’s a whole version number – what’d you expect??

If you missed the live event earlier, you can watch the replay and read our blog post here.It has tons of exciting, high quality graphics that explain these features really well, so I really recommend you check it out!

This changelog entry will walk through the greatest hits— but fair warning: this is still by far the longest changelog in Hex history!

Buckle up.

🔮 Magical AI assist features

🤖 Magic Analysis

Hex can now kickstart a whole analysis for you with AI.

Enter a prompt, and Magic Analysis returns chains of cells – including queries, explanation, and visualization. Hex’s notebook format really shines here, combining the best of a chat UI with a powerful, functional editing experience.

This is in private beta today. To get more of a sense of what it can do, you can watch a detailed demo at hex.tech/magic!

📊 Magic Charts

Magic Charts make it effortless to build and edit beautiful visualizations— the name says it all! Type a prompt, get a chart.

I personally love using this to make bulk edits to charts, changing 10 things about the config without having to navigate any menus.

🗃️ Data Manager

The Data Manager lets you control all the metadata that powers Magic for your workspace. It shows you all the information Hex automatically pulls from your dbt docs and warehouses, and lets you add further context, guidance, and prioritization.

This lets you dial in the behavior of Magic to be just right for your team. Speaking from our internal experience, a little work here can have a tremendous impact on the quality of AI results.

The Data Manager is currently in private beta.

🏗️ An all-new app builder

🎨 New layout engine

The new App builder is now a full editing experience in its own right. You can add new elements directly from here, drag/drop and resize with more fidelity and even – yes! finally! – edit text directly in-line.

I still love my notebook, but I know there are many of you that are really excited to be able to build whole projects right from the app builder!

🌪️ Powerful, automatic filters

Hex 3.0 includes huge improvements to filtering workflows. When building an app, editors can tie multiple app elements to one globally accessible filter, so that end users can more easily slice and dice reports in specific ways.

These are super easy to configure. Select a few elements, and just click one button to add a new filter.

And filtering works for end users too, with zero config required. Viewers can visually filter any chart in any app, and automagically cross filter other elements without any backend mapping.

Filters are rolling out over the next week.

🧭 Explore & View

Astute readers will remember this as a sneak preview from last release notes, but it's also a key part of the Hex 3.0 package.

Every chart and table in a published Hex app is now a fully interactive, drillable, filterable, and explorable jumping off point for end users to answer their own questions.

Click in to any element to remix the data just how you want— change how it's sliced, add filters, or even drill down into each of the underlying data points.

💅 New coat of paint

Our team has also redesigned the entire core workspace with an eye towards making it cleaner, simpler, and less cluttered (but no less powerful!). You’ll find a cleaner UX, with some new styles, and little surprises.

We’ve been using it internally for a few weeks– it’s a little bit of adjustment, but then feels super natural.

🏎️ Powerful new compute model

👯 An all-new, parallel compute engine

Hex 3.0 leverages our past work on the dependency graph to become the first notebook to support parallel execution. We use the project's DAG to determine which cells must be run sequentially, and which ones can be safely run at the same time.

This is a night-and-day performance difference, especially in complex apps with lots of warehouse SQL queries.

This works for SQL cells starting today, and we're expanding support to most cell types soon.

🐍 Native Python dataframe pushdown

Cloud data warehouses have made it really easy to work with data of tremendous scale, pushing any analyst's SQL compute from their laptop into an unimaginably powerful warehouse backend. Python... has remained trickier at scale, still requiring a lot of manual gymnastics and hand-rolled connections.

Now, Hex 3.0 makes it just as simple to push down Python to the warehouse! This means you can run massive data workflows and ML pipelines in Hex, using the leading cloud data infrastructure solutions, as seamlessly as if they were local dataframes.

We are launching this with two great partners— Snowflake and Google BigQuery— and we’ll be adding full Spark support as well.

You made it to the end! I am so excited for you to get your hands on the new Hex. Let us know what you think of it 🙂.

Today we’re shipping some huge improvements to make building and sharing beautiful, interactive experiences in Hex even better.

App viewers can now View and Explore the underlying data of charts and tables to quickly investigate an anomaly, look in more detail at a trend, or start their own downstream analysis— without having to start from scratch or make new data requests.

We’ve also updated our compute engine, so that all these app interactions are more performant and intuitive.

👀 View underlying data

App viewers can now see the underlying data behind charts by clicking the “View data” button.

View includes all columns in the underlying data, not just the ones being visualized! This lets you build beautiful, focused charts without worrying about how to provide access to the entire dataset.

This is only available to app viewers with “Can View” permissions, so you don’t need to worry about exposing raw data to everyone.

For charts that use aggregation or datetime truncation, View data gives you drill-down access to the unaggregated raw data. This means users can find a particular row, download the entire dataset, or use it to… drumroll please… Explore!

🧭 Explore

Every chart and table is now an interactive jumping-off point for app viewers to explore and answer their own questions.

Users with editor seats will see a new Explore icon on published charts and tables. This opens a powerful exploration interface that lets you access the raw underlying data, add your own filters, and completely reshape and rebuild visualizations.

At first glance it looks like the standard Hex chart editor, but I guarantee you will be amazed at the kinds of questions you can answer with just this interface.

Found an interesting thread to pull on? Any exploration can be promoted to a full-fledged project with one click, so you can go as far down the rabbit hole as you need to.

Users must have a Hex editor seat as well as “Can view” permissions on an app to Explore.

🏃‍♀️ More intelligent re-runs

When you change multiple inputs in an app, Hex’s compute engine will now prioritize the last selection, and cancel the other queued runs.

Previously, if you made several input changes in an app, Hex would queue up one run of the project for each permutation of inputs. This meant you’d have to wait for all those runs to finish, bashfully flickering their already-outdated results at you until they were replaced by the final one.

Now, Hex is clever enough to cancel all outdated runs and just run the final version. This makes for way snappier interactivity, and lets you build apps with lots of inputs without worrying about the user experience.

Bonus: The compute engine also now ignores any SQL cells in your project that aren’t necessary to power the published app. Made possible by a little DAG magic, this means your leftover scratch queries won’t accidentally make an app slower for end users— and hey, you might even save a few bucks on your warehouse bill 🙂.

📰 Edit from app layout

We’ve improved the cell editing experience you get on the App Layout page.

Text and markdown cells can now be inline edited right from this view, so you don’t have to go back to the Notebook view to edit that placeholder text.

We’ve also made improvements to other cell types: Inputs and Single Value visualizations can also be edited inline, and all other cells can be edited in a full screen popup by clicking the ⚙️ icon.

Other improvements

  • It’s now possible to publish a project right from the scheduled run dialog, instead of getting an unhelpful “You need to publish this app first” message.

  • The history sidebar can be filtered to only show saved versions, making it easier to revert or browse past work.

One of the best parts of this job is seeing all the amazing, creative, beautiful things people build and share in Hex. You all put a ton of energy and love into your work – and you want it to look great!

So today, we’re rolling out a couple of big improvements to your apps that’ll help you make them snazzier than ever. You can add tabs to better organize complex projects, and our drag-and-drop layout engine has a bunch of improvements to make it even easier to make pixel-perfect reports.

We’ve also made massive improvements to SQL typeahead and schema search speed. It feels great, and you’ll notice the difference right away.

🗂️  Organize apps with tabs

Hex is great for building complex projects with lots of inputs and outputs – but when it comes time to share, the single scrolling container isn’t always the best way to lay things out.

Now, you can use Tabs to organize your outputs into, uh... tabbed pages… or “tabs”, for short, to help folks navigate your more complex apps.

You can add, re-order, and name tabs from the top of the editor, or via the redesigned App sidebar on the right.

Configuring a new tab.

It’s easy to drag-and-drop cells across tabs, and you can even add cells to multiple tabs. For example, if you have a filter that affects a bunch of downstream charts, you can add it to multiple tabs and it’ll be synced automatically, just as you’d expect.

Configuring a new tab.

🎨 More layout improvements

We’re also upgrading the core report building experience!

We updated the layout engine powering all your apps to make it easier to create pixel-perfect layouts, including adding new guides for re-sizing and drag affordances.

Finally, all settings relevant to your published app have been consolidated into a single sidebar. you can adjust settings for runs, layouts, and – yes – tabs.

Here’s a one minute clip from Melissa, the engineer who worked on this, showing off the improvements!

🚅 SQL autocomplete speed

If you’ve noticed snappier autocomplete and schema search lately, no, you didn’t just get lucky. Over the past few weeks we’ve been rolling out an architecture change that makes this MUCH faster.

We’ll let the data tell the story (can you tell what day we cut over?!):

p95 times for autocomplete

The larger your database, the more likely you’ll be to notice this speedup – our data team certainly has!

Happy data team :)

This applies to both in-cell SQL autocomplete, and the schema search in the side bar. Oh, and now autocomplete matches any part of the object, so you can just type name  and get first_name  as a suggestion.

Editors note: Once upon a time I attempted to make this change myself, but literally gave myself a migraine trying to understand the codebase and had to go to bed early, without any supper. Will stick to marketing 👍.

We’re also progressively rolling out changes to make schema browser refreshes actual orders of magnitude faster — if this hasn’t hit your workspace yet, you can expect it in the next week or so. You'll know when it lands for you because you'll see one initial refresh that will actually take longer than usual, and then subsequent ones will be lightning quick.

I hope that this all helps you feel… complete. I certainly do.

Other improvements

  • We fixed an issue that caused private slack channels to not show up as scheduled run destinations.

  • We fixed some errors that were appearing when chart cells were ejected to Python. Custom SQL formatting was temporarily disabled while a security patch was applied to the open source library we use. It’s now re-enabled!

  • We pulled some strings, called in some favors, and now dataframes printed with a custom df.style() can display emoji 🤪 .

There’s two main feedback loops that data folks spend most of their time in:

The core analytical feedback loop: ask question of data -> improve understanding -> ask a better question -> repeat until satisfied.

The stakeholder feedback loop: stakeholder asks question -> data team builds report to answer it -> stakeholder requests changes → repeat until satisfied.

Almost every feature we add to Hex aims to make those feedback loops quicker and more delightful. Today, we’re making some big improvements to chart cells that make both these feedback loops way faster!

🌀 Filter charts by… filtering in charts!

Chart cells in Hex are now fully interactive, both in the Notebook view and in published apps.

Hover over a chart legend to highlight a series. Click the legend, or click and drag directly on the chart to select data. Then choose to keep or remove your selection to filter the chart.

How does this improve the core analytical feedback loop?

Working on an analysis in Notebook view, you can rapidly iterate and explore data visually without rewriting SQL or running new queries. You can also use the filtered data in downstream cells to see different dimensions of the data with just one quick brush gesture.

How does this improve the stakeholder feedback loop?

Viewers of published apps can customize and drill into specific aspects of reports to answer their questions without having to ask for help from the data team. No more “this looks great, but can you also make a version with just the last 30 days?”

Depending on how you set up your app on the backend, you can give end users a ton of interactive latitude in reports:

Sharp-eyed users will recognize that an opt-in version of this has existed for a couple of months, under the moniker “Visual filtering”. We’ve taken the foundation of visual filtering, improved on it, and enabled it by default with this release. You can find information on the specific differences in the docs.

⌛ Scheduled schema browser refreshes

You can now refresh the schema browser’s metadata for any data connection on a schedule. Pro tip: schedule this for after hours so that by the time you sit down at your computer to write some world changing SQL, you’ve got up to date metadata at your fingertips.

The new schema refresh options

📊 More chart improvements!

While we were making our chart legends interactive, we also fixed some UX issues with them. Series names that truncate too early, or entries that scroll off the page are a thing of the past Legendary.

Improved chart legend wrapping instead of truncating

Chart cells have more helpful error states: if a column that was being used in a chart is removed from your dataframe, we’ll let you know that the column no longer exists rather than printing a gobbledygook error. Even if you swap dataframes entirely, we’ll try to preserve as much of your chart configuration as possible.

Improved chart cell error state

And one more fix for chart cells: charts that have more than 20 series in the legend now have a more useful tooltip! Since we can’t fit all 20 series in the tooltip, we’ll show you the closest series value to your cursor 😮‍💨.

💫 Hex Magic now incorporates dbt Metadata

If you’re using the dbt Cloud metadata integration, we now use the descriptions from your dbt project to help generate better Magic responses.

If you haven’t enabled this yet, you can configure the dbt integration by adding the details directly on your data connection, from the Data sources page of the admin panel.

⚡ New connectors: Materialize & Starburst

We now have a dedicated connector for Materialize, for those of you present in the here and now… and a dedicated connector for Starburst, for those of you living that lake life.

Other improvements

  • We fixed a bug that meant the font sometimes changed as you were typing code. One of those bugs where once you saw it, you couldn’t unsee it. Well, until now, cause we just fixed it. So you won’t ever see it again. Is that the same thing as unseeing?

  • When setting up a scheduled run, we’ve added a handy little “Test scheduled run button” so you don’t have to wait until your next run to see what it looks like

We’re shipping some great improvements to scheduled runs and notifications today, making it easier than ever to integrate data from Hex into your core workflows. We’ve been testing this internally for a little while, so before I explain the specifics, here’s a peek at how some of the Hex team has been using it:

Tahlia, lead product expert: “I've scheduled a weekly run of our team metrics project so that everyone can get a peek into trending ticket volume/rates etc. Love that everyone can get the tl;dr without having to remember to go seek out that information one-off!”

Caleb, data analyst: “I have an app that allows us to see if data enrichment is working properly. It’s scheduled so we can take a quick peek at the screenshot and make sure everything is on track. It's a big workflow enhancement to keep slack as the central place for alerting and communication.”

Andrew, head of sales: “first thing I do every morning is open up #daily-mrr-updates"

I'm excited for you all to get your hands on this 🙂

🔔 Slack channel notifications for scheduled runs

Need to keep your team in the loop on the latest insights from Hex? It’s now easier than ever with scheduled run Slack notifications!

You can now configure a notification to send to a Slack channel upon completion (or failure) of your scheduled run, including an app screenshot.

A Hex app scheduled to Slack

🗓️ Revamped scheduler

We’ve also made scheduled runs easier to configure, and given you much more fine-tuned control over notifications. For each notification, you can now individually select sending criteria, recipients, and whether to include a screenshot.

It’s also a lot easier to temporarily enable/disable notifications, with a simple toggle switch on each.

The new schedule modal

🤖 Trigger notifications via the Hex API

And for those using orchestration tools or other API based methods to keep projects fresh, we’ve updated our RunProject API so you can send notifications to users, groups, or slack channels upon completion! Just add a notifications param with your configuration— see the docs for details.

We’ve also updated our managed airflow and dagster packages to support this functionality.

Trigger a notification from the RunProject API

Other improvements

  • Better Screenshots: We’ve updated the screenshot service powering all those notifications to improve image quality, and fix some bugs with sizing.
  • Magic project names: Sometimes, inspiration just wont strike when you need it. Add description... got you down on Untitled project? Magic is here for you! Go ahead and click those Magic icons next to the Project title or description to automatically generate helpful text based on the entire project’s contents.