|
| 1 | +--- |
| 2 | +title: Release - v0.33.0 |
| 3 | +abstract: TypeScript for all and an improved Greenwood init scaffolding experience. |
| 4 | +published: 2025-9-12 |
| 5 | +coverImage: /assets/typescript-square.svg |
| 6 | +layout: blog |
| 7 | +--- |
| 8 | + |
| 9 | +# Greenwood v0.33.0 |
| 10 | + |
| 11 | +**Published: Sept XXth, 2025** |
| 12 | + |
| 13 | +<img src="/assets/typescript.svg" style="display:block; width: 25%; margin: 0 auto;" alt="AWS logo"/> |
| 14 | + |
| 15 | +## What's New |
| 16 | + |
| 17 | +A new Greenwood release is here! As per the usual round of enhancements and bug fixes, we are excited to highlight a few of the key features available in this release. These highlights include native TypeScript support (no longer experimental!), an overhaul of Greenwood's new project init scaffolding, and a new standalone markdown plugin. The new minimum version of NodeJS has now been bumped to `>= 22.18.0` |
| 18 | + |
| 19 | +This release also continues our effort to improved ecosystem compatibility with fixes for our Adapter plugins and improved import map generation handling. Thank you so much to everyone who got involved with us for this release including two new first-time contributors! It means a lot to us and we appreciate your support of Greenwood! 💚 |
| 20 | + |
| 21 | +> Please refer to the [release notes](https://github.com/ProjectEvergreen/greenwood/releases/tag/v0.33.0) for the complete changelog and overview of breaking changes. |
| 22 | +
|
| 23 | +## Native TypeScript Support |
| 24 | + |
| 25 | +With NodeJS `22.18.0`, TypeScript support in Greenwood is no longer experimental and requires no flags. |
| 26 | + |
| 27 | +```json5 |
| 28 | +// before |
| 29 | +{ |
| 30 | + scripts: { |
| 31 | + build: "'NODE_OPTIONS=--experimental-strip-types' greenwood build", |
| 32 | + }, |
| 33 | +} |
| 34 | +``` |
| 35 | + |
| 36 | +```json5 |
| 37 | +// after |
| 38 | +{ |
| 39 | + scripts: { |
| 40 | + build: "greenwood build", |
| 41 | + }, |
| 42 | +} |
| 43 | +``` |
| 44 | + |
| 45 | +We've also formalized our [_tsconfig.json_ settings](/docs/resources/typescript/#setup), updating our required options and recommended settings, which you can see below. |
| 46 | + |
| 47 | +```json5 |
| 48 | +{ |
| 49 | + compilerOptions: { |
| 50 | + // minimum required configuration |
| 51 | + target: "es2020", |
| 52 | + module: "preserve", |
| 53 | + moduleResolution: "bundler", |
| 54 | + allowImportingTsExtensions: true, |
| 55 | + noEmit: true, |
| 56 | + |
| 57 | + // additional recommended configuration |
| 58 | + lib: ["ES2020", "DOM", "DOM.Iterable"], |
| 59 | + verbatimModuleSyntax: true, |
| 60 | + erasableSyntaxOnly: true, |
| 61 | + }, |
| 62 | + |
| 63 | + exclude: ["./public/", "./greenwood/", "node_modules"], |
| 64 | +} |
| 65 | +``` |
| 66 | + |
| 67 | +Don't want to set this all up yourself? We've got you, this is all automatically generated through Greenwood init scaffolding CLI. Wait, TypeScript in the init CLI? Yes, you heard that correctly, so let's tell you all about it! 👇 |
| 68 | + |
| 69 | +## Init Scaffolding |
| 70 | + |
| 71 | +The Init scaffolding CLI has been improved to be a more robust, prompt based experience, which will walk you through selecting a number of scaffolding options for your project. Now when scaffolding out a new Greenwood project, you're now able to specify name / output directory, TypeScript support, and package manager installation. |
| 72 | + |
| 73 | +It's as easy as running: |
| 74 | + |
| 75 | +```shell |
| 76 | +$ npx @greenwood/init@latest |
| 77 | +``` |
| 78 | + |
| 79 | +As all the prompted options are available as CLI flags, if you know what you want, you can one shot the entire scaffolding all in one command! For example, to automatically create and name a project with TypeScript and PNPM, you could use this command: |
| 80 | + |
| 81 | +```shell |
| 82 | +$ npx @greenwood/init@latest --name my-app --ts --i pnpm |
| 83 | +``` |
| 84 | + |
| 85 | +> Check out our [Init setup docs](/docs/introduction/setup/#init) to see the full list of options. |
| 86 | +
|
| 87 | +## Standalone Markdown Plugin |
| 88 | + |
| 89 | +Although a breaking change, we've made the decision to move markdown support outside of the Greenwood CLI and into its own plugin, still based on the [**unified**](https://unifiedjs.com/) ecosystem. There were a few motivations for this change: |
| 90 | + |
| 91 | +- Markdown support required _seven_ dependencies, which is a lot for something not every project might need. |
| 92 | +- There are many flavors and implementations of markdown, and so this allows any user to swap out the implementation with their own preference. |
| 93 | +- It validates in a meaningful way that any file format could become a custom page format, like YAML or JSON. |
| 94 | + |
| 95 | +Upgrading is super easy, just install **@greenwood/plugin-markdown** and add it your Greenwood configuration file, and pass any markdown plugins as options to the plugin. |
| 96 | + |
| 97 | +```js |
| 98 | +// before |
| 99 | +export default { |
| 100 | + markdown: { |
| 101 | + plugins: ["@mapbox/rehype-prism", "rehype-autolink-headings", "remark-gfm"], |
| 102 | + }, |
| 103 | +}; |
| 104 | +``` |
| 105 | + |
| 106 | +```js |
| 107 | +// after |
| 108 | +import { greenwoodPluginMarkdown } from "@greenwood/plugin-markdown"; |
| 109 | + |
| 110 | +export default { |
| 111 | + plugins: [ |
| 112 | + greenwoodPluginMarkdown({ |
| 113 | + plugins: ["@mapbox/rehype-prism", "rehype-autolink-headings", "remark-gfm"], |
| 114 | + }), |
| 115 | + ], |
| 116 | +}; |
| 117 | +``` |
| 118 | + |
| 119 | +> Check out [the (new) docs page](/docs/plugins/markdown/) for all information on adopting the plugin. |
| 120 | +
|
| 121 | +## Honorable Mentions |
| 122 | + |
| 123 | +TODO |
| 124 | + |
| 125 | +--- |
| 126 | + |
| 127 | +As always, we're excited to see where the community can take Greenwood and are always available to chat on [GitHub](https://github.com/ProjectEvergreen/greenwood) or [Discord](/discord/). See you for the next release! ✌️ |
0 commit comments