# Hatch 1.0.0 is available

**URL:** <https://discuss.python.org/t/hatch-1-0-0-is-available/15359>\
**Category:** Packaging\
**Created:** [April 28, 2022, 5:24pm UTC](https://discuss.python.org/t/hatch-1-0-0-is-available/15359 "2022-04-28T17:24:42Z")\
**Posts on this page:** 18\
**Page:** 1

<div class="post-metadata">

**Author:** ![ofek](https://sea2.discourse-cdn.com/flex002/user_avatar/discuss.python.org/ofek/32/1033_2.png) [@ofek](https://discuss.python.org/u/ofek)\
**Post date:** [April 28, 2022, 5:24pm UTC](https://discuss.python.org/t/hatch-1-0-0-is-available/15359/1 "2022-04-28T17:24:42Z")

</div>

Hello, I just wanted to announce that my multi-year rewrite is over and [Hatch](https://github.com/ofek/hatch) is now ready to use!

There were 3 main reasons I rewrote the project from scratch:

1. Timing - I’m a stickler for standards and 5 years ago there wasn’t much that existed or things were experimental. Now we have well thought out PEPs 517/518, 621/631, 639, 643, 660, etc. and implementing those will not lead to extra work later on since everything is mostly finalized.
2. Scope - I kept getting feature requests for actual features and due to my mistake of making things too opinionated, which would have caused burn out if I didn’t halt development.
3. Environments - I’ve always wanted to run things in not just virtual environments but in arbitrary environments, and have a way to statically defined matrices without using ini files.

So now:

1. The build backend Hatchling was created and implements all the relevant packaging standards.
2. All functionality is plugin-based, with defaults based on community standards, so users can extend as desired like getting the version from Git or building things other than wheels and sdists.
3. There’s already [a plugin](https://github.com/ofek/hatch-containers) for running things within Docker and much to my surprise TOML turned out to be a fantastic format for expressing [environment configuration](https://ofek.dev/hatch/latest/config/environment/#matrix).

I consider the project to be mostly feature-complete (due to the plugin system) except for the following things that I couldn’t do without user input:

- Lock file support, though it is currently [blocked](https://ofek.dev/hatch/latest/meta/faq/#libraries-vs-applications)
- Ability to download/install/manage Python versions on all platforms that virtual environments could then use (my old idea was to use/wrap Miniconda but they added [a warning](https://github.com/conda/conda/issues/8424) that cannot be silenced so we can’t)
- Ability to parallelize command execution in multiple environments, I want it to be pretty and have an interactive option to expand to full size output based on keypresses so you can check on the progress of any at will
- A `dep show graph` command

I also plan on finding a way to ship binaries for each platform.

Anyway, I’d appreciate any feedback 🙂

---

<div class="post-metadata">

**Author:** ![ofek](https://sea2.discourse-cdn.com/flex002/user_avatar/discuss.python.org/ofek/32/1033_2.png) [@ofek](https://discuss.python.org/u/ofek)\
**Post date:** [April 28, 2022, 10:14pm UTC](https://discuss.python.org/t/hatch-1-0-0-is-available/15359/2 "2022-04-28T22:14:47Z")

</div>

Regarding [Mailman 3 Vote on adopting the hatch project under pypa - PyPA-Committers - python.org](https://mail.python.org/archives/list/pypa-committers@python.org/thread/J2BL5XTTOCXUCELUE7L5P5HHJ7NXZGZ5/) I fully support the proposal and think this will be a great thing for the community at large.

---

<div class="post-metadata">

**Author:** ![groodt](https://sea2.discourse-cdn.com/flex002/user_avatar/discuss.python.org/groodt/32/3248_2.png) [@groodt](https://discuss.python.org/u/groodt)\
**Post date:** [April 28, 2022, 10:23pm UTC](https://discuss.python.org/t/hatch-1-0-0-is-available/15359/3 "2022-04-28T22:23:07Z")

</div>

I think this looks fantastic! It clearly has had a lot of work and attention! Thank you!

It’s wonderful to see how many of the modern standards can integrate to create a smooth development experience. I think this is how many experienced with python implicitly understand how things can work together in our own projects like this, but for beginners, it can be incredibly frustrating getting lost in the weeds of PEPs and never knowing which standard applies in which circumstances or what is deprecated or not.

I particularly like that it can be used for _both_ application and library development. The plugin mechanism seems quite extensive as well for the situations where you do need to deviate from the basics / conventions.

Now for the slightly negative opinion. Unfortunately, I feel that many day-to-day python programmers working in industry are crying out for a lock-file experience. See the success of poetry, PDM, pip-tools (and probably others). I think Hatch will struggle to gain much adoption without that because it’s the most prominent missing piece. I see we are both waiting anxiously for [metadata-only resolve with `pip download --dry-run --report`! by cosmicexplorer · Pull Request #10748 · pypa/pip · GitHub](https://github.com/pypa/pip/pull/10748) If that looks too far away, is there any thought in using something light-weight like pip-tools in the short-term to give you a pretty solid lockfile? In next release of pip it will give access to the internal resolver of pip, so it’s as close to a standard as one could reasonably achieve at the moment.

---

<div class="post-metadata">

**Author:** ![ofek](https://sea2.discourse-cdn.com/flex002/user_avatar/discuss.python.org/ofek/32/1033_2.png) [@ofek](https://discuss.python.org/u/ofek)\
**Post date:** [April 28, 2022, 10:30pm UTC](https://discuss.python.org/t/hatch-1-0-0-is-available/15359/4 "2022-04-28T22:30:30Z")

</div>

Thanks for the kind words!

> [@groodt](#):
>
> If that looks too far away, is there any thought in using something light-weight like pip-tools in the short-term to give you a pretty solid lockfile?

I’m not _too_ against the idea, but I’d much prefer opening a new PR and rebasing + spearheading the effort to get it merged.

---

<div class="post-metadata">

**Author:** ![groodt](https://sea2.discourse-cdn.com/flex002/user_avatar/discuss.python.org/groodt/32/3248_2.png) [@groodt](https://discuss.python.org/u/groodt)\
**Post date:** [April 28, 2022, 10:37pm UTC](https://discuss.python.org/t/hatch-1-0-0-is-available/15359/5 "2022-04-28T22:37:58Z")

</div>

> [@ofek](#):
>
> I’m not _too_ against the idea, but I’d much prefer opening a new PR and rebasing + spearheading the effort to get it merged.

Agree. I think that’s the best place to start as well. I hope that can get some traction.

---

<div class="post-metadata">

**Author:** ![gunungpw](https://sea2.discourse-cdn.com/flex002/user_avatar/discuss.python.org/gunungpw/32/5832_2.png) [@gunungpw](https://discuss.python.org/u/gunungpw)\
**Post date:** [April 29, 2022, 12:21am UTC](https://discuss.python.org/t/hatch-1-0-0-is-available/15359/6 "2022-04-29T00:21:24Z")

</div>

> [@ofek](#):
>
> Ability to download/install/manage Python versions on all platforms that virtual environments could then use (my old idea was to use/wrap Miniconda but they added [a warning](https://github.com/conda/conda/issues/8424) that cannot be silenced so we can’t)

Hello, congratulations for 1.0 milestone. Install multi version is always pain in Linux and windows because you need to install other tools like `pyenv`. How hatch support install more than one python version on linux and windows? Is the interface like `pyenv`?

---

<div class="post-metadata">

**Author:** ![ofek](https://sea2.discourse-cdn.com/flex002/user_avatar/discuss.python.org/ofek/32/1033_2.png) [@ofek](https://discuss.python.org/u/ofek)\
**Post date:** [April 29, 2022, 12:25am UTC](https://discuss.python.org/t/hatch-1-0-0-is-available/15359/7 "2022-04-29T00:25:03Z")

</div>

No idea yet, which is why I’d like input 🙂

In my mind though it would only add them to PATH to be used by virtualenv or other tools

---

<div class="post-metadata">

**Author:** ![h-vetinari](https://sea2.discourse-cdn.com/flex002/user_avatar/discuss.python.org/h-vetinari/32/1220_2.png) [@h-vetinari](https://discuss.python.org/u/h-vetinari)\
**Post date:** [April 29, 2022, 12:25am UTC](https://discuss.python.org/t/hatch-1-0-0-is-available/15359/8 "2022-04-29T00:25:09Z")

</div>

Looks really great, beautiful docs too! Congratulations! 🥳

Just from looking at the plugin interface, it looks like has all the necessary knobs to support conda environments as well, which is awesome!

---

<div class="post-metadata">

**Author:** ![gunungpw](https://sea2.discourse-cdn.com/flex002/user_avatar/discuss.python.org/gunungpw/32/5832_2.png) [@gunungpw](https://discuss.python.org/u/gunungpw)\
**Post date:** [April 29, 2022, 1:26am UTC](https://discuss.python.org/t/hatch-1-0-0-is-available/15359/9 "2022-04-29T01:26:27Z")

</div>

> [@ofek](#):
>
> No idea yet, which is why I’d like input  
> In my mind though it would only add them to PATH to be used by virtualenv or other tools

Agree, for a beginner in programming like me, `pyenv` is good enough but too many options. In Linux if python built from source tools need to inform what package needs to be installed and in windows maybe just use official installer from [python.org](http://python.org). Also, `pyenv` don’t show progress bar when installing python, maybe using `rich` progress bar 😉 will give a good visual.

```auto
❯❯❯ pyenv install 3.8.13
Downloading Python-3.8.13.tar.xz...
-> https://www.python.org/ftp/python/3.8.13/Python-3.8.13.tar.xz
Installing Python-3.8.13...

```

> [@ofek](#):
>
> I also plan on finding a way to ship binaries for each platform.

Maybe [Nuitka](https://nuitka.net/) Python Compiler can help with this, the maintainer is pretty active

Thank you for the project ❤

---

<div class="post-metadata">

**Author:** ![njs](https://sea2.discourse-cdn.com/flex002/user_avatar/discuss.python.org/njs/32/204_2.png) [@njs](https://discuss.python.org/u/njs)\
**Post date:** [April 29, 2022, 2:55am UTC](https://discuss.python.org/t/hatch-1-0-0-is-available/15359/10 "2022-04-29T02:55:56Z")

</div>

> [@ofek](#):
>
> No idea yet, which is why I’d like input 🙂

Have you seen this?

> <https://github.com/njsmith/posy/blob/main/pybi/README.md>

It needs some work to push it over the finish line – I know at least Brett and I are both interested in seeing it happen, but we’re both pretty distracted. But perhaps you’d like to help? And in any case, you’re welcome to use the PyPI-compatible repo at [https://pybi.vorpus.org/](https://pybi.vorpus.org/) to pull down prebuilt Python binaries.

---

<div class="post-metadata">

**Author:** ![ofek](https://sea2.discourse-cdn.com/flex002/user_avatar/discuss.python.org/ofek/32/1033_2.png) [@ofek](https://discuss.python.org/u/ofek)\
**Post date:** [April 29, 2022, 3:39am UTC](https://discuss.python.org/t/hatch-1-0-0-is-available/15359/11 "2022-04-29T03:39:55Z")

</div>

I hadn’t seen that, thanks! I was actually looking for prebuilt binaries and ended up finding what GitHub Actions uses:

- CPython - [python-versions/versions-manifest.json at main · actions/python-versions · GitHub](https://github.com/actions/python-versions/blob/main/versions-manifest.json)
- PyPy - [https://downloads.python.org/pypy/versions.json](https://downloads.python.org/pypy/versions.json)

---

<div class="post-metadata">

**Author:** ![steve.dower](https://sea2.discourse-cdn.com/flex002/user_avatar/discuss.python.org/steve.dower/32/56_2.png) [@steve.dower](https://discuss.python.org/u/steve.dower)\
**Post date:** [April 29, 2022, 10:01am UTC](https://discuss.python.org/t/hatch-1-0-0-is-available/15359/12 "2022-04-29T10:01:24Z")

</div>

> [@ofek](#):
>
> I was actually looking for prebuilt binaries and ended up finding what GitHub Actions uses:

Just bear in mind (unless they’ve changed something) that these are built specifically for their own images, and may not transfer to other OS versions or layouts (and I believe the Windows packages just run the regular installer and assume Admin privileges).

Nathaniel’s efforts are much more likely to be what you want.

---

<div class="post-metadata">

**Author:** ![brettcannon](https://sea2.discourse-cdn.com/flex002/user_avatar/discuss.python.org/brettcannon/32/34895_2.png) [@brettcannon](https://discuss.python.org/u/brettcannon)\
**Post date:** [April 29, 2022, 6:12pm UTC](https://discuss.python.org/t/hatch-1-0-0-is-available/15359/13 "2022-04-29T18:12:53Z")

</div>

> [@njs](#):
>
> I know at least Brett and I are both interested in seeing it happen, but we’re both pretty distracted

I’ve dragged @barry into this as well at work (but that’s all the progress as of late 😅), but that’s as far as I will go hear as I don’t want to drag this topic into a tangent on building relocatable CPython binaries.

---

<div class="post-metadata">

**Author:** ![henryiii](https://sea2.discourse-cdn.com/flex002/user_avatar/discuss.python.org/henryiii/32/3493_2.png) [@henryiii](https://discuss.python.org/u/henryiii)\
**Post date:** [May 6, 2022, 9:17pm UTC](https://discuss.python.org/t/hatch-1-0-0-is-available/15359/14 "2022-05-06T21:17:35Z")

</div>

FYI, @jjhelmus put together [give-me-python · PyPI](https://pypi.org/project/give-me-python/) for a PyCon lightning talk (in a day) after seeing my “think outside the box” slide at PyCon. It’s a manylinux compatible Python wheel. (as in, it’s Python as a wheel). Don’t known if expanding this would be a viable way to provide alternate Python implementations for hatch/nox/tox/etc, but interesting concept.

---

<div class="post-metadata">

**Author:** ![brettcannon](https://sea2.discourse-cdn.com/flex002/user_avatar/discuss.python.org/brettcannon/32/34895_2.png) [@brettcannon](https://discuss.python.org/u/brettcannon)\
**Post date:** [May 6, 2022, 11:34pm UTC](https://discuss.python.org/t/hatch-1-0-0-is-available/15359/15 "2022-05-06T23:34:03Z")

</div>

> [@henryiii](#):
>
> It’s a manylinux compatible Python wheel. (as in, it’s Python as a wheel).

@njs has a repo that does something similar (not sure if he’s sharing that repo around yet).

---

<div class="post-metadata">

**Author:** ![njs](https://sea2.discourse-cdn.com/flex002/user_avatar/discuss.python.org/njs/32/204_2.png) [@njs](https://discuss.python.org/u/njs)\
**Post date:** [May 7, 2022, 3:25am UTC](https://discuss.python.org/t/hatch-1-0-0-is-available/15359/16 "2022-05-07T03:25:41Z")

</div>

I just linked it a few messages above 🙂

---

<div class="post-metadata">

**Author:** ![ofek](https://sea2.discourse-cdn.com/flex002/user_avatar/discuss.python.org/ofek/32/1033_2.png) [@ofek](https://discuss.python.org/u/ofek)\
**Post date:** [May 8, 2022, 9:48pm UTC](https://discuss.python.org/t/hatch-1-0-0-is-available/15359/17 "2022-05-08T21:48:50Z")

</div>

The transfer is complete [GitHub - pypa/hatch: Modern, extensible Python project management](https://github.com/pypa/hatch)

---

<div class="post-metadata">

**Author:** ![Bullseye5995](https://sea2.discourse-cdn.com/flex002/user_avatar/discuss.python.org/bullseye5995/32/23366_2.png) [@Bullseye5995](https://discuss.python.org/u/Bullseye5995)\
**Post date:** [May 20, 2022, 1:30pm UTC](https://discuss.python.org/t/hatch-1-0-0-is-available/15359/18 "2022-05-20T13:30:17Z")

</div>

It’s very possible to use PDM to manage (PEP 621/631) dependencies in a lockfile, while using Hatch as the build backend.
