Skip to content

docs(tui): update documentation for Solid.js migration#33

Merged
rohitg00 merged 1 commit intomainfrom
docs/tui-solidjs-migration
Feb 1, 2026
Merged

docs(tui): update documentation for Solid.js migration#33
rohitg00 merged 1 commit intomainfrom
docs/tui-solidjs-migration

Conversation

@rohitg00
Copy link
Copy Markdown
Owner

@rohitg00 rohitg00 commented Feb 1, 2026

Summary

  • Update TUI documentation to reflect v1.8.0 migration from React to Solid.js
  • Change framework references from @opentui/react to @opentui/solid
  • Update code examples and performance optimization patterns to use Solid.js primitives

Changes

  • docs/fumadocs/content/docs/tui.mdx:
    • Framework: @opentui/react → @opentui/solid, React 19.0.0 → Solid.js 1.9.0
    • Added migration note explaining performance/bundle size benefits
    • Performance section: useMemo/useCallback → createMemo/createSignal/createEffect
    • Added windowed list rendering mention
    • Integration section: Added Solid.js reactive code example
    • Graceful exit: React unmount → Solid.js onCleanup

Test plan

  • Verify documentation renders correctly on fumadocs site
  • Confirm code examples are syntactically correct

Open with Devin

Summary by CodeRabbit

  • Documentation
    • Updated documentation to reflect the TUI's migration from React to Solid.js (v1.8.0)
    • Added migration notes detailing performance and bundle size improvements
    • Refreshed code examples and integration guidance to match the current framework
    • Updated optimization and cleanup documentation

✏️ Tip: You can customize this high-level summary in your review settings.

Update TUI documentation to reflect the v1.8.0 migration from React to
Solid.js:

- Change @opentui/react to @opentui/solid
- Change React 19.0.0 to Solid.js 1.9.0
- Add note about migration rationale (performance, bundle size)
- Update performance optimizations section with Solid.js primitives
  (createMemo, createSignal, createEffect)
- Add windowed list rendering mention
- Update Integration section with Solid.js code example
- Update graceful exit to reference onCleanup instead of React unmount
@vercel
Copy link
Copy Markdown

vercel bot commented Feb 1, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
skillkit Ready Ready Preview, Comment Feb 1, 2026 5:51pm
skillkit-docs Ready Ready Preview, Comment Feb 1, 2026 5:51pm

@coderabbitai
Copy link
Copy Markdown

coderabbitai bot commented Feb 1, 2026

📝 Walkthrough

Walkthrough

Documentation file updated to reflect framework migration from React 19.0.0 to Solid.js 1.9.0, including revised code examples, performance optimization patterns, and lifecycle management approaches.

Changes

Cohort / File(s) Summary
TUI Migration Documentation
docs/fumadocs/content/docs/tui.mdx
Updated framework references from @opentui/react to @opentui/solid. Replaced React hooks (useMemo, useCallback) with Solid.js equivalents (createMemo, createSignal, createEffect). Revised code examples to use Solid.js reactive patterns. Updated graceful exit section to use Solid.js onCleanup instead of React unmounting. Added migration note documenting Solid.js benefits.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~10 minutes

Poem

🐰✨ A fox once coded in React so bright,
But Solid.js made the bunny's heart light!
With signals and memos, and cleanup so clean,
The swiftest framework we've ever seen! 🚀

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly summarizes the main change: updating TUI documentation to reflect the Solid.js migration, which is the primary focus of the changeset.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch docs/tui-solidjs-migration

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown

@devin-ai-integration devin-ai-integration bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Devin Review: No Issues Found

Devin Review analyzed this PR and found no potential bugs to report.

View in Devin Review to see 1 additional flag.

Open in Devin Review

@rohitg00 rohitg00 merged commit 34e8cd0 into main Feb 1, 2026
9 of 10 checks passed
Copy link
Copy Markdown

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Fix all issues with AI agents
In `@docs/fumadocs/content/docs/tui.mdx`:
- Around line 181-195: The snippet uses undefined variables and an async
callback in createEffect; define signals for searchDirs and searchTerm (e.g.,
const [searchDirs, setSearchDirs] = createSignal([...]) and const [searchTerm,
setSearchTerm] = createSignal('')) and change the createEffect callback to be
synchronous by invoking an async IIFE inside it (or replace the pattern with
createResource) so the effect returns a proper cleanup function; update
references to skills(), findAllSkills(searchDirs()), and createMemo(() =>
skills().filter(s => s.name.includes(searchTerm()))) to use the newly defined
signals (symbols: createSignal, createEffect, createMemo, findAllSkills, skills,
filteredSkills, searchDirs, searchTerm).

Comment on lines +181 to +195
The TUI integrates with @skillkit/core using Solid.js reactive patterns:

```typescript
findAllSkills(searchDirs) // Returns skill metadata
evaluateSkillDirectory(path) // Quality metrics
getQualityGrade(score) // 0-100 to A-F
import { createSignal, createMemo, createEffect } from 'solid-js';

const [skills, setSkills] = createSignal([]);

createEffect(async () => {
const result = await findAllSkills(searchDirs);
setSkills(result);
});

const filteredSkills = createMemo(() =>
skills().filter(s => s.name.includes(searchTerm()))
);
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

🏁 Script executed:

# First, check if the file exists and examine the context around the lines in question
fd "tui.mdx" --type f

Repository: rohitg00/skillkit

Length of output: 95


🌐 Web query:

Solid.js createEffect async operations best practices

💡 Result:

Best practices for async work with createEffect in Solid

  1. Prefer createResource / createAsync for data fetching (instead of createEffect)
    Solid’s recommended approach for async fetching is createResource (and createAsync in Solid Router / SolidStart), which gives you built-in loading/error state, integrates with Suspense, and avoids common race-condition footguns. [1] [2] [3]

  2. Don’t make the effect function itself async
    createEffect expects a synchronous function; if you mark it async, it returns a Promise (not a cleanup function), so Solid can’t use it for teardown. Instead, start async work inside the effect. [1]

  3. Cancel/ignore stale requests on re-run using onCleanup (or AbortController)
    Effects re-run whenever tracked dependencies change. Use onCleanup to cancel in-flight work or mark it stale so older promises can’t commit results after a newer run. [4] [1]

    createEffect(() => {
      const id = userId();
      const ac = new AbortController();
    
      (async () => {
        const r = await fetch(`/api/users/${id}`, { signal: ac.signal });
        // setUser(await r.json());
      })();
    
      onCleanup(() => ac.abort());
    });
  4. Keep effects for “side effects”, not for deriving state
    Solid’s docs caution that effects are primarily for side effects that read reactive state; avoid using them as your default place to set signals derived from other signals (use memos/resources where appropriate). [1] [3]

  5. Be deliberate about what the effect tracks
    Everything you read inside createEffect becomes a dependency and can trigger re-runs. Keep reads minimal to avoid accidental refetch loops or extra async churn. [1]


🏁 Script executed:

# Read the file around lines 181-195 to see the full context
cat -n docs/fumadocs/content/docs/tui.mdx | sed -n '170,210p'

Repository: rohitg00/skillkit

Length of output: 1286


Make the integration snippet self-contained and use synchronous createEffect.

searchDirs and searchTerm are undefined in the snippet. Additionally, createEffect expects a synchronous callback; the current async function returns a Promise instead of a cleanup function, preventing proper teardown. Wrap the async call in an IIFE (shown below) or use createResource for a more idiomatic data-fetching approach in Solid.

Proposed doc-friendly tweak
 import { createSignal, createMemo, createEffect } from 'solid-js';

 const [skills, setSkills] = createSignal([]);
+const [searchTerm, setSearchTerm] = createSignal('');
+// Wire setSearchTerm to your input handler
+const searchDirs = /* e.g., getSearchDirs(agentType) */;

-createEffect(async () => {
-  const result = await findAllSkills(searchDirs);
-  setSkills(result);
-});
+createEffect(() => {
+  void (async () => {
+    const result = await findAllSkills(searchDirs);
+    setSkills(result);
+  })();
+});

 const filteredSkills = createMemo(() =>
   skills().filter(s => s.name.includes(searchTerm()))
 );
🤖 Prompt for AI Agents
In `@docs/fumadocs/content/docs/tui.mdx` around lines 181 - 195, The snippet uses
undefined variables and an async callback in createEffect; define signals for
searchDirs and searchTerm (e.g., const [searchDirs, setSearchDirs] =
createSignal([...]) and const [searchTerm, setSearchTerm] = createSignal(''))
and change the createEffect callback to be synchronous by invoking an async IIFE
inside it (or replace the pattern with createResource) so the effect returns a
proper cleanup function; update references to skills(),
findAllSkills(searchDirs()), and createMemo(() => skills().filter(s =>
s.name.includes(searchTerm()))) to use the newly defined signals (symbols:
createSignal, createEffect, createMemo, findAllSkills, skills, filteredSkills,
searchDirs, searchTerm).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant