Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
87 commits
Select commit Hold shift + click to select a range
62c5f5e
[Migration] Core: Update Sycamore 0.8→0.9 API integration
afidegnum Nov 18, 2025
2d9aeb8
[Migration] Examples: Migrate all examples to Sycamore 0.9
afidegnum Nov 18, 2025
bd13070
[Migration] Website: Update website components to Sycamore 0.9
afidegnum Nov 18, 2025
6fccbb7
[Migration] CLI & Macros: Update build tools to Sycamore 0.9
afidegnum Nov 18, 2025
4ec74c9
[Migration] Infrastructure: Add migration automation and reports
afidegnum Nov 18, 2025
297a982
[Migration] Backup: Add remaining Cargo.toml backup files
afidegnum Nov 18, 2025
66bd228
test: signed commit
afidegnum Nov 18, 2025
771f97a
[Migration] Macros: Update perseus-macro for Sycamore 0.9.2
afidegnum Nov 27, 2025
f7fe07d
[Migration] Translator: Update t! and link! macros for Sycamore 0.9.2
afidegnum Nov 27, 2025
7731034
[Migration] Complete Sycamore 0.9.2 upgrade
afidegnum Nov 28, 2025
5203767
docs: Update CHANGELOG for Sycamore 0.9.2 migration
afidegnum Nov 28, 2025
9bcabb2
ci: Add workflow_dispatch trigger for manual CI runs
afidegnum Nov 28, 2025
8ab8018
ci: Add update-v5.0 branch to CI triggers
afidegnum Nov 28, 2025
8a53f99
[Migration] Deps: Fix dependency upgrades and optimize build resources
afidegnum Nov 28, 2025
6052b3b
chore: Remove .claude directory and add to gitignore
afidegnum Nov 28, 2025
c779753
chore: Remove all shell scripts and add to gitignore
afidegnum Nov 28, 2025
c5e485a
chore: Remove all backup files and add to gitignore
afidegnum Nov 28, 2025
49111f2
fix: Update PanicInfo to PanicHookInfo for Rust 1.82+
afidegnum Nov 28, 2025
d2458c8
fix: Remove unsafe from RootHandle::dispose() calls
afidegnum Nov 28, 2025
599c726
chore: Remove rustfmt.toml configuration file
afidegnum Nov 28, 2025
8377b84
fix: Remove Cargo.lock from gitignore and commit it
afidegnum Nov 28, 2025
a23d101
chore: Clean up unused imports and update CI
afidegnum Nov 29, 2025
830236c
fix: Add better error message for reactor context not found
afidegnum Nov 29, 2025
96aa730
fix: Remove unused imports
afidegnum Nov 29, 2025
d0fc071
fix: update provide_context call for Sycamore 0.9.2 compatibility
afidegnum Nov 29, 2025
ba60472
fix: ensure reactor context accessible in child scopes
afidegnum Nov 29, 2025
55392cf
fix: update code examples for Sycamore 0.9.2 compatibility
afidegnum Nov 29, 2025
e23c783
chore: update package versions from 0.4.3 to 0.5.0
afidegnum Nov 29, 2025
3ddc153
fix: update create_root to create_child_scope for Sycamore 0.9.2
afidegnum Nov 29, 2025
2d8febc
fix(cli): update ureq call in test utilities
afidegnum Nov 29, 2025
22507b3
fix(tests): update set_headers test and bump deps
afidegnum Nov 30, 2025
1c5fc8a
fix: resolve hydration issues with Sycamore 0.9.2
afidegnum Dec 5, 2025
b2b4c30
test: trigger workflow for testing
afidegnum Dec 6, 2025
3ba1b97
fix: enable axum feature for tiny example
afidegnum Dec 6, 2025
40a0052
fix: add missing server integration features to all examples
afidegnum Dec 6, 2025
2eefbc4
fix: resolve view reactivity and widget rendering issues
afidegnum Dec 11, 2025
bf6bbf2
fix: resolve server integration feature conflicts
afidegnum Dec 11, 2025
f83d11c
fix: temporarily ignore deploy test and fix doctest
afidegnum Dec 11, 2025
b73cc4f
chore: format all code with cargo fmt
afidegnum Dec 12, 2025
271c10b
fix: resolve Sycamore 0.9.2 compatibility issues in examples
afidegnum Dec 12, 2025
b9376cd
fix: resolve remaining Sycamore 0.9.2 issues in idb_freezing and website
afidegnum Dec 12, 2025
e14f408
fix: remove dynamic integration feature switching in tests
afidegnum Dec 12, 2025
2c0fb5c
fix: add missing wait_for_checkpoint after thaw button clicks
afidegnum Dec 12, 2025
b3b805e
Revert "fix: add missing wait_for_checkpoint after thaw button clicks"
afidegnum Dec 12, 2025
86dcc72
fix: wait for elements instead of checkpoints after thaw operation
afidegnum Dec 12, 2025
4787c2f
fix: properly wait for URL change after thaw operation
afidegnum Dec 12, 2025
3999a31
fix: create reactor context inside render_to_string for error views
afidegnum Dec 12, 2025
0b15495
fix(ci): add geckodriver installation and WASM target to E2E tests
afidegnum Dec 12, 2025
b57b6ee
fix(cli): catch minify-js panics and fall back to unminified JS
afidegnum Dec 12, 2025
4f1e568
style: apply cargo fmt to fix formatting issues
afidegnum Dec 12, 2025
370e50d
fix: create global state signals in root scope to survive navigation
afidegnum Dec 17, 2025
ee55225
ci: switch E2E tests from geckodriver to chromedriver
afidegnum Dec 17, 2025
c56dee7
fix(ci): use browser-actions/setup-chrome for reliable chromedriver i…
afidegnum Dec 17, 2025
4b38e36
fix(test): update Chrome headless options for modern Chrome
afidegnum Dec 17, 2025
005e862
fix(test): wait for server to be ready before running E2E tests
afidegnum Dec 18, 2025
5427113
style: apply cargo fmt to test.rs
afidegnum Dec 18, 2025
afc216b
fix(cli): handle GitHub API rate limiting for wasm-opt version
afidegnum Dec 18, 2025
90d6603
fix(test): increase wait_for_checkpoint timeout to 120 seconds
afidegnum Dec 18, 2025
e49f2eb
fix(state): preserve reactive state across client-side navigation
afidegnum Dec 24, 2025
17c6121
feat(components): add Link component for client-side navigation
afidegnum Dec 24, 2025
a1ad0b0
fix(examples): update capsules and index_view to use Link component
afidegnum Dec 24, 2025
2319ef6
fix(examples): update remaining examples to use Link component
afidegnum Dec 24, 2025
a2210c6
fix(test): correct checkpoint expectations for cross-locale navigation
afidegnum Dec 24, 2025
d4d7785
fix(test): add checkpoint waits after client-side navigation in capsules
afidegnum Dec 24, 2025
6285504
fix(compat): fix WASM client crashes with Sycamore 0.9.2
afidegnum Dec 25, 2025
be7d0f7
style: apply rustfmt formatting
afidegnum Dec 25, 2025
9a437f7
fix(cli): fix relative path bug in serve_exported
afidegnum Dec 25, 2025
92abf28
docs: add Perseus 0.5.x documentation with Sycamore 0.9.2 syntax
afidegnum Dec 26, 2025
61a19fa
docs: update README and CHANGELOG for v0.5.0 release
afidegnum Dec 26, 2025
f16b1c6
update workflow
afidegnum Jan 22, 2026
d910580
new update
afidegnum Jan 23, 2026
cca5e3f
feat: Add persauth membership demo app
afidegnum Feb 8, 2026
4e37bcd
fix: membership app - contact form, post viewing, and new admin pages
afidegnum Feb 8, 2026
6936097
Fix membership demo navigation; extend Link with style
afidegnum Feb 10, 2026
0a5e7ec
Fix membership demo navigation and admin support
afidegnum Feb 11, 2026
4cebc1e
chore: harden cli tests and clean package warnings
afidegnum Feb 13, 2026
e93e745
chore: clean package cfg checks and warning fixes
afidegnum Feb 13, 2026
1e97c08
ci: pin chromedriver to installed chrome major
afidegnum Feb 13, 2026
bcd06bd
Add portfolio as private submodule
afidegnum Mar 10, 2026
54169c1
Remove portfolio note from README
afidegnum Mar 10, 2026
1fedb0f
Update portfolio submodule and ecosystem paths
afidegnum Mar 11, 2026
5bc21ee
Update portfolio submodule pointer
afidegnum Mar 11, 2026
5247c0c
chore: ignore all target/ build directories
afidegnum Aug 25, 2026
066de82
fix(turbine): generate HTML/head artifacts for stateless templates
afidegnum Aug 25, 2026
f998084
chore: bump portfolio submodule to latest main
afidegnum Aug 25, 2026
0a52348
docs: reconcile 0.5.0 CHANGELOG with actual changes
afidegnum Aug 25, 2026
e92f922
docs: point README at afidegnum/perseus and add maintained-fork note
afidegnum Aug 25, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
9 changes: 9 additions & 0 deletions .actrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# Act configuration for Perseus project
# Use Rust image that has cargo pre-installed
-P ubuntu-latest=rust:latest

# Reuse containers to speed up repeated runs
--reuse

# Use bind mount for performance
--use-gitignore=false
4 changes: 2 additions & 2 deletions .cargo/config.toml
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
[build]
rustflags = [ "--cfg", "engine" ]
rustdocflags = [ "--cfg", "engine" ]
rustflags = ["--cfg", "engine"]
rustdocflags = ["--cfg", "engine"]
34 changes: 33 additions & 1 deletion .env
Original file line number Diff line number Diff line change
@@ -1 +1,33 @@
EXAMPLE_INTEGRATION=axum
# Perseus Membership System Configuration
# Copy this file to .env and modify as needed

# Database Configuration (PostgreSQL)
PG__HOST=127.0.0.1
PG__PORT=5432
PG__USER=postgres
PG__PASSWORD=chou1979
PG__DBNAME=members
PG__POOL__MAX_SIZE=10

# Server Configuration
SRV_CNF__HOST=127.0.0.1
SRV_CNF__PORT=8080
SRV_CNF__SECRET_KEY=2454fae30614fc1e5df49bd910418173e2b634daeed645c6ca1405f4fcff18b9
SRV_CNF__BCRYPT_OR_ARGON=false
SRV_CNF__EMAIL_OTP_ENABLED=true
SRV_CNF__USER_TABLE_NAME=users
SRV_CNF__USER_INVALID_ID=-1000
SRV_CNF__MAX_OTP_ATTEMPTS=10

# SMTP Configuration (Mailpit for local development)
# Mailpit runs on port 1025 for SMTP and 8025 for web UI
# Install: https://github.com/axllent/mailpit
SRV_CNF__SMTP_HOST=127.0.0.1
SRV_CNF__SMTP_PORT=1025
SRV_CNF__SMTP_USERNAME=
SRV_CNF__SMTP_PASSWORD=
SRV_CNF__SMTP_TLS_OFF=true
SRV_CNF__SMTP_FROM_EMAIL=noreply@localhost

# Logging
RUST_LOG=info
64 changes: 43 additions & 21 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ on:
push:
branches:
- main
- update-v5.0
pull_request:

jobs:
Expand Down Expand Up @@ -69,6 +70,8 @@ jobs:
- run: rustup target add wasm32-unknown-unknown
- name: Run CLI tests
run: bonnie test cli
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# We now have a separate job for each example's E2E testing because they all take a while, we may as well run them in parallel
# The job for each E2E test is exactly the same except for a minor difference, so we'll use a matrix based on listing the subdirectories
e2e-example-test:
Expand Down Expand Up @@ -145,26 +148,45 @@ jobs:
target/
key: ${{ runner.os }}-cargo-${{ hashFiles('Cargo.lock') }}

# # Also cache the apt packages we need for testing
# - uses: awalsh128/cache-apt-pkgs-action@latest
# with:
# packages: firefox
# version: 1.0

# # And finally cache Geckodriver itself
# - uses: actions/cache@v3
# id: geckocache
# with:
# path: |
# ~/.geckodriver
# # The cache should be OS-specific
# key: ${{ runner.os }}-geckodriver
# - name: Install Geckodriver
# if: steps.geckocache.outputs.cache-hit != 'true'
# run: wget -O ~/geckodriver-archive https://github.com/mozilla/geckodriver/releases/download/v0.32.0/geckodriver-v0.32.0-linux64.tar.gz && tar -xvzf ~/geckodriver-archive -C ~/ && mv ~/geckodriver ~/.geckodriver && chmod +x ~/.geckodriver
- run: sudo apt update && sudo apt install firefox

- name: Run Firefox WebDriver
run: geckodriver &
# Setup Chrome for E2E tests
- name: Setup Chrome
uses: browser-actions/setup-chrome@v1
with:
chrome-version: stable
install-chromedriver: false

- name: Install matching ChromeDriver
run: |
set -euo pipefail
CHROME_VERSION="$(google-chrome --product-version)"
CHROME_MAJOR="${CHROME_VERSION%%.*}"
DRIVER_VERSION="$(curl -fsSL "https://googlechromelabs.github.io/chrome-for-testing/LATEST_RELEASE_${CHROME_MAJOR}")"

mkdir -p "$HOME/.local/bin"
curl -fsSL \
-o /tmp/chromedriver-linux64.zip \
"https://storage.googleapis.com/chrome-for-testing-public/${DRIVER_VERSION}/linux64/chromedriver-linux64.zip"
rm -rf /tmp/chromedriver-linux64
unzip -qo /tmp/chromedriver-linux64.zip -d /tmp
install -m 0755 /tmp/chromedriver-linux64/chromedriver "$HOME/.local/bin/chromedriver"
echo "$HOME/.local/bin" >> "$GITHUB_PATH"

- name: Verify Chrome and ChromeDriver major versions
run: |
set -euo pipefail
CHROME_MAJOR="$(google-chrome --product-version | cut -d. -f1)"
DRIVER_MAJOR="$(chromedriver --version | awk '{print $2}' | cut -d. -f1)"
echo "Chrome major: ${CHROME_MAJOR}"
echo "ChromeDriver major: ${DRIVER_MAJOR}"
test "${CHROME_MAJOR}" = "${DRIVER_MAJOR}"

- run: rustup target add wasm32-unknown-unknown

- name: Run Chrome WebDriver
run: chromedriver --port=4444 &
- name: Wait for Chromedriver to start
run: sleep 3
- name: Run E2E tests for example ${{ matrix.name }} in category ${{ matrix.type }}
run: bonnie test example-all-integrations ${{ matrix.type }} ${{ matrix.name }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
9 changes: 8 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,17 @@
/target_engine
/target_engine_clientdoc
/target_wasm
Cargo.lock
target/
**/target/
pkg/
.tribble/
.idea/
target_engine/
target_wasm/
dist/
.claude/
AGENTS.md
doc/
*.sh
!examples/demos/render_portfolio_component_ecosystem_pdf.sh
*.backup
3 changes: 3 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[submodule "portfolio"]
path = portfolio
url = git@github.com:afidegnum/perseus-portfolio.git
92 changes: 92 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,98 @@

All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.

## [0.5.0](https://github.com/afidegnum/perseus/compare/v0.4.3...v0.5.0) (2026-08-25)

### ⚠ BREAKING CHANGES

This release upgrades Perseus from Sycamore 0.8.x to Sycamore 0.9.2, bringing significant API improvements but requiring migration of existing code.

#### View Function Signature Changes

```rust
// Before (0.4.x with Sycamore 0.8)
fn my_page<G: Html>(cx: Scope) -> View<G> {
view! { cx, p { "Hello" } }
}

// After (0.5.0 with Sycamore 0.9.2)
fn my_page() -> View {
view! { p { "Hello" } }
}
```

#### Signal API Changes

```rust
// Before
let count = cx.create_signal(0);
state.items.modify().push(item);

// After
let count = create_signal(0);
state.items.update(|items| items.push(item));
```

#### Reactor Access Changes

```rust
// Before
let reactor = Reactor::<G>::from_cx(cx);

// After
let reactor = Reactor::<BrowserNodeType>::from_cx();
```

### Features

* **components:** Add `Link` component for client-side navigation ([0ee5abd](https://github.com/framesurge/perseus/commit/0ee5abd8))
```rust
// New way to create internal links
Link(to = "/about") { "About Us" }
```
* **docs:** Add complete 0.5.x documentation with Sycamore 0.9.2 syntax ([e0938b0](https://github.com/framesurge/perseus/commit/e0938b06))
* **docs:** Add comprehensive migration guide from 0.4.x to 0.5.x
* **examples:** Add persauth membership demo app with auth, RBAC, categories, and mail

### Bug Fixes

* **compat:** Fix WASM client crashes with Sycamore 0.9.2 ([fcc2230](https://github.com/framesurge/perseus/commit/fcc2230f))
* **state:** Preserve reactive state across client-side navigation ([eb70dd5](https://github.com/framesurge/perseus/commit/eb70dd5e))
* **state:** Create global state signals in root scope to survive navigation ([2f26554](https://github.com/framesurge/perseus/commit/2f26554a))
* **cli:** Fix relative path bug in serve_exported ([2695a36](https://github.com/framesurge/perseus/commit/2695a368))
* **cli:** Handle GitHub API rate limiting for wasm-opt version checks ([a5ab490](https://github.com/framesurge/perseus/commit/a5ab4900))
* **cli:** Catch minify-js panics and fall back to unminified JS ([e1ae2f9](https://github.com/framesurge/perseus/commit/e1ae2f96))
* **hydration:** Fix hydration issues with new Sycamore API ([f40321f](https://github.com/framesurge/perseus/commit/f40321f3))
* **context:** Ensure reactor context accessible in child scopes ([2cd25c5](https://github.com/framesurge/perseus/commit/2cd25c54))
* **compat:** Update PanicInfo to PanicHookInfo for Rust 1.82+ ([661d4ce](https://github.com/framesurge/perseus/commit/661d4ce9))
* **turbine:** Generate page/head artifacts for stateless templates so direct loads work

### Code Refactoring

* Update all examples to use Sycamore 0.9.2 syntax
* Update website components for Sycamore 0.9.2 compatibility
* Remove deprecated `Scope` parameter from all view functions
* Replace `<G: Html>` generics with concrete `View` type
* Remove accidental `examples/target/` build artifacts from history and ignore all `target/` directories

### Dependencies

* `sycamore` → 0.9.2
* `sycamore-router` → 0.9.2

### Migration Guide

For detailed migration information, see the [migration guide](https://framesurge.sh/perseus/en-US/docs/migrating) or the `docs/0.5.x/en-US/migrating.md` file.

Key changes:

1. **Remove Scope parameters** from all view functions
2. **Remove `<G: Html>` generics** - use `View` instead of `View<G>`
3. **Update view! macro** - remove `cx` as first argument
4. **Use Link component** for internal navigation instead of `a(href=...)`
5. **Update signal access** - use `create_signal(value)` as free function
6. **Update Reactor access** - use `Reactor::<BrowserNodeType>::from_cx()`

### [0.4.3](/home/arctic-hen7/me/.main-mirror.git/compare/v0.4.2...v0.4.3) (2024-07-19)


Expand Down
Loading
Loading