Skip to main content
Latest release:

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!

🔮 Hex Magic Public Beta

We’re very excited to announce that Hex Magic – our suite of AI augmentation tools – is moving into public beta. This gives all Hex users a powerful set of AI-driven features to help you do more with data.

Magic lets you use AI to generate, edit, debug, and document code right from your Hex project, with a deep contextual understanding of your code and data.

Opt-in to Hex Magic by visiting your Hex user preferences (Settings → Preferences) and toggling on the Magic option. Users on Pro, Teams, and Enterprise plans get unlimited Magic usage, and users on Community have 100 Magic requests per month.

As a reminder, this is a beta. Magic – like all AI features – is subject to errors, hallucinations, and mistakes. Please use it with care!

Hex Magic is not yet available for workspaces on EU or HIPAA compliant stacks.

🧙 New Magical Powers

Hex Magic gives you access to 5 Magic tools: Generate, Edit, Explain, Fix, and Explode. You’ll find the Magic menu in the top right corner of SQL, Python, Markdown, and R cells.

For tips, tricks, and a detailed list of examples of how to use Magic, check out the documentation.

Hex Magic overview

🪄 Generate

ex: show me all orders placed in the last 30 days for > average order price.

Magic Generate lets you ask for code and queries with natural language. Describe what you want to generate in plain English, being as specific as possible, and hit Enter. As Magic thinks, you'll see the generated code begin to fill in below.

Magic has context on your tables and schemas, so you really can just ask natural language questions and Magic will map to the most relevant tables!

✏️ Edit

ex: change this query to look at unusually small orders.

Magic Edit works just like Generate, but for modifying existing code and queries. If you trigger Magic in a cell that already has code, it'll default to edit mode.

You can ask Magic Edit to do anything to your code, from answering a totally different question to performing manual tasks like renaming every table reference. As Magic thinks, you'll see edited code begin to fill in alongside the previous code, with a line-by-line diff of the changes made.

📝 Explain

Magic explain automatically documents code – whether it’s something you wrote, or something unfamiliar you’re seeing for the first time. It works similar to a Magic edit, so you'll see the documented code with comments stream back word-by-word.

Magic explaining some pandas and matplotlib code

🩹 Fix

Magic fix automatically detects and fixes errors in your code. Whenever a cell returns an error, Magic begins preparing a fix, which can be applied with the "Magic fix" button in the error output.

Here, Magic's just fixing a missing comma— but it can solve complex issues, and resolve multiple problems at once rather than step-debugging through them all.

Magic fixing a simple SQL error

💥 Explode

Magic explode takes CTEs and "explodes" them into individual chained SQL cells. This can make complex queries more easy to debug, understand, and iterate on.

Explode makes use of query mode, so your exploded queries will not add any additional runtime over the original CTE.

🏷️ Bonus: Rename

Naming things is hard easy with Magic. You can ask Magic to rename a cell based on the code within it, to keep your project neatly organized.

Other improvements

  • When you click the New Project button, you’ll be greeted with a much friendlier empty state — it now take exactly two clicks to go from the Hex homepage to a working SQL cell. For workspaces with multiple data connections, Admins can also now designate a Default data connection that (you guessed it) the first SQL cell will default to.
The new blank project screen
  • You can now sign up for Hex with your personal email, and spin up a free-forever workspace for any side projects or portfolio work. Or if you’re a data consultant, you can create separate workspaces to hand off to each of your clients.

  • We also made improvements to our workspace switcher so you can quickly see which email(s) you're authenticated with, and transition between different workspaces.

  • When the output of a SQL query has caching enabled, paging through the results will now be significantly snappier. 🫰

  • We fixed a bug that was making dataframe SQL on w i d e tables far slower than it needed to be.

  • We’ve made improvements to engine that aggregates data for charts, speeding up chart runtimes along the way. (You might be sensing a theme here…)

  • Finally, we also made some improvements to how we write the results of a project to our database, making projects and apps much faster to render results.

🍱 Collections

There’s a new way to organize and curate your work in Hex: Collections!

Collections are groups of projects or components that can be created, populated, and shared by users in a workspace.

Collections in action

Unlike a traditional file directory, Hex projects and components can live in multiple collections, increasing flexibility and decreasing the potential for data silos.

When adding something to a collection, you have the option to also share, view, or edit permissions with all collection members, ensuring that your team can stay in sync with the latest and greatest insights.

We’ve been using this internally for a little while now, and it’s felt really great. We’d love to hear your thoughts, ideas, and feature requests for collections after trying them out!

Learn more in the docs.

⚙️ Admin panel polish

The admin settings pages have been overhauled to make it more intuitive to find what you’re looking for. We’ve put everything important at the top level in the sidebar, so you don’t need to remember what section data connections or SSO are nested within.

We’ve also done some general UI polish to spruce up each individual settings page.

New and improved admin panel

Admins can now generate invite links to easily add new users to Hex, individually or in bulk. You can choose the permissions an invite link grants, set the expiration date of a link, or limit it to just a one-time use.

Whether you’re using Hex to teach a class, run a workshop, or just have a lot of new folks to bring on board, this should drastically improve the manual process of adding users.

Generating a new invite link

Other improvements

  • We fixed an interesting bug that caused Chart cells to aggregate incorrectly when the column on the x axis had a dot "." character in the name.
  • We fixed a bug that caused scheduled runs to still process for recently deleted projects
  • The openai package is now included in our base package library 🤖
  • We are knee-deep in some performance improvements that hopefully we will be sharing with you soon!