Skip to main content
Latest release:

Welcome to another edition of ye olde Hexe Product Updates.

PS: We’re going to the Snowflake Summit in June, and we’d love to see you there! If you’re going too, drop us a line (you can just reply to the email) and we’ll pack something extra special in our bags for you 💜.

🔄 GitHub sync

We've recently released several features in service of a broader vision to bring software engineering best practices for collaboration and peer review to data work. There’s been one last feature missing.

We’re really excited to show you the final piece of the Hex versioning suite: GitHub sync. Synced Hex projects will store every new version as a commit to a development branch in GitHub; the published app in Hex will remain in sync with the main branch.

As you build, save versions, and publish work, Hex will manage branches for you and automatically push to main when necessary. If you make changes to a project from outside of Hex, it’s easy to pull and sync them back into Hex.

You can also choose to require Pull Requests, which will add a step to the publishing workflow that requires a PR to be approved and merged on GitHub before a new Hex version can be published.

This unlocks a host of powerful abilities, allowing you to programmatically access and edit Hex projects. Some things you might find yourself doing:

  • Running a find & replace across all Hex projects to replace a table name that’s been changed.
  • Integrating with your project tracking tool to auto-close tasks when a project is published.
  • Enforcing some über-custom linting scripts on your Hex code for org-specific code rules.
  • Hooking up a printer to automatically spit out a hard copy of every Hex version so you can proudly send them to your family to stick on the fridge.

Read more on the Blog

📝 Text cell

We built a Text cell! It supports rich text editing with live preview, markdown syntax, and jinja parameterization. Don’t tell Markdown.

Look, we all love Markdown. Nobody loves Markdown more than me! I, for one, have never had even fleeting thoughts about a different text editing experience. Even when I handwrite letters to my pen pals, I make sure to write _ and ** for emphasis.

But I mean, sometimes it could be kind of nice to format a block of text without having to wrap it in special characters... Not usually, of course, but I suppose just between you and me it sounds a little dreamy to select some text and have a little toolbar that could change the formatting right there. But that’s probably crazy. Markdown! **It’s the best**.

So I know you all probably barely even want this, but we wanted to put it out there just to, you know, see if it's cool, almost as a joke. ha ha! rich text!? never even heard of it.

Admins can now upload a custom logo that will be displayed on published apps. Other parts of Hex, like the home page and Notebook view, will continue to use the default Hex logo.

We hope this helps make your published apps really pop and feel like key pieces of your organization’s knowledge.

Other improvements

  • Columns in the schema browser are now ordered by how they appear in your table, not alphabetical order. For existing tables, you’ll need to kick off a schema refresh to see this.
  • The dbt integration now works with Databricks connections.

Bugs squashed

  • Columns of type TINYINT UNSIGNED were causing SQL cells to error, but are now supported.
  • We’ve resolved problems that were causing some projects to be very slow to publish.
  • We found and fixed a sneaky race condition that occasionally led to blank input parameters in published apps.
  • Duplicating a Single value cell now appropriately duplicates all formatting options.
  • We fixed an issue that caused multi-select inputs to sometimes display cached values that were no longer valid.

This round of Hex updates includes some long-requested functionality, significant improvements to core Hex workflows that you use every day... and some dark, unspeakable magic. The usual!

🐍 Dark mode

I was in the library the other day, in the Restricted Section, and I read something rather odd about a bit of rare product functionality. It’s called, as I understand it... Dark Mode.

You can enable Dark Mode from the new User Preferences section of the Settings, where Theme options reside. You can sync Hex to your system mode, or choose to always be Light/Dark.

Check out a demo here

Every single screen of Hex has been carefully themed, from dialogs to inputs and even charts. We'll be adding more themes in the near future, like a dimmed theme and colorblind friendly mode.

👀 Project view stats

Ever wonder if anyone’s actually looking at that app you built? We talk a lot about “turning data into knowledge” and making sure that your data work has impact— one of the simplest ways to do that is to just see if anyone’s picking up what you’re putting down.

Check out the Published App Views tracker in the bottom left of the sidebar, next to the memory indicator. You can click “See more” to get a detailed access log.

⚙️ User preferences (and Vim mode)

We’ve already covered most of the contents of the User preferences page, but expect more configuration options to become available here as we build. In addition to Theme settings, Vim key bindings are now available for Code, SQL, and Markdown cells.

🔔 Slack notifications

I only check my email every two weeks, on Thursdays when I send these release notes. Outside of that, it’s all Slack. This means I regularly miss important Hex notifications, like project access requests, comments, and new shared apps.

You can now choose to receive all or some notifications via Slack, in addition to (or instead of!) email. Head to your Settings > Notification preferences to authorize Slack and configure notification settings.

🗑️ Move to Trash

Hex now “soft deletes” projects rather than permanently (and slowly!) deleting them. You’ll select “Move to trash” instead of “Delete”, and have access to restore projects from the Trash for 7 days before permanent deletion.

🥧 Pie charts

We once swore a vow to never add Pie charts to Hex, but we’ve listened to your feedback, put the user first, and... though it pains us to even say it...

released Pie Charts 🥧.

We’re calling them “Arc” charts though, which is both technically correct and protects our Unbreakable Vow.

🖍️ Notebook diff

When publishing, in addition to the app preview you’ll now see a "Notebook diff" tab that tracks changes to outputs, code, and configuration on a cell-by-cell basis.

This means changes to backend logic are readily visible when publishing new app versions, even for cells that aren’t directly displayed in the app layout.

New cells, updated outputs, markdown grammar fixes, and tweaked SQL queries are all visible and easily auditable before publishing.

💅 Chart improvements

We’re continuing to add polish to Chart cells with a couple of helpful improvements to standard chart functionality.

Area Charts are now supported, and pair especially well with Line layers when visualizing data that’s lightly related.

You can sort chart axes by the values of the other axis. This sounds weird no matter how you say it for some reason, so here’s a nice GIF example! PS: this only works for ordinal and nominal axis types.

Duplicate chart as Python cell now outputs a Python dict, not a JSON string. This makes custom chart configs a lot more readable, and more easily parameterized based on app logic.

Other improvements

  • You’ll notice lots of visual polish around the app, from new icons to pixel perfect alignment.
  • We’ve added a “Contact an admin” option to several places where previously, we just informed users that only admins could take a certain action.

Bugs squashed

  • Some organizations were missing the default set of statuses and categories. We fixed this, and repopulated your empty lists. If you’ve suddenly had this feature appear, welcome!

  • If you were using $dollar sign math syntax$ in Markdown cells, you probably noticed some strange formatting behavior. We’ve fixed this, but now you have to use $$double dollar sign syntax$$ to achieve the same effect— just like Notion!

  • Multi-select parameters were accidentally able to reference their own output as input, which was fun but not that useful.

Welcome back to another jam-packed edition of Hex Product Updates, featuring loads of improvements to core Hex workflows. We like to pretend we are clever product strategists, but actually every single feature shipped this round is the result of direct feedback from users like you 💜.

So please keep the excellent feedback flowing! We seriously talk about every single piece of user feedback. It makes Hex better for everyone, and it makes our jobs a lot more fun 🙂.

PS: In case you missed it, we raised a Series B the other week! That’s not a product update per se, but you can think of it as a good omen of more product updates to come.

📆 Relative Date input

Last week I painstakingly constructed a “relative date input” using:

  1. A numeric input parameter (n_periods_ago)
  2. A text input parameter (period_grain)
  3. A python cell (to calculate the right start_date)

Today, I replaced it with a brand new relative date input parameter! When configuring a date input, you can allow relative date inputs and users will be able to choose “Today”, “Yesterday”, etc. instead of picking a specific date.

The best part of this is that relative dates will always be up-to-date, so if you write a query filtered on “Today” or “Yesterday”, every time that app runs the output will be accurate 🎉.

⏳ Cell runtime

Hex now tracks and surfaces cell-by-cell runtime. You won’t notice anything until a cell’s runtime reaches 5s, upon which the current runtime will be displayed on the run status indicator.

After a cell has been run, you can always review its most recent run stats by opening the run mode dropdown.

We hope this helps with profiling large projects, where improving performance isn’t as simple as removing time.sleep(10) 😛.

🗄️ Hexport

verb

/heksˈpôrt,ˈhekspôrt/

  1. download a Hex project as a portable .yaml file

"we hexported all of our favorite projects yesterday so we could put them on an SD card and bury them in permafrost for our great grandchildren."

If you’ve ever gone to export a Hex project, you’ll have found yourself with an old fashioned .ipynb that doesn’t elegantly handle magical Hex things like input parameters or SQL cells. It’s also easy to forget that these files include rendered cell output, which can sometimes contain sensitive data and shouldn’t be laying around in ~/Downloads.

So we decided to build a better export (hexport) experience to reflect the souped up state of Hex’s Notebook view. We thought about making Yet Another Markup Language (.hex?!) but ultimately settled on good old .yaml to keep things simple.

The ability to open a raw Hex project in your IDE of choice unlocks a lot of neat power user workflows, like large scale find & replaces across multiple projects.

You can of course import projects back into Hex, both as completely new projects (from the home page) and as new versions of existing projects (from the History & Versions sidebar).

We hope this portability is both useful in your day to day, and symbolic of our aversion to vendor lock-in— you might build your projects in Hex, but they’re your projects, not ours. Watch this space! This is foundational work that will unlock some exciting things coming imminently down the pipe.

🧠 Learn tab

There’s a new tab in the home page sidebar called “Learn” that serves a dual function:

For brand new Hex users, the Learn tab guides them through their first steps in Hex from demo projects to sharing their first app. We hope this makes it feel more frictionless for you to invite teammates to Hex without having to sit them down and walk through it first.

For seasoned Hex veterans, the Learn tab catalogs an ever-growing list of tutorials and educational resources to help you get even better at using Hex. We’re always adding to this list, so check back every now and again!

🗺️ Map support

We’ve improved Hex’s cartographic abilities, adding support for common mapping libraries like Folium, Pydeck, and Plotly+Mapbox. Many more complex or niche mapmaking libraries also depend on these for rendering outputs, so this adds a whole world of geospatial power to Hex!

See an example of a few different ways to make maps in this Hex project.

Other improvements

  • The command pallette (cmd+p) has gotten a little smarter about fuzzy matching, which should spare you some occasional frsturation.
  • Multiselect input parameters have spontaneously evolved the ability to “Select All”, something that previously required some manual list editing and code cell intervention.
  • When creating a new project, you can now hit cmd+enter after adding a title rather than having to click on the Create Project button!

Bugs squashed

  • Sharp eyed users may have noticed that datetime values in table displays were automatically being converted to local time. We’ve fixed this by default, but also added the ability to turn conversion on again from the column format menu!
  • Publish previews for large Hex projects should now load much faster.
  • We’ve improved handling of floats in numeric inputs, so even a decimal-less float (1.) will show as a float, not an int.
  • We’ve resolved some issues with the Duplicate project workflow.

Did you celebrate Pi Day on Monday? We celebrated by building this app to explore all 146 (!) types of pie listed on Wikipedia. And don’t worry, if you missed Pi Day this week, you can always celebrate it on 22 July (22/7 for those outside the States) — any excuse to eat more pie.

🍟 Compute profiles beta

Just how big is your data? Two weeks ago we let you know about our new memory indicator to help you track just how much memory you have left, but sometimes, you just need more memory! We get it!

So, we’re introducing compute profiles in Hex — a new way to control the compute power of your Hex projects. Starting today, you can opt into more memory and processing power, depending on the needs of your project.

During the compute profiles beta phase (roughly until mid-April), we’re excited to give you free access to all upgraded compute profiles. This means you can use these compute profiles during the beta phase at no charge:

  • Medium (default): 8GB RAM & 1 CPU
  • Large: Equivalent to 2x Medium
  • Extra large: Equivalent to 4x Medium

After the end of the beta phase, we’ll move to a usage-based model: projects using larger compute profiles will cost a little extra (only for the time that the compute profile is being used).

We’ll notify you well ahead of charging for any upgraded compute usage and will not charge you retroactively for your usage during the beta phase (that’d be a real jerk move).

🚀 Emoji everywhere

You didn’t really ask, but we delivered anyway.

Emoji comment reactions are here! Check it out next time you want to give someone some 🔥 feedback.

You can also now use :emoji: notation in Markdown cells to trigger an emoji picker❗

👩‍🏫 Show code in app

Remember when your tenth grade math teacher advised you to “show your work” when answering those algebra questions? Well now you can show your work in Hex too.

If you’ve got an app where you want to communicate how the output was created, you can show the code (aka the “source”) of any SQL or Code cell from the new “Element Display Options” in the App builder.

🧱 Databricks integration

We’re excited to announce our partnership with Databricks! As of last week you can configure new Delta Lake SQL connections right from Hex (and much more coming soon!). Read more about it on our blog.

🆕 hex.new

Need to create a new Hex project in a jiffy? Just type in hex.new in your browser and you’re off to the races.

🏃‍♂️ New zero state

The Hex “zero state”, or what you see when you first create a new project, has gained some functionality. In addition to starting with a SQL or Code cell, you can now easily upload a CSV or add a new data connection right from the blank project.

It’ll even auto-run any CSVs you upload!

🔀 Re-orderable statuses

Internally, we’ve been using statuses to track the lifecycle of a project: from draft, to production, to archived. But it bothered us that the drop down for statuses didn’t match this order, so we made them re-orderable!

If you’re a Hex admin, head to the Admin panel to reorder your statuses. We also added some descriptions so you can help your team understand the right way to use statuses (and categories too).

Other improvements

  • The folium package is now supported, unlocking many mapmaking workflows
  • Using the homepage search box will now search all projects, not just your recently used ones.
  • Embedded cells now resize their contents to better fit iframe dimensions.

Bugs squashed

  • We fixed a bug where raw cells in uploaded .ipynbs were being imported as code, often causing errors. Now they are imported as Markdown, which is much safer (there was a reason you marked it as raw, right?)
  • Single value cells with very long numbers no longer overflow their boundaries.
  • Our ongoing quest to banish scrollbars continues— you’ll never see them on a slider input parameter again.
  • Clicking on a comment in an email notification will now take you right to that comment.

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