{"id":25162,"library":"defuss","title":"defuss","description":"Defuss is a minimalistic web framework (~2 KiB gzip) that provides JSX rendering, DOM manipulation via a jQuery-like API, and SSR/SSG capabilities. Current version 3.4.5. It emphasizes explicit code over magic, with a tiny codebase (~500 LoC for core packages). Released under MIT. Key differentiators: isomorphic rendering with only three functions (jsx, render, renderToString), tree-shakable, TypeScript-first, and replaces complex state management with simple reactive patterns.","status":"active","version":"3.4.5","language":"javascript","source_language":"en","source_url":"https://github.com/kyr0/defuss","tags":["javascript","jsx","render","ssr","ssg","isomorphic","jquery-like","defuss","react-like","typescript"],"install":[{"cmd":"npm install defuss","lang":"bash","label":"npm"},{"cmd":"yarn add defuss","lang":"bash","label":"yarn"},{"cmd":"pnpm add defuss","lang":"bash","label":"pnpm"}],"dependencies":[{"reason":"For TypeScript type definitions and JSX support","package":"typescript","optional":true}],"imports":[{"note":"jsx is in the 'defuss/render' subpath since v3.","wrong":"import { jsx } from 'defuss'","symbol":"jsx","correct":"import { jsx } from 'defuss/render'"},{"note":"ESM-only package. CommonJS require is not supported.","wrong":"const render = require('defuss/render')","symbol":"render","correct":"import { render } from 'defuss/render'"},{"note":"dequery is a separate subpath. Default export is not provided.","wrong":"import $ from 'defuss'","symbol":"$","correct":"import { $ } from 'defuss/dequery'"},{"note":"renderToString is part of 'defuss/render' since v3.1.","wrong":"import { renderToString } from 'defuss/ssr'","symbol":"renderToString","correct":"import { renderToString } from 'defuss/render'"}],"quickstart":{"code":"import { jsx, render, renderToString } from 'defuss/render';\nimport { $ } from 'defuss/dequery';\n\nconst App = () => (\n  <div>\n    <h1>Hello defuss!</h1>\n    <button ref={btnRef} onMount={(el) => console.log('Mounted', el)}>\n      Click me\n    </button>\n  </div>\n);\n\n// Client-side render\nconst root = document.getElementById('root');\nroot && render(<App />, root);\n\n// SSR renderToString\nconst html = renderToString(<App />);\nconsole.log(html);\n\n// DOM manipulation\nconst items = $('li');\nitems.forEach(el => el.classList.add('highlight'));","lang":"typescript","description":"Shows basic component definition, client-side render, SSR string generation, and dequery DOM selection with default exports."},"warnings":[{"fix":"Change 'import render from \"defuss/render\"' to 'import { render } from \"defuss/render\"","message":"Removed default export from 'defuss/render' in v3.0. Use named exports instead.","severity":"breaking","affected_versions":">=3.0"},{"fix":"Use ESM imports (import syntax) or set type: module in package.json","message":"defuss/render is ESM-only. CommonJS require() will fail in Node.js","severity":"gotcha","affected_versions":"*"},{"fix":"Replace import from 'defuss/dom' with 'defuss/dequery'","message":"The 'defuss/dom' package is deprecated since v2.5. Use 'defuss/dequery' instead.","severity":"deprecated","affected_versions":">=2.5 <3.0"},{"fix":"Manually remove listeners using off() before unmount, or use a lifecycle hook to clean up.","message":"Event listeners registered via dequery's on() are not automatically cleaned up on component unmount.","severity":"gotcha","affected_versions":"*"}],"env_vars":null,"search_vec":"'2':8 '3.4.5':28 '500':39 'api':22 'capabl':25 'code':32 'codebas':38 'complex':66 'core':42 'current':26 'defuss':1,2,82 'differenti':48 'dom':15 'emphas':30 'explicit':31 'first':63 'framework':7 'function':54 'gzip':10 'isomorph':49,78 'javascript':73 'jqueri':20,80 'jquery-lik':19,79 'jsx':13,55,74 'key':47 'kib':9 'like':21,81,85 'loc':40 'magic':34 'manag':68 'manipul':16 'minimalist':5 'mit':46 'packag':43 'pattern':72 'provid':12 'react':84 'react-lik':83 'reactiv':71 'releas':44 'render':14,50,56,75 'rendertostr':57 'replac':65 'shakabl':60 'simpl':70 'ssg':77 'ssr':76 'ssr/ssg':24 'state':67 'three':53 'tini':37 'tree':59 'tree-shak':58 'typescript':62,86 'typescript-first':61 'version':27 'via':17 'web':6","created_at":"2026-05-01T13:43:20.433260+00:00","updated_at":"2026-05-01T13:43:20.433260+00:00","problems":[{"fix":"Access ref.current only inside onMount callback or after render.","cause":"Trying to use ref.current before the component has mounted.","error":"TypeError: Cannot read properties of undefined (reading 'current')"},{"fix":"Ensure you pass JSX like <App />, not a function reference.","cause":"Passed an invalid argument (e.g., a function instead of JSX).","error":"Error: renderToString must be called with a valid JSX element."},{"fix":"Run 'npm install defuss' and verify import path: 'defuss/render' (not 'defuss/renderer').","cause":"Missing package or incorrect import path.","error":"Module not found: Error: Can't resolve 'defuss/render'"},{"fix":"Use import.meta.env instead for Vite, or replace process.env with static values.","cause":"Using a Node.js specific API (like process.env) in browser code without polyfill.","error":"Uncaught ReferenceError: process is not defined"}],"ecosystem":"npm","meta_description":null,"install_score":null,"quickstart_score":null,"quickstart_tag":null,"pypi_latest":null,"cli_name":"","cli_version":null,"type":"library","homepage":"https://defuss.dev","github":"https://github.com/kyr0/defuss","docs":null,"changelog":null,"pypi":null,"npm":"https://www.npmjs.com/package/defuss","openapi_spec":null,"status_page":null,"smithery":null,"categories":["web-framework","serialization"],"base_url":null,"auth_type":null,"provenance":{"verified_status":null,"verified_at":null,"last_verified":"2026-05-01","next_check":"2026-07-30","install_tag":null}}