Skip to main content
Latest release:

Happy not-leap-day, lovely Hex users! The last leap year was 2020, so there’s no leap day ‘til 2024— but if this were a leap year, for some ridiculous reason today would be February 29th instead of March 1st, and everyone would be mildly excited about it. I built a Hex app that digs up some data about Leap years (mostly as an excuse to show off what you can do with Hex, Jinja, and SQL).

Anyways, here are the latest and greatest product updates from the Hex team! We’ve shipped a ton of exciting features since I wrote last, but make sure to read the whole thing... if you make it to the bottom of the email you’ll find a special beta tester opportunity waiting for you. Enjoy!

🎓 Hey, PS, you know what’s so 2021? docs.hex.tech. You know what’s totally 2022? learn.hex.tech! We’ve completely rebuilt our docs site and filled it with new content: In addition to product docs, you’ll now find quickstarts, an ever-increasing library of tutorials, and an integrated changelog.

🔐 Group permissions for workspace assets

You can now share access to data connections, secrets, and GitHub packages with only certain User Groups. Why is this important? Well, now you can do something like this:

  1. You add a workspace data connection, it’s sensitive so you only share it with the Core Data Team.
  2. You build a project using that connection, it has SQL cells that hit the sensitive DB.
  3. One of your coworkers who has access to this project wants to get a sales engineer’s input, so they share the project with them as an Editor.
  4. Because the data connection is restricted to the core data team, the SE will only receive read only access on the project, and will not receive Editor access due to missing permissions.
  5. Nobody accidentally receives unauthorized access.

Slightly confused? I was too, so here’s a 2 minute video showing it in action.

🏴‍☠️ R Support

Everyone now has access to create R projects in Hex!

R is fully supported and stable, but R-based projects are still not at full parity with Python. We will be adding more features over time as we hear requests. For a full list of supported features, head to the docs. Here is a very basic R app, if you want to see an example.

Thanks to everyone who gave this a spin the last few weeks!

🧅 Chart Layers

We quietly enabled this a few weeks ago, so you may have already noticed that chart cells support multiple layers! 🎉

Each layer is configured entirely separately from the others, so you can mix and match dataframes, axes, chart types, you name it. I use this feature regularly to show two related metrics at once, like weekly sessions & conversions.

Hot tip: To make aesthetically pleasing multi-layer charts on similarly scaled data, use the same X-axis and enable “Combine Y-axes” to, well, combine the Y-axes. 📈

💱 Number formatting in Single Value cells

Single Value cells now support the same spreadsheet-style number formatting as Table Display columns. Choose between common numeric types, adjust the number of decimals (but calculate those sig figs!), and customize currencies.

🌡️ Memory indicator

A physically small but oft-requested feature: A way to see how much memory a project is using. Find the new memory usage indicator in the lower left part of the project sidebar.

It will start to fill up and turn red as you approach the memory ceiling of your kernel.

🎓 Learn site

You know what’s so 2021? docs.hex.tech. You know what’s totally 2022? learn.hex.tech! We’ve completely rebuilt our docs site and filled it with new content: In addition to product docs, you’ll now find quickstarts, an ever-increasing library of tutorials, and an integrated changelog.

You're um, on it right now :)

Other improvements

  • There’s a new App Display option to show a Table of Contents, autogenerated from the markdown headings in your project. App Users can use this to navigate around larger apps— it’s really handy!
  • We’ve added a Time Unit parameter to chart axes that are of type Temporal. You can reshape temporal fields into any of the supported units without having to write DATE_TRUNC or EXTRACT queries.
  • You can now comment on a cell that is locked / being actively edited.
  • “Kiss me under the light of nine a thousand stars” — Ed Sheeran upon discovering that we’ve increased the number of starred projects that display on the Hex home page from 6 to 9 💖.

Bugs squashed

  • We fixed a bug that that caused some duplicated chart cells to not situate themselves correctly in the execution graph.
  • Resolved an issue around cells not locking/unlocked properly when in use.
  • There was “Too much margin down yonder” in App Display options. Now it’s just right.
  • We’ve banished some unnecessary scrollbars that were appearing on input parameters.
  • We fixed a bug that made it impossible to select markdown text in published apps.

💅 New App builder

We’re rolling out an all-new app builder to help you more easily build beautiful Hex apps. It will eventually replace both Story and Canvas layouts, so we’re not calling it anything more exciting than App builder.

The new App builder has:

  • Your favorite Story features: Auto-generated layouts, responsive design.
  • Those crucial few Canvas extras: Control over placement and sizing, freeform layouts.
  • Some new stuff: A grid based alignment system, app width control, multiple auto-layout controls.

We think it’s pretty sweet, and hope you do too! You’ll probably be invited to try it out next time you build a Hex app.

🔍 Table Display filters

Table display cells can now filter data. Gone are the days of preceding every Table Display with a Dataframe SQL query or pandas one-liner to extract a subset of data for display. Like a spreadsheet, you can use a flexible condition-based UI to quickly filter a dataframe without using code.

All the same logic used for Conditional Formatting is available in filters, and multiple conditions & filters can be combined to create complex logic.

⏱ Scheduled run updates

You can now add multiple schedules to a single project, and choose to send notification emails on successful and/or errored runs.

Want to quietly refresh data in an app every day at midnight, but only automatically remind your teammates about it on Monday mornings? Easy peasy.

🦠 Cell embeds

In addition to full app embeds, you can now embed individual cells from Hex projects. Hex embeds work in Notion docs and anywhere that supports iframes— like Salesforce, Confluence, or even this changelog:

For more on embeds, we blogged about this the other week: http://noscreenshots.club/

🌊 New data connections

We’ve got some new friends, and they all have fancy lakehouses. Hex now connects natively to Databricks, Trino, and Dremio. You can add these to any project or workspace just like any other data connection. Specific instructions on configuring them are available in the docs.

Other improvements

  • SQL autocomplete has been improved for data warehouses that use database “names”, like Snowflake & Trino.
  • Code blocks in Markdown cells received some styling polish1
  • pydeck has been added to the default package library for all your mapmaking needs 🗺️.

Bugs squashed

  • We’ve fixed an issue that caused apps without auto-run to very occasionally auto-run
  • Several embed style issues have been fixed
  • Repaired some minor visual blemishes on Single Value cells

Footnotes

  1. You can also now do footnotes in Markdown cells, using standard Markdown syntax

📚 Knowledge Library

The Knowledge Library is a new set of workflows and features in Hex that empower teams to create knowledge from their work, rather than just standalone insights. You might remember last month’s announcement of new project metadata, including tags and statuses. Now, you can use specific statuses (like “Approved” or “Production”) to include projects in the new Library view.

The Library UI is a new homepage view that only displays published apps with a “Library Status”, filtering out any active drafts, half-finished explorations, or archived and deprecated work. This is also the default view for View-only users, who are likely primarily interested in approved & verified work.

All the usual search & filtering options work on the Library, and we’ll be continuing to add new metadata that makes it easier to keep relevant knowledge easy to find.

We wrote some more about the Knowledge Library (and Knowledge in general) over on the Blog.

🖼️ Embedding in Notion

Speaking of Knowledge, we know a lot of you keep your organizational knowledge in Notion. Us too! Despite being founding members of the Anti Screenshots-of-Charts League, we occasionally found even ourselves adding screenshots of Hex apps into Notion pages where a link just wouldn’t cut it.

So, now you can directly embed Hex apps into Notion pages! Just copy & paste the link to a published Hex app into a page, and choose “Embed Hex” when prompted. An embed frame will appear that you can resize appropriately. Check out the docs for all the details!

Note: There’s some more embed work coming swiftly down the pipe. We’ll be working on embed styles, improving embed authentication*, supporting embeds in more places, and more.

* We're currently working on an issue with authentication in the desktop version of Notion. Apps "shared with web" will work in both web & desktop, but privately shared apps will show as logged-out in the desktop version.

🏴‍☠️ R sneak-peek

R support has been a common request for as long as Hex has been available. We’ve always waxed polyglot about programming, and though it’s usually been about Python, we never planned to only support Python workflows.

Now, (beta) users can choose whether to begin a Hex project using SQL & Python or SQL & R. Many familiar features like reactive auto-run and Dataframe SQL work just as you’d expect.

It’s in Preview, so kinks are still being ironed out, and it may not reach full parity with Python for some time. We’re really excited to start supporting teams and individuals that primarily use R— if that’s you, please reach out for Preview access!

Other improvements

  • We’ve added transformers to the default package library 🤗.
  • You may have encountered the “Output of x MB is larger than the 10 MB limit” warning when plotting large datasets. We’ve bumped this limit to 50 MB, which should cover much larger plots.
  • You can now tweak project labels and descriptions right from the publish dialog— So you can label a project “Production” (and add it to the Library) right as you publish!

Bugs squashed

  • We’ve fixed a couple of small issues that sometimes caused the “Publish” button to be inaccessible.
  • Clicking “Go to Cell” in app view would occasionally not actually go to the relevant cell — It now always does!
  • We’ve fixed an issue that was causing create table commands (CTAS) in BigQuery to fail.
  • Chart cells that are “Duplicated as code cell” are now properly sized upon duplication.

💬 App comments sidebar

We've added a sidebar to published apps that makes navigating comments more natural. Now you can pop open the comments sidebar to see all open & resolved app comments. You can quickly navigate around the app by clicking comments, and reply or resolve right from the sidebar. Check out a quick video walking through it.

📚 More project details

We've added project titles, statuses, and categories to the top of the Notebook view, where they're more easily seen and edited.

There's also a new piece of metadata— Descriptions can now be added to projects, allowing for additional context, helpful links, or anything else you might want to add.

You can also use this metadata as a title & header for Story mode apps. Use the new App Display menu to configure what to show viewers of your app. This means you don't have to add markdown cells to serve as app titles, and can also surface helpful information about status, edit date, and authorship.

We've turned this off by default so you don't have duplicate titles in apps that may have existing markdown titles. Next time you're in an app and it has a markdown based title though, you know what to do... 🔪

💇‍♀️ Revamped outline

We've given the Outline a fresh new look! You will find it nicely streamlined and focused on cell outputs, so you can more easily navigate your projects.

You can also now filter the outline, choosing to only show Markdown cells or Input Parameters.

🆕 New project creation dialog

Got a few "Untitled project"s lying around? Us too... so we've made it much easier to name projects right when you create them.

(pro tip: opt+shift+n will let you quickly create a new project, even if you're already inside of another project)

💳 Self-serve account management

You can upgrade and manage your plan directly from the Hex admin panel! Head to the Admin > Upgrade Plan page to "swipe" your card and get up and running.

Other improvements

You can now make project titles "super duper insanely long" without the title truncating as early.

We are beta-testing a method to improve performance for large projects with 100+ cells. You may notice scrolling working a bit differently - please let us know how it feels!

Bugs squashed

  • The minimum value setting for axes in Chart cells is now correctly applied.
  • We've resolved a bug that was preventing dataframes being downloaded as .csv from the output of the cell.
  • We've resolved a bug that prevented some projects from being published when a specific kind of Table Display cell was added.
  • Sometimes, when creating a display table cell from a variable, the new cell didn't autorun; this has been fixed.
  • The issue of some Single value cell values being incorrectly rounded has been resolved.
  • We've made it easier to hover over and click the comment icon in an app.

🐙 GitHub package import

Make use of the utility code you've got stashed in GitHub or get access to functions in private repos! All you need to do is connect your GitHub account to Hex to access the files and function you need for your analysis!

🪑 Display tables for SQL cells

Having to add a Display Table right after previewing the output of a SQL cell always felt a little repetitive in the redundancy department. Now, not only can you add the output of your SQL table directly to your apps, you can also enrich that output as a fully-fledged Display Table!

🚻 Share projects with a group

Gather your #squad, you can now subset users into groups! Groups make sharing projects with a set of folks easy; plus we'll be adding more abilities and permissions to groups soon, stay tuned!

🦋 Hex 2.0 migration

Back in October we announced Hex 2.0 (has it really only been 6 weeks?!) and we hope you've been loving the all-new reactive re-compute model. This is a quick heads up that we'll be automatically migrating all legacy projects to Hex 2.0 before the end of the year.

What do you need to do to prepare? Nothing. Your projects will still run and return what you expect, but be faster and more intuitive for it.

Bugs squashed

  • We've upgraded to the newest release of DuckDB! This mean previous dataframe SQL issues with the datediff function and handling of decimal types in dataframes have been resolved.
  • Occasionally failed database connections were not being closed, which could lead to a build up of connections. This has been resolved.
  • Pandas style tables are no longer truncated and require scrolling.
  • Chart cells can accept columns with parenthesis in the column name.
  • We've added support for more data types which can be used in dynamically defined Input parameters.

💅 Conditional formatting in Table Display cells

Following up on last month's all-new Table Display cell that included column string formatting (for currency, percentages, etc.), this month we're landing Conditional Formatting. You can now color-code tabular data according to multiple rules that can use numerical, string, boolean, and date expressions — no more Pandas style tables! Check out all the options in the docs.

📜 Edit history

We've always had version history in Hex to let you restore previous iterations of your projects, but now we're releasing a rich edit history to let you know what actually has recently changed. You'll now find all edits, versions, and comments for a project in one unified chronological timeline.

We've also changed how you access this history— You'll no longer see it in the top bar, find it instead in the "History & versions" sidebar tab. See the docs for the full story.

🧞‍♀️ Dataframe columns in Input Parameters

If you've ever created a code cell that just runs input_list = input_df['column_of_interest'].unique() to feed into an Input parameter, you'll be excited about this one. Dynamic Input parameters can now select a dataframe column as the value source, without needing to generate a list!

This is a big time saver and helps keep apps tidy with fewer unnecessary code cells and one-off arrays.

Other improvements

  • You can now toggle the legend on/off for encodings in chart cells (color, size, opacity, dash, or detail).
  • If you are on slow or spotty wifi, Hex will helpfully notify you that your connection is unstable and work may not be saved.
  • Markdown headers in apps now have anchor links, so you can send a link directly to a specific section of a published app.
  • When you auto-format code cells with the keyboard shortcut (esc + FS), a toast notification alerts you.
  • You can also now auto-format code without using a keyboard shortcut, from the cell menu.
  • When creating a new project, instead of assuming you want to begin with a python cell, we now ask whether you want to start with a SQL or Python cell.

Bugs squashed

  • Secrets were erroneously highlighted as errors in code cells.
  • We fixed an issue that could cause a project to get stuck "Queueing" when in cell-only run mode.
  • We've fixed an issue where BigQuery connections were having trouble using the dbt integration.
  • Single value cells would error on more exotic data types, but can now accept a broader array of inputs including unknown data types.
  • We've fixed a bug that caused the publish dialog to occasionally show up empty