Skip to content

Commit 967776c

Browse files
content: #255 state of greenwood (2025) blog post (#257)
1 parent 203f1c6 commit 967776c

2 files changed

Lines changed: 179 additions & 1 deletion

File tree

Lines changed: 178 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,178 @@
1+
---
2+
title: State of Greenwood (2025)
3+
abstract: If you can believe it, it's time for our annual year end review once again!
4+
published: 2025-12-19
5+
coverImage: /assets/greenwood-logo-g.svg
6+
layout: blog
7+
---
8+
9+
# State of Greenwood (2025)
10+
11+
<span class="publishDate">Published: Dec 19, 2025<span>
12+
13+
<img
14+
src="/assets/blog/greenwood-logo-300w.webp"
15+
alt="Greenwood Logo"
16+
srcset="/assets/blog/greenwood-logo-300w.webp 350w,
17+
/assets/blog/greenwood-logo-500w.webp 500w,
18+
/assets/blog/greenwood-logo-750w.webp 750w,
19+
/assets/blog/greenwood-logo-1000w.webp 1000w,
20+
/assets/blog/greenwood-logo-1500w.webp 1500w"/>
21+
22+
Looking back on this past year since our previous [end of year post](https://greenwoodjs.dev/blog/state-of-greenwood-2024/), the Greenwood team held true to its promise in ensuring a broad set of ecosystem compatibility around import map generation, hosting adapters, and package managers, as well as continuing our participation in related standards and community groups. Greenwood was even featured in the latest episode of [**Shop Talk Show**](https://youtu.be/CuBKsa92nL0?si=Iq4adydliQ3ksN03&t=2775)!
23+
24+
For component libraries, you can see demonstrations of using Greenwood with [**Spectrum Web Components**](https://github.com/thescientist13/greenwood-lit-ssr/tree/demo-spectrum), [the **USWDS**](https://github.com/thescientist13/greenwood-lit-ssr/tree/demo-uswds), and [**Web Awesome**](https://github.com/thescientist13/greenwood-lit-ssr/tree/web-awesome). These demonstration projects helped further refine and validate Greenwood's capabilities for generating import maps, inlining and bundling of CSS, and supporting the most popular package managers in the ecosystem; all in the pursuit of making sure you can always use your favorite library with Greenwood as simply as running `npm i`. In addition, we've created demonstration repos for using Greenwood with [**tRCP**](https://github.com/thescientist13/greenwood-trpc) and [**Lume**](https://github.com/thescientist13/greenwood-lume) (still dependent on upcoming features coming in our [v0.34.0](https://github.com/ProjectEvergreen/greenwood/issues/1597) release).
25+
26+
On the community side, we were happy to see the WinterCG [graduate and become an official ECMA Technical Committee group](https://www.w3.org/community/wintercg/2025/01/10/goodbye-wintercg-welcome-wintertc/) as the [WinterTC(55)](https://ecma-international.org/technical-committees/tc55/). Promoting standards for both the web and sever-side JavaScript runtimes is a valuable and meaningful vision and effort for the Greenwood team, and we are happy to participate and contribute to the WinterTC and the [WCCG (Web Components Community Group)](https://www.w3.org/community/webcomponents/).
27+
28+
We hope these initiatives and improvements over the past year have worked to make Greenwood even better for building websites so please feel free to share your thoughts and feedback with us.
29+
30+
Now, on to the year in review! 👇
31+
32+
## The Year In Review
33+
34+
### TypeScript Support
35+
36+
Greenwood now provides built-in support for TypeScript, with the ability to fallback to using `tsc` if certain TypeScript features you're using (like Decorators, [enums, namespaces, etc](https://devblogs.microsoft.com/typescript/announcing-typescript-5-8/#the---erasablesyntaxonly-option)) are not supported through just type stripping alone. This was motivated in part due to NodeJS adding TypeScript (type-stripping) support out of the box. This means you can write your entire project, including SSR pages and API routes, entirely in TypeScript with no configuration required!
37+
38+
This also means that you can author your Greenwood configuration files and plugins with TypeScript too:
39+
40+
```ts
41+
// greenwood.config.ts
42+
import type { Config } from "@greenwood/cli";
43+
44+
const config: Config = {
45+
// ...
46+
};
47+
48+
export default config;
49+
```
50+
51+
For actual _type-checking_, below is Greenwood's recommended _tsconfig.json_ settings so that you can get full IDE support and so that you can run `tsc` during CI.
52+
53+
<!-- prettier-ignore-start -->
54+
55+
```json5
56+
{
57+
"compilerOptions": {
58+
// minimum required configuration
59+
"target": "es2020",
60+
"module": "preserve",
61+
"moduleResolution": "bundler",
62+
"allowImportingTsExtensions": true,
63+
"noEmit": true,
64+
65+
// additional recommended configuration
66+
"lib": ["ES2020", "DOM", "DOM.Iterable"],
67+
"verbatimModuleSyntax": true,
68+
"erasableSyntaxOnly": true,
69+
},
70+
71+
"exclude": ["./public/", "./greenwood/", "node_modules"],
72+
}
73+
```
74+
75+
<!-- prettier-ignore-end -->
76+
77+
> Check out our [TypeScript docs](/docs/resources/typescript/) to learn more about getting setup with TypeScript and Greenwood.
78+
79+
### New Project Scaffolding
80+
81+
The Init scaffolding CLI got an major overhaul this year, moving to a more robust, prompt based experience that will walk you through 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.
82+
83+
<video width="100%" controls>
84+
<source src="//dzsbnrzvzfaq5.cloudfront.net/greenwood-init-latest.mp4" type="video/mp4">
85+
</video>
86+
87+
It's as easy as running:
88+
89+
```shell
90+
$ npx @greenwood/init@latest
91+
```
92+
93+
> Read [the docs](/docs/introduction/setup/#init) to get started with your next Greenwood project today.
94+
95+
### AWS Adapter
96+
97+
This year we released an official adapter plugin for generating Lambda compatible function code for your SSR pages and API routes with AWS. ☁️
98+
99+
Simply install the plugin and add it to your Greenwood config file:
100+
101+
```js
102+
import { greenwoodPluginAdapterAws } from "@greenwood/plugin-adapter-aws";
103+
104+
export default {
105+
plugins: [greenwoodPluginAdapterAws()],
106+
};
107+
```
108+
109+
Taking into consideration that there are many methods and options for deploying to AWS, this adapter plugin is primarily focused on generating consistent and predictable build output that can be complimented by some form of [**IaC (Infrastructure as Code)**](https://en.wikipedia.org/wiki/Infrastructure_as_code) or deployment tooling of your choice. The build output will look similar to Greenwood's own [standard build output](/docs/reference/appendix/#build-output) and will be available in the _.aws-output/_ folder at the root of your project after running the build command.
110+
111+
> To learn more, you can read our [v0.32.0 release blog post](https://greenwoodjs.dev/blog/release/v0-32-0/#aws-adapter) and checkout [the docs](https://greenwoodjs.dev/guides/hosting/aws/#serverless) to get started.
112+
113+
## The Year Ahead
114+
115+
As the team looks to the coming year ahead, we're currently in progress on the next Greenwood release; [v0.34.0](https://github.com/ProjectEvergreen/greenwood/issues/1597), which we aim to release with a key feature; dynamic routes! Dynamic routes will allow file-system based routing like below for serving dynamic routing paths, and will be supported by all our serverless adapter plugins:
116+
117+
```shell
118+
src/
119+
pages/
120+
blog/
121+
[slug].js
122+
```
123+
124+
This would serve any number of the following routes:
125+
126+
- `/blog/my-first-post/`
127+
- `/blog/my-second-post/`
128+
- etc
129+
130+
Additionally, and although dependent on compatibility and upstream needs on these platforms and runtimes, we are actively working on **Bun** runtime support as well as an official **Cloudflare** adapter. Both of these are in various stages of development and testing, and we hope to close out our current ecosystem milestone by delivering on them in some capacity.
131+
132+
Lastly, and already [supported in **WCC**](https://merry-caramel-524e61.netlify.app/docs/#tsx), TSX support will be coming to Greenwood for scripts and SSR pages, enabling JSX for templating through a custom `render` function, enabling **type-safe** HTML!
133+
134+
```tsx
135+
export default class Card extends HTMLElement {
136+
selectItem() {
137+
alert(`selected item is => ${this.title}!`);
138+
}
139+
140+
connectedCallback() {
141+
if (!this.shadowRoot) {
142+
this.thumbnail = this.getAttribute("thumbnail");
143+
this.title = this.getAttribute("title");
144+
145+
this.attachShadow({ mode: "open" });
146+
this.shadowRoot.adoptedStyleSheets = [sheet];
147+
148+
this.render();
149+
}
150+
}
151+
152+
render() {
153+
const { thumbnail, title } = this;
154+
155+
return (
156+
<div class="card">
157+
<h3>{title}</h3>
158+
<img src={thumbnail} alt={title} loading="lazy" width={200} height={200} />
159+
<button onclick={this.selectItem}>View Item Details</button>
160+
</div>
161+
);
162+
}
163+
}
164+
165+
customElements.define("x-card", Card);
166+
```
167+
168+
<video width="100%" controls>
169+
<source src="//dzsbnrzvzfaq5.cloudfront.net/wcc-type-safe-html-demo.mov" type="video/mp4">
170+
</video>
171+
172+
> You can see a preview of this upcoming work in [this demonstration repo](https://github.com/thescientist13/greenwood-jsx).
173+
174+
## In Closing
175+
176+
The Greenwood team is very eager to wrap up our current efforts to release v0.34.0 and continue our ongoing march towards a [1.0 release](https://github.com/ProjectEvergreen/greenwood/milestone/3). Greenwood wants to be there every step of the way to help you get the most out of the web and ensure you have full ownership of your code and content. From SPA to SSG to SSR and everything in between, building vanilla or with friends, we want Greenwood to run wherever the web can run so the choice can always be yours.
177+
178+
Please come join us on [GitHub](https://github.com/ProjectEvergreen/greenwood) and [Discord](/discord/) and we can't wait to see what you build with Greenwood! <img style="width: 15px; display: inline-block; margin: 0;" src="/assets/blog/evergreen.svg" alt="Project Evergreen logo"/>

src/pages/index.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ imports:
1010
- ../styles/home.css
1111
---
1212

13-
<app-latest-post link="/blog/release/v0-33-0/" title="We just released v0.33.0"></app-latest-post>
13+
<app-latest-post link="/blog/state-of-greenwood-2025/" icon="📚" title="Read the <em>State of Greenwood</em> 2025"></app-latest-post>
1414

1515
<app-hero-banner></app-hero-banner>
1616

0 commit comments

Comments
 (0)