aurora_app() now sources helpers/*.R into a
dedicated environment (parented on the global env) and parses each
router with parse_file(env = ) so handlers still resolve
helpers, without anything landing in .GlobalEnv.aurora_shinyproxy_yaml() and
aurora_ruscker_yaml() take file = NULL and
require an explicit path when write = TRUE (no writes to
getwd() by default).DESCRIPTION adds an auto-linked reference to the
‘plumber2’ web framework.aurora_dockerfile() default pin bumped to
@v0.1.12.aurora_ruscker_yaml() emits a Ruscker app spec
for a built aurora image, the counterpart to
aurora_shinyproxy_yaml(). Ruscker is a lightweight
ShinyProxy alternative that reads the same application.yml
schema; since an aurora app is a stateless ‘plumber2’ API, the spec uses
type: api with an api: block
(port, docs-path, health-path,
optional rate-limit/cors) and a replica pool
(min-replicas/max-replicas). See
vignette("deploy").aurora_dockerfile() default pin bumped to
@v0.1.11 (now @v0.1.12).README.md now points to the canonical
https://plumber2.posit.co/ (the old
https://posit-dev.github.io/plumber2/ returned a 301
redirect, flagged by CRAN incoming checks).
aurora_dockerfile() default pin bumped to
@v0.1.10.aurora_dockerfile() default pin bumped to
@v0.1.9._aurora.yml gains an optional statics: key
– a map of URL prefix to directory, served by aurora_app()
at that prefix in addition to www/ at /. Lets
several apps share assets (logo, JS libraries, CSS) from one server-side
directory mounted as a volume. Relative paths resolve against the app
root; a missing directory (e.g. an unmounted volume) is skipped with a
warning so the app still starts. The root path / stays
reserved for www/. See vignette("deploy") and
ADR-018.aurora_dockerfile(aurora_source = ) default pin bumped
to @v0.1.8..dockerignore is bundled un-hidden (as
dockerignore) and renamed by
aurora_create_app(); the empty
www//www/images/ .gitkeep
placeholders are gone (the scaffold creates www/images/
itself). Scaffolded apps are unchanged.
R CMD check --as-cran is now 0/0/0.aurora_dockerfile(aurora_source = ) default pin bumped
to @v0.1.7.aurora_build_image(platform = ) selects the image’s
target platform via docker build --platform, defaulting to
"linux/amd64" so images built on Apple Silicon run on the
usual x86-64 servers (an arm64 image fails there with
exec format error). Pass platform = NULL to
build for the host architecture.aurora_dockerfile(aurora_source = ) default pin bumped
to @v0.1.6.aurora_dockerfile(locale = ) now defaults to
"pt_BR.UTF-8" (matching the
tz = "America/Recife" default). Pass
locale = "C.UTF-8" for the universal UTF-8 locale, or any
other.apt-get install locales +
locale-gen), since the rocker/Ubuntu base ships only
en_US.UTF-8. Combined with the alpine musl-locales support,
a non-C locale works on both flavors out of the box.aurora_dockerfile(locale = ) controls the image
ENV LANG/LC_ALL (default
"C.UTF-8"), pairing with tz =.tz and locale arguments are now validated
at generation time: an unknown timezone (not in
OlsonNames()) errors instead of silently falling back to
UTC in the container; a non-UTF-8 locale warns.pt_BR.UTF-8) now
installs the musl-locales/musl-locales-lang
packages so it actually resolves in R. musl support is partial
(charset/messages apply; collation falls back to C).ENV TZDIR=/usr/share/zoneinfo
(alongside tzdata) so the baked timezone actually resolves
in R. r-minimal strips R’s bundled zoneinfo, so without
TZDIR R warned “unknown timezone” and fell back to UTC
despite tzdata being installed.tzdata whenever
aurora_dockerfile(tz = ) is set (the default). Alpine ships
no timezone database, so ENV TZ previously fell back to
UTC; with tzdata the timezone
(e.g. America/Recife) resolves in the OS, R, and DB
drivers.Hardening and ergonomics distilled from migrating and containerizing a real app.
aurora_config() reads data/config.yml
anchored to the app root (no cwd pitfall).aurora_check() lints an app: UI code in runtime
helpers, packages used but undeclared in _aurora.yml,
missing prebuilt UI.aurora_unbox() /
aurora_geojson() / aurora_unique() (NULL-safe
unbox / sf -> GeoJSON / sorted-unique).aurora_app(attach = ) /
_aurora.yml: attach: attaches the declared runtime
packages: before sourcing helpers, so handlers can call
them unqualified.aurora_run(on_exit = ) runs a cleanup function when the
server stops (e.g. pool::poolClose()), on plumber2’s
"end" lifecycle event.aurora_dockerfile(tz = ) bakes ENV TZ
(default America/Recife); the default
aurora_source is pinned to a release tag for reproducible
builds.config::get("data/config.yml"),
readRDS("data/x.rds")) resolve as they did under the
plumber-v1 entrypoint.loadNamespace
error.sf
-> gdal/geos/proj, RPostgres -> libpq, …) plus
gfortran/libgfortran; .dockerignore excludes
data/.First release (2026-06-01). A complete dev loop, theming, UI↔︎API
wiring, opt-in auth/data/telemetry, Docker/ShinyProxy generation, three
worked examples, and a pkgdown site. R CMD check is clean
(0 errors / 0 warnings).
aurora_create_app() (templates: minimal,
auth), aurora_build_ui(),
aurora_app(), aurora_run(),
aurora_add_route().aurora_run(watch = TRUE): live-reload rebuilds the
static UI when build_ui.R/ui_modules/ change
(polls via later).minimal
template ships _brand.yml and uses
bs_theme(version = 5, brand = TRUE); bslib bakes the theme
into the static HTML at build time. aurora builds no theming layer.aurora_component(): thin helper emitting an element
wired to a JSON endpoint via data-endpoint; app JS renders.
No rendering JS shipped.aurora_auth_jwt() +
aurora_jwt_token(), aurora_jwt_decode(),
aurora_jwt_guard(), aurora_set_auth_cookie(),
aurora_clear_auth_cookie(). The auth template
gates /api/* with a @header guard and
reqres::abort_unauthorized().aurora_data_store() +
aurora_data_register(), aurora_data_get(),
aurora_data_names(): globals-free store that hot-reloads a
dataset when its file changes on disk.aurora_run(otel = TRUE) /
aurora_app(otel=) / AURORA_OTEL — wires
api_logger(logger_otel()), off by default.aurora_dockerfile() with a flavor
argument: "debian" (default; rocker/r-ver +
Posit Package Manager binaries) or "alpine"
(rhub/r-minimal
installr, a tiny source-built image).
aurora_build_image() and
aurora_shinyproxy_yaml() (emits a ShinyProxy
proxy.specs block).See the package website for the full reference and articles.