Skip to main content

nur

CI Coverage Documentation Status PyPI - Version PyPI - Python Version License - MIT GitHub Stars Latest Commit

Checked with mypy linting - Ruff OpenSSF Scorecard GitHub Tag

Downloads Downloads/Month Downloads/Week

A script discovery and execution engine for your project's tasks.


Run nur in a project and it discovers tasks across npm (package.json), Makefile, PDM/poe (pyproject.toml), justfile, Taskfile.yml, mise (mise.toml), and xc (README.md), then lets you run them from a TUI picker or directly from the command line. Discovery is limited to the current directory.

Table of Contents

Installation

nur is not on PyPI yet. Install the latest from source:

uv tool install git+https://github.com/hasansezertasan/nur

Or, from a clone:

uv tool install .

Once published, nur will also be installable from PyPI (pip install nur / uv tool install nur), Homebrew, and Scoop.

Usage

Run nur from the root of a project that contains any supported task file.

TUI

Run with no arguments to open the interactive picker:

nur

Browse and run the discovered tasks in a three-pane Textual UI. Press q to exit.

CLI

nur test            # run a task by name (if unambiguous)
nur make:test       # run a task by its qualified name
nur test -- --watch # pass extra args through to the underlying runner
nur list            # print all discovered tasks
nur --version

Debugging

Debug nur in VS Code using the provided launch configurations:

  • Current File: Debug the currently open Python file.
  • Tests: Debug pytest runs.
  • Attach: Attach to a running process (with debugpy).
  • CLI / TUI: Debug the nur command-line and terminal-UI entry points.

Select a configuration from the Run and Debug panel in VS Code.

Support :heart:

If you have any questions or need help, feel free to open an issue on the GitHub repository.

Motivation

Every project speaks a different task dialect — make test, npm run test, just test, task test, pdm run test, poe test, mise run test, xc test. nur gives you one command that discovers whatever a project already uses and runs it, with no config and no need to remember which runner lives where. Discovery is pure text/JSON/TOML parsing, so listing tasks never executes anything (no make -pRrq side effects).

Features

  • Zero-config discovery across eight providers: make, npm, just, task (Taskfile), pdm, poe, mise, and xc. mise is read from the first config file present, in priority order: mise.local.toml, mise.toml, .mise.local.toml, .mise.toml, .config/mise.toml. xc is read from README.md: tasks come from the section marked with an <!-- xc-heading --> comment, or failing that from a heading named Tasks — which is how nur discovers the tasks documented below in this very file.
  • CLI Application: run any discovered task by name or qualified prefix:name, with -- passthrough to the underlying runner.
  • TUI Application: interactive three-pane task picker built with Textual.
  • Safe by default: discovery parses files; it never shells out to a runner just to list tasks.
  • Type Safety: full type hints checked by mypy, basedpyright, ty, pyrefly, and zuban.
  • Code Quality: comprehensive linting and formatting with ruff, plus architecture-contract enforcement with import-linter.
  • Testing: pytest with coverage reporting and parallel execution.
  • Documentation: Sphinx documentation with the Shibuya theme, GitHub Pages deployment, and live per-PR documentation previews.
  • CI/CD: automated testing, building, and publishing across multiple platforms.
  • Security: CodeQL, OpenSSF Scorecard, dependency review, secret scanning (gitleaks), dependency auditing (pip-audit), GitHub Actions static analysis (zizmor — a blocking prek/CI gate plus a Security-tab dashboard, over hardened least-privilege workflows), and a CycloneDX SBOM attached to every release.
  • Managed .gitignore: kept in sync with the upstream github/gitignore templates by cobo, with a weekly drift check.
  • Modern Python: uv for dependency management, hatch for building.

Author :person_with_crown:

This project is maintained by Hasan Sezer Taşan, It's me :wave:

Analysis

Contributing :heart:

Any contributions are welcome! Please follow the Contributing Guidelines to contribute to this project.

Development :toolbox:

Clone the repository and cd into the project directory:

git clone https://github.com/hasansezertasan/nur
cd nur

install

Install the dependencies:

uv sync

style

Run the style checks:

uv run --locked tox run -e style

ci

Run the CI pipeline:

uv run --locked tox run

docs-build

Build the documentation site:

uv run --locked tox run -e docs-build

docs-server

Start the live-reloading docs server:

uv run --locked tox run -e docs-server

docs-linkcheck

Check the documentation for broken links (also runs weekly in CI):

uv run --locked tox run -e docs-linkcheck

Releasing

Versioning and releases are automated with release-please, driven by Conventional Commit PR titles squash-merged into main. release-please maintains a release PR that bumps the version and CHANGELOG.md; merging it tags the release and publishes to PyPI. See the Contributing Guidelines for the commit conventions and the one-time Repository setup (squash-merge settings, Actions permissions, release immutability, and PyPI trusted publishing).

Credits

This package was created with Copier and the hasansezertasan/copier-pyproject project template.

License :scroll:

This project is licensed under the MIT License.

Changelog :memo:

For a detailed list of changes, see the GitHub Releases. A CHANGELOG.md is generated automatically by release-please on each release.

Download files

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

Source Distribution

nur-0.2.0.tar.gz (45.7 kB view details)

Uploaded Source

Built Distribution

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

nur-0.2.0-py3-none-any.whl (28.2 kB view details)

Uploaded Python 3

File details

Details for the file nur-0.2.0.tar.gz.

File metadata

  • Download URL: nur-0.2.0.tar.gz
  • Upload date:
  • Size: 45.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for nur-0.2.0.tar.gz
Algorithm Hash digest
SHA256 1dfbbe382114d59ca211343be6116a36baae9a80cace601fe984fdf6b6c3601f
MD5 1530a31470fb44d3d1e7d34d42d0d3af
BLAKE2b-256 5b536b251a61847c80f3c2a53a2c52f9b9c69f66e78c7f5464077c3c0632e76a

See more details on using hashes here.

Provenance

The following attestation bundles were made for nur-0.2.0.tar.gz:

Publisher: release.yml on hasansezertasan/nur

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

File details

Details for the file nur-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: nur-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 28.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for nur-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 7e2457686cd895d49ecd089928913dca5e14c5d5c559cc6ba06900a4dd6dbb82
MD5 021846038d29d7e0543b6f2c2d56a1fc
BLAKE2b-256 3133c8d1b71f20326a813132cc2bec2e23b4cb9037c85e2a0afde35c6f8b6caa

See more details on using hashes here.

Provenance

The following attestation bundles were made for nur-0.2.0-py3-none-any.whl:

Publisher: release.yml on hasansezertasan/nur

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

Release history Release notifications | RSS feed

0.4.0

2 files

0.3.0

2 files

0.2.1

2 files

This release

0.2.0 This release

2 files

0.1.0

2 files

Supported by

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