Changelog
Source:NEWS.md
golem (development version)
New features
-
use_external_js_file(),use_external_css_file(),use_external_html_template(),use_external_file()anduse_bundled_html()gain areplaceargument. WhenTRUE, an existing file (or bundle directory) at the target location is overwritten instead of aborting (#819). - Development-time scaffolding helpers (
use_*,add_*,set_golem_*) now emit a warning when they are called while golem is in production mode (options('golem.app.prod' = TRUE)), helping catch accidental invocations from a deployed app (#808).
golem 0.5.1 to 0.6.0
CRAN release: 2024-08-27
New features / user-visible changes
New
use_skills(),use_agent_skills(),use_claude_skills()anduse_skill()helpers install agent skills (Claude Code / AGENTS.md layouts) into a golem project, from the package’s bundled skills or from the upstreamThinkR-open/golem-agent-skillsrepository (@ilyaZar, #1233).create_golem()gainswith_agentsandwith_agents_optionsarguments to optionally install agent skills during project creation, and the RStudio “New Project” wizard exposes a matching set of options (@ilyaZar, #1233).Installing agent skills now appends the corresponding entries (
^\.claude$,^CLAUDE\.md$,^\.agents$,^AGENTS\.md$) to the project’s.RbuildignoresoR CMD checkno longer flags them as non-standard top-level files.New
add_github_action()andadd_gitlab_ci()helpers generate minimal deployment CI for fresh golem apps.The deployment CI helpers restore
renv.lockwhen it is present, fall back toDESCRIPTIONwhen it is not, and declare pkgload for the generated Posit Connect entrypoint.The
add_dockerfile_with_renv_*function now generates a multi-stage Dockerfile by default (usesingle_file = FALSEto retain the previous behavior).The
add_dockerfile_with_renv_*function now creates a Dockerfile that setsgolem.app.prod = TRUEby default (useset_golem.app.prod = FALSEto retain the previous behavior).Print functions have be reworked standardized using the cli package (@ilyaZar, #89)
use_bundled_html()downloads bundled HTML templates as zip archives, optionally extracts them intoinst/app/www, and can remove the raw zip afterwards (#848)add_fct()gains atemplateargument to customize the content of the generated file; the default template is now exposed as the exportedfct_template()function, mirroring themodule_template()/add_module()pattern (@ilyaZar, #838)add_js_input_binding()andadd_js_output_binding()now generate a functional binding: the JS file contains workingfind,getValue/renderValue,setValue,receiveMessage, andsubscribeimplementations, and an R companion file (fct_<name>_input_binding.R/fct_<name>_output_binding.R) is created alongside it with ready-to-use UI constructor, update, and render functions (@ilyaZar, #868, #869)
Breaking change
The
get_current_config()has been rework in two ways: (1) it now either check theGOLEM_CONFIG_PATHenv var or the default path (inst/golem-config.yml). golem no longer tries to guess non standard paths, and does a hard fail if the file doesn’t exist, (2) the function no longer copy theconfigfiles from the skeleton if ever the files are not there (@ilyaZar, @LDSamson, #1178)golem functions used to rely on arguments that where either
wd,path,pkgorgolem_wd. This has now been standardized and all functions rely ongolem_wdnow (@ilyaZar, #845)get_sysreqs()has been removed; usedockerfiler::get_sysreqs()instead.use_recommended_deps()has been removed.add_rstudioconnect_file()has been removed; useadd_positconnect_file()instead.Creating a
golemdoesn’t callset_here()norusethis::create_project()anymore. It used to be because we wanted to be able to usehere::here(), but the function should be able to find its way based usingDESCRIPTION. It gives a lighter implementation of golem projects creation as it doesn’t mess up with wherehere()is anymore.-
The
add_*_filesanduse_*_filesnow fail when:- The directory where the user tries to add the file doesn’t exist. golem used to try to create the directory but that’s not the function job — use_*_file functions should only be there to add file (Single responsibility)
- The file that the user tries to create already exists
Creating a golem with
create_golem(overwrite = TRUE)will now delete the old folder and replace with the golem skeleton.add_js_input_binding()andadd_js_output_binding()generate JS files with a new naming scheme:<name>-input.js/<name>-output.js(previouslyinput-<name>.js/output-<name>.js). Manually rename or delete any old binding files (@ilyaZar, #868, #869)The default
eventsargument ofadd_js_input_binding()has changed fromlist(name = "click", rate_policy = FALSE)tolist(name = c("change", "input"), rate_policy = c(FALSE, FALSE))to produce a functional input binding out of the box (@ilyaZar, #868)
User visible change
-
run_dev()only prints one message (#1191 / @howardbaik)
Soft deprecated
browser_button()is now soft deprecated (#1155)add_dockerfile(),add_dockerfile_shinyproxy(), andadd_dockerfile_heroku()are now explicitly soft deprecated; use the correspondingadd_dockerfile_with_renv_*()functions.
Bug fix
Removing the comments on golem creation didn’t work fully, this has been fixed.
Renamed a function in 02_dev.R (add_any_file => add_empty_file)
The
create_if_needed()function has been fixed to work in non interactive mode (#1154, @pachadotdev)
Internal changes
Added internal
cli_progress_bar(),cli_progress_update(),cli_progress_done()wrappers andcat_start_unzip()/cat_unzipped()helpers (@ilyaZar, #1234)golem now embarks a
claude.mdfile and a series of skillsFull refactoring of the
add_*_filesanduse_*_filesfunctions that now all share the same behaviorThe internal
check_name_consistency()now parses the code ofapp_config.Rand get thepackagearg ofsystem.file, instead of doing a text based search. This allows the function to detect several calls tosystem.fileand fixes the bug from #1179
golem 0.5.0
CRAN release: 2024-08-19
New functions
is_golem()tries to guess if the current folder is a golem-based app (#836)use_readme_rmd()adds a golem specificREADME.Rmd(@ilyaZar, #1011)rename
add_rstudioconnect_file()toadd_positconnect_file()(@ilyaZar, #1017)add_empty_filecreates an empty file in the www directory (#837)golem::welcome_page()now display a page on default scaffold app (#1126)Defunct usethis functions has been removed from dev.R (@ilyaZar, #1125)
New features / user visible changes
sourcing
dev/01_start.Rleaves the file in a clean state with all files added to the initial commit (#1094, @ilyaZar)READMEis re-styled and links to various external resources of thegolemverse(#1064, @ilyaZar)a_start-vignette has updated documentation (#1046, @ilyaZar)fill_desc()automatically callsset_options(); seedev/01_start.Ras well (#1040, @ilyaZar)fill_desc()now uses apersonvector (#1027, @jmeyer2482, @ColinFay and @ilyaZar)use_{internal,external}_XXX_file()function family has improved error handling for non-interactive usage (#1062, @ilyaZar)add_fct()now adds the skeleton for a function (#1004, @ilyaZar)The module skeleton now stick to tidyverse style (#1019, @ni2scmn)
Better comments to
fill_desc()in01_start.R(#1021, @ilyaZar)01_start.Rnow has a call tousethis::use_git_remote()(#1015, @ilyaZar)Tests for
R/golem_utils_server.RandR/golem_utils_ui.Rnow have full code coverage (#1020, @ilyaZar)When setting a new name, golem now browses tests & vignettes (#805, @ilyaZar)
use_git()is now at the bottom of 01_dev.R ((#1094, @ilyaZar))golem::add_dockerfile_with_renv_*()set “rstudio” as default USER in Dockerfile to avoid launching app as rootIt is now easier to modify the renv.config.pak.enabled parameter in the Dockerfile generated by
golem::add_dockerfile_with_renv_*()functions.We create an
.rscignorein the golem dir whenever creating the connect related file (#110, @ilyaZar)
Bug fixes
use_{internal,external}_XXX_file()function family works with default missingnameargument (#1060, @ilyaZar)run_dev()now install needed dependencies to sourcedev/run_dev.Rif needed (#942, @ilyaZar, @vincentGuyader)use_readme_rmd()does not pop up when argumentopen=FALSEis set (#1044, @ilyaZar)Docker commands now take the
-itflag so it can be killed with^C(#1002, @ivokwee)add_module()now behaves correctly when trying to usemod_mod_XXXand no longer opens an interactive menu (#997, @ilyaZar)attachment now has a minimum version requirement (#1104, @ilyaZar)
create_golem()can be now used with path = “.” and package_name empty
Internal changes
Add tests for (under/un)-tested files and functions and improve code coverage of golem (#1043, #1050, #1059, #1066, #1075, @ilyaZar)
guess_where_config()now finds the user config-yaml by reading its new location from user changes in “R/app_config.R” (#887, @ilyaZar)All functions that require to get a path now rely on
get_golem_wd()(#1016, @ilyaZar)The test suite has been refactored and is now silent and faster.
golem 0.3.5
CRAN release: 2022-10-18
Update in the tests for CRAN (commented a test that made new version of testthat fail).
golem 0.3.3
CRAN release: 2022-07-13
New functions
-
add_dockerfile_with_renv(),add_dockerfile_with_renv_heroku()andadd_dockerfile_with_renv_shinyproxy()build Dockerfiles that rely on renv
Soft deprecated
-
add_dockerfile,add_dockerfile_shinyproxy()andadd_dockerfile_heroku()now recommend to switch to their_with_renv_counterpart
golem 0.3.2
CRAN release: 2022-03-04
Soft deprecated
-
use_recommended_deps()is now soft deprecated (#786)
Hard deprecated
- The
htmlparameter inexpect_html_equal()is no longer in use (#55).
New functions
add_sass_file()creates a .sass file in inst/app/www (#768)use_module_test()creates a test skeleton for a module (#725)
New features
The
02_dev.Rfile now suggests usingattachment::att_amend_desc()(#787)use_code_of_conduct()in dev script now has the contact param (#812)All
with_testparams are now TRUE in the dev script (#801)test-golem-recommendednow has two new tests forapp_sysandget_golem_config(#751)use_utils_ui()use_utils_server()& now come with awith_testparameter that adds a test file for theses functions (#625 & #801)golem now checks if a module exists before adding a module related file (#779)
Every rstudioapi calls is now conditionned by the availabily of this function (#776)
use_external_*functions no longer suggest to “Go to” (#713, @novica)create_golem()now comes withwith_gitparameter that can be used to initialize git repository while creating a project templateuse_recommended_tests()now comes withtestServer(#720).expect_html_equal()now usestestthat::expect_snapshot()(#55).add_modules(),add_fct()andadd_utils()now come with awith_testparameter that can be turned on to add a test file to the module (#719 & #141)/! All docker related functions have been moved to dockerfiler. This is more or less a breaking change, cause you’ll need to install dockerfiler > 0.1.4 in order to build the Dockerfile but golem will ask you to install dockerfiler > 0.1.4 if it can’t find it, (#412)
Modules ID no longer contain an
_ui_element, (#651, @MargotBr)run_dev now has
options(shiny.port = httpuv::randomPort())to prevent the browser from caching the CSS & JS files (#675)You can now specify the path to R in
expect_running().
Bug fix
Fixed a bug in the printing of the htmlTemplate code (#827)
We now require the correct usethis version (822)
recommended tests now use
expect_type()instead ofexpect_is, which was deprecated from testthat (#671)Fixed check warning when using
golem::use_utils_server()(#678),Fixed issue with expect_running & path to R (#700, @waiteb5)
expect_running()now find R.exe on windows.use_recommended_tests()no longer add processx to theDESCRIPTION(#710)bundle_resource()does not include empty stylesheet anymore (#689, @erikvona)
golem 0.3.1
CRAN release: 2021-04-17
New functions
add_*
You can now create a skeleton for a Shiny input binding using the
golem::add_js_binding("name")function (#452, @DivadNojnarg)You can now create a skeleton for a Shiny output binding using the
golem::add_js_output_binding("name")function (@DivadNojnarg)add_html_template()creates an htmlTemplate.
use_*
use_external_file()allows to add any file to thewwwfolder,use_external_css_file(),use_external_html_template(), anduse_external_js_file()will download them from a URL (#295, #491).use_internal_css_file(),use_internal_file(),use_internal_html_template(),use_internal_js_file()functions allow to any file from the current computer to thewwwfolder (@KasperThystrup, #529)
Tests helper
-
expect_running()expects the current shiny app to be running.
Hooks
Every golem project now have a
project_hookthat is launched after the project creation.module_template()is the default function for golem module creation. Users will now be able to define a custommodule_template()function foradd_module(), allowing to extend golem with your own module creation function. See ?golem::module_template for more info (#365)add_js_andadd_css_functions now have a template function, allowing to pass a file constructor.
Misc
is_running()checks if the current running application is a golem based application (#366)utils_ui.Rnow contains a “make_action_button()” function (#457, @DivadNojnarg)run_dev()performs a check on golem name.sanity_check()function has been added to check for any ‘browser()’ or commented #TODO / #TOFIX / #BUG in the code (#1354 @Swechhya)
New features
The modules are now created with the new skeleton when the installed version of shiny is >= 1.5.0.
use_external_*()function don’t open files by default (#404)use_recommended_tests*()now callsuse_spell_check()(#430)The
02_dev.Rnow includes more CI linksgolem::expect_running()is now bundled in default testsDefault tests now test for functions formals (#437)
You can now pass arguments to internal
roxygenise()&load_all()(#467)Bundle_resources()now handle subfolders (#446)run_app()now includes the default arguments ofshinyApp()(#254, @chasemc)create_golem()now adds strict dependency versions (#466)golem app now comes with a meta tags “app-builder”, which default to “golem”, and that can be changed or turn off in
bundle_resources().with_golem_optionscan now explicit callsprinton theappobject, solving some issues with benchmarking the application. This explicit print can be turned off by settingprintto FALSE inwith_golem_options(#148)dockerignoreis now available.The
add_helpersandadd_utilsnow have roxygen comments (Richard Pilbery, #330)dev/03_dev.Rnow hasdevtools::build()(#603)detach_all_attached()is now silent (#605)
Soft deprecated
-
add_ui_server_files()is now signaled as deprecated. Please comment on https://github.com/ThinkR-open/golem/issues/445 if you want it to be kept inside the package
Breaking changes
add_dockerfile*function now return the dockerfiler object instead of the path to it. It allows to modify the Dockerfile object programmatically. (#493)The
get_golem_confignow first look for aGOLEM_CONFIG_ACTIVEbefore looking forR_CONFIG_ACTIVE(#563)
Bug fix
add_functions no longer append to file if it already exists (#393)config::get()is no longer exported to prevent namespace conflicts withbase::get()fixed issue with favicon when package is built (#387)
use_external_*()function don’t add ext if already there (#405)create_golemfunction does not modify any existing file (#423, @antoine-sachet)add_resources_path()now correctly handles empty folder (#395)test for app launching is now skipped if not interactive()
add_utilsandadd_fctnow print to the console (#427, @novica)Multiple CRAN repo are now correctly passed to the Dockerfile (#462)
app_config, DESC and golem-config.yml are now updated whenever you change the name of the package using a golem function (#469 )
test_recommendednow work in every case (hopefully)usethis::use_mit_licensedoes not have thenameargument anymore so if fits new version of usethis (#594)Typo fix preventing
invoke_js("prompt")andinvoke_js("confirm")to work (#606)
Internal changes
document_and_reload()now hasexport_all = FALSE,helpers = FALSE,attach_testthat = FALSE, allowing the function to behave more closely to what library() does (#399)Dockerfile generation now removes the copied file and tar.gz
golem 0.2.1
CRAN release: 2020-03-05
New functions
add_dockerfile()was completely refactored. It now starts from r-ver, uses explicit package versions from you local machine, and tries to set as much System Requirements as possible by using{sysreq}, and parses and installs the Remotes tag from the DESCRIPTION (#189, #175)add_dockerfile()allow now to directly use the source of the package by mounting the source folder in the container and runningremotes::install_local()add_dockerfile()now builds the tar.gz (#273)add_fctandadd_utilsadd new files in your R folder that can hold utils and functions (#123).We switched from
shiny::addResourcePath()togolem::add_resource_path(), which doesn’t fail if the folder is empty (#223).New JavaScript functions to use alert, prompt and confirm (#108, @zwycl)
use_external_js_fileanduse_external_css_fileare designed to download .js and .css file off the web to the appropriate directory (#130, @zwycl)
New features
golem now comes with an internal config file. Please refer to the
configVignette for more information.bundle_resources()comes with every new app and bundles all the css and js files you put inside theinst/app/wwwfolder, by matchine the file extension.There is now an
app_sys()function, which is a wrapper aroundsystem.file(..., package = "myapp")(#207, @novica)document_and_reload()now stops when it fails, and returns an explicit failure message (#157)You can now create a golem without any comment (#171, @ArthurData)
The default
app_ui()now has arequestparameter, to natively handle bookmarking.document_and_reload()now stops when it fails, and returns an explicit failure message (#157). It also usesget_golem_wd()as a default path, to be consistent with the rest of golem (#219, @j450h1)add_modulenow allows to create andfct_and anutils_file (#154, @novica)golem::detach_all_attached()is now silent (#186, @annakau)There is now a series of addins for going to a specific golem file (#212, @novica), and also to wrap a selected text into
ns()(#143, @kokbent)Creation of a golem project is now a little bit more talkative (#63, @novica)
golem apps now have a title tag in the header by default, (#172, @novica)
The
rsconnectfolder is now added to.Rbuildignore(#244)devtools::test()in 03_deploy.R is nowdevtools::check()modules bow have a placeholder for content
Dev scripts have been rewritten and reordered a little bit
Breaking changes
invoke_js()now takes a list of elements to send to JS (through...) instead of a vector (#155, @zwycl)get_dependencieswas removed from this package, please usedesc::desc_get_deps()instead (#251)golem now uses
here::here()to determine the default working directory (#287)Modules used to be exported by default. You now have to specify it when creating the modules (#144)
run_app()is no longer explicitely namespaced in the run_dev script (#267)JavaScript files now default to having
$(document).ready()(#227)Every filesystem manipulation is now done with fs. That should be pretty transparent for most users but please open an issue if it causes problem (#285)
Bug fix
The Dockerfile is now correctly added to .Rbuildignore (#81)
The dockerfile for shinyproxy no longer has a typo (#156, @fmmattioni)
normalizePath()now has a correct winlash (@kokbent)spellcheck in files (@privefl)
Message to link to
golem_add_external_resources()is now conditional to R being in a golem project (#167, @novica)When adding file, the extension is now ignored if provided by the user (#231)
The dots R/run_app.R are now documented by default (#243)
Bug fix of the pkgdown website (#180)
golem now correctly handles command line creation of projet inside the current directory (#248)
The test are now more robust when it comes to random name generation (#281)
Internal changes
We no longer depend on stringr (#201, @TomerPacific)
get_golem_wd() is now used everywhere in golem (#237, @felixgolcher)
golem 0.1.0 - CRAN release candidate, v2
New Functions
-
get_golem_wdallows to print the current golem working directory, andset_golem_wdto change it.
Breaking changes
In order to work, the functions creating files need a
golem.wd. This working directory is set byset_golem_optionsor the first time you create a file. It default to".", the current directory.Changes in the name of the args in
set_golem_options:pkg_pathis nowgolem_wd,pkg_nameis nowgolem_name,pkg_versionis nowgolem_version
Internal changes
The
installed.packages()function is no longer used.
golem 0.0.1.9999 - CRAN release candidate
Changes in the way run_app and deploy files are build
- There is now a unique framework for run_app, that allows to deploy anywhere and can accept arguments. These arguments can then be retrieved with
get_golem_options().
See https://rtask.thinkr.fr/blog/shinyapp-runapp-shinyappdir-difference/
Breaking Changes
- There is no need for
ui.Randserver.Rto exist by default. Removed. Can be recreated withadd_ui_server_files()
New function
- There is now
add_shinyserver_file&add_shinyappsio_file, #40 -
add_ui_server_files()creates an ui & server.R files.
Small functions updates
- Functions that create file(s) now automatically create folder if it’s not there. Can be prevented with
dir_create = FALSE - Functions that create file(s) can now be prevented from opening with
open = FALSE, #75 - We have made explicit how to add external files (css & js) to the app, #78
- Launch test is now included in the default tests #48
golem 0.0.1.6000+
Changes
-
create_golem()now switch to the newly created project -
use_git()is not listed indev/01_start.R
Breaking changes
- Renamed
add_rconnect_file()toadd_rstudioconnect_file() - Renamed
create_shiny_template()tocreate_golem() - Renamed
js()toactivate_js() - Renamed
use_recommended_dep()touse_recommended_deps()
New functions
-
invoke_js()allows to call JS functions from the server side. #52
golem 0.0.1.5000
Changes
The dev files are now split in three - start / dev / deploy
Every function that adds a file now check if the file already exists, and ask the user if they want to overwrite it (#15)
Every module is now named mod_x_ui / mod_x_server, for consistency.
You can now create package with “illegal” names, using the command line
golem::create_shiny_template(). #18add_browser_button()is now namedbrowser_button(), so that all theadd_*function are only reserved for function adding files to thegolem.add_*_filesnow check if the folder exists, if not suggests to create it. #36
New functions
You now have a
browser_dev()function that behaves likewarning_devand friends. #46Added
set_golem_options()to add local options used internally by {golem} && added it to the01_start.R. #49Added
add_dockerfile()to create a Dockerfile from a DESCRIPTION.Added
add_dockerfile_shinyproxy()to create a Dockerfile from a DESCRIPTION, to be used in Shiny Proxy.Added
add_dockerfile_heroku()to create a Dockerfile from a DESCRIPTION, to be used with Heroku.add_css_file(),add_js_file()andadd_js_handler()create a CSS, JS, and JS with Shiny custom handler files.