Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions src/assets/typescript-square.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
141 changes: 141 additions & 0 deletions src/pages/blog/release/v0-33-0.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,141 @@
---
title: Release - v0.33.0
abstract: TypeScript for all and an improved Greenwood init scaffolding experience.
published: 2025-9-13
coverImage: /assets/typescript-square.svg
layout: blog
---

# Greenwood v0.33.0

**Published: Sept 13th, 2025**

<!-- <img src="/assets/typescript.svg" style="display:block; width: 90%; margin: 10px auto;" alt="TypeScript logo"/> -->

## What's New

A new Greenwood release is here and we are excited to highlight a few of the key features available in this release. These include full native TypeScript support (no longer experimental!), an overhaul of Greenwood's new project scaffolding CLI, and a new standalone markdown plugin. The new minimum version of NodeJS has now been bumped to **>= 22.18.0**.

Along with a set of enhancements and bug fixes, this release continues our effort to improve ecosystem compatibility some fixes to our adapter plugins and continuing to refine our import map generation capabilities. 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. 💚

> 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.

## Native TypeScript Support

With NodeJS **22.18.0**, TypeScript support in Greenwood is no longer experimental and requires no flags.

```json5
// before
{
scripts: {
build: "'NODE_OPTIONS=--experimental-strip-types' greenwood build",
},
}
```

```json5
// after
{
scripts: {
build: "greenwood build",
},
}
```

We've also formalized our [_tsconfig.json_ settings](/docs/resources/typescript/#setup), updating our required options and recommended settings:

<!-- prettier-ignore-start -->

```json5
{
"compilerOptions": {
// minimum required configuration
"target": "es2020",
"module": "preserve",
"moduleResolution": "bundler",
"allowImportingTsExtensions": true,
"noEmit": true,

// additional recommended configuration
"lib": ["ES2020", "DOM", "DOM.Iterable"],
"verbatimModuleSyntax": true,
"erasableSyntaxOnly": true,
},

"exclude": ["./public/", "./greenwood/", "node_modules"],
}
```

<!-- prettier-ignore-end -->

Don't want to set this all up yourself? We've got you, as this can all be automatically generated for you through Greenwood's init scaffolding CLI. Wait, TypeScript in the init CLI? Yes, you heard that right, so let's tell you all about it! 👇

## Init Scaffolding

The Init scaffolding CLI has been improved to be a more robust and prompt based experience; walking you through selecting a number of options for creating and customizing your next Greenwood project. Now, when scaffolding out a new Greenwood project, you're able to specify the name / output directory, support for TypeScript, and package manager.

<video width="100%" controls>
<source src="//dzsbnrzvzfaq5.cloudfront.net/greenwood-init-latest.mp4" type="video/mp4">
</video>

It's as easy as running:

```shell
$ npx @greenwood/init@latest
```

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:

```shell
$ npx @greenwood/init@latest --name my-app --ts --i pnpm
```

> Check out our [Init setup docs](/docs/introduction/setup/#init) to see the full list of options.

## Standalone Markdown Plugin

Although a breaking change, we've made the decision to move markdown support outside of the Greenwood CLI and into its own standalone plugin, still based on the [**unified**](https://unifiedjs.com/) ecosystem. There were a few motivations for this change:

- Markdown support required _seven_ dependencies, which is a lot for something not every project might need.
- There are many flavors and implementations of markdown, and so this allows any user to swap out the implementation with their own preference.
- It validates in a meaningful way that any file format could be a custom page format, like YAML or JSON.

Upgrading is super easy, just install **@greenwood/plugin-markdown** and add it your Greenwood configuration file, passing any markdown plugins as options to the plugin itself.

```js
// before
export default {
markdown: {
plugins: ["@mapbox/rehype-prism", "rehype-autolink-headings", "remark-gfm"],
},
};
```

```js
// after
import { greenwoodPluginMarkdown } from "@greenwood/plugin-markdown";

export default {
plugins: [
greenwoodPluginMarkdown({
plugins: ["@mapbox/rehype-prism", "rehype-autolink-headings", "remark-gfm"],
}),
],
};
```

> Check out [the (new) docs page](/docs/plugins/markdown/) for all information on adopting the plugin.

## Honorable Mentions

In addition to these key features, we would also like to share some additional noteworthy items as part of this release:

- 📦 Combined with the move to making markdown a standalone plugin, we were able remove **eight** dependencies total from the Greenwood CLI.
- 💪 Greenwood now supports bare CSS `@import` specifiers for those packages that have an export maps. So now, something like this would work without needing to specify the full path to _node_modules_; `@import "open-props/sizes"`.
- ⚙️ Made an enhancement to more efficiently generate SSR page and layout contents in renderer plugins by not rendering all the content all the time. Now, just the content that is needed for a given operation is executed.
- 🏃 Undertook a refactoring effort to enable greater concurrency in Greenwood's asset bundling, page generation, and pre-rendering operations (thank you kind contributor! 🏆).
- 🐛 Fixed an issue where SSR pages were not participating in the layout / page merging hierarchy, in which SSR pages didn't merge correctly into page and / or app layouts. However, there was also a breaking change as part of this in which Greenwood has now removed default layouts and pages content.

---

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! ✌️
2 changes: 1 addition & 1 deletion src/pages/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ imports:
- ../styles/home.css
---

<app-latest-post link="/blog/release/v0-32-0/" title="We just released v0.32.0"></app-latest-post>
<app-latest-post link="/blog/release/v0-33-0/" title="We just released v0.33.0"></app-latest-post>

<app-hero-banner></app-hero-banner>

Expand Down