Sign in

Mike Bostock

@ocks.org
2.8K followers 77 following 112 posts

Visualization toolmaker. Founder of Observable. Creator of D3. Former NYT Graphics. Pronounced BOSS-tock.

PostsRepliesMedia
Mike Bostock @ocks.org · 23/09/2026
This post giving strong emission theory vibes. en.wikipedia.org/wiki/Emissio...
en.wikipedia.org
Emission theory (vision) - Wikipedia
100
Mike Bostock @ocks.org · 22/09/2026
A common pattern for SaaS but not good for community!
021
Mike Bostock @ocks.org · 22/09/2026
I love seeing all the cool notebooks people are sharing again!
020
Reposted by Mike Bostock
Observable @observablehq.com · 22/09/2026
Pack four mirrored spheres inside the four walls of a tetrahedron (a pyramid). Paint the walls red, green, blue, and white. Then shoot rays out of your eyes. As they bounce, you find that the regions colored each color all somehow share a coastline. observablehq.com/@nxrix/wada-...
3156
Reposted by Mike Bostock
Jo Wood @jwolondon.bsky.social · 21/09/2026
Want to embed your @observablehq.com notebook cells in a Powerpoint-style presentation? I've created a tutorial and an interface to reveal.js that allows web-sharable interactive Observable cells to be embedded in full screen presentations. observablehq.com/@jwolondon/o...
Example slide  with a pale cream background from a presentation that uses slideshow. 

The slide shows a large square labelled 'Camden' in its bottom-left corner and five rows of small squares forming 15 horizontal bars aligned from the right of the large square. Each set of three rows shows a pale colour and sometimes darker colour in green, red, orange, blue and cyan from top to bottom. They represent political parties Greens, Labour, Liberal Democrats, Conservative and Reform respectively. To the right adjacent to the three orange bars are text labels saying 'alphabetically first within party', 'alphabetically second within party' and 'alphabetically third within party'. These form part of a visual explanation of the chart. Below the square and annotation is a legend across the slide width relating each of the colours to the political parties and 'unelected / elected' labels above the pale and darker version of each colour.
0175
Mike Bostock @ocks.org · 19/09/2026
Thank you!
010
Reposted by Mike Bostock
Bryce @brycemecum.com · 18/09/2026
TIL the new SQL cells on Observable support not just databases but variables defined in your notebook _and_ they output Arrow Tables which can be fed back into SQL cells: observablehq.com/@amoeba/sql-.... Nice.
observablehq.com
261
Mike Bostock @ocks.org · 19/09/2026
You can implement your own custom DatabaseClient, too; it’s just an object with a sql method (that typically returns a promise to an Arrow.Table). observablehq.com/d/1ab5adcc5f...
observablehq.com
110
Mike Bostock @ocks.org · 19/09/2026
Thanks for sharing! This feature uses DuckDB-Wasm under the hood. Here’s the equivalent using DuckDBClient, which is handy if you want to join multiple datasets. observablehq.com/d/aff4d0e2c2...
observablehq.com
120
Mike Bostock @ocks.org · 17/09/2026
Nice! Were you inspired by our open-source analytics Framework project? observablehq.github.io/oss-analytics/
observablehq.github.io
Open-source analytics
120
Mike Bostock @ocks.org · 16/09/2026
(The flow chart was built in a notebook, naturally. And the internal version labels every edge with counts queried from our data warehouse so we know exactly how frequently each case occurs!)
040
Mike Bostock @ocks.org · 16/09/2026
We’re improving the experience of individuals on Observable by no longer forcing everyone into a “team of one”. It’s tricky to simplify workspaces when you have users in every conceivable state! Here’s the flow we built, and you can read more here: observablehq.com/@observableh...
A flow chart showing the logic for Observable’s new user settings page; the flow branches initially for individuals with an existing personal workspace, individuals without a personal workspace, and teams; these branches branch again based on whether the team has more than one member and whether it is free.
1112
Mike Bostock @ocks.org · 04/09/2026
We haven’t shipped search for the new Observable yet, but the old one is still available here old.observablehq.com/search
old.observablehq.com
Search | Observable
110
Mike Bostock @ocks.org · 03/09/2026
Thank you for sharing your amazing work with us!
010
Mike Bostock @ocks.org · 02/09/2026
Yep, thanks for trying it out, Ricky! We always love to see your notebooks. The free tier gives fairly limited tokens but soon you will be able to upgrade to Pro for more.
010
Mike Bostock @ocks.org · 02/09/2026
Thank you Mattias! Reach out if you want any help, or to tell us more about your experience.
110
Mike Bostock @ocks.org · 02/09/2026
It’s been pretty painless so far! And we’re glad to move beyond the JSON era. The only issue I recall is that the Databricks driver doesn’t yet support query parameters but we worked around that by doing SQL escaping ourselves.
030
Mike Bostock @ocks.org · 02/09/2026
The new programmatic file attachment API is pretty cool and also powers our new fetch caching. observablehq.com/@observableh...
observablehq.com
041
Mike Bostock @ocks.org · 02/09/2026
Our data connectors are serverless Vercel functions. We stream Arrow IPC back to the client, using Flechette on the client to read tables. The client also automatically saves query results to the notebook. observablehq.com/@observableh...
observablehq.com
251
Mike Bostock @ocks.org · 02/09/2026
And we use columnar.tech/dbc/ to install the drivers.
columnar.tech
dbc | The package manager for modern database drivers
Install dbc, then use it to install ADBC drivers.
130
Mike Bostock @ocks.org · 02/09/2026
This quickstart describes pretty much what we do. We pass the relative path to the desired driver (e.g., ./path/to/libadbc_driver_snowflake.dylib). arrow.apache.org/adbc/current...
arrow.apache.org
Quickstart
Here we’ll briefly tour basic features of ADBC with JavaScript using the SQLite driver for Node.js. Installation: Installing Drivers: See Installing Drivers for instructions on installing ADBC driv...
250
Mike Bostock @ocks.org · 01/09/2026
It’s finally here! So excited to be working out in the open again and for you all to try the new Observable. bsky.app/profile/obse...
16415
Reposted by Mike Bostock
Observable @observablehq.com · 01/09/2026
For more than a year, we’ve been quietly building an all-new Observable. Today, that new Observable is live on observablehq.com. Read Mike @ocks.org’s announcement: observablehq.com/@observableh...
A screenshot of the new Observable interface, showing a notebook visualizing “Bollinger bands”. Several interface elements are labeled. Along the top: workspace menu, new notebook button, user menu. Along the right side: file attachments, dependencies, comments, settings, enable tinkering, show AI. In the interior: cell inserter, cell menu, cell toolbar.
16115
Mike Bostock @ocks.org · 31/08/2026
Plot’s API is extensible with custom marks, channels, data transforms, render transforms, all expressed with code (D3 or DOM API etc.) so agents can readily move to lower-level abstractions as needed. Needs more documentation, though. E.g. observablehq.com/@observableh...
observablehq.com
Plot: LeBron James’ shots
A recreation of Matt Stiles’ and Mitchell Thorson’s basketball shot charts in Observable Plot, demonstrating a custom mark to render the court markings. Based on work by Nicholas Ortenzio. The bin tra...
010
Mike Bostock @ocks.org · 05/08/2026
Yep, it’s a completely different approach. Rather than compiling TypeScript to JavaScript before parsing, we now parse the TypeScript directly and then erase type annotations.
111
Reposted by Mike Bostock
Observable @observablehq.com · 13/07/2026
Here @fil.rezo.net reproduces @climatecasino.net’s chart, using warped gridlines to represent both the absolute temperature and the deviation from the historical mean for each day of the year. new.observablehq.com/@fil/godzill...
A line chart with an x-axis showing days of the year, from start of January to end of December; a left y-axis showing temperature, from 22 to 31 ºC; and a right axis showing deviation, from -3σ to 4σ. An orange line shows the mean, starting the year around 26.3 ºC and peaking in May around 27.8 ºC. Faint blue lines show a huge amount of historical data. A bold red line representing 2026 begins the year below the mean, just below 26 ºC, and continues to present day far above the mean, 29.4 ºC. Gray gridlines get “pinched” in the middle, representing narrower summer deviations, highlighting that the current temperature is almost 3.5σ above the mean.
25523
Reposted by Mike Bostock
Observable @observablehq.com · 05/07/2026
Revisiting this is a great idea by @thelatentspace.bsky.social, and it sent @toph.me down a rabbit hole: when you fill in all the years in-between, you get a lot of self-intersection. new.observablehq.com/@tophtucker/...
0113
Reposted by Mike Bostock
Posit @posit.co · 09/06/2026
Mike Bostock's first data viz library ran on three 1x1 pixel GIFs and raw HTML tables. It kind of made a bar chart. He went on to build D3. Listen now on Spotify (open.spotify.com/episode/01BJ...) and Apple Podcasts (podcasts.apple.com/us/podcast/t...).
2428
Reposted by Mike Bostock
Observable @observablehq.com · 03/06/2026
“Data viz” is short for “Data vizualisation”
1203
Mike Bostock @ocks.org · 29/05/2026
I am surprised that Fetch doesn’t yet have a way to track upload progress — you have to go back (20+ years) to XMLHttpRequest! There’s a nice observer proposal linked here though. jakearchibald.com/2025/fetch-s...
jakearchibald.com
Fetch streams are great, but not for measuring upload/download progress
They're inaccurate, and there are better ways.
1221
Mike Bostock @ocks.org · 22/05/2026
A reviver/replacer technique for dates in JSON that won’t silently corrupt your data. observablehq.com/@mbostock/th...
observablehq.com
The problem of dates in JSON
JSON lacks a native date type, so I often run into the problem of serializing and deserializing dates with it. JavaScript provides some support; the `Date` class stringifies to JSON natively using the...
1162
Reposted by Mike Bostock
Observable @observablehq.com · 20/05/2026
In this notebook, @laotzunami.bsky.social visualizes a state space of possible chart types and transitions among them along defined edges. Transitions between unconnected types are achieved by routing through intermediate types. observablehq.com/d/3c8b082818...
212627
Mike Bostock @ocks.org · 12/05/2026
Seems like something D3 could help with!
030
Mike Bostock @ocks.org · 11/05/2026
Latest podcast includes a sneak preview of new AI for notebooks!
050
Reposted by Mike Bostock
Observable @observablehq.com · 07/05/2026
We had a 9-minute outage earlier today caused by a database migration. Sorry! You can read more here: observablehq.com/@observableh...
observablehq.com
Notes on the 2026-05-06 outage
Earlier today we had a 9-minute (17:12–17:20 UTC) outage caused by a planned database migration. These notes summarize what happened and what we’re doing to prevent similar outages from occurring agai...
051
Mike Bostock @ocks.org · 02/05/2026
liking your tweet from my phone
010
Mike Bostock @ocks.org · 02/05/2026
Hey, we’re working on distributing audio via podcast mechanisms, we just haven’t learned how to do it yet, lol. We’ll figure it out soon.
110
Mike Bostock @ocks.org · 02/05/2026
Soon!
040
Mike Bostock @ocks.org · 02/05/2026
Thanks, and yes! It’s been convenient to use Discourse for forums but I’ve always wished notebooks could be more seamlessly woven into discussions, and likewise the discussions integrated into the main site and more discoverable. It’s a lot to do but we’ll make it better.
010
Reposted by Mike Bostock
Jo Wood @jwolondon.bsky.social · 02/05/2026
A reassuring podcast. Good to see the value of community recognised. This seems strongly aligned with what notebooks are best at - communication between people, using computation and vis as support. Increasing prominence of infrastructure like forums and trending notebooks would help here too.
231
Mike Bostock @ocks.org · 02/05/2026
Thanks Tom! Definitely quality over quantity… Rage against complexity. Nothing makes me happier than deleting code.
010
Mike Bostock @ocks.org · 01/05/2026
In this week’s Observable Podcast, co-CEO Julio and I discuss our mission to make computation easier for humans to use and understand. We need a better medium! youtu.be/0uBOL9NP8Iw?...
youtu.be
What even is Observable? | Observable Podcast
YouTube video by Observable
4161
Mike Bostock @ocks.org · 26/04/2026
Yeah it’s more a vlog than a podcast I guess? I don’t know how well it plays audio-only, but we can look into syndicating via RSS to all the apps.
020
Mike Bostock @ocks.org · 25/04/2026
Thanks for the encouragement! Is there an easy way to do that with YouTube? You can subscribe to us there.
100
Mike Bostock @ocks.org · 24/04/2026
Episode one of the Observable Podcast! Wherein @toph.me and I chat reactivity, mistakes in designing Observable JavaScript, and vanilla JavaScript in Notebooks 2.0. www.youtube.com/watch?v=AUh5...
youtube.com
Reactivity in vanilla JavaScript | Observable Podcast
YouTube video by Observable
2252
Mike Bostock @ocks.org · 24/04/2026
I dunno how to setup RSS from YouTube, but you can subscribe there and there’s also a playlist. Thanks for your interest! www.youtube.com/playlist?lis...
youtube.com
Observable Podcast - YouTube
The weekly podcast on all things Observable!
110
Mike Bostock @ocks.org · 23/04/2026
Something like RBAC?
200
Mike Bostock @ocks.org · 23/04/2026
Thanks! This is a good guide: nextjs.org/docs/app/gui...
nextjs.org
Guides: Data Security | Next.js
Learn the built-in data security features in Next.js and learn best practices for protecting your application's data.
110
Mike Bostock @ocks.org · 19/04/2026
Episode zero of the new Observable Podcast! Wherein @toph.me and I discuss the magic of Next.js. youtu.be/B2BFi3SyQM4
youtu.be
Does Next.js have too much magic? | Observable Podcast
YouTube video by Observable
2120
Mike Bostock @ocks.org · 19/04/2026
‎apps/web/src/app/(app)/@sidebar/[at]/page.tsx how many “app”s can i put in a single path
050