Skip to content

Commit 979e340

Browse files
committed
WildflowerJS v1.0.0 — initial public release
A reactive JavaScript framework with no build step, no virtual DOM, and one mental model. Drop a script tag and start building. Features: components, stores, computed properties, lists, pools, router, SSR, plugins, portals, transitions, event modifiers, two-way binding, and 3,646 tests in real Chromium. https://wildflowerjs.com https://www.npmjs.com/package/wildflowerjs
0 parents  commit 979e340

316 files changed

Lines changed: 195583 additions & 0 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.editorconfig

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
root = true
2+
3+
[*]
4+
indent_style = space
5+
indent_size = 2
6+
end_of_line = lf
7+
charset = utf-8
8+
trim_trailing_whitespace = true
9+
insert_final_newline = true
10+
11+
[*.md]
12+
trim_trailing_whitespace = false
13+
14+
[*.{yml,yaml}]
15+
indent_size = 2
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
name: Bug Report
2+
description: Report a bug in WildflowerJS
3+
labels: ["bug"]
4+
body:
5+
- type: markdown
6+
attributes:
7+
value: |
8+
Thank you for reporting a bug! Please fill out the sections below so we can reproduce and fix the issue.
9+
10+
- type: textarea
11+
id: description
12+
attributes:
13+
label: Description
14+
description: A clear description of the bug.
15+
placeholder: What happened? What did you expect to happen?
16+
validations:
17+
required: true
18+
19+
- type: textarea
20+
id: reproduction
21+
attributes:
22+
label: Reproduction
23+
description: Steps to reproduce the behavior, or a minimal code example.
24+
placeholder: |
25+
1. Create a component with...
26+
2. Click on...
27+
3. See error...
28+
validations:
29+
required: true
30+
31+
- type: input
32+
id: version
33+
attributes:
34+
label: Version
35+
description: Which version of WildflowerJS are you using?
36+
placeholder: e.g. 1.0.0
37+
validations:
38+
required: true
39+
40+
- type: dropdown
41+
id: package
42+
attributes:
43+
label: Package variant
44+
options:
45+
- Core (wildflower.min.js)
46+
- Lite (wildflower.lite.min.js)
47+
- SPA (wildflower.spa.min.js)
48+
- Full (wildflower.full.min.js)
49+
- ESM (wildflower.esm.js)
50+
validations:
51+
required: true
52+
53+
- type: input
54+
id: browser
55+
attributes:
56+
label: Browser
57+
description: Which browser(s) does this occur in?
58+
placeholder: e.g. Chrome 120, Firefox 121, Safari 17
59+
60+
- type: textarea
61+
id: additional
62+
attributes:
63+
label: Additional context
64+
description: Any other context, screenshots, or error messages.

.github/ISSUE_TEMPLATE/config.yml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
blank_issues_enabled: false
2+
contact_links:
3+
- name: Documentation
4+
url: https://wildflowerjs.com
5+
about: Check the docs for guides, API reference, and examples.
6+
- name: Questions & Discussions
7+
url: https://github.com/wfjs-admin/WildflowerJS/discussions
8+
about: Ask questions and discuss ideas with the community.
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
name: Feature Request
2+
description: Suggest a new feature or enhancement
3+
labels: ["enhancement"]
4+
body:
5+
- type: markdown
6+
attributes:
7+
value: |
8+
Thank you for suggesting a feature! Please describe the problem you're trying to solve and your proposed solution.
9+
10+
- type: textarea
11+
id: problem
12+
attributes:
13+
label: Problem
14+
description: What problem does this feature solve? What's the use case?
15+
placeholder: I'm trying to... but currently...
16+
validations:
17+
required: true
18+
19+
- type: textarea
20+
id: solution
21+
attributes:
22+
label: Proposed solution
23+
description: How would you like this to work? Include API examples if possible.
24+
placeholder: |
25+
It would be great if WildflowerJS supported...
26+
27+
```html
28+
<div data-component="example">
29+
...
30+
</div>
31+
```
32+
validations:
33+
required: true
34+
35+
- type: textarea
36+
id: alternatives
37+
attributes:
38+
label: Alternatives considered
39+
description: Any alternative solutions or workarounds you've considered.
40+
41+
- type: dropdown
42+
id: scope
43+
attributes:
44+
label: Scope
45+
description: Which area of the framework does this affect?
46+
options:
47+
- Core (reactivity, binding, state)
48+
- Components (lifecycle, props, templates)
49+
- Lists (rendering, operations)
50+
- Stores (state management)
51+
- Router
52+
- Plugins
53+
- Other

.github/PULL_REQUEST_TEMPLATE.md

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
## Description
2+
3+
<!-- What does this PR do? -->
4+
5+
## Related issue
6+
7+
<!-- Link to the issue this addresses, e.g. Fixes #123 -->
8+
9+
## Changes
10+
11+
<!-- Bullet list of changes -->
12+
13+
-
14+
15+
## Test plan
16+
17+
<!-- How was this tested? -->
18+
19+
- [ ] Existing tests pass (`npm test`)
20+
- [ ] New tests added (if applicable)
21+
- [ ] Tested in browser manually (if UI-related)

.github/workflows/ci.yml

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
name: CI
2+
3+
on:
4+
push:
5+
branches: [main]
6+
pull_request:
7+
branches: [main]
8+
9+
jobs:
10+
build-and-test:
11+
runs-on: ubuntu-latest
12+
13+
steps:
14+
- uses: actions/checkout@v4
15+
16+
- name: Use Node.js 22
17+
uses: actions/setup-node@v4
18+
with:
19+
node-version: 22
20+
cache: npm
21+
22+
- name: Install dependencies
23+
run: npm ci
24+
25+
- name: Cache Playwright browsers
26+
uses: actions/cache@v4
27+
with:
28+
path: ~/.cache/ms-playwright
29+
key: playwright-${{ runner.os }}-${{ hashFiles('package-lock.json') }}
30+
31+
- name: Install Playwright browsers
32+
run: npx playwright install --with-deps chromium
33+
34+
- name: Build
35+
run: npm run build
36+
37+
- name: Run tests
38+
run: npm test
39+
40+
bundle-size:
41+
runs-on: ubuntu-latest
42+
steps:
43+
- uses: actions/checkout@v4
44+
45+
- uses: actions/setup-node@v4
46+
with:
47+
node-version: 22
48+
cache: npm
49+
50+
- run: npm ci
51+
- run: npm run build
52+
53+
- name: Report bundle sizes
54+
run: |
55+
echo "## Bundle Sizes" >> $GITHUB_STEP_SUMMARY
56+
echo "" >> $GITHUB_STEP_SUMMARY
57+
echo "| Variant | Raw | Gzip | Brotli |" >> $GITHUB_STEP_SUMMARY
58+
echo "|---------|-----|------|--------|" >> $GITHUB_STEP_SUMMARY
59+
for f in dist/*.min.js; do
60+
name=$(basename "$f")
61+
raw=$(wc -c < "$f" | awk '{printf "%.1f KB", $1/1024}')
62+
gz=$(gzip -c "$f" | wc -c | awk '{printf "%.1f KB", $1/1024}')
63+
br=""
64+
if [ -f "$f.br" ]; then
65+
br=$(wc -c < "$f.br" | awk '{printf "%.1f KB", $1/1024}')
66+
fi
67+
echo "| $name | $raw | $gz | $br |" >> $GITHUB_STEP_SUMMARY
68+
done

.gitignore

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
# Dependencies
2+
node_modules/
3+
4+
# OS files
5+
.DS_Store
6+
Thumbs.db
7+
Desktop.ini
8+
9+
# IDE / Editor
10+
.vscode/
11+
.idea/
12+
*.swp
13+
*.swo
14+
*~
15+
16+
# Logs
17+
*.log
18+
npm-debug.log*
19+
20+
# Test artifacts
21+
test-results/
22+
playwright-report/
23+
tests/__screenshots__/
24+
test-output*.txt
25+
build-output.txt
26+
27+
# Environment
28+
.env
29+
.env.local
30+
31+
# Build output (regenerate with: npm run build)
32+
dist/
33+
34+
# Build caches
35+
.cache/
36+
37+
# Claude Code
38+
.claude/

CHANGELOG.md

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
# Changelog
2+
3+
All notable changes to WildflowerJS will be documented in this file.
4+
5+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7+
8+
## [1.0.0] - 2026-04-10
9+
10+
### Added
11+
- Core reactive framework with component system
12+
- Reactive state management with computed properties and dependency tracking
13+
- Store system for cross-component state sharing
14+
- List rendering with automatic keyed reconciliation
15+
- Conditional rendering (data-show, data-render)
16+
- Event handling with modifiers (throttle, debounce, self, outside, once, passive, capture)
17+
- Two-way data binding (data-model) with modifiers (trim, number, debounce, lazy)
18+
- Attribute, style, and class binding (data-bind-attr, data-bind-style, data-bind-class)
19+
- Client-side routing with history and hash modes
20+
- Server-side rendering with hydration
21+
- Plugin system architecture
22+
- Portal, modal, and transition systems
23+
- Entity pools (data-pool) for high-frequency DOM rendering
24+
- Anti-FOUC data-cloak system
25+
- `wildflower.whenSettled()` API for deterministic async waits
26+
- 4 build variants (core, lite, spa, full)
27+
- Comprehensive test suite (3,646 tests in real Chromium)
28+
29+
### Security
30+
- Expression evaluator blocklist for unsafe patterns (eval, Function, globalThis, window)
31+
- Pool renderer attribute blocklist and URL protocol sanitization
32+
- HTML sanitizer routing for data-bind-html and router outlet
33+
- data: URI blocking (except data:image/) in URL-bearing attributes

CODE_OF_CONDUCT.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
# Code of Conduct
2+
3+
This project follows the [Contributor Covenant v2.1](https://www.contributor-covenant.org/version/2/1/code_of_conduct/).
4+
5+
By participating in this project, you agree to abide by its terms.
6+
7+
## Reporting
8+
9+
If you experience or witness unacceptable behavior, please contact the project team at conduct@wildflowerjs.com. All reports will be handled confidentially.

CONTRIBUTING.md

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
# Contributing to WildflowerJS
2+
3+
Thanks for your interest in contributing!
4+
5+
**Please open an issue before submitting a pull request.** This lets us discuss whether the change fits the project's direction before you invest time writing code.
6+
7+
## Bug Reports
8+
9+
- Open a GitHub Issue with a minimal reproduction case
10+
- Describe expected vs. actual behavior
11+
12+
## Development Setup
13+
14+
```bash
15+
git clone https://github.com/wfjs-admin/WildflowerJS.git
16+
cd wildflowerjs
17+
npm install
18+
npm run test:setup # one-time: installs test browser
19+
npm run build
20+
npm test
21+
```
22+
23+
## Pull Requests
24+
25+
1. Fork the repo and create a feature branch
26+
2. Make changes in `src/`, then `npm run build`
27+
3. Add or update tests in `tests/` covering your changes
28+
4. Run tests: `npm test`
29+
5. Submit a PR referencing the related issue
30+
31+
## How PRs Are Reviewed
32+
33+
Pull requests are reviewed with the help of AI-assisted code analysis against the full internal test suite (~3,400 tests across 8 build variants). This means:
34+
35+
- **Reviews may take a few days** — your PR is evaluated against the complete codebase for correctness, performance impact, and pattern consistency, not just a quick skim.
36+
- **Integration goes through an internal pipeline** — accepted changes are merged into the development tree, tested, and published through our build process. Your PR will be closed with a reference to the integrating commit rather than merged directly on GitHub.
37+
- **We may ask questions or suggest adjustments** — this is normal and not a sign your contribution isn't valued. The codebase has specific patterns and performance constraints that aren't always obvious from the public API.
38+
39+
The best way to get a PR accepted quickly: open an issue first, wait for feedback on the approach, then submit focused changes with tests.
40+
41+
## License
42+
43+
By contributing, you agree that your contributions will be licensed under the MIT License.

0 commit comments

Comments
 (0)