{"id":15663096,"url":"https://github.com/niklasrosenstein/slap","last_synced_at":"2025-08-03T14:34:57.904Z","repository":{"id":41438058,"uuid":"287513286","full_name":"NiklasRosenstein/slap","owner":"NiklasRosenstein","description":"Slap is a CLI to assist in the process for developing and releasing Python packages.","archived":false,"fork":false,"pushed_at":"2025-04-03T16:21:00.000Z","size":11567,"stargazers_count":22,"open_issues_count":45,"forks_count":12,"subscribers_count":2,"default_branch":"develop","last_synced_at":"2025-04-06T13:11:52.423Z","etag":null,"topics":["app","cli","flit","python","python-poetry","release-automation","setuptools"],"latest_commit_sha":null,"homepage":"https://niklasrosenstein.github.io/slap/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/NiklasRosenstein.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-08-14T11:04:56.000Z","updated_at":"2025-01-03T00:17:26.000Z","dependencies_parsed_at":"2024-03-23T07:30:36.959Z","dependency_job_id":"9817cce2-7a58-427d-abb1-9a356a2c8227","html_url":"https://github.com/NiklasRosenstein/slap","commit_stats":{"total_commits":1335,"total_committers":9,"mean_commits":"148.33333333333334","dds":0.02397003745318349,"last_synced_commit":"933efec6411dff6974f054aaaa8a8277898c6700"},"previous_names":["niklasrosenstein/shut"],"tags_count":172,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NiklasRosenstein%2Fslap","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NiklasRosenstein%2Fslap/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NiklasRosenstein%2Fslap/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NiklasRosenstein%2Fslap/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/NiklasRosenstein","download_url":"https://codeload.github.com/NiklasRosenstein/slap/tar.gz/refs/heads/develop","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248018060,"owners_count":21034048,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["app","cli","flit","python","python-poetry","release-automation","setuptools"],"created_at":"2024-10-03T13:35:29.071Z","updated_at":"2025-04-09T10:08:30.602Z","avatar_url":"https://github.com/NiklasRosenstein.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Slap\n\n\u003cimg src=\".github/assets/logo.svg\" style=\"height: 200px !important\"\u003e\n\n  [PEP 517]: https://peps.python.org/pep-0517/\n\nSlap is a command-line tool to simplify common workflows in the development of Python projects\nindependent of the [PEP 517][] build backend being used, capable of managing single- and multi-project\nrepositories.\n\n## Installation\n\nI recommend installing Slap using Pipx. (Requires Python 3.10 or higher)\n\n    $ pipx install slap-cli\n\n\u003e __Note__: Currently Slap relies on an alpha version of `poetry-core` (`^1.1.0a6`). If you install it into\n\u003e the same environment as Poetry itself, you may also need to use an alpha version of Poetry (e.g. `1.2.0a2`).\n\u003e\n\u003e If you use Slap in GitHub Actions, try one of the actions provided by Slap directly:\n\u003e\n\u003e * [`NiklasRosenstein/slap@gha/install/v1`](https://niklasrosenstein.github.io/slap/guides/github/#install-slap)\n\u003e * [`NiklasRosenstein/slap@gha/changelog/update/v1`](https://niklasrosenstein.github.io/slap/guides/github/#update-changelogs)\n\n## Documentation\n\nYou can find the documentation for Slap here: \u003chttps://niklasrosenstein.github.io/slap/\u003e\n\nCheck out the [Getting started](https://niklasrosenstein.github.io/slap/getting-started/) guide.\n\n## Feature Matrix\n\n  [uv]: https://github.com/astral-sh/uv\n\n| Feature | Poetry | Documentation |\n| ------- | ------ | ------------- |\n| Manage structured changelog entries | ❌ | [slap changelog](https://niklasrosenstein.github.io/slap/commands/changelog/) |\n| Show project details | ❌ | [slap info](https://niklasrosenstein.github.io/slap/commands/info/) |\n| Build and publish to PyPI using Twine | ✅ (single project only) | [slap publish](https://niklasrosenstein.github.io/slap/commands/publish/) |\n| Create a new release (bump version numbersr)| ❌ (sub-par support) | [slap release](https://niklasrosenstein.github.io/slap/commands/release/) |\n| Run a command configured in `pyproject.toml` | ❌ | [slap run](https://niklasrosenstein.github.io/slap/commands/run/) |\n| Run tests configured in `pyproject.toml` | ❌ | [slap test](https://niklasrosenstein.github.io/slap/commands/test/) |\n| Manage Python virtualenv's | ✅ (but out-of-worktree) | [slap venv](https://niklasrosenstein.github.io/slap/commands/venv/) |\n| Generate a dependencies report | ❌ | [slap report dependencies](https://niklasrosenstein.github.io/slap/commands/report/) |\n| Project dependencies lock file | ✅ | ❌ |\n\n| Feature / Build backend | Flit  | Poetry  | Setuptools  | Documentation |\n| ----------------------- | ----- | ------- | ----------- | --------- |\n| Add dependency | ✅ | ✅ | ❌ | [slap add](https://niklasrosenstein.github.io/slap/commands/add/) |\n| Sanity check project configuration | | ✅ | | [slap check](https://niklasrosenstein.github.io/slap/commands/check/) |\n| Bootstrap project files | | ✅ | | [slap init](https://niklasrosenstein.github.io/slap/commands/init/) |\n| Install projects using Pip or [uv] | ✅ | ✅ | ✅ | [slap install](https://niklasrosenstein.github.io/slap/commands/install/) |\n| Symlink projects (editable installs) | ✅ | ✅ | ✅ | [slap link](https://niklasrosenstein.github.io/slap/commands/link/) |\n| Bump interdependencies in mono-repository | ✅ (not tested regularly) | ✅ | ✅ (partial) | [slap release](https://niklasrosenstein.github.io/slap/commands/release/) |\n\n\u003e __Legend__: ✅ explicitly supported, ❌ explicitly not supported, (blank) not relevant or currently not supported\n\n## Issues / Suggestions / Contributions\n\n  [GitHub Issues]: https://github.com/NiklasRosenstein/slap/issues\n  [GitHub Discussions]: https://github.com/NiklasRosenstein/slap/discussions\n  [GitHub Repository]: https://github.com/NiklasRosenstein/slap\n\nSlap is currently very opinionated by the fact that I built it as my personal workflow tool, but I welcome\nsuggestions and contributions, and I am hopeful it will be useful to a wider audience than myself.\n\nPlease report any issues you encounter via [GitHub Issues][]. Feel free to use the [GitHub Discussions][] forum\nto ask questions or make suggestions on new features (e.g. if you would like a new build backend to be supported?).\nLastly, feel free to submit pull requests to the [GitHub Repository][].\n\n## FAQ\n\n### Why \"Slap\"?\n\nFinding a good, catchy name that also types easily in the terminal and is not already widely used isn't easy, ok?\n\n### What makes this different to the Poetry CLI?\n\nSome people might find this similar to tools like Poetry, and while there is some overlap in functionality, Slap is\n**not a build backend** and is more targeted towards library development. In fact, most of my projects use Poetry as\nthe build backend but I never even once interact with the Poetry CLI throughout the lifetime of the project.\n\nThe most notable differences to Poetry are\n\n* Supports mono-repositories (i.e. multiple related Python projects in the same repository), to the extent that it\n  bumps version numbers of project inter-dependencies and installs your projects in topological order\n* Supports development installs independent of the build backend (yes; this means you can install Poetry packages\n  in editable mode even though the Poetry backend right now does not support editable installs)\n* Slap's version bump command (`slap release`) updates the version not just in your `pyproject.toml` but also the\n  `__version__` in your source code as well as in related projects (see mono-repositories above) and any additional\n  references you can configure via Regex patterns\n* Does not automagically create a virtual environment for you when instal your project(s); instead, it errors when\n  you try to install into a non-virtual Python environment and gives you an easy-to-use tool to create and activate\n  virtual environments (and allowing multiple environments per project as well as global environments)\n* Uses Pip to install your project(s), unlike Poetry which comes with its own dependency resolver and package\n  installer (which I personally have been having a lot of issues with in the past).\n* Does not have a concept of lock files\n\n### How can I use the shiny new `uv` installer with Slap?\n\nYou can configure Slap to use `uv` to create virtual environments:\n\n    $ slap config --venv-type uv\n\nWhen Slap detects a virtual environment that was created with `uv` (note: actually, create with `uv` by Slap itself),\nit will use `uv` to install packages into the virtual environment. Alternatively, you can pass the `--installer uv`\noption to `slap install`.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fniklasrosenstein%2Fslap","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fniklasrosenstein%2Fslap","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fniklasrosenstein%2Fslap/lists"}