Skip to main content

Инструментарий XBSL (1С:Элемент): линтер, LSP, документация, индекс проекта, скаффолдинг метаданных

Project description

xbsl

English · Русский

CI

The XBSL (1C:Element) toolkit: a linter with autofixes, an LSP server, a project index, platform documentation search, metadata scaffolding and an MCP server for AI agents. It works on Name.yaml (element description) and Name.xbsl (code module) pairs – before the server-side compilation that happens on deploy.

Before 0.16 the project was named xbsl-lint (the xbsllint package). The old names keep working: the xbsllint* commands are aliases of the new ones, import xbsllint returns the xbsl modules, and both spellings of the environment variables and entry-point groups are honored.

Not affiliated with 1C. "1C:Element", "1C:Fresh" and related names are trademarks of their respective owners. Language data is generated from your own distribution. See NOTICE.

Development notes and updates (in Russian): the 1C × AI: engineering workshop Telegram channel.

Why

1C:Element has no external tooling: the only code check is the server-side compilation on deploy – it is slow and knows nothing about project conventions. xbsl gives fast local feedback, catches what the compiler does not check at all, and takes over the metadata mechanics – creating objects, attributes and forms.

How it works

One engine, four surfaces. The core reads the Имя.yaml + Имя.xbsl pairs, and the scaffolding writes them back; the CLI, the LSP server, the MCP server and the web UI are thin adapters over the same core, so every surface sees the same rules, data and templates:

The engine core (linter, autofixes, project index, docs search) and the metadata scaffolding read and write the project sources; a private plugin adds Element language data and custom rules via entry points; the CLI, the LSP server (VS Code), the MCP server (AI agents) and the web UI are surfaces over the same core

Step 1: generate the language data

The linter relies on language tables (bilingual keywords, operators), an stdlib type catalog, and the configuration metamodel (element properties). XBSL is built on Eclipse Xtext + ANTLR; these are extracted from your 1C:Element distribution (the InternalBsl.g grammar, the documentation, and the .xcore metamodel) and are NOT bundled in this repository. Generate them locally:

python tools/extract_grammar.py   --dist "<path to the 1C:Element distribution>"
python tools/extract_stdlib.py    --dist "<path to the 1C:Element distribution>"
python tools/extract_metamodel.py --dist "<path to the 1C:Element distribution>"

The scripts auto-detect the platform version and place the data under xbsl/data/element/<version>/ (this folder is gitignored). Without the data, the linter and the tests will tell you to generate it. Pass --data-dir (or set XBSL_DATA_DIR) to write the data somewhere else – for instance into a private package that ships it, see Extending.

Step 2: install and run

pip install xbsl            # or, from a clone: pip install -e .
xbsl path/to/sources        # or: python -m xbsl path/to/sources
xbsl self-update            # upgrade to the latest PyPI version

self-update upgrades the package by unpacking the wheel straight into site-packages – safe even when pip install --upgrade fails with WinError 32 because an exe is busy (the typical case: xbsl-lsp.exe held by the VS Code LSP server, xbsl-mcp.exe by an agent's MCP session). The busy stubs are left alone and pick up the new code on the next start; restart the long-living processes after the update. --version X.Y.Z installs a specific version. In an editable install from a clone the command refuses – git pull updates that one.

The extractors from step 1 ship with the repository, not with the PyPI package – clone the repository to generate the data.

The hot modules (the lexer and the parser) can be compiled by mypyc into C extensions: XBSL_MYPYC=1 at build time (needs mypy and a C compiler: MSVC Build Tools on Windows, Xcode CLT on macOS, gcc on Linux). Users never need a compiler: the ready-made native wheels are built by CI (native-wheels.yml), and without a matching wheel the package runs as plain Python – no compiler, no loss of functionality.

Flags: --list-rules, --where (data root, source and versions), --select/--enable/--ignore (by rule id, rule group – the part of the id before / – or tier letter), --fix, --baseline/--write-baseline, --element-version, --data-dir, --lang, --format text|json|codeclimate. --fix repairs the mechanical findings in place – trailing whitespace, typography characters (em dash → en dash, ..., curly quotes and comment guillemets → straight), and mixed newlines (normalized to the dominant style) – then reports whatever is left. It only applies unambiguous edits and only for rules active in the run (so --fix --enable typography also pays down the em-dash/guillemets debt); anything needing judgment is never touched. For editor integration, --stdin --filename NAME checks a single buffer read from stdin (per-file rules only); the JSON payload ({diagnostics, summary}) is the same one the MCP server returns. xbsl --index PATH dumps a JSON index of the project to stdout instead of linting – the objects (with tabular sections, module-declared local types and the member families for dot completion), the method declarations with their annotations and the named form components, with POSIX paths relative to the root and 1-based lines – for go-to-definition and completion in editors. --format codeclimate emits a GitLab Code Quality report (Code Climate issues) with paths relative to the current directory – run it from the repository root and save the output as the codequality artifact.

Output language

Rule titles and diagnostic messages come in Russian and English. The language is picked by --lang ru|en > the XBSL_LANG env var > the system locale > Russian. Type names, keywords and other XBSL text inside a message are never translated – only the wording around them. The MCP server and the web panel follow the same setting (the web panel also has an in-page RU/EN toggle).

Use in CI

xbsl exits non-zero only when a run produces an error-severity finding, so it works as a pipeline gate as-is – warnings and info do not fail the build. The one prerequisite is the language data (see Step 1): generate it in the job (the extractors ship with the repository, so check the repo out), or depend on a package that ships the data via the xbsl.data entry point (see Extending) and just pip install it.

GitHub Actions

lint:
  runs-on: ubuntu-latest
  steps:
    - uses: actions/checkout@v4
    - uses: actions/setup-python@v5
      with: { python-version: "3.12" }
    - run: pip install xbsl
    # generate the data from your 1C:Element distribution (or install a package that ships it):
    - run: |
        python tools/extract_grammar.py  --dist "$ELEMENT_DIST"
        python tools/extract_stdlib.py   --dist "$ELEMENT_DIST"
        python tools/extract_metamodel.py --dist "$ELEMENT_DIST"
    - run: xbsl acme/          # fails the job on any error-severity finding

GitLab CI (Code Quality widget)

--format codeclimate writes a Code Climate report that GitLab renders inline on the merge request. Run it from the repository root and save the output as the codequality report. The command still returns non-zero on error-severity findings, so artifacts.when: always keeps the report even when the job gates the pipeline (drop the gate with a trailing || true if you want the widget only):

lint:
  script:
    - pip install xbsl
    - xbsl --format codeclimate acme/ > gl-code-quality-report.json
  artifacts:
    when: always
    reports:
      codequality: gl-code-quality-report.json

Rule tiers

The full list of all 87 rules (severity, default state, scope, links to platform documentation sections) is in docs/RULES.md; at runtime – xbsl list-rules. Below is an overview by tier.

  • A. Structure and YAML.xbsl/.yaml pairing, schema validity, Ид as a UUID, Ид uniqueness, Имя matching the file name.
  • B. Text and conventions – typography (en dash, straight quotes), encoding/BOM/newlines/trailing whitespace, indentation and line length.
  • C. Code structure – balance of blocks and ;, brackets, unused local and loop variables, a structure reference field that must be обз, plus the platform's code style conventions (the style/ group, see below).
  • D. Semantics – against platform data and the project itself: types, enumeration values, cross-file consistency (see below).

The type rules of tier D cover every type position in code (новый, как casts, annotations, signatures) and every Тип: value in yaml (unions А|Б|?, generics, nullable): the root must be a known type – stdlib, a project object, a module-declared local type or a global type of a declared library (see below) – and a dotted chain rooted at a project object must stay within the family that object generates: the derived types extracted from the distribution docs (Ссылка, Объект, СоздатьОбъект, the automatic forms...), its tabular sections and module structures. Namespace-qualified references (Справочник.X.Ссылка) also check that the object exists under that kind, and the values of project enumerations are verified both in code and in yaml bindings.

The types of the declared libraries come from their archives. Проект.yaml declares the coordinates only (Поставщик, Имя, Версия), so the names are read from the {Поставщик}-{Имя}-{Версия}.xlib archive, looked up in the project descriptor's directory and above it (up to four levels) - where the archive sits when the sources are shipped. An element becomes known when it is ОбластьВидимости: Глобально; the rest is the library's own business. With no archive next to the sources the library types stay unknown, exactly as they were before libraries were understood at all.

The cross-file rules of tier D catch what the compiler reports late or not at all: a yaml handler missing from the paired module, a foreign-subsystem type used without an Импорт: entry, a dynamic list typed by the automatic list form that misses an attribute of its object, a cross-component Компоненты.X.Метод() call to a method without a visibility annotation, environment mismatches (@НаСервере called from a client handler without @ДоступноСКлиента, a client-only module used from an HTTP service), reserved names (Тип/type as a field or parameter, a component property named like a built-in one), methods that nothing references, and top-level yaml properties against the configuration metamodel. The query/ group parses Запрос{ ... } blocks and verifies the tables of ИЗ/СОЕДИНЕНИЕ against the project objects and their tabular sections; a block with constructs outside the supported subset (temporary tables, unions, subqueries) is skipped whole rather than guessed.

Detailed group descriptions - query/ (a composite type in IN with a subquery), project/ (project properties), naming/ (the naming standard, the [morph] extra) and style/ (code-writing conventions and their on/off policy) - live in docs/RULES.md.

Baseline: adopt a rule on a legacy codebase

To enable a rule over code that already violates it without drowning in legacy findings, freeze the current findings into a baseline and hold only new code to the rule:

xbsl acme/app --enable style --write-baseline baseline.json   # freeze the debt once
xbsl acme/app --enable style --baseline baseline.json         # only NEW findings surface

A finding's identity is (file, rule, message) with an allowed count, so moving a line keeps its finding suppressed while a genuinely new violation surfaces. The summary reports how many findings the baseline suppressed and how many of its entries are now stale (debt paid down) – a signal to rewrite the file. Paths are stored relative to the baseline file, so commit it at the repository root and run the linter from anywhere.

The same file also records point exclusions with their reasons: an entry's value is either a bare count or {"count": N, "reason": "..."} – the reason says why the code is right on purpose. Reasons are written by the "Exclude the finding" lightbulb action of the VS Code extension (or by hand); --write-baseline keeps the reasons of the identities that survive a rewrite. The LSP server accepts the same --baseline FILE flag, so exclusions disappear in editors too. The identity includes the message text: write and check the baseline under the same output language.

Metadata scaffolding

The toolkit takes over the metadata mechanics: UUIDs, indentation, precise yaml insertions, duplicate checks and section/kind compatibility. The same operations are exposed through the CLI (subcommands, JSON output), MCP (the meta_* tools for agents) and LSP (the xbsl/meta* custom requests that power the VS Code metadata tree).

33 kinds of project element are creatable – from Справочник and Документ to ВиртуальнаяТаблица (paired with its mandatory .xbql query), ЗапланированноеЗадание, contracts, rights and commands. Each kind carries what the docs make mandatory: the platform's own default scope (ВПодсистеме – widen it deliberately with --scope), a module stub for the handler the kind cannot live without, and a note for whatever the generator must not invent for you. Kinds whose content is drawn in the designer (ПанельОтчетов, ПроцессИнтеграции) are deliberately absent.

The VS Code tree, AI agents and the terminal call the same scaffolding core; it writes created and point-edited yaml/xbsl files, the linter checks what was written, and the response carries files, notes and the lint report; the LSP surface returns full texts for the editor to apply

xbsl new-project . vendor App                        # Проект.yaml + Проект.xbsl + a subsystem
xbsl new-object vendor/App/Основное Справочник Товары
xbsl add-field vendor/App/Основное/Товары.yaml реквизит Цвет --type Строка
xbsl add-form . --name Товары                        # object + list forms, registered
xbsl add-form . --name Товары --forms list-cards     # list form as a card grid
xbsl new-object ... HttpСервис Каталог --routes "GET /, POST /, GET /{id}"
xbsl add-route  .../Каталог.yaml "DELETE /{id}"      # url template + handler stub
xbsl add-subsystem vendor/App Задачи
xbsl add-dependency . acme CurrencyConverter 2.0      # library into the project's Библиотеки
xbsl rename-object . Товары Номенклатура             # rename files + update references
xbsl set-access . --name Товары --default РазрешеноАутентифицированным
xbsl object-info . --name Товары                     # fields, tabulars, forms, namespace
xbsl project-info .                                  # projects, subsystems, objects by kind

Forms are generated with real content: input fields per attribute (including the standard Наименование / Номер / Дата and hierarchy support), dynamic-list columns, tabular-section tables, a report form with parameters; the form is registered in the owner's Интерфейс section. --dry-run prints the changes (with full file texts) without writing – this is how the VS Code extension applies them through its own undo-friendly edits.

--forms list-cards builds the list form as a card grid instead of a table: a ПроизвольныйСписок whose КонтейнерСтрок is a matrix group, plus the row component СтрокаСписка<Имя>. The card takes a title, a photo (a ДвоичныйОбъект.Ссылка attribute switches it to ПроизвольнаяКарточка with the image above the caption) and up to three more fields, dates formatted; notes report what landed on the card and what did not. --card-min-width sets the grid column width (default 400, 250 with a photo) and --card-placeholder the image shown when the photo is empty.

add-dependency attaches a library – the Библиотеки section of Проект.yaml (Имя, Поставщик, Версия). The version is the library's release version: a release is issued in the control panel, and a build version with a suffix (1.0-42) is rejected. Different versions of one library within a project are not allowed, so attaching an already attached library updates the version of the existing entry. What is attached now – project-info (projects[].libraries). The vendor, name, version and the qualified type names of a library come from parsing its archive: elemctl inspect <file.xlib>.

set-access edits КонтрольДоступа.Разрешения in place, aware of what each kind allows: --default sets the ПоУмолчанию right, --permission Чтение=РазрешеноВсем an individual one (custom rights of a ПравоНаЭлемент included), --calc-by fills РасчетРазрешенийПо – mandatory for РазрешенияВычисляютсяДляКаждогоОбъекта. Wrong methods, rights a kind does not have, and per-object rights on a НаборКонстант are rejected; the computed-permission handlers stay yours to write (notes say which). object-info reports the current permissions and the kind's rights, project-info the ПоУмолчанию of every object – no section there means the platform applies РазрешеноАдминистраторам.

rename-object renames the object's files (including its forms and the СтрокаСписка<Имя> row component) and rewrites references context-aware across the whole project: yaml type/table/form keys, = bindings and .xbsl code. Attributes, components or dynamic-list fields that merely share the old name are left alone, and so are string literals (UI text); --new-presentation/--old-presentation update the Заголовок/Представление values of the object and its forms. The object's Ид is untouched, so the platform keeps the stored data.

Extending: your own rules, data and severities

Three entry point groups let a separate package extend the linter without forking it. This exists for teams whose rules or language data cannot be published: keep those in a private package that depends on xbsl.

# pyproject.toml of your package
dependencies = ["xbsl>=0.16"]

[project.entry-points."xbsl.rules"]
myproject = "myproject.rules"        # importing the module runs its @rule decorators

[project.entry-points."xbsl.data"]
myproject = "myproject:data_root"    # a path, or a callable returning one

[project.entry-points."xbsl.severity"]
myproject = "myproject:severity_overrides"   # {rule id: "error"|"warning"|"info"|"off"}

Packages that declared the groups under the pre-rename name (xbsllint.rules/xbsllint.data/ xbsllint.severity) keep working: the legacy groups are scanned after the new ones.

The severity dict (or a zero-argument callable returning one) raises or lowers the default level of any rule – built-in or plugin – for every run in this installation: a project may treat, say, style/abbreviation-case as a warning while the published default stays info. "off" removes a rule from the default set (an explicit --select/--enable still turns it on, at its base level).

Install the package and the CLI, the MCP server and the web UI all pick everything up – no flags, no config file. A failing entry point raises instead of warning: a linter that silently drops a rule stays green in CI and guarantees nothing; an override naming an unknown rule id or level raises for the same reason. XBSL_NO_PLUGINS=1 ignores every external package (built-in rules, bundled data and default severities only).

LSP server (experimental)

xbsl-lsp (the [lsp] extra: pip install "xbsl[lsp]") runs the linter as a long-living Language Server over stdio: live per-file diagnostics as you type, project-wide diagnostics on save, go to definition, completion and hover over a resident project index, and quick-fix code actions - without paying the interpreter start-up cost per call. Flags: --project-root (the sources root relative to the workspace folder), --select/--ignore/ --enable, --data-dir. Any LSP-capable editor (VS Code, Neovim, JetBrains) can spawn it.

Code templates

A template is a short trigger plus a construct: type есл, press Ctrl+Space, pick если and get the whole statement with edit points to tab through. The mechanism mirrors the one in 1C:EDT (Параметры - Шаблоны), the file format included.

Templates are offered ahead of the other completions - the construct you are typing out ranks above a name that merely starts the same. They need no Element data, only the LSP server (xbsl.lsp.enabled, on by default): the CLI-index mode of the extension does not offer them.

The builtin set is 51 templates (xbsl/templates_builtin.py): the control statements, the declarations (methods with their annotations, structures, enumerations, exception types), queries and the applied idioms - walking a catalog, register movements, an HTTP service handler, per-object access permissions, object events, form handlers. Every pattern is parsed by the same parser the linter runs (tests/test_templates.py), so a template cannot insert code that does not compile.

A pattern holds edit points and choices:

Variable Expands to
${Редактировать("подсказка")} an edit point; the prompt is the pre-selected text
${Выбрать("а", "б")} a dropdown of fixed variants
${ИмяОбъектаМетаданного(Справочник)} a dropdown of this project's catalogs, from the index
${ПолноеИмяОбъектаМетаданного("Перечисление")} the same, inserted as Вид.Имя

Your own templates live in .xbsl-templates.json at the workspace root (--file / the xbsl.templates.file setting): the file extends the builtin set, and a template with the same name replaces the builtin one. Only what differs from the builtin set is stored, so the next release still reaches you.

xbsl templates list                        # the whole set: builtin plus your own (* marks yours)
xbsl templates export --output my.json     # a dump (to carry your templates to another machine)
xbsl templates import dump.json            # merge a dump into your file

In VS Code the same thing is a panel - XBSL: code templates - laid out like the EDT dialog: the list with the call context, the description and the pattern, and buttons to add, edit, delete, import, export and restore the defaults. Saving re-reads the set in the running server, so the next Ctrl+Space already offers the edited template.

Documentation (searching the Element reference)

tools/extract_docs.py extracts the Element reference from a distribution (the server-with-IDE .car) into a docs.sqlite next to the language data: the stdlib pages (a type, its methods, properties, parameters) with cleaned HTML, a full-text index (SQLite FTS5, from the standard library) and canonical links back to the primary source (https://1cmycloud.com/docs/help/..., taken from the distribution's sitemap.xml). Page images are stored alongside. The 1C reference is copyrighted, so the database is not shipped in the package – you generate it from your own distribution, like the language data (step 1).

python tools/extract_docs.py --dist "$ELEMENT_DIST"

The runtime API xbsl.docs (search, page, tree, for_symbol, asset) reads docs.sqlite; with no database the search is simply empty. It powers the MCP tools (below) and – later – the reference panel in the VS Code extension.

MCP server

A thin adapter over the same core: an agent (e.g. Claude Code) can call the checks as tools and receive structured diagnostics.

pip install -e ".[mcp]"
claude mcp add xbsl -- xbsl-mcp

Tools: lint_paths(paths), lint_source(filename, content), list_rules(); documentation search – docs_search(query), docs_page(id), docs_symbol(name) (needs the docs.sqlite database, see above); type_members(name) – the members of a stdlib type with the return-type roots of its methods in one compact answer (cheaper than a docs page when only the member list matters); metadata scaffolding – meta_new_project, meta_new_object, meta_add_field, meta_add_route, meta_add_form, meta_add_subsystem, meta_add_dependency, meta_rename_object (with a dry_run plan mode), meta_set_access, meta_object_info, meta_project_info. Every writing meta_* tool applies the changes and returns the lint of the written files in the same response – creation and validation in one round trip. The core and the CLI do not require mcp – it lives only in the [mcp] extra.

Web interface

A local page: point it at a project folder and see the diagnostics. Standard library only (no external dependencies), binds to 127.0.0.1 only.

xbsl-web            # then open http://127.0.0.1:8771/

Per-tier rule toggles, a data-version selector, severity/text filters, dark/light theme; clicking a diagnostic opens the file in VS Code (vscode://).

Editor support (VS Code)

A VS Code extension in editors/vscode gives .xbsl syntax highlighting, live diagnostics as you type (--stdin), workspace diagnostics on save (a full linter run in the background brings the project-scope rules into the editor), index-based go-to-definition and completion across the project (xbsl --index), a form preview with a properties panel, and a deploy button powered by elemctl. It is published on the Marketplace and Open VSX; its README covers settings, behavior and requirements. See also the companion XBSL Debug extension from the elemctl project.

Element versions

The data is versioned by platform version:

xbsl/data/element/
    index.json            # { available: [...], default: "<version>" }
    <version>/{language.json, stdlib.json, metamodel.json}

Pick a version with --element-version / the XBSL_ELEMENT_VERSION env var / the index default; --version shows what is available. Add a new version by re-running the extractors with a new --dist.

The data root itself is resolved in this order: --data-dir > XBSL_DATA_DIR > a root supplied by an installed xbsl.data entry point > xbsl/data/element inside the package.

Tests

pip install -e ".[dev]"
pytest

Data-dependent tests are skipped automatically when the data has not been generated.

License

MIT – see LICENSE. Trademarks and data provenance – NOTICE. How to add a rule – CONTRIBUTING.md.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

xbsl-0.22.0.tar.gz (385.6 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

xbsl-0.22.0-py3-none-any.whl (312.2 kB view details)

Uploaded Python 3

xbsl-0.22.0-cp314-cp314-win_amd64.whl (506.9 kB view details)

Uploaded CPython 3.14Windows x86-64

xbsl-0.22.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (821.3 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

xbsl-0.22.0-cp314-cp314-macosx_11_0_arm64.whl (630.8 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

xbsl-0.22.0-cp314-cp314-macosx_10_15_x86_64.whl (645.7 kB view details)

Uploaded CPython 3.14macOS 10.15+ x86-64

xbsl-0.22.0-cp313-cp313-win_amd64.whl (501.0 kB view details)

Uploaded CPython 3.13Windows x86-64

xbsl-0.22.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (822.8 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

xbsl-0.22.0-cp313-cp313-macosx_11_0_arm64.whl (632.5 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

xbsl-0.22.0-cp313-cp313-macosx_10_13_x86_64.whl (646.9 kB view details)

Uploaded CPython 3.13macOS 10.13+ x86-64

xbsl-0.22.0-cp312-cp312-win_amd64.whl (500.6 kB view details)

Uploaded CPython 3.12Windows x86-64

xbsl-0.22.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (825.9 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

xbsl-0.22.0-cp312-cp312-macosx_11_0_arm64.whl (635.5 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

xbsl-0.22.0-cp312-cp312-macosx_10_13_x86_64.whl (652.0 kB view details)

Uploaded CPython 3.12macOS 10.13+ x86-64

xbsl-0.22.0-cp311-cp311-win_amd64.whl (499.2 kB view details)

Uploaded CPython 3.11Windows x86-64

xbsl-0.22.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (794.7 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

xbsl-0.22.0-cp311-cp311-macosx_11_0_arm64.whl (630.2 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

xbsl-0.22.0-cp311-cp311-macosx_10_9_x86_64.whl (649.9 kB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

xbsl-0.22.0-cp310-cp310-win_amd64.whl (499.6 kB view details)

Uploaded CPython 3.10Windows x86-64

xbsl-0.22.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (796.5 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

xbsl-0.22.0-cp310-cp310-macosx_11_0_arm64.whl (632.3 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

xbsl-0.22.0-cp310-cp310-macosx_10_9_x86_64.whl (652.8 kB view details)

Uploaded CPython 3.10macOS 10.9+ x86-64

File details

Details for the file xbsl-0.22.0.tar.gz.

File metadata

  • Download URL: xbsl-0.22.0.tar.gz
  • Upload date:
  • Size: 385.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for xbsl-0.22.0.tar.gz
Algorithm Hash digest
SHA256 8a493ab3a39060ba752508a8ce1d95ff2a7f8a4a29c55b9a7bb9abd7452b5564
MD5 12f341c2b257c61173e0de976e8cb70d
BLAKE2b-256 7f3efb75aa8fd7decf137339d384d38ba8af37cc294bb4f3836be233a5dbc7ea

See more details on using hashes here.

Provenance

The following attestation bundles were made for xbsl-0.22.0.tar.gz:

Publisher: pypi-publish.yml on keyfire/xbsl

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file xbsl-0.22.0-py3-none-any.whl.

File metadata

  • Download URL: xbsl-0.22.0-py3-none-any.whl
  • Upload date:
  • Size: 312.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for xbsl-0.22.0-py3-none-any.whl
Algorithm Hash digest
SHA256 a42977e44accdf8ff8855007173a0611a999ea90b7ddc7df376c2b089b82404c
MD5 9d6444f6b8358057fd1f7d24d3e486d0
BLAKE2b-256 e982ee76b518fa1c28b4452eaf304f197700274a13f74b28bd2e3ff0ed318f52

See more details on using hashes here.

Provenance

The following attestation bundles were made for xbsl-0.22.0-py3-none-any.whl:

Publisher: pypi-publish.yml on keyfire/xbsl

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file xbsl-0.22.0-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: xbsl-0.22.0-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 506.9 kB
  • Tags: CPython 3.14, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for xbsl-0.22.0-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 ce73559cfdd71c7e7c823d5f397d78ec8feee5afc8fbb356402450fcbc9fe854
MD5 31cfd34766cf022b40b28b6c5b696440
BLAKE2b-256 7626b722211a05a7583bc2003e51691dd2b1d47d1ccbe359cc6c1e221968c8f8

See more details on using hashes here.

Provenance

The following attestation bundles were made for xbsl-0.22.0-cp314-cp314-win_amd64.whl:

Publisher: pypi-publish.yml on keyfire/xbsl

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file xbsl-0.22.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for xbsl-0.22.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 6a1dc2a9ee8911de4541d076b5525b1bf5988a2399fb3c2b28d901a62b708e0d
MD5 e63176abfc0d40e62498f0885f509a45
BLAKE2b-256 3241ddbfcf6d1ea6cb5173252d588b0d97bc2a4293534f7e3629b319e2250b33

See more details on using hashes here.

Provenance

The following attestation bundles were made for xbsl-0.22.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl:

Publisher: pypi-publish.yml on keyfire/xbsl

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file xbsl-0.22.0-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for xbsl-0.22.0-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8e5f55ef49e3f69a670ffcc5448e709e5d96a4ef403ef07011d3e2eefbe4547e
MD5 9f0ed244a6a226b4921446513e0b9399
BLAKE2b-256 4f2dbf9c63037cd155f2ce1cfd5c053bb81e4a4d0823b81609177a1286a37922

See more details on using hashes here.

Provenance

The following attestation bundles were made for xbsl-0.22.0-cp314-cp314-macosx_11_0_arm64.whl:

Publisher: pypi-publish.yml on keyfire/xbsl

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file xbsl-0.22.0-cp314-cp314-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for xbsl-0.22.0-cp314-cp314-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 8a0ae8a0d62f33a933421044be7f551ccc701c24d5b93e312f6ad000135c4189
MD5 ce1db140ac99189f29bab6f7b6e8dd3d
BLAKE2b-256 c3bfbab95a9f02a10de3ddd2b88ddde970cbb0c100bb45e7b2e7d0dba08673fd

See more details on using hashes here.

Provenance

The following attestation bundles were made for xbsl-0.22.0-cp314-cp314-macosx_10_15_x86_64.whl:

Publisher: pypi-publish.yml on keyfire/xbsl

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file xbsl-0.22.0-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: xbsl-0.22.0-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 501.0 kB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for xbsl-0.22.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 1f8ad8a6c73a4f3b02d1c96ef88475ac79b0a650d28441b4009f38ec82cf1e85
MD5 4466fce48837c74ece63e76e7483235d
BLAKE2b-256 7ce0c6e7b64064d87a3113e37cb046a93648bb38b7595f7954b9a527abd0ad0a

See more details on using hashes here.

Provenance

The following attestation bundles were made for xbsl-0.22.0-cp313-cp313-win_amd64.whl:

Publisher: pypi-publish.yml on keyfire/xbsl

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file xbsl-0.22.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for xbsl-0.22.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 5c0466085d0aff4b422a255db70a0a80c11b0958d32899f5d44826077553c849
MD5 23793017df820a9a8ee1c8e30386546b
BLAKE2b-256 20bb2371b61bd5979208cf4a27379e4ef61568a57f7d792a873841377973e9e0

See more details on using hashes here.

Provenance

The following attestation bundles were made for xbsl-0.22.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl:

Publisher: pypi-publish.yml on keyfire/xbsl

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file xbsl-0.22.0-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for xbsl-0.22.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 56352e294a990c0c318ef0819cbd80bf77b776427da1f5d99dc1cdba97938ac7
MD5 9c8752d6895e59d2fd68477a43700f74
BLAKE2b-256 6be85b7e7abd108511a66563b078387eed532f6405a1cb49f29ff951d1ad6cb7

See more details on using hashes here.

Provenance

The following attestation bundles were made for xbsl-0.22.0-cp313-cp313-macosx_11_0_arm64.whl:

Publisher: pypi-publish.yml on keyfire/xbsl

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file xbsl-0.22.0-cp313-cp313-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for xbsl-0.22.0-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 02bd8051fd28ecf1beff136ac219e41fb9388e072945037315baf673ae10cc4c
MD5 f7ed4e43e01b0e4ac0636edd4e444adb
BLAKE2b-256 008f962c50953ecc8f7076ed39380a60944d7b1ad01bd15efc83f6683199f505

See more details on using hashes here.

Provenance

The following attestation bundles were made for xbsl-0.22.0-cp313-cp313-macosx_10_13_x86_64.whl:

Publisher: pypi-publish.yml on keyfire/xbsl

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file xbsl-0.22.0-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: xbsl-0.22.0-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 500.6 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for xbsl-0.22.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 1832e6d6bc909dbc6ebedce8944a319cf4d97dc14fb5a37f9857641d726b854c
MD5 96dd69fe4fac9c6f3ca191f45bb1a743
BLAKE2b-256 d0e8dfbb92ab898dbbe75c9a398ee5d3e51c01d9b2e2be72f1c948995eab7d52

See more details on using hashes here.

Provenance

The following attestation bundles were made for xbsl-0.22.0-cp312-cp312-win_amd64.whl:

Publisher: pypi-publish.yml on keyfire/xbsl

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file xbsl-0.22.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for xbsl-0.22.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 11d5dda28a1c017b96afa184981fb6aa51ad25810c133f46960ef09e0d95377c
MD5 39a361c18fbc38b055ea3da46662e46e
BLAKE2b-256 39589a146917f272ee79285179543dabad6573342c32b01abb0b0875f3f94ae1

See more details on using hashes here.

Provenance

The following attestation bundles were made for xbsl-0.22.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl:

Publisher: pypi-publish.yml on keyfire/xbsl

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file xbsl-0.22.0-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for xbsl-0.22.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5f303dcc920158efe6cd9611db96bdb8b5311d91646ed951fc82372e917126e7
MD5 aacf5c9aa305706f26a9e03059e63a65
BLAKE2b-256 00e208d978c4c53496e47891d9f203ece38226f76ecd43d326f9713b3ceaf0e7

See more details on using hashes here.

Provenance

The following attestation bundles were made for xbsl-0.22.0-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: pypi-publish.yml on keyfire/xbsl

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file xbsl-0.22.0-cp312-cp312-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for xbsl-0.22.0-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 4ed2097027b99895df50da8445fdc1934ae7759a68da18ff36e32139d8b1b72f
MD5 83d2f81c5bd6d29a57c4548fc23626ec
BLAKE2b-256 9a0382b0be4667c573bdfeb7278dd9b8d1fb0ab80728d29944db9bed55a9f688

See more details on using hashes here.

Provenance

The following attestation bundles were made for xbsl-0.22.0-cp312-cp312-macosx_10_13_x86_64.whl:

Publisher: pypi-publish.yml on keyfire/xbsl

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file xbsl-0.22.0-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: xbsl-0.22.0-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 499.2 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for xbsl-0.22.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 fea6f9c1d3cfaf2e9dc11d1b3b4b79d9d146429ce5ac8f0bc9266481523ebfd8
MD5 c31e4d588d39304ce8d9641ab8dbdc85
BLAKE2b-256 fbcbc755b5176192a333805359c215d7f9faee65976298ada3af9aa51c818938

See more details on using hashes here.

Provenance

The following attestation bundles were made for xbsl-0.22.0-cp311-cp311-win_amd64.whl:

Publisher: pypi-publish.yml on keyfire/xbsl

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file xbsl-0.22.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for xbsl-0.22.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 0e3063b66384cd8ea05ec1df041f3caa72186bd50574cb36fe72f001adca95fe
MD5 251cd990dcc1bff84d387985af74b592
BLAKE2b-256 1e57b94ebe0cdd1e67d1aa5310b0f392135795edda4164aaa40d47bd8da0625f

See more details on using hashes here.

Provenance

The following attestation bundles were made for xbsl-0.22.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl:

Publisher: pypi-publish.yml on keyfire/xbsl

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file xbsl-0.22.0-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for xbsl-0.22.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a93e78e2a7785acb4aec6148f95af433137f131d45e6355eb10516cae986361e
MD5 a13adcc8b6083c6eee6e60205e1e1a88
BLAKE2b-256 784b4c674d30b5b19cffaff87598c7c9081a10c0d9c5e0fd50b778e68dd265aa

See more details on using hashes here.

Provenance

The following attestation bundles were made for xbsl-0.22.0-cp311-cp311-macosx_11_0_arm64.whl:

Publisher: pypi-publish.yml on keyfire/xbsl

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file xbsl-0.22.0-cp311-cp311-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for xbsl-0.22.0-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 1bfc6b44bb9e5532fa485d5e9f0131df5e8b3a135805984c0087142956da8b39
MD5 1ef3a343d4b70d72875f6f589f44e222
BLAKE2b-256 3baea57f687783cec095ced7ab077abf176870e3381d49ac099e2a52e00bbbdc

See more details on using hashes here.

Provenance

The following attestation bundles were made for xbsl-0.22.0-cp311-cp311-macosx_10_9_x86_64.whl:

Publisher: pypi-publish.yml on keyfire/xbsl

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file xbsl-0.22.0-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: xbsl-0.22.0-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 499.6 kB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for xbsl-0.22.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 f74ad87709a4cea9850cd1f5ebfd9c51da275cdc014eabbaa03f8b6f1b2fc059
MD5 02ead971fce8f3c68324d60d56a5438c
BLAKE2b-256 b28b885731e62704c48cae1064215670dc8c62c4b3c454d5a62098c30eccc0a5

See more details on using hashes here.

Provenance

The following attestation bundles were made for xbsl-0.22.0-cp310-cp310-win_amd64.whl:

Publisher: pypi-publish.yml on keyfire/xbsl

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file xbsl-0.22.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for xbsl-0.22.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 60252b642d5c09b532486a42fa1af5d08aecad01a6e3671020440f392e52f4b1
MD5 19dba71bcda34e56ab6f958f8473a5d0
BLAKE2b-256 c7e1352aa97cc87026d9b734a09ed3f15fc94c089fb66553b8017e53fbd84f18

See more details on using hashes here.

Provenance

The following attestation bundles were made for xbsl-0.22.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl:

Publisher: pypi-publish.yml on keyfire/xbsl

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file xbsl-0.22.0-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for xbsl-0.22.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 97d9331aaf36050543ab93f2870f02120e5cf637eaf6584d8280d7822ef5ef18
MD5 5e6707b11776bf09358a7b2aea2dc0dc
BLAKE2b-256 9591a5b249f964d5702915e3b5d42367e6c2acf0e2d7d0168a1073f4661fcaa5

See more details on using hashes here.

Provenance

The following attestation bundles were made for xbsl-0.22.0-cp310-cp310-macosx_11_0_arm64.whl:

Publisher: pypi-publish.yml on keyfire/xbsl

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file xbsl-0.22.0-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for xbsl-0.22.0-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 6abf623fe6340fd2925f4276ca395c4fda6ba4977fce1053744f1b09d141860a
MD5 61c3e967aef5e4f91a7d622e801aadba
BLAKE2b-256 50e63bbad9308bfe9e4019bc829030bedd0958700f3c35bce77c1555f66effc0

See more details on using hashes here.

Provenance

The following attestation bundles were made for xbsl-0.22.0-cp310-cp310-macosx_10_9_x86_64.whl:

Publisher: pypi-publish.yml on keyfire/xbsl

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page