Use when switching a project or component between frameworks - React to Vue, Vue to Svelte, or any supported framework pair.
69%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
Passed
No findings from the security scan
Fix and improve this skill with Tessl
tessl review fix ./skills/migrate-framework/SKILL.mdMigrate code from one framework to another while preserving functionality.
Arguments: $ARGUMENTS (e.g., "react to vue src/components/Button.tsx")
| From | To | Status |
|---|---|---|
| React | Vue 3 | Full |
| React | Svelte | Full |
| Vue 2 | Vue 3 | Full |
| Vue 3 | React | Full |
| Vue 3 | Svelte | Full |
| Angular | React | Partial |
| Angular | Vue 3 | Partial |
| React | Vue 3 |
|---|---|
useState | ref() / reactive() |
useEffect | onMounted, watch |
useMemo | computed() |
useCallback | Regular function |
useContext | provide/inject |
props | defineProps() |
children | <slot /> |
className | class |
onClick | @click |
// React
function Button({ label, onClick }) {
const [count, setCount] = useState(0)
useEffect(() => {
console.log('mounted')
}, [])
return (
<button className="btn" onClick={() => setCount(c => c + 1)}>
{label}: {count}
</button>
)
}
// Vue 3
<script setup lang="ts">
import { ref, onMounted } from 'vue'
const props = defineProps<{ label: string }>()
const emit = defineEmits<{ click: [] }>()
const count = ref(0)
onMounted(() => {
console.log('mounted')
})
</script>
<template>
<button class="btn" @click="count++">
{{ label }}: {{ count }}
</button>
</template>| Vue 3 | React |
|---|---|
ref() | useState |
reactive() | useState with object |
computed() | useMemo |
watch | useEffect |
onMounted | useEffect(fn, []) |
provide/inject | useContext |
<slot /> | children |
v-if | {condition && ...} |
v-for | .map() |
@click | onClick |
| React | Svelte |
|---|---|
useState | let variable |
useEffect | onMount, $: |
useMemo | $: derived |
props | export let |
children | <slot /> |
className | class |
onClick | on:click |
──── Migration Complete ────
Source: React (src/components/Button.tsx)
Target: Vue 3 (src/components/Button.vue)
Conversions:
✓ useState → ref (2 instances)
✓ useEffect → onMounted (1 instance)
✓ Props interface → defineProps
✓ JSX → Vue template
✓ className → class
Manual review needed:
- Line 15: Complex useEffect dependency array
- Line 23: Custom hook needs separate migration
Files created:
- src/components/Button.vuefernandezbaptiste/specialist-agent
cd716d9
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.