Advertisement Β· 728 Γ— 90

Posts by Carson Sievert (he/him)

Preview
ggsql: A grammar of graphics for SQL Introducing ggsql, a grammar of graphics for SQL that lets you describe visualizations directly inside SQL queries.

I am excited beyond description to lift the veil on what we have been working on in 2026:

Please meet ggsql! A new extension of the SQL language for creating visualisations using the grammar of graphics. Read all about it in the blog post or visit the website at ggsql.org

1 day ago 361 81 12 9
Post image

Shiny for Python 1.6 is out! Two big additions: toolbar components for compact, modern UIs (thank you, @enelson5.bsky.social!) and built-in OpenTelemetry support for production observability. Zero Shiny changes required w/ usual OTel config.

`pip install -U shiny`

πŸ”—: shiny.posit.co/blog/posts/s...

2 weeks ago 2 1 0 0

Quarto v1.9 is out! We'll have an announcement blog post soon, but quarto.org/docs/download/ has the main highlights, including:

- PDF accessibility in latex and typst
- llms.txt support
- third-party engine extensions

Give it a whirl, and thanks!

1 month ago 46 12 0 2
Preview
2026 Posit Internships Posit is sponsoring four summer internship positions in 2026.

Our list of 2026 #rstats and #python summer internships has been posted.

We can't wait to work with you and make great things!

tidyverse.org/blog/2026/03...

1 month ago 29 18 1 1
Post image

Shiny for R v1.12 is here with built-in OpenTelemetry support! πŸŽ‰

Trace sessions and reactive calculations in production with zero code changes. Just install {otel}/{otelsdk} and set your env vars.

Learn more: shiny.posit.co/blog/posts/s...

#RStats #RShiny #OpenTelemetry

4 months ago 26 8 0 1
Preview
plumber2 0.1.0 plumber2, a complete rewrite of plumber, has landed on CRAN, providing a modern, future proof solution for creating web servers in R. Read all about the new features here.

I am super hyped to finally share the first release of plumber2 with all of you. This has been the center of my attention for a big part of 2025 and I hope you'll find it a worthy update to the venerable plumber package.

The blog post will tell you more

#rstats

6 months ago 92 27 2 1
Preview
Building an AI-powered location explorer with Shiny and Claude – WALKER DATA GIS, demographics, and data science consulting

On the blog: building an AI-powered location explorer with Shiny and Claude

Intrigued by apps you’ve seen that bridge GIS and LLMs? You can build them yourselves in #rstats!

Read the post: walker-data.com/posts/ai-loc...

8 months ago 9 2 0 0
A white stylized serpent or "S" curve with a circular head and dot for an eye, is centered on a dark blue circle. Behind the circle is a dark blue background with lighter blue vertical lines of varying heights, resembling an audio waveform.

A white stylized serpent or "S" curve with a circular head and dot for an eye, is centered on a dark blue circle. Behind the circle is a dark blue background with lighter blue vertical lines of varying heights, resembling an audio waveform.

Announcing Orbital for Python! For Scikit-learn users, this tool transforms your ML pipelines into SQL queries, letting predictions run directly in your database without a #Python environment.

Learn more: posit.co/blog/introdu...

9 months ago 38 11 0 7
Advertisement
Preview
Posit We’re happy to announce that we’re supporting Typst by funding one of their full-time engineers.

At Posit, we love @typst.app:

⚑ Make PDFs in milliseconds, not minutes
✨ The power of LaTeX with today's technologies
✍️ Modern typography (including emojis!)
🧠 Clear mental model

So I'm thrilled to announce that we're now supporting its development: posit.co/blog/posit-a...

#rstats

10 months ago 241 52 5 11

Risky post!

(This is great, fun to read and the frustrated tone throughout really does capture how it feels sometimes to be an experienced programmer trying to argue that "LLMs are actually really useful" in many corners of the internet)

10 months ago 151 19 13 3

This feature is currently only available in python but is coming to R soon

10 months ago 1 0 0 0
Post image Post image Post image

Found some @opensourcepledge.com member companies at #pycon!

11 months ago 8 3 0 0

Wow, this talk-to-the-data #RStats dashboard of terminated #NSF grants is really something.

11 months ago 26 4 1 0
A fun and cartoonish portrayal of bookmarking a web page

A fun and cartoonish portrayal of bookmarking a web page

Screenshot of new Generative AI articles within the Shiny documentation

Screenshot of new Generative AI articles within the Shiny documentation

Shiny v1.4 is now on PyPI! πŸŽ‰

Highlights include bookmarking and new Generative AI documentation. πŸ”–πŸ€–

Read here for more. πŸ‘€

shiny.posit.co/blog/posts/s...

1 year ago 3 3 0 0

Want to work with me on the Shiny team at @posit.co alongside @jcheng5.bsky.social @winstonchang.bsky.social @schloerke.bsky.social @grrrck.xyz?

We're looking for another engineer, apply here posit.co/job-detail/?...

#rstats #rshiny #ShinyConf #python #pydata

1 year ago 32 18 0 1
Advertisement
Preview
Shiny AI apps using ellmer & chatlas LLM-Powered Shiny apps with ellmer and chatlas bit.ly/shiny-ellmer-chatlas Carson Sievert Senior Software Engineer Posit, PBC

Slides from my #ShinyConf talk earlier today: "LLM-Powered Shiny apps with ellmer and chatlas"

docs.google.com/presentation...

#rstats #rshiny #python #ai

1 year ago 31 5 2 2
A dark blue hexagon with rounded corners containing a white silhouette of Atlas kneeling and holding two white chat bubbles above him. Below the hexagon is the word "CHATLAS" in white text. The background is a lighter blue with a pattern of white lines and dots resembling a circuit board. The Posit logo is in the corner.

A dark blue hexagon with rounded corners containing a white silhouette of Atlas kneeling and holding two white chat bubbles above him. Below the hexagon is the word "CHATLAS" in white text. The background is a lighter blue with a pattern of white lines and dots resembling a circuit board. The Posit logo is in the corner.

We are thrilled to announce chatlas, a Python package that simplifies working with large language models (LLM) in Python!
Chat, tool call, stream API calls, RAG, and more, with developer details like typing support and rich console output.
Read the post: posit.co/blog/announc...
#Python #AI

1 year ago 34 7 0 1
Shiny Conference 2025. Carson Sievert. Building LLM-Powered Shiny apps via ellmer and chatlas.

Shiny Conference 2025. Carson Sievert. Building LLM-Powered Shiny apps via ellmer and chatlas.

We're excited for #ShinyConf2025!

Posit's Carson Sievert will talk about "Building LLM-Powered Shiny apps via ellmer and chatlas"

Learn more and see the full agenda at www.shinyconf.com/agenda.

#RShiny #ShinyForPython #rstats

1 year ago 14 1 0 1
The Single Optimization tab showing results for the Ackley function. The interface displays optimization metrics (final value: 0.00285506, distance to minimum: 0.00285506, total iterations: 71), a contour visualization of the function and the optimization path, a convergence plot showing objective value vs iteration, and detailed results in a table format. The left sidebar contains various configuration options

The Single Optimization tab showing results for the Ackley function. The interface displays optimization metrics (final value: 0.00285506, distance to minimum: 0.00285506, total iterations: 71), a contour visualization of the function and the optimization path, a convergence plot showing objective value vs iteration, and detailed results in a table format. The left sidebar contains various configuration options

The Single Optimization tab showing results for the Ackley function. The interface displays optimization metrics (final value: 0.00285506, distance to minimum: 0.00285506, total iterations: 71), a 3D visualization of the optimization path, a convergence plot showing objective value vs iteration, and detailed results in a table format. The left sidebar contains various configuration options

The Single Optimization tab showing results for the Ackley function. The interface displays optimization metrics (final value: 0.00285506, distance to minimum: 0.00285506, total iterations: 71), a 3D visualization of the optimization path, a convergence plot showing objective value vs iteration, and detailed results in a table format. The left sidebar contains various configuration options

A 3D surface plot showing an optimization path on the Ackley function. The surface is colored in yellow to green, with a clear minimum point at the center. The optimization path is shown in red, moving from the starting point (blue dot) to the end point (purple diamond), converging towards the global minimum.

A 3D surface plot showing an optimization path on the Ackley function. The surface is colored in yellow to green, with a clear minimum point at the center. The optimization path is shown in red, moving from the starting point (blue dot) to the end point (purple diamond), converging towards the global minimum.

The Landscape Analysis tab of the optimization app showing a 3D visualization of the Simple Bowl (Sphere) function. The interface includes settings for test function selection, analysis type, and grid resolution on the left. The main panel displays the bowl-shaped function surface and its mathematical formula f(x) = Ξ£xα΅’Β² along with properties including domain [-5.12, 5.12], global minimum (0), and minimum location (0, 0).

The Landscape Analysis tab of the optimization app showing a 3D visualization of the Simple Bowl (Sphere) function. The interface includes settings for test function selection, analysis type, and grid resolution on the left. The main panel displays the bowl-shaped function surface and its mathematical formula f(x) = Ξ£xα΅’Β² along with properties including domain [-5.12, 5.12], global minimum (0), and minimum location (0, 0).

Test BFGS, Nelder-Mead & other numerical optimization algorithms on classic functions like Rosenbrock & Ackley. Compare paths & landscapes in real-time. Built with #rstats #rshiny

πŸ”— App: shiny.thecoatlessprofessor.com/numerical-op...
πŸ’» Code: github.com/coatless-shi...

1 year ago 22 5 1 0
A screenshot of a Pyodide REPL executing Polars code:

import polars as pl
import requests
r = requests.get("https://raw.githubusercontent.com/pola-rs/polars/refs/heads/main/examples/datasets/foods2.csv")
pl.read_csv(r.content).group_by("category").mean()

A screenshot of a Pyodide REPL executing Polars code: import polars as pl import requests r = requests.get("https://raw.githubusercontent.com/pola-rs/polars/refs/heads/main/examples/datasets/foods2.csv") pl.read_csv(r.content).group_by("category").mean()

A screenshot of a Quarto Live code cell executing Polars code:

import polars as pl
import requests
r = requests.get("https://raw.githubusercontent.com/pola-rs/polars/refs/heads/main/examples/datasets/foods2.csv")
pl.read_csv(r.content).group_by("category").mean()

A screenshot of a Quarto Live code cell executing Polars code: import polars as pl import requests r = requests.get("https://raw.githubusercontent.com/pola-rs/polars/refs/heads/main/examples/datasets/foods2.csv") pl.read_csv(r.content).group_by("category").mean()

A screenshot of a Shinylive app using Polars code:

from shiny import App, render, ui
import polars as pl
from pathlib import Path

app_ui = ui.page_fluid(
    ui.input_select("cyl", "Select Cylinders", choices=["4", "6", "8"]),
    ui.output_data_frame("filtered_data")
)

def server(input, output, session):
    df = pl.read_csv(Path(__file__).parent / "mtcars.csv")
    
    @output
    @render.data_frame
    def filtered_data():
        return (df
                .filter(pl.col("cyl") == int(input.cyl()))
                .select(["mpg", "cyl", "hp"]))

app = App(app_ui, server)

A screenshot of a Shinylive app using Polars code: from shiny import App, render, ui import polars as pl from pathlib import Path app_ui = ui.page_fluid( ui.input_select("cyl", "Select Cylinders", choices=["4", "6", "8"]), ui.output_data_frame("filtered_data") ) def server(input, output, session): df = pl.read_csv(Path(__file__).parent / "mtcars.csv") @output @render.data_frame def filtered_data(): return (df .filter(pl.col("cyl") == int(input.cyl())) .select(["mpg", "cyl", "hp"])) app = App(app_ui, server)

Recently I've been working on getting #polars running in #pyodide. This was a fun one, even requiring patches to LLVM's #wasm writer! Everything has now been upstreamed and earlier this week Pyodide v0.27.0 released, including a Wasm build of Polars usable in Pyodide, Shinylive and Quarto Live πŸŽ‰

1 year ago 49 9 0 0
Video

Great work by @halleeshearer.bsky.social in her first first-author paper. With πŸŽ€ shiny app πŸŽ€ to explore how FC reliability fares ACROSS DIFFERENT movies versus rest, region-by-region. Thanks @sneuroble.bsky.social @tingsterx.bsky.social @ninetlab.bsky.social for πŸ‘ collab.

doi.org/10.1162/imag...

1 year ago 38 18 0 1
Video

I finally tried the {shinychat} #RStats πŸ“¦ and it's nice to see LLM streaming responses in an R Shiny app!
By @jcheng5.bsky.social & @cpsievert.bsky.social at @posit.co
github.com/posit-dev/sh...
#RShiny #GenAI 1/2

1 year ago 2 2 1 0
Post image Post image

I've been working with a variety of #LLM / #GenAI interfaces in #Python, but I haven't found one that does exactly what I need in a streamlined way.

The new chatlas package from Posit may be just that. It supports multiple providers, structured data outputs, and more!

posit-dev.github.io/...

1 year ago 12 3 2 0