- add
proxy.default-stop-proxy-on-logout
option to not stop apps on logout of a user (see docs) - add option to limit the maximum lifetime of an app (see docs)
- add
proxy.stop-proxies-on-shutdown
option to not stop apps on shutdown of ShinyProxy (see docs) - optionally restore running apps on startup (known as App Recovery)
- add
heartbeat-timeout
property to the specification of proxies (see docs) - allow to disable the
heartbeat-timeout
property (see docs) - add authentication information to SpEL context (see docs)
- add way to easily use runtime-values in SpEL (see docs)
- add
kubernetes-additional-persistent-manifests
option to specification of apps. These Kubernetes manifests are created when an app starts, but are never removed (in contrast tokubernetes-additional-manifests
) (see docs) - add
absolute_apps_running
,absolute_users_logged_in
,absolute_users_logged_in
metrics to Micrometer (i.e. Prometheus) metrics, providing a way more consistent and correct value - add
proxy.usage-stats-micrometer-prefix
to optionally prefix Micrometer (i.e. Prometheus) metrics - add
target-path
option to specification of apps (see docs) - add a fallback heartbeat system for when the app does not use websockets and does not send HTTP requests often enough. This makes it easier to run applications which do not have these functionalities (e.g. traditional server-rendered apps, static html files etc.).
- add
Restart app
button to navigation bar - add
Stop app
button to navigation bar - add mechanism to automatically reconnect the websocket connection in case it gets disconnected (see docs)
- add support for running multiple instances of the same app by a single user (see docs)
- add
hide-navbar-on-main-page-link
option to the specification of apps. When this option is enabled, thesp_hide_navbar
query parameter will be added to the link on the main page to that app. This way you can control that an individual app is opened with the navbar hidden, while it is still possible to show the navbar for that app (by changing the URL). - automatically extend the lifetime of the session of a user when a websocket connection is active. This prevents the user from automatically getting logged out when using an app that only uses a websocket connection and no HTTP requests (see the corresponding GitHub issue)
- add support for using SpEL in
proxy.openid-logout-url
(so thatid_token_hint
can be provided) (see docs) - add support for using
http.proxyHost
andhttp.proxyPort
system properties for HTTP requests made by the SAML component (e.g. to fetch SAML metadata), contributed by @bartleboeuf - updated admin page to show more information
- add support for grouping apps (see docs)
- add support for specifying metadata to an app that can be used in the template (see docs)
- add
access-users
property to proxy specification. This allows to configure a list of users that should have access to the app (see docs) - add
access-expression
property to proxy specification. This allows to configure a SpEL expression to determine whether a user has access to an app (see docs) - Operator: add
proxy.operator.force-transfer
option. When enabled a user is automatically transferred to the latest ShinyProxy instance when not using any apps. This is checked both on the main page and before starting a new app (see the operator docs). - Operator: automatically transfer user to latest ShinyProxy instance before logging in and after logging out (see the operator docs).
- Operator: add
proxy.operator.show-transfer-message-app-page
option (see the operator docs). - Operator: add
proxy.operator.show-transfer-message-main-page
option (see the operator docs). - Fix: make issue form a client-side feature, such that current running app isn't closed
- Fix: make it possible to run Jupyter Notebooks using ShinyProxy
- Fix: make it easier to run Python Flask applications using ShinyProxy
- Fix: update jQuery library so that the Bootstrap collapse module properly works
- Fix: parsing of OIDC roles when these are provided as an embedded JSON string
- Fix: return JSON on the
DELETE /api/proxy/id
API endpoint - Fix: show message when a login attempt is rejected because of an expired session
- Fix: ensure API is accessible using access token when using Keycloak
- Fix: cleanup any started container if user logs out during startup of an app
- Fix: all web assets (JavaScript and CSS files) are now included in ShinyProxy itself and not loaded from a CDN
- Fix: adapt the
proxy.same-site-cookie
property so that it also changes the SameSite Policy for session cookies created by Undertow (i.e. the session cookie when not using Redis) - Fix: adapt the
server.secure-cookies
property so that it also changes the Secure flag for session cookies created by Spring (i.e. the session cookie when using Redis) - Fix: update all included dependencies
- Fix: do not show
undefined
in the browser when navigating away while an app is starting, for example, by logging out or navigating to the main page. - Fix: support parsing Keycloak JWKS information when it contains an ECDSA key
- Note: using
#{proxySpec.containerSpecs[0].env.get('SHINYPROXY_PUBLIC_PATH')}
in the specification of an app will no longer work. The code can be replaced
by#{proxy.getRuntimeValue('SHINYPROXY_PUBLIC_PATH')}
(see the SpEL docs) - Note: change the default value for
proxy.same-site-cookie
toLax
, in order
to ensure compatibility with changes to cookies in browsers (see the docs)
When using SAML this value may need to be changed (see the docs) - Note: make sure to use
server.secure-cookies: true
when usingproxy.same-site-cookie: None
(e.g. for making SAML work properly), see the docs