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, and Taskfile.yml, 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. 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 six providers: make, npm, just, task (Taskfile), pdm, and poe.
  • 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.
  • 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), hardened least-privilege workflows, and a CycloneDX SBOM attached to every release.
  • 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.1.0.tar.gz (32.3 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.1.0-py3-none-any.whl (22.0 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: nur-0.1.0.tar.gz
  • Upload date:
  • Size: 32.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for nur-0.1.0.tar.gz
Algorithm Hash digest
SHA256 290baa060d7a8ba7917c29b2a72f5a54ba89d1ae8955426ba6c7e991f8ec28d7
MD5 5624b233a639169ff1b2f3c7b2b3db69
BLAKE2b-256 4748eeff6cfa3cea67e172049d0c97e1ff5ddd55f51f41cb401f99c64ede1d8a

See more details on using hashes here.

Provenance

The following attestation bundles were made for nur-0.1.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.1.0-py3-none-any.whl.

File metadata

  • Download URL: nur-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 22.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for nur-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 033e4e53a55e26da5aecb3efec39e84710476f3a4f286a0b51e4d9b65bfb7d0e
MD5 e227b39b45156b0b3d33845c33c25327
BLAKE2b-256 f8104c26a31fa51ff76fec3438b09b41b29c8fb38b921afaaa6e3fca0ff6f31f

See more details on using hashes here.

Provenance

The following attestation bundles were made for nur-0.1.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

0.2.0

2 files

This release

0.1.0 This release

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