Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
a8e6b6c
feat(nueserver): expand & correct MIME type support for additional we…
albedosehen May 7, 2025
7bb0b51
Typo in comment
albedosehen May 7, 2025
a233166
chore(test): replace import.meta.dir with Node-compatible dirname res…
albedosehen May 7, 2025
7bdd1ac
Change of blog post URL for Hacker News
tipiirai May 9, 2025
cccffd5
simplify test file
nobkd May 8, 2025
8debd55
Update build-page action to align with syntax schema
chrisdoram May 14, 2025
a69b901
Update all references to legacy blog entry introducing-hyper
chrisdoram May 14, 2025
6484d94
Merge pull request #574 from albedosehen/fix/web-server-mime-types
nobkd May 15, 2025
c0417f1
Update action descriptions
nobkd May 15, 2025
ba1eed2
Merge pull request #578 from chrisdoram/master
nobkd May 15, 2025
701f376
Form fix
tipiirai May 18, 2025
00101f1
deps: upgrade
nobkd May 30, 2025
641407f
update star count
nobkd Jun 6, 2025
ae81fa4
fix: home page video overflow
nobkd Jun 6, 2025
340952d
chore: typos
nobkd Jun 6, 2025
a4d3094
fix typo
neeko-cat Jun 12, 2025
0ca74cf
Merge pull request #582 from neeko-cat/patch-1
nobkd Jun 13, 2025
783c717
docs: fix docs nav growing too large with longer text
nobkd Jun 14, 2025
f6b94ca
cleanup
NickSdot Jul 30, 2025
d975751
chore: formatting
NickSdot Jul 30, 2025
560becf
Merge pull request #596 from NickSdot/patch-3
nobkd Jul 30, 2025
ee62562
Merge pull request #597 from NickSdot/patch-4
nobkd Jul 30, 2025
c258623
wip rss feed
nobkd Apr 18, 2025
27870e4
feed fixes
nobkd Apr 18, 2025
0139198
clean
nobkd Apr 18, 2025
20ac6bf
clean
nobkd Apr 18, 2025
2e506a0
fix
nobkd Apr 21, 2025
53f8eb2
atom feed
nobkd May 9, 2025
576c029
feat(examples): cloned `simple-blog` with nested dirs in blog collection
NickSdot Jul 30, 2025
7f46580
feat(nuekit): implemented nested collection feeds
NickSdot Jul 30, 2025
283439e
feat(nuekit): added feed title formatter
NickSdot Jul 30, 2025
d04250f
feat(nuekit): added feed description
NickSdot Jul 30, 2025
5ab6d72
feat(nuekit): added feed favicon
NickSdot Jul 30, 2025
2e11bd8
feat(nuekit): renamed `description` to `subtitle`
NickSdot Jul 30, 2025
1f8655e
feat(nuekit): added feed author
NickSdot Jul 30, 2025
af08abb
fix(nuekit): omit feed subtitle when no description present
NickSdot Jul 30, 2025
b000570
refactor(nuekit): account for potentially invalid dates
NickSdot Jul 30, 2025
bd1aa25
feat(nuekit): added feed tests
NickSdot Jul 30, 2025
86c875d
refactor(nuekit): feed title always uses collection path
NickSdot Jul 31, 2025
ba2094f
refactor(nuekit): simplify, optimise clean up structure
NickSdot Jul 31, 2025
6555deb
refactor(examples): dropped nested playground
NickSdot Jul 31, 2025
f23978e
refactor(nuekit): decouple feed generation from getPageData()
NickSdot Jul 31, 2025
b701d13
refactor(nuekit): added subtitle back
NickSdot Aug 1, 2025
f64b518
refactor(nuekit): render subtitles only when set (oopsie woopsie)
NickSdot Aug 1, 2025
afb72bd
fix(nuekit): attempt to happify windows tests
NickSdot Aug 1, 2025
829018d
fix(nuekit): attempt to happify windows tests
NickSdot Aug 1, 2025
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
7 changes: 6 additions & 1 deletion .github/workflows/repo/build-page/action.yaml
Original file line number Diff line number Diff line change
@@ -1,9 +1,14 @@
name: Repository nue page build
description: |
Internal composite action to install dependencies, register the `nue` command, and build a Nue project.

inputs:
root:
description: |
The root directory of the Nue project to build.
This is passed to the `--root` option of the `nue build` command.
default: '.'
type: string
required: false

runs:
using: composite
Expand Down
92 changes: 46 additions & 46 deletions bun.lock

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion packages/examples/simple-mpa/app/model/users.js
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ const THREADS = [
],
[
'Can you tell me what you were doing when it happened?',
'I was on the customer view, clicked on the notitication icon, and selected "never". The system did not respond. I\'m on latest Chrome',
'I was on the customer view, clicked on the notification icon, and selected "never". The system did not respond. I\'m on latest Chrome',
'We found the issue and pushed a fix to production. Please reload the app.',
'Thank you! Works now 🎉🎉',
],
Expand Down
4 changes: 2 additions & 2 deletions packages/hyper/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,6 @@
# Hyper (Developer Preview)
Hyper is a simple markup language for building user interfaces. It enables developers (and AI models) to generate complex UIs with amazingly clean syntax.

[Launch post](https://nuejs.org/blog/introducing-hyper/) • [Docs](https://nuejs.org/hyper/)
[Launch post](https://nuejs.org/blog/standards-first-react-alternative/) • [Docs](https://nuejs.org/hyper/)

<img src="https://nuejs.org/blog/introducing-hyper/img/hyper-banner-dark-big.png" width="800">
<img src="https://nuejs.org/blog/standards-first-react-alternative/img/hyper-banner-dark-big.png" width="800">
2 changes: 1 addition & 1 deletion packages/hyper/demo/table/builds/table.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ export const lib = [ { tag: 'div',
children:
[ { tag: 'h1', children: [ { text: 'Table example' } ] },
{ tag: 'p',
children: [ { text: 'A more compex table with filtering and sortable columns' } ] },
children: [ { text: 'A more complex table with filtering and sortable columns' } ] },
{ tag: 'input',
attr:
[ { name: 'type', val: 'search' },
Expand Down
2 changes: 1 addition & 1 deletion packages/hyper/demo/table/builds/table.min.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion packages/hyper/demo/table/table-component.html
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
<div class="card">
<header>
<h1>Table example</h1>
<p>A more compex table with filtering and sortable columns</p>
<p>A more complex table with filtering and sortable columns</p>
<input type="search" :input="filter" placeholder="Filter by name...">
</header>

Expand Down
3 changes: 1 addition & 2 deletions packages/hyper/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,10 @@
"name": "nue-hyper",
"version": "0.1.1",
"description": "Hyper is HTML markup for building user interfaces",
"homepage": "https://nuejs.org/blog/introducing-hyper/",
"homepage": "https://nuejs.org/blog/standards-first-react-alternative/",
"main": "src/index.js",
"license": "MIT",
"type": "module",

"repository": {
"url": "https://github.com/nuejs/nue",
"directory": "packages/hyper",
Expand Down
5 changes: 3 additions & 2 deletions packages/nuejs.org/@global/global.css
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@

html {
scroll-behavior: smooth;
hyphens: auto;
overflow-x: hidden;
}

Expand All @@ -14,8 +15,8 @@ body {
font-family: system-ui;
margin: 0;

@media (width < 900) { font-size: 15px }
@media (width < 600) { font-size: 14px }
@media (width < 900px) { font-size: 15px }
@media (width < 600px) { font-size: 14px }

}

Expand Down
6 changes: 3 additions & 3 deletions packages/nuejs.org/@global/navigation.css
Original file line number Diff line number Diff line change
Expand Up @@ -80,14 +80,14 @@ body > header {
nav:first-child {
display: flex;

@media (width < 650) {
@media (width < 650px) {
gap: .75rem;
a:not(.nav-home, .pill) { display: none }
}
}

}
@media (width < 500) {
@media (width < 500px) {
.pill { display: none }
}
}
Expand Down Expand Up @@ -143,7 +143,7 @@ body > footer {
font-size: .9rem;
gap: 2rem;

@media (width < 600) {
@media (width < 600px) {
flex-direction: column;
gap: 1.5rem;
}
Expand Down
6 changes: 3 additions & 3 deletions packages/nuejs.org/@global/navigation.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -7,15 +7,15 @@ globalnav:
- Docs: /docs/
- Blog: /blog/
- Vision: /vision/
- url: /blog/introducing-hyper/
label: "*Introducing Hyper* A simple React alternative ›"
- url: /blog/standards-first-react-alternative/
label: "*Hyper* Standards first React alternative ›"
class: news pill


# header toolbar (complementary)
toolbar:
- Slack: //join.slack.com/t/nuejs/shared_invite/zt-2wf8ozu5i-N2Y9PA_D17weIWuN2QPOqQ "slack"
- 8.5k: //github.com/nuejs/nue "github pill"
- 8.7k: //github.com/nuejs/nue "github pill"

# burger menu
menu:
Expand Down
2 changes: 1 addition & 1 deletion packages/nuejs.org/@global/popover.css
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ dialog {
figure { margin: 0 }
}

@media(width < 900) {
@media(width < 900px) {
max-height: 96vh;
flex-direction: column;
h3 span { display: none }
Expand Down
2 changes: 1 addition & 1 deletion packages/nuejs.org/@global/variables.css
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@
}


@media (max-width: 600px) {
@media (width <= 600px) {
:root { --body-padding: 1.2em; }
}

File renamed without changes.
2 changes: 1 addition & 1 deletion packages/nuejs.org/@lib/syntax-extras.css
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@

h3 { color: var(--gray-200) }

@media (max-width: 750px) {
@media (width <= 750px) {
flex-direction: column;
}
}
Expand Down
3 changes: 2 additions & 1 deletion packages/nuejs.org/@lib/technical-content.css
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,7 @@ article {
> video {
border-radius: 6px;
cursor: pointer;
max-width: 100%;

&:active {
transform: scale(.995);
Expand Down Expand Up @@ -234,7 +235,7 @@ h2[id], section > h3[id] {
display: none;
}

@media(width > 800) {
@media(width > 800px) {
&:hover:before {
display: inline;
}
Expand Down
2 changes: 1 addition & 1 deletion packages/nuejs.org/blog/blog.css
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ h1 {


/* image.large, image.larger */
@media (min-width: 950px) {
@media (width >= 950px) {
.large, .larger {
margin-inline: -12vw;
img { width: 999% }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@
}
}

@media (max-width: 500px) {
@media (width <= 500px) {
overflow-x: auto;
padding: .5em;
[glow] { border-radius: .5em; }
Expand Down
2 changes: 1 addition & 1 deletion packages/nuejs.org/blog/lib/blog-index.css
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ li {
color: white;
}

@media (width > 800) {
@media (width > 800px) {
flex-direction: row;
margin-bottom: 0;
gap: 1.5em;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@

---
back_to: introducing-hyper/
back_to: standards-first-react-alternative/
pagehead: false
unlisted: true
---
Expand Down Expand Up @@ -309,7 +309,7 @@ export default function DataTable({ data }: DataTableProps) {


## With Hyper
Uses only about 40 lines of code, roughly 75% reduction in code to impolement the same features.
Uses only about 40 lines of code, roughly 75% reduction in code to implement the same features.


``` html
Expand Down Expand Up @@ -353,9 +353,3 @@ Uses only about 40 lines of code, roughly 75% reduction in code to impolement th
</script>
</div>
```






Original file line number Diff line number Diff line change
Expand Up @@ -255,7 +255,7 @@ Estimate: 4-5 months.


### How can a small library challenge React's dominance?
Gradually. To succeed, we particularly need to address the following:
Gradually. To succeed, we need to address the following:

1. **Developer perception**: Many frontend developers have come to view abstraction layers as essential. As Hyper demonstrates how professional UIs can be built without these complexities, this perception will shift.

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@

---
back_to: introducing-hyper/
back_to: standards-first-react-alternative/
pagehead: false
unlisted: true
---
Expand Down
4 changes: 2 additions & 2 deletions packages/nuejs.org/blog/status-update-01/status-update.css
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,13 @@
img {
width: 200px;
}
@media (min-width: 700px) {
@media (width >= 700px) {
margin: 0 0 0 3em;
text-align: right;
float: right;
}

@media (min-width: 900px) {
@media (width >= 900px) {
margin-right: -4em
}
}
Expand Down
7 changes: 0 additions & 7 deletions packages/nuejs.org/docs/content-focused-apps.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@ This generates a styled, interactive grid — say, a responsive bento-box layout

Nue begins with content in its specialized Markdown dialect, delivering a semantic, accessible baseline. From there, it layers enhancements like interactive islands, and motion to create a robust user experience. Each step builds on the content-first foundation, using web standards to keep the process simple and maintainable.


### Layout modules

Layout modules are clean, semantic HTML templates attached to specific "slots" in the page layout. A header module might slot in navigation, while a footer includes a `<join-list/>` custom tag for a mailing list submissions. Defined once and reused across pages, they structure Markdown content consistently without burdening creators with markup.
Expand All @@ -53,19 +52,13 @@ In content-heavy sites, JavaScript is optional, unlike in SPAs where it’s cent
Motion enhances the experience through modern CSS, reducing reliance on JavaScript-heavy solutions common in frameworks. Scroll-linked effects via `[.progress]` or view transitions — enabled in `site.yaml` — add fluidity and engagement. These standards-based techniques progressively build on the content-first foundation with minimal overhead.


You’re right — “unify” feels abrupt and doesn’t fully capture the intent. I’ll revise the *Multipage applications* section to clarify how Nue supports developing both content-focused apps (e.g., docs, blogs, products) and SPAs within the same cohesive environment, choosing the best development model for each task. Here’s the updated version:


## Multipage applications

Nue enables developers to build content-focused applications — like documentation, blogs, or product pages — alongside single-page applications (SPAs) within a single, cohesive development environment. Each type uses the right model for the job: Markdown-driven simplicity for content apps and logic-focused templates for SPAs. This flexibility ties everything together with a shared design system and seamless navigation.

For example, a site might include a blog and docs as content-focused pages, authored in Markdown, and an SPA dashboard built with HTML templates. Nue’s routing manages transitions across both, enhanced by view transitions defined in CSS, like a smooth scale effect between pages. The shared design system ensures visual consistency, making the site feel integrated without forcing a one-size-fits-all approach.


Fair point — limiting it to React devs narrows the scope unnecessarily. I’ll generalize it to reflect that the standards-first model might be new to developers from various backgrounds. Here’s the updated *Templates* section:


## Templates

This website — featuring rich marketing pages, documentation, and a blog — is built with Nue, showcasing its standards-first approach. For developers used to framework-heavy workflows, this model may feel unfamiliar. We’re crafting templates to ease that transition, spanning the full frontend spectrum: standards-first UI libraries, SPAs, and content-rich MPAs, all integrated with your chosen design system. These templates will highlight what’s achievable with browser-native tools. Join our mailing list to get notified when they’re released.
7 changes: 4 additions & 3 deletions packages/nuejs.org/docs/css/doc-layout.css
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ article + aside {
}

/* small screens */
@media (max-width: 1000px) {
@media (width <= 1000px) {

/* left sidebar */
aside:first-child {
Expand All @@ -42,7 +42,7 @@ article + aside {
}

/* medium screens ( < 1300px) */
@media (width > 1000) {
@media (width > 1000px) {
body > header {
position: fixed;
top: 0;
Expand Down Expand Up @@ -74,6 +74,7 @@ article + aside {

/* left sidebar */
&[popover] {
max-width: 18em;
margin: auto 0 0 2em;
padding-right: 4em;
button { display: none }
Expand All @@ -82,7 +83,7 @@ article + aside {
}

/* big screens */
@media (width > 1300) {
@media (width > 1300px) {
article {
max-width: 50vw;

Expand Down
2 changes: 1 addition & 1 deletion packages/nuejs.org/docs/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ Build times consistently run in milliseconds, even for large-scale apps, deliver

### For software architects

Nue brings back the good practices of software engineering: simple, testable functions, modular design, minimal dependencies, and an architecture-first approach. Build computation engines with the language of your choice (JavaScript, Rust, Go, or TypeScript) and reach new levels of performance and architectural clarity. Nue is for developers who wish to bulid on classic algorithms and data structures over React idioms.
Nue brings back the good practices of software engineering: simple, testable functions, modular design, minimal dependencies, and an architecture-first approach. Build computation engines with the language of your choice (JavaScript, Rust, Go, or TypeScript) and reach new levels of performance and architectural clarity. Nue is for developers who wish to build on classic algorithms and data structures over React idioms.

### For design engineers

Expand Down
2 changes: 1 addition & 1 deletion packages/nuejs.org/home/css/_roadmap.css
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@
margin: 0 0 var(--gap);
}

@media (800 < width < 1100) {
@media (800px < width < 1100px) {
.panel:last-child {
max-width: 100%;
ul {
Expand Down
15 changes: 7 additions & 8 deletions packages/nuejs.org/hyper/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,11 @@ include: [technical-content]
# Hyper documentation
Hyper is a simple markup language for building user interfaces. Currently in **development preview**, it enables developers (and AI models) to generate complex UIs with a clean syntax.

[Read the launch post](/blog/introducing-hyper/) for the backstory an FAQ
[Read the launch post](/blog/standards-first-react-alternative/) for the backstory an FAQ

[image.bordered]
large: /blog/introducing-hyper/img/hyper-banner-big.png
small: /blog/introducing-hyper/img/hyper-banner.png
large: /blog/standards-first-react-alternative/img/hyper-banner-big.png
small: /blog/standards-first-react-alternative/img/hyper-banner.png
size: 598 × 237


Expand Down Expand Up @@ -59,7 +59,7 @@ The most significant change is the strict separation between components and CSS-

For 3 and 4 Hyper currently issues a warning, but on the official releases there will be a configurable strict mode for production environments that throws an error.

Read the [launch post](/blog/introducing-hyper/) for the complete rationale.
Read the [launch post](/blog/standards-first-react-alternative/) for the complete rationale.



Expand Down Expand Up @@ -123,7 +123,7 @@ Render a compiled JavaScript on the browser
```

### Just-in-time (JIT) rendering
Compiles the template directly on the browser befor rendering. Check `demo/table/simple-table.html` for a demo:
Compiles the template directly on the browser before rendering. Check `demo/table/simple-table.html` for a demo:

```
<script type="text/hyper">
Expand Down Expand Up @@ -391,8 +391,8 @@ Hyper extends standard HTML with expressions, loops, conditionals, and custom co
Import statements are not working on server side in developer preview.


### Passtrough JavaScript
Scripts with `type` or `src` attributes are passed direclty to the client
### Passthrough JavaScript
Scripts with `type` or `src` attributes are passed directly to the client

```
<footer>
Expand All @@ -411,4 +411,3 @@ Pass arguments to CSS components without inline styling:
<!-- renders as style="--gap: 3px" -->
<div --gap="3px">...</div>
```

Loading
Loading