[tool.poetry] name = "textual" version = "6.3.0" homepage = "https://github.com/Textualize/textual" repository = "https://github.com/Textualize/textual" documentation = "https://textual.textualize.io/" description = "Modern Text User Interface framework" authors = ["Will McGugan "] license = "MIT" readme = "README.md" classifiers = [ "Development Status :: 5 - Production/Stable", "Environment :: Console", "Intended Audience :: Developers", "Operating System :: Microsoft :: Windows :: Windows 10", "Operating System :: Microsoft :: Windows :: Windows 11", "Operating System :: MacOS", "Operating System :: POSIX :: Linux", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Programming Language :: Python :: 3.14", "Typing :: Typed", ] include = [ "src/textual/py.typed", { path = "docs/examples", format = "sdist" }, { path = "tests", format = "sdist" }, # The reason for the slightly convoluted path specification here is that # poetry populates the exclude list with the content of .gitignore, and # it also seems like exclude trumps include. So here we specify that we # want to package up the content of the docs-offline directory in a way # that works around that. { path = "docs-offline/**/*", format = "sdist" }, ] [tool.poetry.urls] "Bug Tracker" = "https://github.com/Textualize/textual/issues" [tool.ruff] target-version = "py39" [tool.poetry.dependencies] python = "^3.9" markdown-it-py = { extras = ["plugins", "linkify"], version = ">=2.1.0" } rich = ">=14.2.0" #rich = {path="../rich", develop=true} typing-extensions = "^4.4.0" platformdirs = ">=3.6.0,<5" # start of [syntax] extras # Require tree-sitter >= 0.25.0 and python >= 3.10 # Windows, MacOS and Linux binary wheels are available for all of the languages below. tree-sitter = { version = ">=0.25.0", optional = true, python = ">=3.10" } tree-sitter-python = { version = ">=0.23.0", optional = true, python = ">=3.10" } tree-sitter-markdown = { version = ">=0.3.0", optional = true, python = ">=3.10"} tree-sitter-json = { version = ">=0.24.0", optional = true, python = ">=3.10" } tree-sitter-toml = { version = ">=0.6.0", optional = true, python = ">=3.10" } tree-sitter-yaml = { version = ">=0.6.0", optional = true, python = ">=3.10" } tree-sitter-html = { version = ">=0.23.0", optional = true, python = ">=3.10" } tree-sitter-css = { version = ">=0.23.0", optional = true, python = ">=3.10" } tree-sitter-javascript = { version = ">=0.23.0", optional = true, python = ">=3.10" } tree-sitter-rust = { version = ">=0.23.0,<=0.23.2", optional = true, python = ">=3.10" } tree-sitter-go = { version = ">=0.23.0", optional = true, python = ">=3.10" } tree-sitter-regex = { version = ">=0.24.0", optional = true, python = ">=3.10" } tree-sitter-xml = { version = ">=0.7.0", optional = true, python = ">=3.10" } tree-sitter-sql = { version = ">=0.3.0,<0.3.8", optional = true, python = ">=3.10" } tree-sitter-java = { version = ">=0.23.0", optional = true, python = ">=3.10" } tree-sitter-bash = { version = ">=0.23.0", optional = true, python = ">=3.10" } # end of [syntax] extras pygments = "^2.19.2" [tool.poetry.extras] syntax = [ "tree-sitter", "tree-sitter-python", "tree-sitter-markdown", "tree-sitter-json", "tree-sitter-toml", "tree-sitter-yaml", "tree-sitter-html", "tree-sitter-css", "tree-sitter-javascript", "tree-sitter-rust", "tree-sitter-go", "tree-sitter-regex", "tree-sitter-xml", "tree-sitter-sql", "tree-sitter-java", "tree-sitter-bash", ] [tool.poetry.group.dev.dependencies] black = "24.4.2" griffe = "0.32.3" httpx = "^0.23.1" mkdocs = "^1.3.0" mkdocs-exclude = "^1.0.2" mkdocs-git-revision-date-localized-plugin = "^1.2.5" mkdocs-material = "^9.0.11" mkdocs-rss-plugin = "^1.5.0" mkdocstrings = { extras = ["python"], version = "^0.20.0" } mkdocstrings-python = "^1.0.0" mypy = "^1.0.0" pre-commit = "^2.13.0" pytest = "^8.3.1" pytest-xdist = "^3.6.1" pytest-asyncio = "*" pytest-cov = "^5.0.0" textual-dev = "^1.7.0" types-setuptools = "^67.2.0.1" isort = "^5.13.2" pytest-textual-snapshot = "^1.0.0" [tool.pytest.ini_options] asyncio_mode = "auto" testpaths = ["tests"] addopts = "--strict-markers" markers = [ "syntax: marks tests that require syntax highlighting (deselect with '-m \"not syntax\"')", ] asyncio_default_fixture_loop_scope = "function" [build-system] requires = ["poetry-core>=1.2.0"] build-backend = "poetry.core.masonry.api"