Release notes¶
What changed in each release of the hub, newest first. Each release lists only the groups that apply: Features (new things you can do), Changes (existing behaviour that is different now, including anything you have to act on), Bug fixes and Updates (new versions of bundled components: IDEs, R, Python, Claude Code, ShinyProxy, ...).
Unreleased¶
Features¶
- On your own Kubernetes cluster the installer works from a jump host:
install.sh install --cluster(andupgrade,rollback,diagnoseas on a single host) replaces the bundle you used to get from us. The release and your configuration are fetched with your account, your images are built where you are. - Documentation at https://docs.hub.linnerprogramming.com: installing on a host or a cluster,
the overlay and every
hub.envkey, these release notes. One tree per release; the version menu at the top switches between them.
Bug fixes¶
install.shas downloaded from our registry stopped at start with "No such file or directory": it looked for a file that only our source tree has.generateanddiagnosehad the same dependence. All three work from the downloaded file alone now.
v0.5.0 (2026-10-14)¶
Features¶
-
One-command installation on a single Ubuntu host:
install.shfrom our distribution registry fetches a release, writes your overlay from a domain, a mail address, the features, the IDEs and the auth mode (simple or OpenID Connect, Keycloak included), sets the host up and tests the hub.install.sh upgrade <version>androllbackmove a hub between releases, with a backup first where backups are on; the overlay stays yours and is never overwritten. -
install.sh diagnosewrites one archive with what we need to look at a problem on your hub: host state, your configuration without its secrets and certificates, the cluster's objects, the platform's logs and the public checks. Send it to us. -
On a cluster,
session_pool=trueinhub.envkeeps user code (IDE sessions, apps, APIs, builds, pipeline runs) on the nodes you label and tainthub.linnerprogramming.com/pool=sessions, and the platform's own pods off them. Off by default; a single machine needs nothing.
Changes¶
- For customers whose configuration we maintain, it arrives with each release and with every
change we make for you:
install.sh installandupgradefetch it with your account. Your secrets and certificate files stay on your host and are never part of it. - Platform images come from our distribution registry, the same for every customer, with a
read-only account per customer. A bundle's customer layer is built after one
docker loginwith that account;--platform-fromis no longer needed. Your own registry holds only your images (hub/*,apps/*) from now on.
v0.4.2 (2026-10-13)¶
Features¶
- Apps bound to a git repository over SSH:
hub git bind git@host:pathmakes a key for the binding and prints its public key and the server's host key fingerprints; register the key as a read-only access key (Bitbucket) or deploy key (GitHub, GitLab, Gitea) of the repository and run the command again. No token to paste or to renew. The https form with a token stays. Needs a rebuild of the deploy service image.
v0.4.1 (2026-10-13)¶
Changes¶
- Security review of the platform: inside a hub, an IDE session or a Shiny app now answers
the hub's proxy only, an API or MCP server its auth sidecar only, and code running in a
deployed app can no longer run
hubcommands as whoever is viewing it. Pods that run user code can reach the internet and the hub but not the cluster's own addresses. The login token of the identity provider is no longer visible inside sessions and apps. The VS Code session has nosudoany more.hub history,hub runsandhub logsanswer the app's owner and admins only.hub git bindtakeshttps://URLs only;uses:andsystem-packages:in hub.yaml must be names;r-btw,btw,hubandclaudecannot be app names. Needs a platform re-apply (new network policies, a new Secret the deploy service creates) and a rebuild of the images; an overlay should copypatches/user-egress.yamlfrom the example and list the addresses its cluster must keep from user code. Sessions started before the upgrade are covered once restarted.
v0.4.0 (2026-10-13)¶
Features¶
-
MCP servers as a kind: a project with
_server.yml(engine: mcptools,tools: tools.R, a list of ellmer tools) deploys withhub deployas an MCP server of R tools, and every colleague itsaccess-groupsadmit gets it in their Claude Code and Posit Assistant at their next session start;hub mcplists them,hub apikeygives other clients the credential.hub::new_app(template = "mcp")scaffolds one (not on hubs without AI). R only for now. -
Identity at APIs and MCP servers: a call from inside the hub (an IDE session, a Shiny app, a pipeline run) at the in-cluster address
http://api-<name>/is made as the user, the server'saccess-groupsare checked on every call, and the API receives the caller in the same headers a Shiny app gets (hub::user(request));hub::api_url()names the address. From outside, a token of the hub's IdP (Authorization: Bearer) is the identity, for people and, with the newaccess-clientskey in hub.yaml, for registered systems; the hub'sapi_token_*keys in hub.env turn that on. The API key remains for callers without an identity. MCP servers are registered without a credential. Needs a platform re-apply (the HubApp schema grows); a pipeline calls with its owner's groups after its next deploy.
Changes¶
- The project templates are formatted with Air and ship an
air.tomlwhoseskip = ["use"]keepsbox::use()blocks as written when you format a project. -
Apps bound to a git repository:
hub git bind URL --branch maindeploys the branch now and then every push to it within a minute, without an IDE session;hub deployof a bound app is refused untilhub git unbind. HTTPS with a read-only token;hub git statusshows the last check and build, admins get an alert when a build from a push fails. Also ashub::git_bind()in R. Needs a platform re-apply (the HubApp schema grows). -
Hubs without AI:
ai=falseinhub.envbuilds the IDEs without Claude Code, Posit Assistant, ellmer, btw and gander and sets none of them up.