I'm a senior software engineer at Posit, where I build and
maintain tools in the Shiny ecosystem for both R and Python, including
shiny,
py-shiny,
shinytest2,
shinylive,
plumber, and
reactlog.
Lately that means OpenTelemetry for Shiny, LLM-powered apps, and custom UI with React.
Test mode · test_server() and exported test values for fast tests without a browser. · 9 PRs
Agent Skills · Skills shipped in the package so coding agents know how to write Shiny apps. · 10 PRs
Session lifecycle · session.destroy(), a soft teardown when a session closes, and session.allow_reconnect(). · 4 PRs
Release train skill · An Agent Skill that walks a py-shiny release from prep through PyPI, conda-forge, and shinylive. · 8 PRs
OpenTelemetry · Traces and logs for sessions, reactivity, and outputs, so users can see where their apps spend time. · 23 PRs
Bookmarking · Save and restore an app's state in the URL or on the server. · 11 PRs
Data frames · render.data_frame with editing, selection, sorting, filtering, and styles. · 35 PRs
Output renderers · shiny.render.renderer, a base class for writing your own output renderers. · 10 PRs
API reference · The quartodoc function reference and its runnable examples. · 8 PRs
UI components from bslib · Ported sidebars, cards, accordions, value boxes, tooltips, and popovers from R's bslib, so Python users get the same layout tools as R. · 23 PRs
Playwright testing · shiny.playwright controllers for every UI component, and the shiny.pytest plugin; 1000+ tests over 170 CI jobs finish in 4.5 minutes instead of 4+ hours. · 10 PRs
shinyreactClient-Side 'React' Interface for 'shiny'
176
Agent Skills · Skills for building and converting apps with coding agents, shipped in the package. · 6 PRs
Initial development · Ported the Python API to R, then CRAN checks, a pkgdown site, and webR builds for 0.1.0; 2 other CRAN packages already use it. · 23 PRs
ui.tsx apps · Write the whole page in React and serve it from R. · 20 PRs
shinyreactShiny UI infrastructure for React-based component rendering
176
Agent Skills · Skills for building and converting apps with coding agents, shipped in the package. · 6 PRs
Renderer dependencies · Find and serve the HTML dependencies of Shiny outputs used inside React. · 7 PRs
ui.tsx apps · Write the whole page in React and serve it from Python. · 20 PRs
Testing · Playwright e2e tests, WireTap for wire payloads, and in-memory test_server(). · 10 PRs
Initial development · Began as shinyjson, a JSON spec renderer, then turned React-first and dropped json-render. · 16 PRs
@posit-dev/shinyreactReact hooks and components for Shiny (shinyreact) — the ui.tsx pattern's client runtime
176
npm package · A dual build published as @posit-dev/shinyreact, usable with no server-side JS. · 8 PRs
Wire protocol · One versioned protocol, checked by a handshake, shared with the R and Python packages. · 6 PRs
React hooks · useShinyInput / useShinyOutput hooks, and ShinyOutput for classic Shiny outputs. · 13 PRs
Migration from shinytest · migrate_from_shinytest() converts existing shinytest tests; shinytest was deprecated in May 2024 in favor of shinytest2. · 4 PRs
Screenshots · Consistent screenshots, compared with a kernel density smoother to ignore stray pixels from Chrome rounding and small font weight changes, so screenshot tests stop flaking. · 7 PRs
Test recorder · record_test() writes a test while you click around the app. · 6 PRs
AppDriver · Drive a Shiny app in headless Chrome: set inputs, click, and snapshot values. · 30 PRs
MCP Apps · Serve Shiny apps as MCP Apps, with author tools for LLM clients, so apps show up inside the chat in clients like Claude Desktop. · 5 PRs
Session lifecycle · session$destroy(), a soft teardown when a session closes, and clean state on reconnect. · 5 PRs
OpenTelemetry · Traces and logs for sessions, reactivity, and outputs through {otel}, so users can see where their apps spend time. · 10 PRs
Quosures · exprToFunction() and installExprFunction() accept quosures, including inject()ed ones. · 3 PRs
devmode() · One switch that turns on the options you want while developing an app. · 3 PRs
testServer() · Test server functions and modules in memory against a mock session; no browser needed, so tests run much faster. · 4 PRs
reactlog integration · Record every reactive event so reactlog can draw the reactive graph, letting users see the logic behind their app while debugging. · 9 PRs
Plot brushing · Plot click and brush events carry CSS and image coordinates, and brushing works in WebKit. · 4 PRs
@posit/shinyEasy interactive web applications with R
141
TypeScript · Ported shiny.js to TypeScript, moved the build to esbuild, and published the types; every PR's client code is now type-checked. · 12 PRs
Exercises · Safer exercise evaluation, checker functions, and clearer errors. Instructors use learnr for course materials, 29 CRAN packages use it, and its lessons shaped Posit Academy. · 9 PRs
Quiz questions · Questions rebuilt as Shiny modules, with a custom question API. · 12 PRs
promisesAbstractions for Promise-Based Asynchronous Programming
48
leafletCreate Interactive Web Maps with the JavaScript 'Leaflet' Library
3rd-Eden/memcachedA fully featured Memcached client build on top of Node.js. Build with scaling in mind so it will support Memcached clusters and consistent hashing.