Hub · for data-science teams

Code in the browser, ship with one command

Hub gives your team RStudio, VS Code and JupyterLab in the browser, with Claude Code already set up. When a project is ready, one command turns it into an app, a report, an API or a pipeline that colleagues open with their company login.

Built on open source

  • ShinyProxy
  • Kubernetes
  • BuildKit

For teams that work in R and Python

Hub is meant for teams whose code, data and apps have to stay inside the company: a data-science group in a mid-sized business, a research unit, or a consultancy working for several clients. Analysts and data scientists work in it, and either your IT department or I run it.

  • One login: everyone signs in through your identity provider, and its groups decide who is an admin and who sees which app
  • One home directory: persistent, and shared by all three IDEs
  • One command to publish: no ticket to IT and no hand-written Dockerfile
  • No per-user pricing: hosted or on your own infrastructure

Open source all the way down

ShinyProxy and the ShinyProxy Operator run the sessions and the apps on Kubernetes. k3s, Caddy, BuildKit, a container registry, Redis, Velero, Grafana, Loki and Prometheus do the rest. No proprietary runtime sits between your team and its code.

What your team does not need to know

Docker, Kubernetes or YAML. A deploy produces a standard container image, and projects stay ordinary R or Python projects.

What's in it

The documentation has the details. This is the short version.

Three IDEs, one home directory

RStudio Server, VS Code and JupyterLab start from the same page and share each user's home directory. You pick a size per session, and you can run several sessions of one IDE side by side.

Coding agents that know the platform

Claude Code runs in every IDE, and RStudio has an assistant of its own as well. Both get the same instructions, rules and skills from the platform, so they know the project layout, know how a deploy works and can fix a failed build. AI can also be switched off entirely.

Deployment from the IDE

hub deploy builds the project in the current directory, pushes the image and registers it. That covers Shiny for R and Python, Quarto and R Markdown, Plumber and FastAPI APIs, MCP servers and scheduled targets pipelines. hub rollback brings back any of the last ten versions.

Your identity provider

OpenID Connect with Keycloak, Microsoft Entra ID, Okta, Auth0 or Cognito, plus LDAP, Active Directory and SAML. With OIDC, the APIs accept the provider's tokens too, so scripts and other services call them with a real identity.

Your packages, your network

The R and Python package sets each live in a text file, pinned to a snapshot date. Private mirrors, your company's CA certificates and extra system packages are part of the configuration, and the image layer that holds them is built inside your network.

Versioned releases

Each release is a single versioned artifact. install.sh upgrade moves the hub to a new version and install.sh rollback takes it back to the previous one. Daily backups to an S3 bucket and monitoring with alert mail are one installer option each.

How a deploy works

From an empty project to an app your colleagues can open.

Create a project

In RStudio or VS Code on the hub, with hub::new_app(), through the project wizard in RStudio, or by asking the agent.

Work as usual

renv or uv records the dependencies. The agent knows the project layout and the hub's commands.

Publish

hub deploy builds an image with your packages and their system libraries, pushes it to the hub's registry and registers the app.

First build a few minutes, a redeploy with unchanged packages seconds

Colleagues open the app

With their company login. Which groups get access is set in the project's hub.yaml.

$ hub deploy
hub: packing /home/rstudio/sales as 'sales'
hub: building sales as registry.hub.acme.example/apps/sales:latest (shiny; mode: renv, Dockerfile: generated, renv.lock: yes)
hub: system packages: libcurl4-openssl-dev libssl-dev
...
hub: pushed registry.hub.acme.example/apps/sales:latest (sha256:3f9c1a7e2b04)
hub: app registered; the apps server restarts (about a minute)
hub: https://apps.hub.acme.example/app/sales
The output of a deploy, with the build log left out.

Hosted, or on your side

Both are the same software with the same installer.

Hosted by me

  • A dedicated server per client, not shared with anyone
  • I install, upgrade and monitor it
  • Your team signs in through your identity provider
  • The configuration is yours and moves with you if you later run the hub yourself

On your infrastructure

  • A fresh Ubuntu server is set up with one command
  • For an existing Kubernetes cluster, the same installer runs from a jump host
  • The platform images come from my registry, with your account
  • The layer with your packages and certificates is built on your side

Common questions about Hub

Try Hub

The documentation at docs.hub.linnerprogramming.com covers installation, configuration and deployment in detail. For a trial account, a hosted hub or a quote for your own infrastructure, send me a few lines about what you have in mind.