-
Anybody knows who submitted the "From Script to PyPI: Automating the Python Package Lifecycle" talk to EuroPython 2026? I'm curious to know if they'll mention my Griffe package regarding "breaking changes" 🙂
-
Anybody knows who submitted the "How to llms.txt on Python projects" to EuroPython 2026? I'm curious to know if they'll mention my mkdocs-llmstxt plugin 🙂
-
When installing dependencies, formatting code, linting it, type-checking it, and building docs with #Poetry or #PDM, #Black, #Flake8, #Mypy and #MkDocs would previously take from 2min to several more, it now takes less than 15 seconds for the whole thing, thanks to #uv, #Ruff, #ty and #Zensical.
This is for 5 #Python versions (3.10 to 3.15).
The DX got much better 🥰
-
Griffe is now able to compute source links for objects, pointing to GitHub or other Git services online. See the changelog for v1.14: https://mkdocstrings.github.io/griffe/changelog/#1140-2025-09-05.
-
My three #Copier templates reaching the same number of stars:
-
Kinda crazy to see #Griffe mentioned as inspiration for the design of #OpenAI's Agents SDK 🤯 Cool to see the SDK's API reference being documented with #mkdoctrings, too 🥰
-
Also, use #Cappa 😛 Cappa leaves your functions/dataclasses (commands) intact.
-
@willmcgugan do you test #Textual on #coolretroterm? 😄
-
How do you generate JSON schemas of your dataclasses' **inputs**? Any third-party library (something else than stdlib's dataclasses) allowing one to do that?
For example, input type is `int | str`, but final/output type is always `int` (coerced). I want to document the input type, not the output type.
-
Hey @blakeNaccarato, do you happen to have an example of GitHub workflow that creates a copier update PR in the current project periodically?
-
Rewriting an argparse-based CLI with #Cappa. It's much cleaner:
- less verbose
- better contained (single module instead of using submodules for subcommands)
- better typed (dataclasses!)
- as reusable, or more reusable in other CLIs (classes instead of functions that modify an argparse parser)
- much easier to use programmatically (no need to call `main` or build an `argparse.Namespace` manually)
- better documented
- better output (rich!) -
Should new warnings (logs or actual warnings) emitted given the same previous contents (user code/docs didn't change) be considered a breaking change?
-
We're starting to have a number of #Griffe extensions 🤩 They're all listed here: https://mkdocstrings.github.io/griffe/extensions/official/
-
I added a few pages to #Griffe's docs: alternative projects, downstream projects, and built-in/official/third-party extensions.
Very cool projects mentioned in there! #Docspec, #pdoc, #papyri, #quartodoc, etc. And I discovered a few Griffe extensions in the process, it's awesome 🤩
- https://mkdocstrings.github.io/griffe/alternatives/
- https://mkdocstrings.github.io/griffe/downstream-projects/
- https://mkdocstrings.github.io/griffe/extensions/built-in/ -
@dancardin I'm now recommending #Cappa in my docs: https://mkdocstrings.github.io/griffe/guide/users/recommendations/public-apis/#the-cli-is-api-too (just a quick mention at the end of the section) 😄
-
I'm completely rewriting #Griffe's docs. Griffe is all about public APIs, so its API docs should be exemplary.
These will be the best docs I've written until now. I've taken inspiration from projects with great documentation: #Hatch, #MaterialforMkDocs and #Textual notably 🙂
-
Hmmm, how come #uv manages to install #cffi==1.16.0 in GitHub Actions on ubuntu-latest and #Python 3.13.0b1 while it fails locally on (Arch)Linux and Python 3.13.0b1 🤔
There is no wheel of 1.16.0 for CPython 3.13 🤔 And sources fail to compile (not compatible with 3.13). I'm confused 🤔 🤔 🤔
https://github.com/pawamoy/duty/actions/runs/9147683333/job/25149389495
-
I just switched #mkdocstrings to my #Copier #uv template. It now uses uv instead of #PDM.
Since dependency resolution and installation is much faster, I don't even bother grouping dependencies by use (docs, tests, etc.), and install everything in each CI job.
Since it's faster, I've also removed the limit on the maximum number of parallel jobs (previously it was set to 4).
Result: CI runs 4x faster (around 2min instead of 8min). Neat 🙂
-
Our #MkDocs plugin, #autorefs, just gained a new feature in v1.0: Markdown anchors and aliases.
Add anchors anywhere in a document, and cross-reference it with the usual syntax:
```
[](){#anchor-id}[Cross-ref to the anchor][anchor-id]
```Right above a heading, such an anchor serves as an alias to the heading!
```
[](){#heading-alias}
## Some heading[Cross-ref to heading][heading-alias]
```See the docs: https://mkdocstrings.github.io/autorefs/#markdown-anchors
-
Damn, my #pkgx GitHub issue is on the orange front-page :rofl: Maybe one day I'll make it with one of my own projects instead 😂
-
#Cappa is awesome. @dancardin does a fantastic job on this project.
Command descriptions can be written in Markdown and are rendered with #Rich, so code blocks are syntax highlighted, and you can even add links. Amazing CLI experience.
Look at this beauty:
-
What a rabbit hole. Even though #Cappa uses #Rich internally, forcing colors with `FORCE_COLOR=1` did not work.
After a super painful investigation, turns out my #Python code imports a module from #Copier which uses `colorama.init()`.
Changing that to `colorama.just_fix_windows_console()` fixed it, but the output still had an extra reset sequence at the end.
Turns out Copier imports #Plumbum colors module, which registers a function to reset styles at exit.
Don't run things at import time!
-
I started sponsoring @dancardin (@[email protected]?) for their great work on #Cappa, a super elegant declarative CLI argument parser for Python: https://github.com/DanCardin/cappa. It makes all the right choices, allowing users to build good, reusable CLIs for their libraries, with #Rich support!
-
@benfulton @leahawasser I think most Python tools that measure cyclomatic complexity are based on or use McCabe, from @nedbat (https://pypi.org/project/mccabe/). #PyLint has it built-in, #Flake8 has plugins (McCabe is one), #Ruff probably has it built-in too.
-
#Cappa puts the finger on what I dislike about #Click: https://cappa.readthedocs.io/en/latest/comparison.html#why-not-click. I'll try Cappa right now in a new project.
I was also strongly tempted by #arguably (https://github.com/treykeown/arguably), but Cappa's use of `Annotated` instead of docstrings makes it super attractive given my recent work on supporting PEP 727 (from @tiangolo) with a #Griffe extension.
-
I created a small #Python #Markdown extension that parses `pycon` syntax code blocks *without indentation and without fences*, and renders them using #pymdownx's Highlight extension 🙂
It will be useful in Python docstrings, to add examples anywhere just how #doctest expects them!
It's immediately available to my sponsors and has been added to the GraviFridge goal (https://pawamoy.github.io/insiders/#1000-gravifridge-user-manual) 😊
-
Cross-posting from Twitter 😅
I'm working on adding a #codespell backend to my mkdocs-spellcheck plugin: