Skip to main content
Latest release:

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.

📊 Upgraded SQL cells – now with charts!

We’ve made it easier to explore the results of a SQL query visually:

You can now create a chart directly in the SQL results section by clicking the creatively titled “Chart” button in the top right! These charts operate just like a standalone chart cell, so you can even drag them directly into the app builder.

While we were here, we also gave SQL cells a small makeover, cleaning up some of the buttons and simplifying the layout 🙂.

... and a revamped filter UX 🕶️

We’ve overhauled Table display filters to make removing nulls, outliers, or your own company’s email addresses a breeze. You can now filter data using the “Filter” bar, any column header, or even by right clicking on a value of interest. These filters remain visible at the top of the table so they can be easily reviewed and removed.

Table filters now also apply to the returned dataframe, so downstream cells will use the filtered data. If you were using table filters prior to this, you’ll have the opportunity to opt into this new behavior.

We also added the “Filter” bar to our Chart Cell to make them work seamlessly when switching between the results of a query and a chart, and to provide a unified UX across the product.

Bonus: these filters support Jinja inputs too (learn more).

… and a bunch of other improvements to tables 🏓

We also snuck in a few extra goodies to Table displays:

JSON columns got a glow up

Columns that contain arrays or objects now have a useful “Expand” button, so that you can view the contents of the column without having to scroll or copy paste into a text editor.

📋 Copy to clipboard

If the table you’re rendering is greater than 50MB, you can now copy the contents directly to your clipboard with a handy button.

Please be aware that every time you copy data from Hex directly to Excel, my company-mandated neural lace hits me with 10,000 volts. I’m not saying don’t do it, I just want you to have all the facts.

For real, though: If you find yourself frequently copying data out to another tool to do something, please don’t hesitate to let us know how we can make that something easier to do in Hex!

Copy to clipboard

↕️ Vertically resizable tables

You can vertically resize Table display cells (or SQL cells in Display mode), and then scroll within the configured height to view your results. This also works in the app builder, making it a lot easier to build neatly organized table/chart grids.

We’ve also changed the default number of rows to 50 for new cells 🎉.

📌 Column pinning

You can now pin a column in a table, to make it stay on screen as you scroll horizontally. Especially if you are on team OBT (see: ship logbook data from the intro), this makes life a lot easier.

Pinning a column in a table display

🔢 No more row numbers in CSV exports

We had a few customers share that they didn’t love that our exported CSVs includes row numbers in the file. We also asked our internal data team for their thoughts, and they didn’t hold back: “Frustrating AF”, “hate them”, “unprofessional”, “I always delete the row numbers”, and “no row nums. not ever”.

So uh, we went ahead and removed those pesky row numbers from CSV exports. They’re technically still generated, but at the last second before export we divert them to a nice big spreadsheet in the cloud where they can run and play together all day long.

Other improvements

  • Snappier chart edits: Hex now detects whether the changes you’re making to a chart affect the underlying data, or is purely a visual change (for example, renaming an axis, or changing a series color). If it’s the latter, we skip the data processing step, resulting in faster edits.

  • Snowpark is now enabled in Python 3.9 and 3.10 images. On the Snowflake side, this is still in private preview, so reach out to your Snowflake account rep to get it enabled.

  • Published app actions: We’ve added a cute lil button to make it easier to comment and share links to elements in a published app.

    The new action button

🐳 Custom Docker Images

You can now provide your own custom Docker images to power Hex projects, making it a one-click process to spin up the tailored environments your company needs. Bring us your custom packages, your complex dependencies, your powerful environments yearning to run in the cloud, and we’ll spin them up for you.

Custom docker image configuration

If you’ve already got your custom docker images in a repository (Dockerhub and AWS ECR are supported), it’s just a few clicks to choose which image you’d like to use in Hex and create a prewarmed pool of kernels. There’s a detailed walkthrough of this process in the custom images documentation.

There’s also support for setting up Python environments with Conda to help you further manage environments.

This is a paid feature, available for workspaces on the Teams plan and above. If you’re interested in using custom images, please reach out to your Hex account contact or [email protected].

🗃️ External file integrations

S3

Access S3 files directly from Hex, just like a locally uploaded file. Once an S3 bucket is configured in Workspace Assets settings, you’ll be able to browse buckets and import files right from the Files sidebar of any Hex project.

You’re also able to natively write files to S3 buckets without any configuration or manual upload. Using a standard file.write() or dataframe.to_csv() with an external-files/s3/<your_bucket>/<your_filename> path will just work— provided your S3 credentials have the appropriate permissions and writeback is enabled in Hex bucket settings.

Find more details in the documentation.

Google Drive 👋 coming soon 👋

Coming any day now is an identical integration for Google Drive, if that’s your cloud file repository of choice. We’ll add a reminder to the product updates when it’s fully live, but it pairs so nicely with S3 that we had to mention it now. It will work in the same way and with the same UI as the S3 integration.

And in the interim, if you need to access GDrive… the beauty of Hex is that you can can always write code that goes and does whatever you need! We have a tutorial on this very subject, but you could also ask Magic to help 🪄

The new blank project screen

Magic for every stack

Speaking of Magic… Magic is now available for customers on our EU multi-tenant stack. If you’ve been waiting for access on an EU workspace, you’ll now find the Magic toggle in your workspace and/or user settings.

PS: For the Magic power users, there’s also some new UI additions that let you customize your default Magic response settings:

The new blank project screen

Other improvements

  • Added to a project you’d prefer to not be a part of? You now have the option of removing yourself.

  • We made (and are still making) a TON of other improvements to remove some bottlenecks and unnecessary lags in Hex projects. The nitty gritty of it is pretty complicated, so for now, we’ll just lump this into “general performance improvements”. More to come on this front once we’re done!