Frontend Module Standards
siteboon/claudecodeui
Enforces one repository's React and TypeScript module layout for code under src/: source-root imports, feature barrels, deliberate exports and no deep imports.
Keeps changes to @tabler/core backward compatible so patch and minor releases never break projects, covering what counts as public API and how to alias renames.
$ npx skills add tabler/tabler --skill backward-compat -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install tabler/tabler backward-compat --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/tabler/tabler.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/backward-compat .claude/skills/backward-compat && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "backward-compat" agent skill from https://github.com/tabler/tabler/tree/dev/.agents/skills/backward-compat into .claude/skills/backward-compat/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "backward-compat", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/tabler/tabler/tree/dev/.agents/skills/backward-compatType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add tabler/tabler --skill backward-compat -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install tabler/tabler backward-compat --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/tabler/tabler.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/backward-compat .agents/skills/backward-compat && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "backward-compat" agent skill from https://github.com/tabler/tabler/tree/dev/.agents/skills/backward-compat into .agents/skills/backward-compat/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "backward-compat", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add tabler/tabler --skill backward-compat -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install tabler/tabler backward-compat --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/tabler/tabler.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/backward-compat .cursor/skills/backward-compat && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "backward-compat" agent skill from https://github.com/tabler/tabler/tree/dev/.agents/skills/backward-compat into .cursor/skills/backward-compat/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "backward-compat", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/tabler/tabler.git --path .agents/skills/backward-compat--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add tabler/tabler --skill backward-compat -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install tabler/tabler backward-compat --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/tabler/tabler.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/backward-compat .gemini/skills/backward-compat && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "backward-compat" agent skill from https://github.com/tabler/tabler/tree/dev/.agents/skills/backward-compat into .gemini/skills/backward-compat/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "backward-compat", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install tabler/tabler backward-compatInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add tabler/tabler --skill backward-compat -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/tabler/tabler.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/backward-compat .github/skills/backward-compat && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "backward-compat" agent skill from https://github.com/tabler/tabler/tree/dev/.agents/skills/backward-compat into .github/skills/backward-compat/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "backward-compat", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add tabler/tabler --skill backward-compat -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install tabler/tabler backward-compat --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/tabler/tabler.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/backward-compat .opencode/skills/backward-compat && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "backward-compat" agent skill from https://github.com/tabler/tabler/tree/dev/.agents/skills/backward-compat into .opencode/skills/backward-compat/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "backward-compat", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
backward-compatKeeps changes to @tabler/core backward compatible so patch and minor releases never break projects, covering what counts as public API and how to alias renames.
Because the project promises Semantic Versioning, every change on `dev`, which ships patch and minor releases, must be additive or carry an alias, and a change that cannot be made compatible waits for the next major. The skill defines public API as anything a user can write in a project: class names, `--tblr-*` custom properties, Sass variables, maps, mixins and functions, `data-*` attributes and options, JS exports, events, files under `dist/`, dependencies, behavior defaults and browser support.
It lists what is not public, such as `preview/`, `docs/`, `shared/` and `.build/`, private underscore members and the exact bytes of compiled CSS. Use it before renaming, removing or changing the meaning of anything user-facing, when a changeset looks like it needs a `major` bump, and when a cleanup deletes seemingly dead code. It also covers the `deprecated` files that hold compatibility code, alias patterns, the `check:compat` gate and what to do when a break cannot be avoided.
6 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit dcacb65. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
pnpmnpmgitFrom the folder's file list and the shell code blocks in SKILL.md.
Links to these hosts (documentation or services it may open):
semver.orgFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Tabler Backward Compatibility loads about 4k tokens when it runs. Until then it costs about 192 tokens; SKILL.md has 2,259 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from tabler/tabler at commit dcacb65, republished under its MIT licence (© tabler). 2,259 words, ~3,965 tokens.
.claude/skills/backward-compat/SKILL.md (or your agent's skills folder).The README promises Semantic Versioning: breaking changes only land in major releases. Users install ^1.0.0 and expect npm update to be safe. Issue #3108 is what happens when it is not.
So on dev, which ships patch and minor releases, every change is additive or has an alias. A change that cannot be made compatible does not go to dev. It waits for the next major.
Anything a user can write in their own project. If it is in the list, it cannot be removed, renamed or given a new meaning in a minor release.
| Surface | Examples | Breaks when |
|---|---|---|
| Class names | .legend, .form-hint, .card-options | removed, renamed, or the same name starts to mean something else |
| Custom properties | --tblr-primary-rgb, --tblr-btn-focus-box-shadow | no longer emitted, or no longer read by the component |
| Sass variables, maps and keys | $focus-ring-blur, a key of $form-validation-states | removed, renamed, or the expected type changes (a color becomes a var()) |
| Sass mixins and functions | focus-ring($show-border) | removed, a parameter renamed or reordered, a positional argument changes meaning |
| Data attributes and their options | data-countup='{…}', data-bs-toggle="…" | removed, renamed, an option dropped, or a value that used to be accepted now throws |
| JS exports and globals | tabler.Modal, window.tabler.*, named exports, published types | removed, renamed, a method signature changed |
| Events | change.bs.switch-icon | renamed, no longer fired, fired at a different moment |
| Files in the package | dist/libs/litepicker/…, dist/css/tabler.rtl.css | the path 404s after an update |
| Dependencies | dependencies, peerDependencies | a user must install or uninstall something for the update to work |
| Behaviour defaults | forceFallback, the color mode, when a component starts | an untouched project behaves differently in a way the user did not ask for. How it looks is a separate rule, see below |
| Browser support | .browserslistrc | the minimum version of any browser goes up |
Not public: anything under preview/, docs/, shared/, .build/, file layout inside core/scss/ that is not reachable through @use, private _underscore members of JS classes, and the exact bytes of the compiled CSS.
Bug fixes are fine even when they change rendering, as long as the old behaviour was clearly wrong (a knob that did not move in RTL).
How Tabler looks is not frozen by semver. A minor release may change a color, a shadow, a spacing, a font, the shape of the focus ring or the default gray palette, the same way 1.5 moved to system fonts. The maintainers decided this on 2026-09-21. It holds as long as all of these are true:
--tblr-btn-focus-box-shadow stopped being read. That part was a break, and _deprecated.scss draws the shadow again. Changing the default look is fine; ignoring the user's override is not.position: absolute where it was in the flow, breaks the pages built around it.tabler-themes.css.check:compat and check:compat-fixture do not look at pixels, so this rule is on the author and the reviewer.
Everything kept only for old projects goes into files named deprecated, so that the next major removes it by deleting files instead of digging through the tree. The Sass module system decides how many files that is:
| File | Holds | Why it is separate |
|---|---|---|
core/scss/_variables-deprecated.scss | old $variables, each !default, with the default they had when they were removed | @use … with ($x: …) on a variable that does not exist is a compile error, and so is reading one, so the variable has to stay declared. Forwarded from _config.scss after variables, because old defaults are built from current ones. Nothing in Tabler reads these; _deprecated.scss compares each with its default and, when a project changed it, emits the matching new token. The file is excluded from lint:scss:vars |
core/scss/mixins/_deprecated.scss | old functions and mixins as thin wrappers around the new ones | emits no CSS; forwarded from _mixins.scss. A mixin calls @include deprecate('<name>', '<since>', '<removed in>') from mixins/bootstrap/_deprecate.scss; a function cannot include a mixin, so it calls the private -deprecated() helper in the same file. Either way the user gets a warning when compiling |
core/scss/_deprecated.scss | everything that emits CSS: class aliases (.form-hint, .legend:empty), old custom properties, hooks like box-shadow: var(--btn-focus-box-shadow, var(--btn-box-shadow)), and the wiring from a customised old Sass variable to its new token | forwarded last from tabler.scss, after _extends.scss. It @uses core, because an alias built with @extend only reaches modules upstream of it. The whole file sits inside @if $enable-deprecated { … } |
core/scss/_deprecated-props.scss | the --tblr-*-rgb triplets, as mixins | three bundles emit them (tabler.css, tabler-props.css, tabler-themes.css), and a module that @uses core cannot be loaded from the small ones. This module emits nothing by itself |
core/js/src/deprecated.ts | old exports and globals, such as the tabler namespace with getColor() | one import to delete in the next major |
$enable-deprecated: true !default lives in _variables.scss, next to $enable-deprecation-messages. A project that has migrated sets it to false and gets about 1.4 kB (gzip) back; the next major flips the default, and the one after deletes the files.
A hook must not change a project that never used the old token. Give var() the value the element has anyway as its fallback, not none, and check it in the browser: .btn:focus-visible { box-shadow: var(--btn-focus-box-shadow, none) } would strip the shadow from every focused button.
Some compatibility cannot move into those files: a fallback inside a component rule (mask-image: var(--form-check-bg-image, <default>)), an old parameter in a mixin signature, a default value that was put back. Mark each of those where it is, with one fixed comment:
// deprecated(2.0): `$show-border` is the old name of `$offset`grep -rn "deprecated(2.0)" core/ .build/ plus the five files is then the full list of what the next major removes.
Ship both names. The old one becomes an alias that nobody has to touch.
core/scss/_deprecated.scss with @extend. Start the comment with `<old>` is deprecated, use `<new>` instead.var(--new, var(--old, <default>)) — or keep emitting the old one with the same value._variables-deprecated.scss with its old default. If it maps onto a new token, feed it from _deprecated.scss: @if $input-btn-focus-width != 0.25rem { :root { --focus-ring-width: #{$input-btn-focus-width}; } }. For a map key, accept both keys.mixins/_deprecated.scss as a wrapper. For parameters, add new ones at the end, with defaults. Never rename or move an old parameter: callers pass arguments by position and by keyword, so it keeps both its name and its place.data-bs-* / data-tblr-* pair in core/js/src/bootstrap/dom/manipulator.ts is the pattern.Do not. Mark it deprecated, stop using it in Tabler's own code, keep it working, and list it for removal in the next major. This includes things that look dead: a declaration with no effect inside Tabler may still be what a user overrides.
Do not reuse the name. .legend was a dot in 1.5 and became a whole legend item in 1.6, so old markup rendered as nothing. Either give the new thing a new name, or keep the old use working — .legend:empty still draws the dot.
Adding is safe, with one trap: a name that fits an existing pattern may already sit in user markup as a no-op. .text-gray-200 did nothing in 1.4 and turned text light gray in 1.5. When a new utility completes a series (.text-*, .bg-*, .border-*), say so under "Visual changes" in the upgrade guide.
For behaviour, keep the old default and make the new one opt-in: a class, an attribute, an option or a Sass variable. The new default can flip in the next major. A default that only changes how things look may change in a minor release, under the rule in section 1.
Keep the file in dist/ and the entry in core/libs.json until the next major, even if Tabler's own pages stop using it. Replacing a library with built-in code is fine, as long as the old script tag still loads and the old global still works or is harmless.
New validation must not throw on input that used to work. Coerce the value, or log with console.warn and fall back to the default. A throw during page load stops all of tabler.js.
check:compat downloads the last release of @tabler/core from npm and compares it with the working tree. It needs core/dist, so build core first:
pnpm --filter @tabler/core build
pnpm run check:compatIt reports what the release has and the build lost, one key per line:
| Key | Means |
|---|---|
css:tabler.css:.legend | a class is gone from that stylesheet |
css:tabler.css:--tblr-primary-rgb | a custom property is gone |
sass:$focus-ring-blur | a Sass variable is gone |
sass:@function url-svg | a function or mixin is gone |
sass:@mixin focus-ring($show-border) | that parameter was renamed or moved |
js:tabler.esm.js:tabler | a top-level export is gone |
file:dist/libs/litepicker/dist/litepicker.js | a file is gone from the package |
Fix each one with the patterns from section 3, then run it again. Known breaks are listed in .build/compat-baseline.txt; when you fix one, delete its line, or the check fails on the stale entry. Never add a line to the baseline to make a PR green. A line gets # accepted: <why> only after the maintainers decided to ship that break. The file's # against: <version> line names the release the list was written for. Once a newer release is on npm, every listed break shipped in it, so the check ignores the list and only warns; run pnpm run check:compat --reset and commit the emptied file. CI runs the check after the build. The Release workflow runs it with --strict on every push to dev, before it opens the versions pull request or publishes, so nothing reaches npm while an unaccepted line is left.
check:compat compares names. check:compat-fixture covers behaviour: .build/compat-fixture/ is a small project written the way a user of the last release would write it (@use … with on old variables, old functions, rgba(var(--tblr-primary-rgb), .5), an empty .legend, the libraries in dist/libs, tabler.tabler.getColor()), and the check runs it against the release and against the working tree. Every assertion has to give the same answer on both.
pnpm run check:compat-fixtureDo not edit the fixture to make it pass: it stands for code you cannot reach. Add to it when a break got through that a real project would have hit. --package <dir> runs it against another checkout.
Even the two checks together cannot see everything. They do not know about data attributes and their options, events, default values, a Sass variable whose type changed, or behaviour. For those, read the diff against the release tag with the table from section 1 in hand:
git diff "@tabler/core@$(npm view @tabler/core version)"..HEAD -- core/scss/_variables.scss core/js .browserslistrcdev is patch or minor. If the honest bump is major, the change is on the wrong branch — go back to section 3.Added `.legend-dot`; an empty `.legend` still works but is deprecated. Never write Removed for something a user could have used.upgrade-guide skill). A minor release should have nothing under a breaking-change heading.Some changes have no alias: dropping a whole color model, raising the browser floor, removing a dependency users import. Those belong to the next major release, not to dev. Say so in the PR, and do not split the change to sneak half of it into a minor. If you are unsure whether something is a break, assume it is and ask.
Only the maintainers can decide to ship a break in a minor release, and it takes all three of these:
.build/compat-baseline.txt with # accepted: <why>, under a comment that says who decided and when,1.6 has one. Moving color mixing to the browser turned 69 Sass variables from colors into color-mix() strings: the *-bg-subtle, *-text-emphasis and *-border-subtle families with their -dark twins, $body-secondary-color, $body-tertiary-color, $input-focus-border-color, the dark border colors and a few navbar, dropdown and switch colors. darken($primary-bg-subtle, 5%) in a project no longer compiles, and no alias can change a type back. The theme colors, the grays, $body-color, $body-bg and $link-color are still colors. check:compat lists each one as sass-type:$name, and fails when another color variable stops being one. Do not add to that list: a new variable that needs a runtime value gets a new name, and the old one keeps its color.
© tabler, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .agents/skills/backward-compat of tabler/tabler.
Open the folder on GitHubat commit dcacb65
Tabler Backward Compatibility next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Tabler Backward Compatibility this skilltabler/tabler | 42k | — | ~4k | Automated safety check: Pass | MIT | |
| Frontend Module Standardssiteboon/claudecodeui | 14k | — | ~2.6k | Automated safety check: Pass | AGPL-3.0 | |
| Vuetify Skilldlogue/vite-vuetify-ts-starter | 181 | 1 repos | ~1.9k | Automated safety check: Pass | MIT | |
| Stylelintmanagedcode/dotnet-skills | 486 | — | ~1.7k | Automated safety check: Pass | MIT | |
| Tailwind Refactorpproenca/dot-skills | 214 | — | ~2.2k | Automated safety check: Pass | MIT | |
| Uniwindpproenca/dot-skills | 214 | — | ~1.9k | Automated safety check: Pass | MIT |
siteboon/claudecodeui
Enforces one repository's React and TypeScript module layout for code under src/: source-root imports, feature barrels, deliberate exports and no deep imports.
logue/vite-vuetify-ts-starter
Vue Material Component Framework. An agent skill from logue/vite-vuetify-ts-starter.
managedcode/dotnet-skills
Use Stylelint in .NET repositories that ship CSS, SCSS, or other stylesheet assets alongside web frontends.
pproenca/dot-skills
Tailwind CSS code refactoring patterns for v4 migration and anti-pattern cleanup.
pproenca/dot-skills
Uniwind best practices for React Native styling with Tailwind CSS.
chakra-ui/chakra-ui
Reviews and converts UI code to Chakra UI v3, producing a critique, rewritten code or both, from plain HTML, Tailwind, CSS Modules or styled-components.
tabler/tabler
Starts the right Tabler dev server, keeps it from clashing with builds and verifies changes in the browser before a page or component is handed back.
tabler/tabler
Rules for adding or fixing client-side scripts in Tabler's Astro components so the copied preview HTML stays readable, self-contained and runs in the right order.
tabler/tabler
Sets the file structure, typing and Data API pattern for writing a new Bootstrap-style JavaScript component class in Tabler's vendored port of Bootstrap's JS.
tabler/tabler
Writes or updates the classnames front matter that renders the class table at the end of a Tabler component docs page.
tabler/tabler
Guidance for changing the Tabler framework's own JavaScript in core/js: the tabler.js and tabler-theme.js bundles, the Bootstrap port and their tests.
tabler/tabler
Rules for adding or changing styles in Tabler's core/scss framework: file placement, custom properties, dark mode, RTL, tests and build gates.
Works with
Categories
Keeps changes to @tabler/core backward compatible so patch and minor releases never break projects, covering what counts as public API and how to alias renames. Because the project promises Semantic Versioning, every change on `dev`, which ships patch and minor releases, must be additive or carry an alias, and a change that cannot be made compatible waits for the next major. The skill defines public API as anything a user can write in a project: class names, `--tblr-*` custom properties, Sass variables, maps, mixins and functions, `data-*` attributes and options, JS exports, events, files under `dist/`, dependencies, behavior defaults and browser support.
Tabler Backward Compatibility fits situations like: renaming or removing a class, custom property or Sass variable in @tabler/core; A changeset on dev appears to need a major version bump; A refactor deletes code that users might rely on; deciding how to deprecate or alias a public option.
Run `npx skills add tabler/tabler --skill backward-compat -a claude-code`. Or copy the skill folder (.agents/skills/backward-compat in tabler/tabler) into .claude/skills/backward-compat in your project. Claude Code loads it when a task matches its description.
Run `npx skills add tabler/tabler --skill backward-compat -a codex`. Or copy the skill folder (.agents/skills/backward-compat in tabler/tabler) into .agents/skills/backward-compat in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add tabler/tabler --skill backward-compat -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/backward-compat, .gemini/skills/backward-compat, .github/skills/backward-compat and .opencode/skills/backward-compat in your project.
Going by SKILL.md and its folder, Tabler Backward Compatibility needs the command-line tools its instructions call (pnpm, npm and git). Our summary lists: A checkout of the tabler repository.
SKILL.md names 1 domain. As links in the text: semver.org. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Tabler Backward Compatibility is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 4k tokens (SKILL.md is roughly 16k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Tabler Backward Compatibility: Frontend Module Standards (siteboon/claudecodeui, 14k stars), Vuetify Skilld (logue/vite-vuetify-ts-starter, 181 stars), Stylelint (managedcode/dotnet-skills, 486 stars) and Tailwind Refactor (pproenca/dot-skills, 214 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
tabler (a GitHub organization) maintains it in tabler/tabler, which has 41,821 GitHub stars. The repository holds 21 skills in this directory. The repository was last updated on October 6, 2026.
Source: tabler/tabler on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.