vibetuner 2.8.0__tar.gz → 2.17.8__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of vibetuner might be problematic. Click here for more details.

Files changed (87) hide show
  1. vibetuner-2.17.8/PKG-INFO +240 -0
  2. vibetuner-2.17.8/README.md +172 -0
  3. vibetuner-2.17.8/pyproject.toml +85 -0
  4. {vibetuner-2.8.0 → vibetuner-2.17.8}/src/vibetuner/cli/__init__.py +13 -2
  5. {vibetuner-2.8.0 → vibetuner-2.17.8}/src/vibetuner/cli/run.py +0 -1
  6. vibetuner-2.17.8/src/vibetuner/cli/scaffold.py +187 -0
  7. {vibetuner-2.8.0 → vibetuner-2.17.8}/src/vibetuner/config.py +20 -9
  8. {vibetuner-2.8.0 → vibetuner-2.17.8}/src/vibetuner/frontend/__init__.py +5 -0
  9. {vibetuner-2.8.0 → vibetuner-2.17.8}/src/vibetuner/frontend/routes/auth.py +19 -13
  10. {vibetuner-2.8.0 → vibetuner-2.17.8}/src/vibetuner/mongo.py +3 -3
  11. {vibetuner-2.8.0 → vibetuner-2.17.8}/src/vibetuner/tasks/AGENTS.md +1 -1
  12. {vibetuner-2.8.0 → vibetuner-2.17.8}/src/vibetuner/tasks/CLAUDE.md +1 -1
  13. {vibetuner-2.8.0 → vibetuner-2.17.8}/src/vibetuner/tasks/worker.py +1 -1
  14. {vibetuner-2.8.0 → vibetuner-2.17.8}/src/vibetuner/templates/frontend/debug/users.html.jinja +2 -2
  15. {vibetuner-2.8.0 → vibetuner-2.17.8}/src/vibetuner/templates/frontend/login.html.jinja +11 -13
  16. {vibetuner-2.8.0 → vibetuner-2.17.8}/src/vibetuner/versioning.py +1 -1
  17. vibetuner-2.8.0/PKG-INFO +0 -48
  18. vibetuner-2.8.0/pyproject.toml +0 -59
  19. {vibetuner-2.8.0 → vibetuner-2.17.8}/src/vibetuner/__init__.py +0 -0
  20. {vibetuner-2.8.0 → vibetuner-2.17.8}/src/vibetuner/__main__.py +0 -0
  21. {vibetuner-2.8.0 → vibetuner-2.17.8}/src/vibetuner/context.py +0 -0
  22. {vibetuner-2.8.0 → vibetuner-2.17.8}/src/vibetuner/frontend/AGENTS.md +0 -0
  23. {vibetuner-2.8.0 → vibetuner-2.17.8}/src/vibetuner/frontend/CLAUDE.md +0 -0
  24. {vibetuner-2.8.0 → vibetuner-2.17.8}/src/vibetuner/frontend/context.py +0 -0
  25. {vibetuner-2.8.0 → vibetuner-2.17.8}/src/vibetuner/frontend/deps.py +0 -0
  26. {vibetuner-2.8.0 → vibetuner-2.17.8}/src/vibetuner/frontend/email.py +0 -0
  27. {vibetuner-2.8.0 → vibetuner-2.17.8}/src/vibetuner/frontend/hotreload.py +0 -0
  28. {vibetuner-2.8.0 → vibetuner-2.17.8}/src/vibetuner/frontend/lifespan.py +0 -0
  29. {vibetuner-2.8.0 → vibetuner-2.17.8}/src/vibetuner/frontend/middleware.py +0 -0
  30. {vibetuner-2.8.0 → vibetuner-2.17.8}/src/vibetuner/frontend/oauth.py +0 -0
  31. {vibetuner-2.8.0 → vibetuner-2.17.8}/src/vibetuner/frontend/routes/__init__.py +0 -0
  32. {vibetuner-2.8.0 → vibetuner-2.17.8}/src/vibetuner/frontend/routes/debug.py +0 -0
  33. {vibetuner-2.8.0 → vibetuner-2.17.8}/src/vibetuner/frontend/routes/health.py +0 -0
  34. {vibetuner-2.8.0 → vibetuner-2.17.8}/src/vibetuner/frontend/routes/language.py +0 -0
  35. {vibetuner-2.8.0 → vibetuner-2.17.8}/src/vibetuner/frontend/routes/meta.py +0 -0
  36. {vibetuner-2.8.0 → vibetuner-2.17.8}/src/vibetuner/frontend/routes/user.py +0 -0
  37. {vibetuner-2.8.0 → vibetuner-2.17.8}/src/vibetuner/frontend/templates.py +0 -0
  38. {vibetuner-2.8.0 → vibetuner-2.17.8}/src/vibetuner/logging.py +0 -0
  39. {vibetuner-2.8.0 → vibetuner-2.17.8}/src/vibetuner/models/AGENTS.md +0 -0
  40. {vibetuner-2.8.0 → vibetuner-2.17.8}/src/vibetuner/models/CLAUDE.md +0 -0
  41. {vibetuner-2.8.0 → vibetuner-2.17.8}/src/vibetuner/models/__init__.py +0 -0
  42. {vibetuner-2.8.0 → vibetuner-2.17.8}/src/vibetuner/models/blob.py +0 -0
  43. {vibetuner-2.8.0 → vibetuner-2.17.8}/src/vibetuner/models/email_verification.py +0 -0
  44. {vibetuner-2.8.0 → vibetuner-2.17.8}/src/vibetuner/models/mixins.py +0 -0
  45. {vibetuner-2.8.0 → vibetuner-2.17.8}/src/vibetuner/models/oauth.py +0 -0
  46. {vibetuner-2.8.0 → vibetuner-2.17.8}/src/vibetuner/models/registry.py +0 -0
  47. {vibetuner-2.8.0 → vibetuner-2.17.8}/src/vibetuner/models/types.py +0 -0
  48. {vibetuner-2.8.0 → vibetuner-2.17.8}/src/vibetuner/models/user.py +0 -0
  49. {vibetuner-2.8.0 → vibetuner-2.17.8}/src/vibetuner/paths.py +0 -0
  50. {vibetuner-2.8.0 → vibetuner-2.17.8}/src/vibetuner/services/AGENTS.md +0 -0
  51. {vibetuner-2.8.0 → vibetuner-2.17.8}/src/vibetuner/services/CLAUDE.md +0 -0
  52. {vibetuner-2.8.0 → vibetuner-2.17.8}/src/vibetuner/services/__init__.py +0 -0
  53. {vibetuner-2.8.0 → vibetuner-2.17.8}/src/vibetuner/services/blob.py +0 -0
  54. {vibetuner-2.8.0 → vibetuner-2.17.8}/src/vibetuner/services/email.py +0 -0
  55. {vibetuner-2.8.0 → vibetuner-2.17.8}/src/vibetuner/tasks/__init__.py +0 -0
  56. {vibetuner-2.8.0 → vibetuner-2.17.8}/src/vibetuner/tasks/context.py +0 -0
  57. {vibetuner-2.8.0 → vibetuner-2.17.8}/src/vibetuner/templates/email/AGENTS.md +0 -0
  58. {vibetuner-2.8.0 → vibetuner-2.17.8}/src/vibetuner/templates/email/CLAUDE.md +0 -0
  59. {vibetuner-2.8.0/src/vibetuner/templates/email/default → vibetuner-2.17.8/src/vibetuner/templates/email}/magic_link.html.jinja +0 -0
  60. {vibetuner-2.8.0/src/vibetuner/templates/email/default → vibetuner-2.17.8/src/vibetuner/templates/email}/magic_link.txt.jinja +0 -0
  61. {vibetuner-2.8.0 → vibetuner-2.17.8}/src/vibetuner/templates/frontend/AGENTS.md +0 -0
  62. {vibetuner-2.8.0 → vibetuner-2.17.8}/src/vibetuner/templates/frontend/CLAUDE.md +0 -0
  63. {vibetuner-2.8.0 → vibetuner-2.17.8}/src/vibetuner/templates/frontend/base/favicons.html.jinja +0 -0
  64. {vibetuner-2.8.0 → vibetuner-2.17.8}/src/vibetuner/templates/frontend/base/footer.html.jinja +0 -0
  65. {vibetuner-2.8.0 → vibetuner-2.17.8}/src/vibetuner/templates/frontend/base/header.html.jinja +0 -0
  66. {vibetuner-2.8.0 → vibetuner-2.17.8}/src/vibetuner/templates/frontend/base/opengraph.html.jinja +0 -0
  67. {vibetuner-2.8.0 → vibetuner-2.17.8}/src/vibetuner/templates/frontend/base/skeleton.html.jinja +0 -0
  68. {vibetuner-2.8.0 → vibetuner-2.17.8}/src/vibetuner/templates/frontend/debug/collections.html.jinja +0 -0
  69. {vibetuner-2.8.0 → vibetuner-2.17.8}/src/vibetuner/templates/frontend/debug/components/debug_nav.html.jinja +0 -0
  70. {vibetuner-2.8.0 → vibetuner-2.17.8}/src/vibetuner/templates/frontend/debug/index.html.jinja +0 -0
  71. {vibetuner-2.8.0 → vibetuner-2.17.8}/src/vibetuner/templates/frontend/debug/info.html.jinja +0 -0
  72. {vibetuner-2.8.0 → vibetuner-2.17.8}/src/vibetuner/templates/frontend/debug/version.html.jinja +0 -0
  73. {vibetuner-2.8.0 → vibetuner-2.17.8}/src/vibetuner/templates/frontend/email/magic_link.txt.jinja +0 -0
  74. {vibetuner-2.8.0 → vibetuner-2.17.8}/src/vibetuner/templates/frontend/email_sent.html.jinja +0 -0
  75. {vibetuner-2.8.0 → vibetuner-2.17.8}/src/vibetuner/templates/frontend/index.html.jinja +0 -0
  76. {vibetuner-2.8.0 → vibetuner-2.17.8}/src/vibetuner/templates/frontend/lang/select.html.jinja +0 -0
  77. {vibetuner-2.8.0 → vibetuner-2.17.8}/src/vibetuner/templates/frontend/meta/browserconfig.xml.jinja +0 -0
  78. {vibetuner-2.8.0 → vibetuner-2.17.8}/src/vibetuner/templates/frontend/meta/robots.txt.jinja +0 -0
  79. {vibetuner-2.8.0 → vibetuner-2.17.8}/src/vibetuner/templates/frontend/meta/site.webmanifest.jinja +0 -0
  80. {vibetuner-2.8.0 → vibetuner-2.17.8}/src/vibetuner/templates/frontend/meta/sitemap.xml.jinja +0 -0
  81. {vibetuner-2.8.0 → vibetuner-2.17.8}/src/vibetuner/templates/frontend/user/edit.html.jinja +0 -0
  82. {vibetuner-2.8.0 → vibetuner-2.17.8}/src/vibetuner/templates/frontend/user/profile.html.jinja +0 -0
  83. {vibetuner-2.8.0 → vibetuner-2.17.8}/src/vibetuner/templates/markdown/.placeholder +0 -0
  84. {vibetuner-2.8.0 → vibetuner-2.17.8}/src/vibetuner/templates/markdown/AGENTS.md +0 -0
  85. {vibetuner-2.8.0 → vibetuner-2.17.8}/src/vibetuner/templates/markdown/CLAUDE.md +0 -0
  86. {vibetuner-2.8.0 → vibetuner-2.17.8}/src/vibetuner/templates.py +0 -0
  87. {vibetuner-2.8.0 → vibetuner-2.17.8}/src/vibetuner/time.py +0 -0
@@ -0,0 +1,240 @@
1
+ Metadata-Version: 2.3
2
+ Name: vibetuner
3
+ Version: 2.17.8
4
+ Summary: Core Python framework and blessed dependencies for production-ready FastAPI + MongoDB + HTMX projects
5
+ Keywords: fastapi,mongodb,htmx,web-framework,scaffolding,oauth,background-jobs
6
+ Author: All Tuner Labs, S.L.
7
+ License: MIT
8
+ Classifier: Development Status :: 4 - Beta
9
+ Classifier: Intended Audience :: Developers
10
+ Classifier: License :: OSI Approved :: MIT License
11
+ Classifier: Programming Language :: Python :: 3
12
+ Classifier: Programming Language :: Python :: 3.11
13
+ Classifier: Programming Language :: Python :: 3.12
14
+ Classifier: Programming Language :: Python :: 3.13
15
+ Classifier: Programming Language :: Python :: 3.14
16
+ Classifier: Framework :: FastAPI
17
+ Classifier: Topic :: Internet :: WWW/HTTP :: WSGI :: Application
18
+ Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
19
+ Requires-Dist: aioboto3>=15.5.0
20
+ Requires-Dist: arel>=0.4.0
21
+ Requires-Dist: asyncer>=0.0.10
22
+ Requires-Dist: authlib>=1.6.5
23
+ Requires-Dist: beanie[zstd]>=2.0.0
24
+ Requires-Dist: click>=8.3.0
25
+ Requires-Dist: copier>=9.10.3,<9.10.4
26
+ Requires-Dist: email-validator>=2.3.0
27
+ Requires-Dist: fastapi[standard-no-fastapi-cloud-cli]>=0.121.1
28
+ Requires-Dist: granian[pname]>=2.5.7
29
+ Requires-Dist: httpx[http2]>=0.28.1
30
+ Requires-Dist: itsdangerous>=2.2.0
31
+ Requires-Dist: loguru>=0.7.3
32
+ Requires-Dist: pydantic[email]>=2.12.4
33
+ Requires-Dist: pydantic-extra-types[pycountry]>=2.10.6
34
+ Requires-Dist: pydantic-settings>=2.12.0
35
+ Requires-Dist: pyyaml>=6.0.3
36
+ Requires-Dist: redis[hiredis]>=7.0.1
37
+ Requires-Dist: rich>=14.2.0
38
+ Requires-Dist: sse-starlette>=3.0.3
39
+ Requires-Dist: starlette-babel>=1.0.3
40
+ Requires-Dist: starlette-htmx>=0.1.1
41
+ Requires-Dist: streaq[web]<6.0.0
42
+ Requires-Dist: typer-slim[standard]>=0.20.0
43
+ Requires-Dist: babel>=2.17.0 ; extra == 'dev'
44
+ Requires-Dist: cloudflare>=4.3.1 ; extra == 'dev'
45
+ Requires-Dist: dunamai>=1.25.0 ; extra == 'dev'
46
+ Requires-Dist: gh-bin>=2.83.0 ; extra == 'dev'
47
+ Requires-Dist: granian[pname,reload]>=2.5.7 ; extra == 'dev'
48
+ Requires-Dist: just-bin>=1.43.0 ; extra == 'dev'
49
+ Requires-Dist: pre-commit>=4.4.0 ; extra == 'dev'
50
+ Requires-Dist: pysemver>=0.5.0 ; extra == 'dev'
51
+ Requires-Dist: ruff>=0.14.4 ; extra == 'dev'
52
+ Requires-Dist: rumdl>=0.0.174 ; extra == 'dev'
53
+ Requires-Dist: semver>=3.0.4 ; extra == 'dev'
54
+ Requires-Dist: taplo>=0.9.3 ; extra == 'dev'
55
+ Requires-Dist: ty>=0.0.1a26 ; extra == 'dev'
56
+ Requires-Dist: types-aioboto3[s3,ses]>=15.5.0 ; extra == 'dev'
57
+ Requires-Dist: types-authlib>=1.6.5.20251005 ; extra == 'dev'
58
+ Requires-Dist: types-pyyaml>=6.0.12.20250915 ; extra == 'dev'
59
+ Requires-Dist: uv-bump>=0.3.1 ; extra == 'dev'
60
+ Requires-Python: >=3.11
61
+ Project-URL: Changelog, https://github.com/alltuner/vibetuner/blob/main/CHANGELOG.md
62
+ Project-URL: Documentation, https://vibetuner.alltuner.com/
63
+ Project-URL: Homepage, https://vibetuner.alltuner.com/
64
+ Project-URL: Issues, https://github.com/alltuner/vibetuner/issues
65
+ Project-URL: Repository, https://github.com/alltuner/vibetuner
66
+ Provides-Extra: dev
67
+ Description-Content-Type: text/markdown
68
+
69
+ # vibetuner
70
+
71
+ Core Python framework and blessed dependencies for Vibetuner projects
72
+
73
+ This package provides the complete Python framework and curated dependency set for building modern
74
+ web applications with Vibetuner. It includes everything from FastAPI and MongoDB integration to
75
+ authentication, background jobs, and CLI tools.
76
+
77
+ ## What is Vibetuner?
78
+
79
+ Vibetuner is a production-ready scaffolding tool for FastAPI + MongoDB + HTMX web applications.
80
+ This package (`vibetuner`) is the Python component that provides:
81
+
82
+ - Complete web application framework built on FastAPI
83
+ - MongoDB integration with Beanie ODM
84
+ - OAuth and magic link authentication out of the box
85
+ - Background job processing with Redis + Streaq
86
+ - CLI framework with Typer
87
+ - Email services, blob storage, and more
88
+
89
+ **This package is designed to be used within projects generated by the Vibetuner scaffolding
90
+ tool.** For standalone use, you'll need to set up the project structure manually.
91
+
92
+ ## Installation
93
+
94
+ ```bash
95
+ # In a Vibetuner-generated project (automatic)
96
+ uv sync
97
+
98
+ # Add to an existing project
99
+ uv add vibetuner
100
+
101
+ # With development dependencies
102
+ uv add vibetuner[dev]
103
+ ```
104
+
105
+ ## Quick Start
106
+
107
+ The recommended way to use Vibetuner is via the scaffolding tool:
108
+
109
+ ```bash
110
+ # Create a new project with all the framework code
111
+ uvx vibetuner scaffold new my-project
112
+ cd my-project
113
+ just dev
114
+ ```
115
+
116
+ This will generate a complete project with:
117
+
118
+ - Pre-configured FastAPI application
119
+ - Authentication system (OAuth + magic links)
120
+ - MongoDB models and configuration
121
+ - Frontend templates and asset pipeline
122
+ - Docker setup for development and production
123
+ - CLI commands and background job infrastructure
124
+
125
+ ## What's Included
126
+
127
+ ### Core Framework (`src/vibetuner/`)
128
+
129
+ - **`frontend/`**: FastAPI app, routes, middleware, auth
130
+ - **`models/`**: User, OAuth, email verification, blob storage models
131
+ - **`services/`**: Email (SES), blob storage (S3)
132
+ - **`tasks/`**: Background job infrastructure
133
+ - **`cli/`**: CLI framework with scaffold, run commands
134
+ - **`config.py`**: Pydantic settings management
135
+ - **`mongo.py`**: MongoDB/Beanie setup
136
+ - **`logging.py`**: Structured logging configuration
137
+
138
+ ### Blessed Dependencies
139
+
140
+ - **FastAPI** (0.121+): Modern, fast web framework
141
+ - **Beanie**: Async MongoDB ODM with Pydantic
142
+ - **Authlib**: OAuth 1.0/2.0 client
143
+ - **Granian**: High-performance ASGI server
144
+ - **Redis** + **Streaq**: Background task processing
145
+ - **Typer**: CLI framework
146
+ - **Rich**: Beautiful terminal output
147
+ - **Loguru**: Structured logging
148
+ - **Pydantic**: Data validation and settings
149
+
150
+ See [pyproject.toml](./pyproject.toml) for the complete dependency list.
151
+
152
+ ## CLI Tools
153
+
154
+ When installed, provides the `vibetuner` command:
155
+
156
+ ```bash
157
+ # Create new project from template
158
+ vibetuner scaffold new my-project
159
+ vibetuner scaffold new my-project --defaults
160
+
161
+ # Update existing project
162
+ vibetuner scaffold update
163
+
164
+ # Run development server (in generated projects)
165
+ vibetuner run dev frontend
166
+ vibetuner run dev worker
167
+
168
+ # Run production server (in generated projects)
169
+ vibetuner run prod frontend
170
+ vibetuner run prod worker
171
+ ```
172
+
173
+ ## Development Dependencies
174
+
175
+ The `[dev]` extra includes all tools needed for development:
176
+
177
+ - **Ruff**: Fast linting and formatting
178
+ - **Babel**: i18n message extraction
179
+ - **pre-commit**: Git hooks
180
+ - **Type stubs**: For aioboto3, authlib, PyYAML
181
+ - And more...
182
+
183
+ ## Usage in Generated Projects
184
+
185
+ In a Vibetuner-generated project, import from `vibetuner`:
186
+
187
+ ```python
188
+ # Use core models
189
+ from vibetuner.models import UserModel, OAuthAccountModel
190
+
191
+ # Use services
192
+ from vibetuner.services.email import send_email
193
+
194
+ # Use configuration
195
+ from vibetuner.config import settings
196
+
197
+ # Extend core routes
198
+ from vibetuner.frontend import app
199
+
200
+ # Add your routes
201
+ @app.get("/api/hello")
202
+ async def hello():
203
+ return {"message": "Hello World"}
204
+ ```
205
+
206
+ ## Documentation
207
+
208
+ For complete documentation, guides, and examples, see the main Vibetuner repository:
209
+
210
+ **📖 [Vibetuner Documentation](https://vibetuner.alltuner.com/)**
211
+
212
+ ## Package Ecosystem
213
+
214
+ Vibetuner consists of three packages that work together:
215
+
216
+ 1. **vibetuner** (this package): Python framework and dependencies
217
+ 2. **[@alltuner/vibetuner](https://www.npmjs.com/package/@alltuner/vibetuner)**: JavaScript/CSS build dependencies
218
+ 3. **Scaffolding template**: Copier template for project generation
219
+
220
+ All three are version-locked and tested together to ensure compatibility.
221
+
222
+ ## Contributing
223
+
224
+ Contributions welcome! See the main repository for contribution guidelines:
225
+
226
+ **🤝 [Contributing to Vibetuner](https://github.com/alltuner/vibetuner/blob/main/CONTRIBUTING.md)**
227
+
228
+ ## License
229
+
230
+ MIT License - Copyright (c) 2025 All Tuner Labs, S.L.
231
+
232
+ See [LICENSE](https://github.com/alltuner/vibetuner/blob/main/LICENSE) for details.
233
+
234
+ ## Links
235
+
236
+ - **Main Repository**: <https://github.com/alltuner/vibetuner>
237
+ - **Documentation**: <https://vibetuner.alltuner.com/>
238
+ - **Issues**: <https://github.com/alltuner/vibetuner/issues>
239
+ - **PyPI**: <https://pypi.org/project/vibetuner/>
240
+ - **npm Package**: <https://www.npmjs.com/package/@alltuner/vibetuner>
@@ -0,0 +1,172 @@
1
+ # vibetuner
2
+
3
+ Core Python framework and blessed dependencies for Vibetuner projects
4
+
5
+ This package provides the complete Python framework and curated dependency set for building modern
6
+ web applications with Vibetuner. It includes everything from FastAPI and MongoDB integration to
7
+ authentication, background jobs, and CLI tools.
8
+
9
+ ## What is Vibetuner?
10
+
11
+ Vibetuner is a production-ready scaffolding tool for FastAPI + MongoDB + HTMX web applications.
12
+ This package (`vibetuner`) is the Python component that provides:
13
+
14
+ - Complete web application framework built on FastAPI
15
+ - MongoDB integration with Beanie ODM
16
+ - OAuth and magic link authentication out of the box
17
+ - Background job processing with Redis + Streaq
18
+ - CLI framework with Typer
19
+ - Email services, blob storage, and more
20
+
21
+ **This package is designed to be used within projects generated by the Vibetuner scaffolding
22
+ tool.** For standalone use, you'll need to set up the project structure manually.
23
+
24
+ ## Installation
25
+
26
+ ```bash
27
+ # In a Vibetuner-generated project (automatic)
28
+ uv sync
29
+
30
+ # Add to an existing project
31
+ uv add vibetuner
32
+
33
+ # With development dependencies
34
+ uv add vibetuner[dev]
35
+ ```
36
+
37
+ ## Quick Start
38
+
39
+ The recommended way to use Vibetuner is via the scaffolding tool:
40
+
41
+ ```bash
42
+ # Create a new project with all the framework code
43
+ uvx vibetuner scaffold new my-project
44
+ cd my-project
45
+ just dev
46
+ ```
47
+
48
+ This will generate a complete project with:
49
+
50
+ - Pre-configured FastAPI application
51
+ - Authentication system (OAuth + magic links)
52
+ - MongoDB models and configuration
53
+ - Frontend templates and asset pipeline
54
+ - Docker setup for development and production
55
+ - CLI commands and background job infrastructure
56
+
57
+ ## What's Included
58
+
59
+ ### Core Framework (`src/vibetuner/`)
60
+
61
+ - **`frontend/`**: FastAPI app, routes, middleware, auth
62
+ - **`models/`**: User, OAuth, email verification, blob storage models
63
+ - **`services/`**: Email (SES), blob storage (S3)
64
+ - **`tasks/`**: Background job infrastructure
65
+ - **`cli/`**: CLI framework with scaffold, run commands
66
+ - **`config.py`**: Pydantic settings management
67
+ - **`mongo.py`**: MongoDB/Beanie setup
68
+ - **`logging.py`**: Structured logging configuration
69
+
70
+ ### Blessed Dependencies
71
+
72
+ - **FastAPI** (0.121+): Modern, fast web framework
73
+ - **Beanie**: Async MongoDB ODM with Pydantic
74
+ - **Authlib**: OAuth 1.0/2.0 client
75
+ - **Granian**: High-performance ASGI server
76
+ - **Redis** + **Streaq**: Background task processing
77
+ - **Typer**: CLI framework
78
+ - **Rich**: Beautiful terminal output
79
+ - **Loguru**: Structured logging
80
+ - **Pydantic**: Data validation and settings
81
+
82
+ See [pyproject.toml](./pyproject.toml) for the complete dependency list.
83
+
84
+ ## CLI Tools
85
+
86
+ When installed, provides the `vibetuner` command:
87
+
88
+ ```bash
89
+ # Create new project from template
90
+ vibetuner scaffold new my-project
91
+ vibetuner scaffold new my-project --defaults
92
+
93
+ # Update existing project
94
+ vibetuner scaffold update
95
+
96
+ # Run development server (in generated projects)
97
+ vibetuner run dev frontend
98
+ vibetuner run dev worker
99
+
100
+ # Run production server (in generated projects)
101
+ vibetuner run prod frontend
102
+ vibetuner run prod worker
103
+ ```
104
+
105
+ ## Development Dependencies
106
+
107
+ The `[dev]` extra includes all tools needed for development:
108
+
109
+ - **Ruff**: Fast linting and formatting
110
+ - **Babel**: i18n message extraction
111
+ - **pre-commit**: Git hooks
112
+ - **Type stubs**: For aioboto3, authlib, PyYAML
113
+ - And more...
114
+
115
+ ## Usage in Generated Projects
116
+
117
+ In a Vibetuner-generated project, import from `vibetuner`:
118
+
119
+ ```python
120
+ # Use core models
121
+ from vibetuner.models import UserModel, OAuthAccountModel
122
+
123
+ # Use services
124
+ from vibetuner.services.email import send_email
125
+
126
+ # Use configuration
127
+ from vibetuner.config import settings
128
+
129
+ # Extend core routes
130
+ from vibetuner.frontend import app
131
+
132
+ # Add your routes
133
+ @app.get("/api/hello")
134
+ async def hello():
135
+ return {"message": "Hello World"}
136
+ ```
137
+
138
+ ## Documentation
139
+
140
+ For complete documentation, guides, and examples, see the main Vibetuner repository:
141
+
142
+ **📖 [Vibetuner Documentation](https://vibetuner.alltuner.com/)**
143
+
144
+ ## Package Ecosystem
145
+
146
+ Vibetuner consists of three packages that work together:
147
+
148
+ 1. **vibetuner** (this package): Python framework and dependencies
149
+ 2. **[@alltuner/vibetuner](https://www.npmjs.com/package/@alltuner/vibetuner)**: JavaScript/CSS build dependencies
150
+ 3. **Scaffolding template**: Copier template for project generation
151
+
152
+ All three are version-locked and tested together to ensure compatibility.
153
+
154
+ ## Contributing
155
+
156
+ Contributions welcome! See the main repository for contribution guidelines:
157
+
158
+ **🤝 [Contributing to Vibetuner](https://github.com/alltuner/vibetuner/blob/main/CONTRIBUTING.md)**
159
+
160
+ ## License
161
+
162
+ MIT License - Copyright (c) 2025 All Tuner Labs, S.L.
163
+
164
+ See [LICENSE](https://github.com/alltuner/vibetuner/blob/main/LICENSE) for details.
165
+
166
+ ## Links
167
+
168
+ - **Main Repository**: <https://github.com/alltuner/vibetuner>
169
+ - **Documentation**: <https://vibetuner.alltuner.com/>
170
+ - **Issues**: <https://github.com/alltuner/vibetuner/issues>
171
+ - **PyPI**: <https://pypi.org/project/vibetuner/>
172
+ - **npm Package**: <https://www.npmjs.com/package/@alltuner/vibetuner>
@@ -0,0 +1,85 @@
1
+ [project]
2
+ name = "vibetuner"
3
+ description = "Core Python framework and blessed dependencies for production-ready FastAPI + MongoDB + HTMX projects"
4
+ version = "2.17.8"
5
+ readme = "README.md"
6
+ requires-python = ">=3.11"
7
+ license = { text = "MIT" }
8
+ authors = [{ name = "All Tuner Labs, S.L." }]
9
+ keywords = ["fastapi", "mongodb", "htmx", "web-framework", "scaffolding", "oauth", "background-jobs"]
10
+ classifiers = [
11
+ "Development Status :: 4 - Beta",
12
+ "Intended Audience :: Developers",
13
+ "License :: OSI Approved :: MIT License",
14
+ "Programming Language :: Python :: 3",
15
+ "Programming Language :: Python :: 3.11",
16
+ "Programming Language :: Python :: 3.12",
17
+ "Programming Language :: Python :: 3.13",
18
+ "Programming Language :: Python :: 3.14",
19
+ "Framework :: FastAPI",
20
+ "Topic :: Internet :: WWW/HTTP :: WSGI :: Application",
21
+ "Topic :: Software Development :: Libraries :: Application Frameworks",
22
+ ]
23
+ dependencies = [
24
+ # These are the base dependencies of AllTuner's blessed stack
25
+ "aioboto3>=15.5.0",
26
+ "arel>=0.4.0",
27
+ "asyncer>=0.0.10",
28
+ "authlib>=1.6.5",
29
+ "beanie[zstd]>=2.0.0",
30
+ "click>=8.3.0",
31
+ "copier>=9.10.3,<9.10.4",
32
+ "email-validator>=2.3.0",
33
+ "fastapi[standard-no-fastapi-cloud-cli]>=0.121.1",
34
+ "granian[pname]>=2.5.7",
35
+ "httpx[http2]>=0.28.1",
36
+ "itsdangerous>=2.2.0",
37
+ "loguru>=0.7.3",
38
+ "pydantic[email]>=2.12.4",
39
+ "pydantic-extra-types[pycountry]>=2.10.6",
40
+ "pydantic-settings>=2.12.0",
41
+ "pyyaml>=6.0.3",
42
+ "redis[hiredis]>=7.0.1",
43
+ "rich>=14.2.0",
44
+ "sse-starlette>=3.0.3",
45
+ "starlette-babel>=1.0.3",
46
+ "starlette-htmx>=0.1.1",
47
+ "streaq[web]<6.0.0",
48
+ "typer-slim[standard]>=0.20.0",
49
+ ]
50
+
51
+ [project.scripts]
52
+ vibetuner = "vibetuner.cli:app"
53
+
54
+ [project.urls]
55
+ Homepage = "https://vibetuner.alltuner.com/"
56
+ Documentation = "https://vibetuner.alltuner.com/"
57
+ Repository = "https://github.com/alltuner/vibetuner"
58
+ Issues = "https://github.com/alltuner/vibetuner/issues"
59
+ Changelog = "https://github.com/alltuner/vibetuner/blob/main/CHANGELOG.md"
60
+
61
+ [project.optional-dependencies]
62
+ dev = [
63
+ # These are the development dependencies of AllTuner's blessed stack
64
+ "babel>=2.17.0",
65
+ "cloudflare>=4.3.1",
66
+ "dunamai>=1.25.0",
67
+ "gh-bin>=2.83.0",
68
+ "granian[pname,reload]>=2.5.7",
69
+ "just-bin>=1.43.0",
70
+ "pre-commit>=4.4.0",
71
+ "pysemver>=0.5.0",
72
+ "ruff>=0.14.4",
73
+ "rumdl>=0.0.174",
74
+ "semver>=3.0.4",
75
+ "taplo>=0.9.3",
76
+ "ty>=0.0.1a26",
77
+ "types-aioboto3[s3,ses]>=15.5.0",
78
+ "types-authlib>=1.6.5.20251005",
79
+ "types-pyyaml>=6.0.12.20250915",
80
+ "uv-bump>=0.3.1",
81
+ ]
82
+
83
+ [build-system]
84
+ requires = ["uv_build>=0.9,<0.10"]
85
+ build-backend = "uv_build"
@@ -9,7 +9,7 @@ import typer
9
9
  from rich.console import Console
10
10
 
11
11
  from vibetuner.cli.run import run_app
12
- from vibetuner.config import settings
12
+ from vibetuner.cli.scaffold import scaffold_app
13
13
  from vibetuner.logging import LogLevel, setup_logging
14
14
 
15
15
 
@@ -43,7 +43,16 @@ class AsyncTyper(typer.Typer):
43
43
  return partial(self.maybe_run_async, decorator)
44
44
 
45
45
 
46
- app = AsyncTyper(help=f"{settings.project.project_name.title()} CLI")
46
+ def _get_app_help():
47
+ try:
48
+ from vibetuner.config import settings
49
+
50
+ return f"{settings.project.project_name.title()} CLI"
51
+ except (RuntimeError, ImportError):
52
+ return "Vibetuner CLI"
53
+
54
+
55
+ app = AsyncTyper(help=_get_app_help())
47
56
 
48
57
  LOG_LEVEL_OPTION = typer.Option(
49
58
  LogLevel.INFO,
@@ -61,8 +70,10 @@ def callback(log_level: LogLevel | None = LOG_LEVEL_OPTION) -> None:
61
70
 
62
71
 
63
72
  app.add_typer(run_app, name="run")
73
+ app.add_typer(scaffold_app, name="scaffold")
64
74
 
65
75
  try:
66
76
  import_module("app.cli")
67
77
  except (ImportError, ModuleNotFoundError):
68
78
  pass
79
+ # Cache buster
@@ -70,7 +70,6 @@ def dev(
70
70
 
71
71
  # Define paths to watch for changes
72
72
  reload_paths = [
73
- Path("src/vibetuner"),
74
73
  Path("src/app"),
75
74
  Path("templates/frontend"),
76
75
  Path("templates/email"),