Agent skill

Tabler Backward Compatibility

by tabler in tabler/tabler

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.

MITAuto-check passedFrontend & Design

Install Tabler Backward Compatibility

skills CLI
$ npx skills add tabler/tabler --skill backward-compat -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install tabler/tabler backward-compat --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ 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-src

Use ~/.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/

Facts

Skill name
backward-compat
GitHub stars
42k
Token cost
~4k tokens
SKILL.md length
2,259 words
Files
1
Skills in repo
21
Repo updated
First seen
Licence
MIT

At a glance

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.

  • Works in 6 steps: What is public API → Where compatibility code lives → How to make the change compatible → …
  • Renaming or removing a class, custom property or Sass variable in @tabler/core
  • SKILL.md covers 1. What is public API, 2. Where compatibility code…, 3. How to make the change… and 4. Check the public surface…, plus 2 more sections
  • Calls pnpm, npm and git

What it does

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.

When your agent uses it

  • 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

Example prompts

  • “Rename the form-hint class in tabler core without breaking existing projects.”
  • “Does removing this Sass mixin count as a breaking change?”
  • “Check whether this cleanup in core removes anything that is public API.”

Requirements

  • A checkout of the tabler repository

Workflow steps

6 steps, taken from the step headings in SKILL.md.

  1. What is public API
  2. Where compatibility code lives
  3. How to make the change compatible
  4. Check the public surface before the PR
  5. Changesets and the upgrade guide
  6. When a break cannot be avoided

What it can do on your machine

Read from SKILL.md and the folder at commit dcacb65. It shows what the files ask for, not the result of running them.

  • Tool permissions

    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.

  • Runs code

    Shell commands in SKILL.md call:

    • pnpm
    • npm
    • git

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Links to these hosts (documentation or services it may open):

    • semver.org

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

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.

Always · name and description, kept in context so the agent knows when to use it
~192
When it runs · the whole SKILL.md, loaded when a task matches
~4k

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.

Safety

Auto-check passed

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.

SKILL.md

The full file from tabler/tabler at commit dcacb65, republished under its MIT licence (© tabler). 2,259 words, ~3,965 tokens.

Download SKILL.mdSave it as .claude/skills/backward-compat/SKILL.md (or your agent's skills folder).
name
backward-compat
description
Keep a change to `@tabler/core` backward compatible, so a patch or minor release never breaks a project that updates. Use before renaming, removing or changing the meaning of anything a user can touch — a class, a `--tblr-*` custom property, a Sass variable, mixin or function, a `data-*` attribute or option, a JS export, an event, a file under `dist/`, a default value — and whenever a changeset on `dev` looks like it needs a `major` bump. Also consult it proactively when a cleanup or refactor in `core/` deletes something, since "dead" code is often somebody's API. Covers what counts as public API, the `deprecated` files where compatibility code lives, the alias patterns, the `check:compat` gate, and what to do when a break cannot be avoided.

Backward compatibility

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.

1. What is public API

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.

SurfaceExamplesBreaks when
Class names.legend, .form-hint, .card-optionsremoved, renamed, or the same name starts to mean something else
Custom properties--tblr-primary-rgb, --tblr-btn-focus-box-shadowno longer emitted, or no longer read by the component
Sass variables, maps and keys$focus-ring-blur, a key of $form-validation-statesremoved, renamed, or the expected type changes (a color becomes a var())
Sass mixins and functionsfocus-ring($show-border)removed, a parameter renamed or reordered, a positional argument changes meaning
Data attributes and their optionsdata-countup='{…}', data-bs-toggle="…"removed, renamed, an option dropped, or a value that used to be accepted now throws
JS exports and globalstabler.Modal, window.tabler.*, named exports, published typesremoved, renamed, a method signature changed
Eventschange.bs.switch-iconrenamed, no longer fired, fired at a different moment
Files in the packagedist/libs/litepicker/…, dist/css/tabler.rtl.cssthe path 404s after an update
Dependenciesdependencies, peerDependenciesa user must install or uninstall something for the update to work
Behaviour defaultsforceFallback, the color mode, when a component startsan untouched project behaves differently in a way the user did not ask for. How it looks is a separate rule, see below
Browser support.browserslistrcthe 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).

Visual changes are allowed in a minor release

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:

  • Nothing the user wrote stops working. The markup, the classes, the custom properties and the Sass variables they use still exist and still do their job. A redesign that renames or removes one is a rename or a removal, and needs an alias.
  • An old token that the user set is still honoured. When the focus ring became an outline, --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.
  • No layout a project depends on moves. A different gray is visual. A component that is suddenly taller, or position: absolute where it was in the flow, breaks the pages built around it.
  • Behaviour is not "visual". What a click does, when an animation starts, which drag image the browser uses: those are behaviour defaults, and stay opt-in until the next major.
  • It is listed. Every visible change gets a bullet under "Visual changes" in the upgrade guide and a changeset that names it, so a user who sees a difference after updating can find out why. When the old look is cheap to keep, say how: a variable to set, or a theme in tabler-themes.css.

check:compat and check:compat-fixture do not look at pixels, so this rule is on the author and the reviewer.

2. Where compatibility code lives

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:

FileHoldsWhy it is separate
core/scss/_variables-deprecated.scssold $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.scssold functions and mixins as thin wrappers around the new onesemits 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.scsseverything 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 tokenforwarded 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.scssthe --tblr-*-rgb triplets, as mixinsthree 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.tsold 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:

scss
// 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.

3. How to make the change compatible

Rename

Ship both names. The old one becomes an alias that nobody has to touch.

  • Class: add the alias to core/scss/_deprecated.scss with @extend. Start the comment with `<old>` is deprecated, use `<new>` instead.
  • Custom property: keep reading the old name as a fallback — var(--new, var(--old, <default>)) — or keep emitting the old one with the same value.
  • Sass variable: move the old variable to _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.
  • Mixin or function: a removed one comes back in 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 attribute, option, JS export, event: accept or fire both. The data-bs-* / data-tblr-* pair in core/js/src/bootstrap/dom/manipulator.ts is the pattern.
Remove

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.

Change what a name means

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.

Show full SKILL.md (927 more words)Show less
Add a name

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.

Change a default

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.

Drop a bundled library or a file

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.

Validate input more strictly

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.

4. Check the public surface before the PR

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:

shell
pnpm --filter @tabler/core build
pnpm run check:compat

It reports what the release has and the build lost, one key per line:

KeyMeans
css:tabler.css:.legenda class is gone from that stylesheet
css:tabler.css:--tblr-primary-rgba custom property is gone
sass:$focus-ring-blura Sass variable is gone
sass:@function url-svga function or mixin is gone
sass:@mixin focus-ring($show-border)that parameter was renamed or moved
js:tabler.esm.js:tablera top-level export is gone
file:dist/libs/litepicker/dist/litepicker.jsa 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.

shell
pnpm run check:compat-fixture

Do 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:

shell
git diff "@tabler/core@$(npm view @tabler/core version)"..HEAD -- core/scss/_variables.scss core/js .browserslistrc

5. Changesets and the upgrade guide

  • A changeset on dev is patch or minor. If the honest bump is major, the change is on the wrong branch — go back to section 3.
  • Describe a deprecation as one, for example Added `.legend-dot`; an empty `.legend` still works but is deprecated. Never write Removed for something a user could have used.
  • In the upgrade guide a deprecation goes under a "renamed" heading with "the old name still works" (see the upgrade-guide skill). A minor release should have nothing under a breaking-change heading.

6. When a break cannot be avoided

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.

A documented exception

Only the maintainers can decide to ship a break in a minor release, and it takes all three of these:

  1. a line per item in .build/compat-baseline.txt with # accepted: <why>, under a comment that says who decided and when,
  2. a section in the upgrade guide that says plainly what stops working and shows the fix,
  3. a check that keeps the exception from growing.

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

Files

Just SKILL.md in .agents/skills/backward-compat of tabler/tabler.

Open the folder on GitHubat commit dcacb65

Compare with similar skills

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.

Tabler Backward Compatibility compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Tabler Backward Compatibility this skilltabler/tabler42k—~4kAutomated safety check: PassMIT
Frontend Module Standardssiteboon/claudecodeui14k—~2.6kAutomated safety check: PassAGPL-3.0
Vuetify Skilldlogue/vite-vuetify-ts-starter1811 repos~1.9kAutomated safety check: PassMIT
Stylelintmanagedcode/dotnet-skills486—~1.7kAutomated safety check: PassMIT
Tailwind Refactorpproenca/dot-skills214—~2.2kAutomated safety check: PassMIT
Uniwindpproenca/dot-skills214—~1.9kAutomated safety check: PassMIT

Similar skills

  • 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.

    14k GitHub stars~2.6k tokensUpdated 2 days ago
    Frontend & DesignAuto-check passed
  • Vuetify Skilld

    logue/vite-vuetify-ts-starter

    Vue Material Component Framework. An agent skill from logue/vite-vuetify-ts-starter.

    181 GitHub starsUsed in 1 repo~1.9k tokens
    Frontend & DesignAuto-check passed
  • Stylelint

    managedcode/dotnet-skills

    Use Stylelint in .NET repositories that ship CSS, SCSS, or other stylesheet assets alongside web frontends.

    486 GitHub stars~1.7k tokensUpdated today
    Frontend & DesignAuto-check passed
  • Tailwind Refactor

    pproenca/dot-skills

    Tailwind CSS code refactoring patterns for v4 migration and anti-pattern cleanup.

    214 GitHub stars~2.2k tokensUpdated 1 mo ago
    Frontend & DesignAuto-check passed
  • Uniwind

    pproenca/dot-skills

    Uniwind best practices for React Native styling with Tailwind CSS.

    214 GitHub stars~1.9k tokensUpdated 1 mo ago
    Frontend & DesignAuto-check passed
  • 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.

    41k GitHub stars~2.8k tokensUpdated yesterday
    Frontend & DesignAuto-check passed

More from tabler/tabler

All 21 skills in this repo
  • 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.

    42k GitHub stars~1.2k tokensUpdated yesterday
    Auto-check passed
  • 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.

    42k GitHub stars~2.1k tokensUpdated yesterday
    Auto-check passed
  • 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.

    42k GitHub stars~2.2k tokensUpdated yesterday
    Auto-check passed
  • Writes or updates the classnames front matter that renders the class table at the end of a Tabler component docs page.

    42k GitHub stars~1.4k tokensUpdated yesterday
    Auto-check passed
  • 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.

    42k GitHub stars~1.4k tokensUpdated yesterday
    Auto-check passed
  • Tabler Core SCSS

    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.

    42k GitHub stars~2k tokensUpdated yesterday
    Auto-check passed

Works with

Questions about Tabler Backward Compatibility

What does Tabler Backward Compatibility do?

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.

When should I use Tabler Backward Compatibility?

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.

How do I install Tabler Backward Compatibility in Claude Code?

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.

How do I install Tabler Backward Compatibility in Codex?

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.

Can I use Tabler Backward Compatibility in Cursor, Gemini CLI or GitHub Copilot?

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.

What does Tabler Backward Compatibility need to run?

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.

Does Tabler Backward Compatibility access the network?

SKILL.md names 1 domain. As links in the text: semver.org. This is read from the text; nothing was executed.

Is Tabler Backward Compatibility safe to install?

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.

What licence does Tabler Backward Compatibility use?

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.

How many tokens does Tabler Backward Compatibility use?

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.

What are the alternatives to Tabler Backward Compatibility?

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.

Who maintains Tabler Backward Compatibility?

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.