{"id":47763740,"url":"https://github.com/alexewerlof/jj","last_synced_at":"2026-04-03T05:57:27.680Z","repository":{"id":57280996,"uuid":"232915700","full_name":"alexewerlof/jj","owner":"alexewerlof","description":"Make HTML and CSS in Just Javascript!","archived":false,"fork":false,"pushed_at":"2026-04-01T20:32:58.000Z","size":1181,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-04-02T07:56:21.029Z","etag":null,"topics":["frontend-framework","javascript-library"],"latest_commit_sha":null,"homepage":"https://alexewerlof.github.io/jj/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/alexewerlof.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2020-01-09T22:10:32.000Z","updated_at":"2026-04-01T20:33:04.000Z","dependencies_parsed_at":"2022-09-06T01:00:29.243Z","dependency_job_id":null,"html_url":"https://github.com/alexewerlof/jj","commit_stats":null,"previous_names":["alexewerlof/jj","userpixel/jj"],"tags_count":13,"template":false,"template_full_name":null,"purl":"pkg:github/alexewerlof/jj","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alexewerlof%2Fjj","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alexewerlof%2Fjj/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alexewerlof%2Fjj/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alexewerlof%2Fjj/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/alexewerlof","download_url":"https://codeload.github.com/alexewerlof/jj/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alexewerlof%2Fjj/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31337785,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-03T04:42:29.251Z","status":"ssl_error","status_checked_at":"2026-04-03T04:42:12.667Z","response_time":107,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["frontend-framework","javascript-library"],"created_at":"2026-04-03T05:57:26.951Z","updated_at":"2026-04-03T05:57:27.669Z","avatar_url":"https://github.com/alexewerlof.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Just JavaScript!\n\n**Faster than VDOM. No Build Step. Use the Platform!**\n\n**JJ** is a lightweight, no-transpilation library for modern web development. What You Write Is What Is Run (WYWIWIR).\n\n## ⚡ Quick Start\n\nCDN:\n\n[Import map](https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/script/type/importmap): Add this to your HTML:\n\n```html\n\u003cscript type=\"importmap\"\u003e\n    {\n        \"jj\": \"https://cdn.jsdelivr.net/npm/jj/lib/bundle.min.js\"\n        // Or a specific version\n        \"jj\": \"https://cdn.jsdelivr.net/npm/jj@2/lib/bundle.min.js\n    }\n\u003c/script\u003e\n```\n\nAnd then:\n\n```js\nimport { JJHE } from 'jj'\n```\n\nCDN:\n\n```js\nimport { JJHE } from 'https://cdn.jsdelivr.net/npm/jj/lib/bundle.min.js'\n```\n\nNPM:\n\n```bash\nnpm i jj\n```\n\n```js\nimport { JJHE } from 'jj'\n\nJJHE.create('div')\n    .addClass('card')\n    .setText('Hello World!')\n    .on('click', () =\u003e console.log('Hi'))\n```\n\nUse namespace-aware wrappers for non-HTML elements:\n\n```js\nimport { JJSE, JJME } from 'jj'\n\nconst icon = JJSE.create('svg').setAttr('viewBox', '0 0 24 24')\nconst formula = JJME.create('math').addChild(JJME.create('mi').setText('x'))\n```\n\n## 🚀 Why JJ?\n\n- **Zero Build** – Runs directly in modern browsers\n- **Native Speed** – Direct DOM manipulation, no VDOM overhead\n- **Web Standards** – First-class Web Components support\n- **Fluent API** – Chainable methods for cleaner code\n\nJJ is **not** a reactive framework, template compiler, or state-management system.\n\n## API Notes\n\nBatch setter helpers use plural methods:\n\n- `setAttrs({...})`\n- `setAriaAttrs({...})`\n- `setDataAttrs({...})`\n- `setClasses({...})`\n\n## 🧩 Custom Elements Readiness\n\nUse `defineComponent(name, constructor, options?)` and expose a static `defined` promise on each custom element class:\n\n```js\nimport { defineComponent } from 'jj'\n\nexport class MyWidget extends HTMLElement {\n    static defined = defineComponent('my-widget', MyWidget)\n}\n\nawait MyWidget.defined\n```\n\n`defineComponent()` resolves a `Promise\u003cboolean\u003e`:\n\n- `false`: this call registered the component.\n- `true`: it was already registered with the same constructor.\n\nThis explicit definition step is important for reliability. If markup is parsed before the element is defined, upgrades can race with rendering and produce flaky behavior.\n\n## 📚 Learn More\n\n**👉 [Visit the full site with tutorials, examples, and API docs](https://alexewerlof.github.io/jj)**\n\n## 🤖 AI-Optimized Development\n\nJJ is designed for AI-assisted development. Install the skill for intelligent code suggestions:\n\n```bash\nnpx skills add alexewerlof/jj\n```\n\nOnce installed, AI agents (GitHub Copilot, Cursor, Claude Code, Windsurf, etc.) will:\n\n- Follow JJ's patterns and conventions automatically\n- Know when to use `.ref` for native DOM access\n- Suggest correct framework translations (React/Vue/jQuery/Svelte → JJ)\n- Generate idiomatic, type-safe code\n\nThe skill definition (`SKILL.md`) is also included in the npm package at `node_modules/jj/SKILL.md`.\n\n## ✅ Testing\n\nThe entire public API is tested thoroughly.\nTests live in the `test/` folder and mirror the source filenames (e.g., `test/JJE.test.ts` for `src/JJE.ts`, `test/JJME.test.ts` for `src/wrappers/JJME.ts`) while importing the target from `./src/index.js`.\n\nRun tests with:\n\n```bash\nnpm test\n```\n\n## License\n\nMIT\n\n_Made in Sweden 🇸🇪 by [Alex Ewerlöf](https://alexewerlof.com/)_\n\n```\n\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falexewerlof%2Fjj","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falexewerlof%2Fjj","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falexewerlof%2Fjj/lists"}