diff --git a/docs/authoring/brand.qmd b/docs/authoring/brand.qmd index e0d2a9f14..626909d7d 100644 --- a/docs/authoring/brand.qmd +++ b/docs/authoring/brand.qmd @@ -332,6 +332,17 @@ logo: small: quarto-logo ``` +#### Light and Dark Logos {#light-and-dark-logos} + +Specify different logos for light and dark mode with `light` and `dark` options under `small`, `medium`, or `large`: + +``` {.yaml filename="_brand.yml"} +logo: + medium: + light: logo.png + dark: logo-white.png +``` + #### Document logo customization You can further customize the logo at the document level with the `logo` option. diff --git a/docs/blog/posts/2025-10-13-1.8-release/_contribs.md b/docs/blog/posts/2025-10-13-1.8-release/_contribs.md new file mode 100644 index 000000000..3124a5c4d --- /dev/null +++ b/docs/blog/posts/2025-10-13-1.8-release/_contribs.md @@ -0,0 +1,157 @@ +[Aariq](https://github.com/Aariq), +[AndreasThinks](https://github.com/AndreasThinks), +[ArthurData](https://github.com/ArthurData), +[Blake-Madden](https://github.com/Blake-Madden), +[ColinFay](https://github.com/ColinFay), +[DCEW](https://github.com/DCEW), +[DanStuder](https://github.com/DanStuder), +[Data-Wise](https://github.com/Data-Wise), +[EllaKaye](https://github.com/EllaKaye), +[EmilHvitfeldt](https://github.com/EmilHvitfeldt), +[FrankwaP](https://github.com/FrankwaP), +[GabrielCoffee9](https://github.com/GabrielCoffee9), +[GeorgRamer](https://github.com/GeorgRamer), +[Gewerd-Strauss](https://github.com/Gewerd-Strauss), +[GuillaumeDehaene](https://github.com/GuillaumeDehaene), +[HarunCelikOtto](https://github.com/HarunCelikOtto), +[HayesJohnD](https://github.com/HayesJohnD), +[Joao-O-Santos](https://github.com/Joao-O-Santos), +[MateusMolina](https://github.com/MateusMolina), +[MichaelHatherly](https://github.com/MichaelHatherly), +[PeteArm](https://github.com/PeteArm), +[Selbosh](https://github.com/Selbosh), +[SergeCroise](https://github.com/SergeCroise), +[SrShelo](https://github.com/SrShelo), +[VisruthSK](https://github.com/VisruthSK), +[Vistales](https://github.com/Vistales), +[abhiaagarwal](https://github.com/abhiaagarwal), +[aborruso](https://github.com/aborruso), +[adamblake](https://github.com/adamblake), +[adamiturabi](https://github.com/adamiturabi), +[alastairrushworth](https://github.com/alastairrushworth), +[albertomercurio](https://github.com/albertomercurio), +[alecloudenback](https://github.com/alecloudenback), +[alex-r-bigelow](https://github.com/alex-r-bigelow), +[allefeld](https://github.com/allefeld), +[alyst](https://github.com/alyst), +[andrewheiss](https://github.com/andrewheiss), +[andrewpbray](https://github.com/andrewpbray), +[austin-hoover](https://github.com/austin-hoover), +[batpigandme](https://github.com/batpigandme), +[bauerj](https://github.com/bauerj), +[benkeks](https://github.com/benkeks), +[benz0li](https://github.com/benz0li), +[bkowshik](https://github.com/bkowshik), +[blackerby](https://github.com/blackerby), +[boshek](https://github.com/boshek), +[brandonmontez](https://github.com/brandonmontez), +[bryce-carson](https://github.com/bryce-carson), +[carschandler](https://github.com/carschandler), +[christopherkenny](https://github.com/christopherkenny), +[cl-roberts](https://github.com/cl-roberts), +[cmadland](https://github.com/cmadland), +[co1emi11er2](https://github.com/co1emi11er2), +[coatless](https://github.com/coatless), +[cpcloud](https://github.com/cpcloud), +[daxkellie](https://github.com/daxkellie), +[dixslyf](https://github.com/dixslyf), +[dkapitan](https://github.com/dkapitan), +[econmaett](https://github.com/econmaett), +[edavidaja](https://github.com/edavidaja), +[edvinsyk](https://github.com/edvinsyk), +[ethanwhite](https://github.com/ethanwhite), +[fermarsan](https://github.com/fermarsan), +[fredguth](https://github.com/fredguth), +[fuhrmanator](https://github.com/fuhrmanator), +[gadenbuie](https://github.com/gadenbuie), +[georgestagg](https://github.com/georgestagg), +[ghisvail](https://github.com/ghisvail), +[ghost](https://github.com/ghost), +[github-actions[bot]](https://github.com/apps/github-actions), +[glin](https://github.com/glin), +[gregswinehart](https://github.com/gregswinehart), +[gwbrck](https://github.com/gwbrck), +[halleysfifthinc](https://github.com/halleysfifthinc), +[hansfn](https://github.com/hansfn), +[hchulkim](https://github.com/hchulkim), +[holtzy](https://github.com/holtzy), +[htbunn](https://github.com/htbunn), +[hturner](https://github.com/hturner), +[hugetim](https://github.com/hugetim), +[hutch3232](https://github.com/hutch3232), +[iagopinal](https://github.com/iagopinal), +[ihrke](https://github.com/ihrke), +[jameslairdsmith](https://github.com/jameslairdsmith), +[jdfoote](https://github.com/jdfoote), +[jeremy9959](https://github.com/jeremy9959), +[jfy133](https://github.com/jfy133), +[jkrumbiegel](https://github.com/jkrumbiegel), +[jmgirard](https://github.com/jmgirard), +[jonpeake](https://github.com/jonpeake), +[jvcarli](https://github.com/jvcarli), +[jxpeng98](https://github.com/jxpeng98), +[kandolfp](https://github.com/kandolfp), +[kapsner](https://github.com/kapsner), +[kathsherratt](https://github.com/kathsherratt), +[kazuyanagimoto](https://github.com/kazuyanagimoto), +[kevinah95](https://github.com/kevinah95), +[kippandrew](https://github.com/kippandrew), +[koldle](https://github.com/koldle), +[lachlansimpson](https://github.com/lachlansimpson), +[lbm364dl](https://github.com/lbm364dl), +[leovuong](https://github.com/leovuong), +[lostmygithubaccount](https://github.com/lostmygithubaccount), +[lu-kas](https://github.com/lu-kas), +[lukmanaj](https://github.com/lukmanaj), +[lwjohnst86](https://github.com/lwjohnst86), +[maelle](https://github.com/maelle), +[mahmudstat](https://github.com/mahmudstat), +[masud90](https://github.com/masud90), +[melaniewalsh](https://github.com/melaniewalsh), +[mfisher87](https://github.com/mfisher87), +[mipmip](https://github.com/mipmip), +[mpr1255](https://github.com/mpr1255), +[multimeric](https://github.com/multimeric), +[musvaage](https://github.com/musvaage), +[mvuorre](https://github.com/mvuorre), +[nathanj3](https://github.com/nathanj3), +[nessan](https://github.com/nessan), +[nichtich](https://github.com/nichtich), +[odysseu](https://github.com/odysseu), +[ofkoru](https://github.com/ofkoru), +[olivroy](https://github.com/olivroy), +[oyvindbso](https://github.com/oyvindbso), +[pagiraud](https://github.com/pagiraud), +[parmsam](https://github.com/parmsam), +[peter-gy](https://github.com/peter-gy), +[pm-gusmano](https://github.com/pm-gusmano), +[produnis](https://github.com/produnis), +[rabyj](https://github.com/rabyj), +[raffaem](https://github.com/raffaem), +[randyzwitch](https://github.com/randyzwitch), +[rben01](https://github.com/rben01), +[rossbowen](https://github.com/rossbowen), +[rundel](https://github.com/rundel), +[ryanzomorrodi](https://github.com/ryanzomorrodi), +[ryjohnson09](https://github.com/ryjohnson09), +[s2t2](https://github.com/s2t2), +[salim-b](https://github.com/salim-b), +[samcarter](https://github.com/samcarter), +[serialc](https://github.com/serialc), +[sgelzenleuchter](https://github.com/sgelzenleuchter), +[skriptum](https://github.com/skriptum), +[spaette](https://github.com/spaette), +[stragu](https://github.com/stragu), +[sun123zxy](https://github.com/sun123zxy), +[sverrirarnors](https://github.com/sverrirarnors), +[tecosaur](https://github.com/tecosaur), +[temospena](https://github.com/temospena), +[thatchermo](https://github.com/thatchermo), +[topepo](https://github.com/topepo), +[tylere](https://github.com/tylere), +[winniehell](https://github.com/winniehell), +[wklimowicz](https://github.com/wklimowicz), +[yogabonito](https://github.com/yogabonito), +[youcc](https://github.com/youcc), +[yves-amevoin](https://github.com/yves-amevoin), +[yyzeng](https://github.com/yyzeng). diff --git a/docs/blog/posts/2025-10-13-1.8-release/get-contribs.R b/docs/blog/posts/2025-10-13-1.8-release/get-contribs.R new file mode 100644 index 000000000..cc62b7807 --- /dev/null +++ b/docs/blog/posts/2025-10-13-1.8-release/get-contribs.R @@ -0,0 +1,68 @@ +# Run using `quarto run get-contribs.R` + +library(tidyverse) +library(gh) +library(glue) + +last_release <- "2024-04-28T00:00:00Z" +milestone <- "v1.8" + +quarto_staff_vec <- + c("allenmanning", "cderv", "cscheid", "cwickham", "dragonstyle", + "jjallaire", "jooyoungseo", "kevinushey", "mcanouil", + "rich-iannone", "gordonwoodhull", "tarleb", "vezwork", "mine-cetinkaya-rundel") + +# Get milestone number ----- + +milestones <- gh("/repos/{owner}/{repo}/milestones", + owner = "quarto-dev", + repo = "quarto-cli") + +milestone_number <- map_int(milestones, "number")[map_chr(milestones, "title") == milestone] + +# Get cli issues tagged with current milestone ----- + +quarto_issues <- + gh( + endpoint = "/repos/quarto-dev/quarto-cli/issues", + .limit = 2000, + .progress = FALSE, + .params = list( + state = "all", + milestone = milestone_number + ) + ) + +quarto_issues_tbl <- map(quarto_issues, \(x) data.frame(login = x$user$login, html_url = x$user$html_url)) |> + list_rbind() + +# Get web issues since last release ----- + +quarto_web_issues <- + gh( + endpoint = "/repos/quarto-dev/quarto-web/issues", + .limit = 1500, + .progress = FALSE, + .params = list( + state = "all", + since = last_release + ) + ) + +quarto_web_issues_tbl <- map(quarto_web_issues, \(x) data.frame(login = x$user$login, html_url = x$user$html_url)) |> + list_rbind() + +# Put together, exclude staff and write to file ----- + +cli_and_web_users <- bind_rows(quarto_web_issues_tbl, quarto_issues_tbl) |> + filter(!(login %in% quarto_staff_vec)) |> + arrange(login) |> + distinct() + +strings <- cli_and_web_users |> + glue_data("[{login}]({html_url}), ") + +strings[length(strings)] <- str_c(str_sub(strings[length(strings)], 1, -3), ".") + +strings |> write_lines("_contribs.md") + diff --git a/docs/blog/posts/2025-10-13-1.8-release/index.qmd b/docs/blog/posts/2025-10-13-1.8-release/index.qmd new file mode 100644 index 000000000..4d411dabe --- /dev/null +++ b/docs/blog/posts/2025-10-13-1.8-release/index.qmd @@ -0,0 +1,136 @@ +--- +title: Quarto 1.8 +description: | + Quarto 1.8 improves brand support, introduces brand extensions, adds HTML accessibility checks, and gives access to execution context. +categories: + - Quarto 1.8 + - Releases +author: Charlotte Wickham +date: "2025-10-13" +draft: false +image: thumbnail.png +image-alt: "Quarto 1.8 with a lightbulb emoji" +css: /docs/output-formats/autodark.css +--- + +Quarto 1.8 is available! You can get the current release from the [download page](/docs/download/index.qmd). + +Quarto 1.8 improves support for light and dark brand colors and logos, brand extensions for sharing brands across Quarto projects, HTML accessibility checks powered by Axe-core, and access to more information about execution context from your code cells. +You can read about these improvements and some other highlights below. You can find all the changes in this version in the [Release Notes](/docs/download/changelog/1.8/). + +## Dark and light colors and logos in brand + +You can now specify `light` and `dark` versions of any colors or logo in a brand specification: + +```{.yaml filename="_brand.yml"} +color: + foreground: + light: "#333333" + dark: "#EEEEEE" + background: + light: "#EEEEEE" + dark: "#333333" +logos: + medium: + light: logo.png + dark: logo-white.png +``` + +This works in `_brand.yml` files as well as `brand` specified directly in document metadata. +You can also present in dark mode by specifying `brand-mode: dark` in your `format: revealjs` presentations. + +Read more in the updated [Guide > Brand](/docs/authoring/brand.qmd): + +- [Light and dark colors](/docs/authoring/brand.qmd#light-and-dark-colors) +- [Light and dark logos](/docs/authoring/brand.qmd#light-and-dark-logos) +- [Brand mode](/docs/authoring/brand.qmd#brand-mode) + +## Brand extensions + +Share brand definitions and assets across Quarto projects with a brand extension. + +Get started with: + +```{.default filename="Terminal"} +quarto create extension brand +``` + +Read more in [Extensions > Brand](/docs/extensions/brand.qmd), and keep an eye out for other ways to reuse and share your brand in future releases. + +## Accessibility checks for HTML + +You can add accessibility checks using the [Axe-core engine](https://github.com/dequelabs/axe-core) to HTML documents (`format`: `html`, `revealjs` and `dashboard`) with the new `axe` option. + +For example, you can get a summary of violations right in your document preview: + +::: {.light-content} +![A rendered webpage with an accessibility violation warning](/docs/output-formats/images/axe-violation.png){.border fig-alt="A webpage with a box in the bottom left that warns 'Serious: Ensure the contrast between foreground and background colors meets WCAG 2 AA minimum contrast ratio thresholds'."} +::: + +::: {.dark-content} +![A rendered webpage with an accessibility violation warning](/docs/output-formats/images/axe-violation.png){.border .autodark fig-alt="A webpage with a box in the bottom left that warns 'Serious: Ensure the contrast between foreground and background colors meets WCAG 2 AA minimum contrast ratio thresholds'."} +::: + +Read about your options in [HTML Accessibility Checks](/docs/output-formats/html-accessibility.qmd) + +We know accessability is a big concern for many of our users, and more improvements will be coming in future releases. + +## Accessing execution information + +Quarto sets the `QUARTO_EXECUTE_INFO` environment variable, which allows you to access information about execution context from code cells. + +Read the JSON file located at `QUARTO_EXECUTE_INFO` and access properties such as `document-path`, `format`, `metadata` and more: + +::: {.panel-tabset} + +## R + +```{.r} +library(jsonlite) +execute_info <- read_json(Sys.getenv("QUARTO_EXECUTE_INFO")) +execute_info$`document-path` +``` + +## Python + +```{.python} +import json +import os + +with open(os.getenv("QUARTO_EXECUTE_INFO")) as f: + execute_info = json.load(f) +execute_info["document-path"] +``` + +## Julia + +```{.julia} +using JSON + +execute_info = JSON.parsefile(ENV["QUARTO_EXECUTE_INFO"]) +execute_info["document-path"] +``` + +::: + +Read more in [Access execution settings from code cells](/docs/advanced/quarto-execute-info.qmd). + +## Other Highlights + +- Access [metadata](/docs/extensions/lua-api.qmd#metadata-access) and [variables](/docs/extensions/lua-api.qmd#variables-access) in filters and shortcodes: Use the new `quarto.variables.get()` and `quarto.metadata.get()` APIs. + +- The default LaTeX engine is now `lualatex`. + +Dependency updates: + +- `mermaidjs` updated to 11.6.0. +- Bootstrap icons updated to v1.13.1 +- `QuartoNotebookRunner` in `julia` engine updated to 0.17.3 + +## Acknowledgements + +We'd like to say a huge thank you to everyone who contributed to this release by opening issues and pull requests: + +{{< include _contribs.md >}} + +The lightbulb emoji in the [listing and social card image](thumbnail.png) for this post comes from [OpenMoji](https://openmoji.org/){.external}– the open-source emoji and icon project. License: [CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/#){.external} \ No newline at end of file diff --git a/docs/blog/posts/2025-10-13-1.8-release/thumbnail.png b/docs/blog/posts/2025-10-13-1.8-release/thumbnail.png new file mode 100644 index 000000000..753861f64 Binary files /dev/null and b/docs/blog/posts/2025-10-13-1.8-release/thumbnail.png differ diff --git a/docs/download/prerelease.qmd b/docs/download/prerelease.qmd index 0f359f6ee..4c35aafb0 100644 --- a/docs/download/prerelease.qmd +++ b/docs/download/prerelease.qmd @@ -18,7 +18,7 @@ anchor-sections: false editor: source image: /images/hero_right.png aliases: - - changelog/1.8/ + - changelog/1.9/ --- ::: {.content-visible when-profile="prerelease"} diff --git a/docs/download/release.qmd b/docs/download/release.qmd index d669612df..4359d25c0 100644 --- a/docs/download/release.qmd +++ b/docs/download/release.qmd @@ -17,7 +17,7 @@ anchor-sections: false editor: source image: /images/hero_right.png aliases: - - changelog/1.7/ + - changelog/1.8/ --- {{< include _download.md >}} diff --git a/docs/prerelease/1.8/_highlights.qmd b/docs/prerelease/1.8/_highlights.qmd index e700520ad..bb28c3811 100644 --- a/docs/prerelease/1.8/_highlights.qmd +++ b/docs/prerelease/1.8/_highlights.qmd @@ -1 +1,21 @@ -We're working on this highlight document right now! Check back soon. \ No newline at end of file +Quarto 1.8 includes the following new features: + +- Improvements to brand support: + - [Light and dark colors](/docs/authoring/brand.qmd#light-and-dark-colors): Specify `light` and `dark` for any color in a brand specification. + - [Light and dark logos](/docs/authoring/brand.qmd#light-and-dark-logos): Specify `light` and `dark` versions of logos in a brand specification. + - [Brand extensions](/docs/extensions/brand.qmd): Share brand definitions and assets across Quarto projects. + - [Dark brand for `format: revealjs`](/docs/authoring/brand.qmd#brand-mode): Specify `brand-mode: dark` to apply your dark brand to your presentation. + +- [HTML Accessibility Checks](/docs/output-formats/html-accessibility.qmd): Add the `axe` option to HTML formats to perform accessibility checks with the [Axe-core engine](https://github.com/dequelabs/axe-core). + +- [Access execution settings from code cells](/docs/advanced/quarto-execute-info.qmd): Read the `QUARTO_EXECUTE_INFO` environment variable to access information about execution context. + +- Access [metadata](/docs/extensions/lua-api.qmd#metadata-access) and [variables](/docs/extensions/lua-api.qmd#variables-access) in filters and shortcodes: Use the new `quarto.variables.get()` and `quarto.metadata.get()` APIs. + +- The default LaTeX engine is now `lualatex`. + +Dependency updates: + +- `mermaidjs` updated to 11.6.0. +- Bootstrap icons updated to v1.13.1 +- `QuartoNotebookRunner` in `julia` engine updated to 0.17.3 \ No newline at end of file