fastango 0.1.0__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.
Files changed (106) hide show
  1. fastango-0.1.0/.github/FUNDING.yaml +3 -0
  2. fastango-0.1.0/.github/SECURITY.md +14 -0
  3. fastango-0.1.0/.github/dependabot.yaml +25 -0
  4. fastango-0.1.0/.github/workflows/ci.yaml +91 -0
  5. fastango-0.1.0/.github/workflows/release.yaml +33 -0
  6. fastango-0.1.0/.gitignore +121 -0
  7. fastango-0.1.0/.pre-commit-config.yaml +24 -0
  8. fastango-0.1.0/LICENSE +21 -0
  9. fastango-0.1.0/PKG-INFO +260 -0
  10. fastango-0.1.0/README.md +223 -0
  11. fastango-0.1.0/docs/index.md +62 -0
  12. fastango-0.1.0/docs/logo.png +0 -0
  13. fastango-0.1.0/fastango/__init__.py +3 -0
  14. fastango-0.1.0/fastango/cli.py +439 -0
  15. fastango-0.1.0/fastango/generator/__init__.py +1 -0
  16. fastango-0.1.0/fastango/generator/constraints.py +77 -0
  17. fastango-0.1.0/fastango/generator/model_catalog.py +180 -0
  18. fastango-0.1.0/fastango/generator/models.py +67 -0
  19. fastango-0.1.0/fastango/generator/planner.py +126 -0
  20. fastango-0.1.0/fastango/generator/preview.py +88 -0
  21. fastango-0.1.0/fastango/generator/providers/__init__.py +1 -0
  22. fastango-0.1.0/fastango/generator/providers/anthropic.py +53 -0
  23. fastango-0.1.0/fastango/generator/providers/base.py +48 -0
  24. fastango-0.1.0/fastango/generator/providers/openai.py +44 -0
  25. fastango-0.1.0/fastango/generator/rules.py +162 -0
  26. fastango-0.1.0/fastango/generator/skills.py +104 -0
  27. fastango-0.1.0/fastango/integrations/__init__.py +5 -0
  28. fastango-0.1.0/fastango/integrations/base.py +27 -0
  29. fastango-0.1.0/fastango/integrations/builtins.py +434 -0
  30. fastango-0.1.0/fastango/integrations/catalog.py +224 -0
  31. fastango-0.1.0/fastango/integrations/categories/__init__.py +1 -0
  32. fastango-0.1.0/fastango/integrations/categories/ai.py +94 -0
  33. fastango-0.1.0/fastango/integrations/categories/api.py +47 -0
  34. fastango-0.1.0/fastango/integrations/categories/auth.py +119 -0
  35. fastango-0.1.0/fastango/integrations/categories/cache_queue.py +65 -0
  36. fastango-0.1.0/fastango/integrations/categories/database.py +100 -0
  37. fastango-0.1.0/fastango/integrations/categories/deploy.py +117 -0
  38. fastango-0.1.0/fastango/integrations/categories/devtools.py +59 -0
  39. fastango-0.1.0/fastango/integrations/categories/observability.py +56 -0
  40. fastango-0.1.0/fastango/integrations/categories/payments.py +98 -0
  41. fastango-0.1.0/fastango/integrations/categories/product.py +195 -0
  42. fastango-0.1.0/fastango/integrations/categories/storage.py +59 -0
  43. fastango-0.1.0/fastango/py.typed +0 -0
  44. fastango-0.1.0/fastango/scaffold/__init__.py +6 -0
  45. fastango-0.1.0/fastango/scaffold/config.py +111 -0
  46. fastango-0.1.0/fastango/scaffold/engine.py +61 -0
  47. fastango-0.1.0/fastango/scaffold/filesystem.py +54 -0
  48. fastango-0.1.0/fastango/scaffold/plan.py +111 -0
  49. fastango-0.1.0/fastango/scaffold/preview.py +34 -0
  50. fastango-0.1.0/fastango/scaffold/prompts.py +67 -0
  51. fastango-0.1.0/fastango/scaffold/registry.py +116 -0
  52. fastango-0.1.0/fastango/scaffold/renderer.py +98 -0
  53. fastango-0.1.0/fastango/templates/__init__.py +1 -0
  54. fastango-0.1.0/fastango/templates/project/__init__.py +1 -0
  55. fastango-0.1.0/fastango/templates/project/mvc/.env.example.j2 +3 -0
  56. fastango-0.1.0/fastango/templates/project/mvc/.gitignore.j2 +8 -0
  57. fastango-0.1.0/fastango/templates/project/mvc/README.md.j2 +33 -0
  58. fastango-0.1.0/fastango/templates/project/mvc/app/__init__.py.j2 +1 -0
  59. fastango-0.1.0/fastango/templates/project/mvc/app/api/__init__.py.j2 +1 -0
  60. fastango-0.1.0/fastango/templates/project/mvc/app/api/deps.py.j2 +5 -0
  61. fastango-0.1.0/fastango/templates/project/mvc/app/api/routes/__init__.py.j2 +1 -0
  62. fastango-0.1.0/fastango/templates/project/mvc/app/api/routes/health.py.j2 +18 -0
  63. fastango-0.1.0/fastango/templates/project/mvc/app/core/__init__.py.j2 +1 -0
  64. fastango-0.1.0/fastango/templates/project/mvc/app/core/config.py.j2 +34 -0
  65. fastango-0.1.0/fastango/templates/project/mvc/app/core/logging.py.j2 +10 -0
  66. fastango-0.1.0/fastango/templates/project/mvc/app/main.py.j2 +46 -0
  67. fastango-0.1.0/fastango/templates/project/mvc/app/models/__init__.py.j2 +1 -0
  68. fastango-0.1.0/fastango/templates/project/mvc/app/repositories/__init__.py.j2 +1 -0
  69. fastango-0.1.0/fastango/templates/project/mvc/app/schemas/__init__.py.j2 +1 -0
  70. fastango-0.1.0/fastango/templates/project/mvc/app/schemas/health.py.j2 +8 -0
  71. fastango-0.1.0/fastango/templates/project/mvc/app/services/__init__.py.j2 +1 -0
  72. fastango-0.1.0/fastango/templates/project/mvc/llms.txt.j2 +33 -0
  73. fastango-0.1.0/fastango/templates/project/mvc/pyproject.toml.j2 +30 -0
  74. fastango-0.1.0/fastango/templates/project/mvc/tests/test_health.py.j2 +12 -0
  75. fastango-0.1.0/fastango/templates/project/simple/.env.example.j2 +3 -0
  76. fastango-0.1.0/fastango/templates/project/simple/.gitignore.j2 +8 -0
  77. fastango-0.1.0/fastango/templates/project/simple/README.md.j2 +29 -0
  78. fastango-0.1.0/fastango/templates/project/simple/app/__init__.py.j2 +1 -0
  79. fastango-0.1.0/fastango/templates/project/simple/app/main.py.j2 +45 -0
  80. fastango-0.1.0/fastango/templates/project/simple/app/routes.py.j2 +18 -0
  81. fastango-0.1.0/fastango/templates/project/simple/app/schemas.py.j2 +8 -0
  82. fastango-0.1.0/fastango/templates/project/simple/app/settings.py.j2 +34 -0
  83. fastango-0.1.0/fastango/templates/project/simple/llms.txt.j2 +30 -0
  84. fastango-0.1.0/fastango/templates/project/simple/pyproject.toml.j2 +30 -0
  85. fastango-0.1.0/fastango/templates/project/simple/tests/test_health.py.j2 +12 -0
  86. fastango-0.1.0/fastango/terminal/__init__.py +1 -0
  87. fastango-0.1.0/fastango/terminal/models.py +27 -0
  88. fastango-0.1.0/fastango/terminal/tables.py +51 -0
  89. fastango-0.1.0/fastango/terminal/theme.py +36 -0
  90. fastango-0.1.0/fastango/tui/__init__.py +1 -0
  91. fastango-0.1.0/fastango/tui/app.py +169 -0
  92. fastango-0.1.0/pyproject.toml +113 -0
  93. fastango-0.1.0/scripts/clean.sh +21 -0
  94. fastango-0.1.0/scripts/format.sh +6 -0
  95. fastango-0.1.0/scripts/mypy.sh +6 -0
  96. fastango-0.1.0/scripts/tests.sh +9 -0
  97. fastango-0.1.0/tests/__init__.py +1 -0
  98. fastango-0.1.0/tests/test_catalog.py +69 -0
  99. fastango-0.1.0/tests/test_cli.py +98 -0
  100. fastango-0.1.0/tests/test_config.py +23 -0
  101. fastango-0.1.0/tests/test_generated_project_smoke.py +39 -0
  102. fastango-0.1.0/tests/test_generator.py +127 -0
  103. fastango-0.1.0/tests/test_registry.py +20 -0
  104. fastango-0.1.0/tests/test_scaffold_engine.py +47 -0
  105. fastango-0.1.0/tests/test_tui_app.py +33 -0
  106. fastango-0.1.0/uv.lock +1115 -0
@@ -0,0 +1,3 @@
1
+ # These are supported funding model platforms
2
+ github: yezz123
3
+ polar: yezz123
@@ -0,0 +1,14 @@
1
+ # Security Policy
2
+
3
+ ## Supported Versions
4
+
5
+ We will endeavour to support:
6
+
7
+ * the most recent minor release with bug fixes
8
+ * the latest minor release from the last major version for 6 months after a new major version is released with critical bug fixes
9
+
10
+ ## Reporting a Vulnerability
11
+
12
+ If you find what you think might be a security vulnerability with pydantic,
13
+ please do not create an issue on github. Instead please email <dev@yezz.me>
14
+ I'll reply to your email promptly and try to get a patch out ASAP.
@@ -0,0 +1,25 @@
1
+ version: 2
2
+
3
+ updates:
4
+ # GitHub Actions
5
+ - package-ecosystem: "github-actions"
6
+ directory: "/"
7
+ schedule:
8
+ interval: "weekly"
9
+ commit-message:
10
+ prefix: ⬆
11
+ labels:
12
+ - "upgrade"
13
+ # Python
14
+ - package-ecosystem: "uv"
15
+ directory: "/"
16
+ schedule:
17
+ interval: "weekly"
18
+ groups:
19
+ python-packages:
20
+ patterns:
21
+ - "*"
22
+ commit-message:
23
+ prefix: ⬆
24
+ labels:
25
+ - "upgrade"
@@ -0,0 +1,91 @@
1
+ name: Continuous Integration
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - main
7
+ pull_request: {}
8
+
9
+ jobs:
10
+ lint:
11
+ runs-on: ubuntu-latest
12
+ strategy:
13
+ matrix:
14
+ python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"]
15
+ fail-fast: false
16
+
17
+ steps:
18
+ - uses: actions/checkout@v6
19
+ - name: Set up Python
20
+ uses: actions/setup-python@v6
21
+ with:
22
+ python-version: ${{ matrix.python-version }}
23
+
24
+ - name: setup uv
25
+ uses: yezz123/setup-uv@v4.1
26
+ with:
27
+ uv-venv: ".venv"
28
+
29
+ - name: Install Dependencies
30
+ run: uv sync --group lint --group type --all-extras
31
+
32
+ - name: Typecheck with mypy
33
+ run: bash scripts/mypy.sh
34
+
35
+ - name: Lint with ruff
36
+ run: bash scripts/format.sh
37
+
38
+ tests:
39
+
40
+ name: test py${{ matrix.python-version }} on ${{ matrix.os }}
41
+
42
+ runs-on: ${{ matrix.os }}-latest
43
+
44
+
45
+ strategy:
46
+
47
+ matrix:
48
+
49
+ python-version: [ "3.10", "3.11", "3.12", "3.13", "3.14"]
50
+
51
+ os: [ubuntu]
52
+
53
+ steps:
54
+ - uses: actions/checkout@v6
55
+
56
+ - name: Set up Python
57
+ uses: actions/setup-python@v6
58
+ with:
59
+ python-version: ${{ matrix.python-version }}
60
+
61
+ - name: setup UV
62
+ uses: yezz123/setup-uv@v4.1
63
+ with:
64
+ uv-venv: ".venv"
65
+
66
+ - name: Install Dependencies
67
+ run: uv sync --group test --all-extras
68
+
69
+ - name: Test with pytest - ${{ matrix.os }} - py${{ matrix.python-version }}
70
+ run: bash scripts/tests.sh
71
+ env:
72
+ CONTEXT: ${{ runner.os }}-py${{ matrix.python-version }}-with-deps
73
+
74
+ - name: Upload coverage to Codecov
75
+ uses: codecov/codecov-action@v6
76
+ with:
77
+ token: ${{ secrets.CODECOV_TOKEN }}
78
+ files: ./coverage.xml
79
+
80
+ # https://github.com/marketplace/actions/alls-green#why
81
+ # used for branch protection checks
82
+ check:
83
+ if: always()
84
+
85
+ needs: [lint, tests]
86
+ runs-on: ubuntu-latest
87
+ steps:
88
+ - name: Decide whether the needed jobs succeeded or failed
89
+ uses: re-actors/alls-green@release/v1
90
+ with:
91
+ jobs: ${{ toJSON(needs) }}
@@ -0,0 +1,33 @@
1
+ name: Publish
2
+
3
+ on:
4
+ release:
5
+ types:
6
+ - created
7
+
8
+ jobs:
9
+
10
+ release:
11
+ runs-on: ubuntu-latest
12
+
13
+ permissions:
14
+ id-token: write
15
+
16
+ steps:
17
+ - uses: actions/checkout@v6
18
+
19
+ - uses: astral-sh/setup-uv@v7
20
+ with:
21
+ enable-cache: true
22
+
23
+ - name: check version
24
+ id: check-tag
25
+ uses: samuelcolvin/check-python-version@v5
26
+ with:
27
+ version_file_path: fastango/__init__.py
28
+
29
+ - name: build
30
+ run: uv build
31
+
32
+ - name: Upload package to PyPI
33
+ uses: pypa/gh-action-pypi-publish@release/v1
@@ -0,0 +1,121 @@
1
+ # mypy
2
+ .mypy_cache/
3
+
4
+ # Byte-compiled / optimized / DLL files
5
+ __pycache__/
6
+ *.py[cod]
7
+ *$py.class
8
+
9
+ # C extensions
10
+ *.so
11
+
12
+ # Distribution / packaging
13
+ .Python
14
+ build/
15
+ develop-eggs/
16
+ dist/
17
+ downloads/
18
+ eggs/
19
+ .eggs/
20
+ lib/
21
+ lib64/
22
+ parts/
23
+ sdist/
24
+ var/
25
+ wheels/
26
+ *.egg-info/
27
+ .installed.cfg
28
+ *.egg
29
+ MANIFEST
30
+
31
+ # PyInstaller
32
+ # Usually these files are written by a python script from a template
33
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
34
+ *.manifest
35
+ *.spec
36
+
37
+ # Installer logs
38
+ pip-log.txt
39
+ pip-delete-this-directory.txt
40
+
41
+ # Unit test / coverage reports
42
+ htmlcov/
43
+ .tox/
44
+ .coverage
45
+ .coverage.*
46
+ .cache
47
+ nosetests.xml
48
+ coverage.xml
49
+ *.cover
50
+ .hypothesis/
51
+ .pytest_cache/
52
+
53
+ # Translations
54
+ *.mo
55
+ *.pot
56
+
57
+ # Django stuff:
58
+ *.log
59
+ local_settings.py
60
+ db.sqlite3
61
+
62
+ # Flask stuff:
63
+ instance/
64
+ .webassets-cache
65
+
66
+ # Scrapy stuff:
67
+ .scrapy
68
+
69
+ # Sphinx documentation
70
+ docs/_build/
71
+
72
+ # PyBuilder
73
+ target/
74
+
75
+ # Jupyter Notebook
76
+ .ipynb_checkpoints
77
+
78
+ # pyenv
79
+ .python-version
80
+
81
+ # celery beat schedule file
82
+ celerybeat-schedule
83
+
84
+ # SageMath parsed files
85
+ *.sage.py
86
+
87
+ # Environments
88
+ .env
89
+ .venv
90
+ env/
91
+ venv/
92
+ ENV/
93
+ env.bak/
94
+ venv.bak/
95
+
96
+ # Spyder project settings
97
+ .spyderproject
98
+ .spyproject
99
+
100
+ # Rope project settings
101
+ .ropeproject
102
+
103
+ # mkdocs documentation
104
+ /site
105
+
106
+ # mypy
107
+ .mypy_cache/
108
+
109
+ .idea/
110
+ .vscode/
111
+
112
+ # Project
113
+ postgres-data
114
+ .DS_Store
115
+
116
+ # Generated by tests
117
+ authx_profiling_results.*
118
+ *.db
119
+
120
+ # Generated by linting
121
+ .ruff_cache/
@@ -0,0 +1,24 @@
1
+ repos:
2
+ - repo: https://github.com/pre-commit/pre-commit-hooks
3
+ rev: v6.0.0
4
+ hooks:
5
+ - id: check-added-large-files
6
+ - id: check-toml
7
+ - id: check-yaml
8
+ args:
9
+ - --unsafe
10
+ - id: end-of-file-fixer
11
+ - id: trailing-whitespace
12
+ - repo: https://github.com/astral-sh/ruff-pre-commit
13
+ rev: v0.15.13
14
+ hooks:
15
+ - id: ruff
16
+ args:
17
+ - --fix
18
+ - id: ruff-format
19
+ - repo: https://github.com/codespell-project/codespell
20
+ rev: v2.4.2
21
+ hooks:
22
+ - id: codespell
23
+ additional_dependencies:
24
+ - tomli
fastango-0.1.0/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Yasser Tahiri
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,260 @@
1
+ Metadata-Version: 2.4
2
+ Name: fastango
3
+ Version: 0.1.0
4
+ Summary: A uv-first CLI for generating FastAPI projects with optional integrations.
5
+ Project-URL: Homepage, https://github.com/yezz123/fastango
6
+ Project-URL: Repository, https://github.com/yezz123/fastango
7
+ Project-URL: Issues, https://github.com/yezz123/fastango/issues
8
+ Project-URL: Funding, https://github.com/sponsors/yezz123
9
+ Author-email: Yasser Tahiri <hello@yezz.me>
10
+ License-Expression: MIT
11
+ License-File: LICENSE
12
+ Keywords: CLI,FastAPI,Pydantic,scaffold,template,uv
13
+ Classifier: Development Status :: 3 - Alpha
14
+ Classifier: Environment :: Console
15
+ Classifier: Framework :: FastAPI
16
+ Classifier: Framework :: Pydantic
17
+ Classifier: Framework :: Pydantic :: 2
18
+ Classifier: Intended Audience :: Developers
19
+ Classifier: License :: OSI Approved :: MIT License
20
+ Classifier: Operating System :: OS Independent
21
+ Classifier: Programming Language :: Python
22
+ Classifier: Programming Language :: Python :: 3
23
+ Classifier: Programming Language :: Python :: 3 :: Only
24
+ Classifier: Programming Language :: Python :: 3.10
25
+ Classifier: Programming Language :: Python :: 3.11
26
+ Classifier: Programming Language :: Python :: 3.12
27
+ Classifier: Programming Language :: Python :: 3.13
28
+ Classifier: Topic :: Software Development :: Code Generators
29
+ Requires-Python: >=3.10
30
+ Requires-Dist: jinja2>=3.1.6
31
+ Requires-Dist: pydantic>=2.7.0
32
+ Requires-Dist: rich>=13.7.0
33
+ Requires-Dist: typer>=0.12.0
34
+ Provides-Extra: ai
35
+ Requires-Dist: httpx>=0.27.0; extra == 'ai'
36
+ Description-Content-Type: text/markdown
37
+
38
+ <!-- markdownlint-disable MD033 -->
39
+ <p align="center">
40
+ <img src="https://raw.githubusercontent.com/yezz123/fastango/fa66a81b925515f2a3777c91d66132b8998b9421/docs/logo.png" alt="Fastango logo" width="240">
41
+ </p>
42
+
43
+ <p align="center">
44
+ <a href="https://github.com/yezz123/fastango/actions/workflows/ci.yaml">
45
+ <img src="https://github.com/yezz123/fastango/actions/workflows/ci.yaml/badge.svg" alt="Continuous Integration">
46
+ </a>
47
+ <a href="https://codecov.io/gh/yezz123/fastango">
48
+ <img src="https://codecov.io/gh/yezz123/fastango/branch/main/graph/badge.svg?token=8ZKMD474LT" alt="Codecov">
49
+ </a>
50
+ <a href="https://pypi.org/project/fastango">
51
+ <img src="https://img.shields.io/pypi/v/fastango?color=%2334D058&label=pypi%20package" alt="PyPI package">
52
+ </a>
53
+ <a href="https://pepy.tech/project/fastango">
54
+ <img src="https://static.pepy.tech/badge/fastango" alt="Downloads">
55
+ </a>
56
+ <a href="https://pydantic.dev">
57
+ <img src="https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/pydantic/pydantic/main/docs/badge/v2.json" alt="Pydantic Version 2">
58
+ </a>
59
+ <a href="https://github.com/astral-sh/ruff">
60
+ <img src="https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json" alt="Ruff">
61
+ </a>
62
+ <img src="https://img.shields.io/badge/python-3.10%2B-blue" alt="Python 3.10+">
63
+ <img src="https://img.shields.io/badge/framework-FastAPI-009688" alt="FastAPI">
64
+ <img src="https://img.shields.io/badge/package%20manager-uv-654ff0" alt="uv">
65
+ <img src="https://img.shields.io/badge/license-MIT-green" alt="MIT license">
66
+ </p>
67
+
68
+ <!-- markdownlint-enable MD033 -->
69
+
70
+ Fastango is a `uv`-first CLI for generating FastAPI projects with polished terminal flows,
71
+ safe AI-assisted planning, selectable templates, and a growing integration catalog.
72
+
73
+ It helps teams start a serious FastAPI codebase quickly without copying random boilerplate,
74
+ hardcoding secrets, or letting an AI write unchecked files.
75
+
76
+ ## Why Fastango
77
+
78
+ | Need | What Fastango Gives You |
79
+ | --- | --- |
80
+ | Start a FastAPI app quickly | `simple` and `mvc` templates with settings, routes, tests, README, and `llms.txt`. |
81
+ | Add common infrastructure | A searchable catalog for auth, billing, databases, queues, storage, observability, AI, deployment, and dev tools. |
82
+ | Generate from product ideas | `fastango generate "a starter MVP"` maps prompts to supported templates, skills, presets, and integrations. |
83
+ | Keep generation safe | The generator only uses Fastango-supported tools and validates provider suggestions before writing files. |
84
+ | Work like modern Python teams | Generated projects use `uv`, Ruff, pytest, typed settings, and clear next-step commands. |
85
+
86
+ ## Highlights
87
+
88
+ - Branded interactive terminal playground when you run `uvx fastango`.
89
+ - Manual project creation with repeatable flags for CI and documentation.
90
+ - Constrained AI generator for prompt-first FastAPI scaffolding.
91
+ - Live model discovery for Anthropic and OpenAI API keys.
92
+ - Curated presets for starter APIs, SaaS apps, AI APIs, data APIs, and production setups.
93
+ - Generated `llms.txt` so AI assistants understand the project conventions.
94
+ - Validation for integration requirements, conflicts, unsupported tools, and unsafe provider output.
95
+
96
+ ## Install
97
+
98
+ ```bash
99
+ uv tool install fastango
100
+ ```
101
+
102
+ During local development:
103
+
104
+ ```bash
105
+ uv sync --all-groups
106
+ uv run fastango --help
107
+ ```
108
+
109
+ ## Quick Start
110
+
111
+ Run Fastango with no subcommand to open the terminal playground:
112
+
113
+ ```bash
114
+ uvx fastango
115
+ ```
116
+
117
+ You can also launch the playground explicitly:
118
+
119
+ ```bash
120
+ fastango playground
121
+ ```
122
+
123
+ Create a project without prompts:
124
+
125
+ ```bash
126
+ fastango create billing-api \
127
+ --style mvc \
128
+ --python 3.12 \
129
+ --preset saas \
130
+ --integration openapi \
131
+ --integration authx \
132
+ --integration stripe \
133
+ --with-docker \
134
+ --no-interactive
135
+ ```
136
+
137
+ Run the generated app:
138
+
139
+ ```bash
140
+ cd billing-api
141
+ uv sync
142
+ cp .env.example .env
143
+ uv run fastapi dev app/main.py
144
+ ```
145
+
146
+ ## Generate From A Prompt
147
+
148
+ Fastango can infer a constrained FastAPI scaffold from a natural-language prompt.
149
+ It does not write arbitrary LLM code directly to disk. It converts your prompt into a typed
150
+ plan made from supported templates, skills, presets, and integrations.
151
+
152
+ ```bash
153
+ fastango generate "a starter MVP with auth, billing, email, analytics and secure webhooks"
154
+ fastango generate "AI SaaS with vector search" --dry-run --json
155
+ ```
156
+
157
+ Optional provider enrichment is available when configured:
158
+
159
+ ```bash
160
+ fastango generate "marketplace MVP with billing and uploads" --provider anthropic
161
+ fastango generate "AI SaaS with vector search" --provider openai --model gpt-4.1-mini
162
+ ```
163
+
164
+ Provider output is validated against the same supported catalog before any files are written.
165
+ Unsupported requests are kept as `not_generated` notes in the preview.
166
+
167
+ ## Model Discovery
168
+
169
+ If the matching API key is set, Fastango asks the provider which models your key can access.
170
+ If no key is available, it falls back to a curated offline list.
171
+
172
+ ```bash
173
+ fastango models
174
+ fastango models --provider anthropic
175
+ fastango models --provider openai --json
176
+ fastango models --provider openai --static
177
+ ```
178
+
179
+ | Provider | Environment Variable | Model Source |
180
+ | --- | --- | --- |
181
+ | Anthropic | `ANTHROPIC_API_KEY` | Live `/v1/models` discovery with curated fallback. |
182
+ | OpenAI | `OPENAI_API_KEY` | Live `/v1/models` discovery with curated fallback. |
183
+
184
+ ## Templates
185
+
186
+ | Template | Best For | Includes |
187
+ | --- | --- | --- |
188
+ | `simple` | Small APIs, internal services, demos, first FastAPI apps. | `app/main.py`, routes, schemas, settings, tests, README, `.env.example`, `llms.txt`. |
189
+ | `mvc` | SaaS apps, production APIs, larger teams, integration-heavy projects. | API routes, core settings, services, repositories, schemas, tests, README, `.env.example`, `llms.txt`. |
190
+
191
+ ## Presets
192
+
193
+ | Preset | Purpose | Typical Stack |
194
+ | --- | --- | --- |
195
+ | `api-starter` | A clean FastAPI baseline. | OpenAPI, tests, CORS, Ruff, pre-commit. |
196
+ | `saas` | Product-ready SaaS API. | AuthX, Stripe, Postgres, Redis, Resend, PostHog, Sentry, Docker. |
197
+ | `ai-api` | AI or RAG-ready backend. | OpenAI, Anthropic, pgvector, Postgres, Redis, tests, Docker. |
198
+ | `data-api` | Data-heavy API with workers. | Postgres, Alembic, Redis, Celery, Prometheus, OpenTelemetry. |
199
+ | `production` | Production hardening. | Docker, GitHub Actions, security headers, Sentry, Prometheus, health checks. |
200
+
201
+ ## Integration Catalog
202
+
203
+ List, filter, search, and inspect integrations:
204
+
205
+ ```bash
206
+ uv run fastango integrations
207
+ uv run fastango integrations --category database
208
+ uv run fastango integrations --search vector
209
+ uv run fastango integrations --presets
210
+ uv run fastango integrations --json
211
+ ```
212
+
213
+ | Category | Examples |
214
+ | --- | --- |
215
+ | Auth and security | AuthX, FastAPI Users, OAuth, JWT, CORS, rate limiting, CSRF, security headers, roles, API keys. |
216
+ | Databases and ORM | Postgres, SQLite, MySQL, MongoDB, SQLModel, Tortoise, Alembic, Supabase, pgvector. |
217
+ | Cache and jobs | Redis, Celery, Dramatiq, ARQ, RQ, APScheduler, FastAPI background tasks. |
218
+ | SaaS and payments | Stripe, Paddle, Polar, Lemon Squeezy, subscriptions, customer portal, Resend, PostHog, Sentry. |
219
+ | Storage | S3, Cloudflare R2, Google Cloud Storage, local files, Pillow, uploads. |
220
+ | AI and search | OpenAI, Anthropic, Ollama, LangChain, LlamaIndex, Qdrant, Pinecone, Weaviate, Elasticsearch. |
221
+ | Observability | OpenTelemetry, Prometheus, Structlog, Logfire, health checks, audit logs. |
222
+ | API protocols | OpenAPI, GraphQL, WebSockets, SSE, signed webhooks, versioning. |
223
+ | Deployment and dev tools | Docker, Compose overlays, Kubernetes, GitHub Actions, pre-commit, Ruff, mypy, pytest, Dependabot. |
224
+
225
+ ## Generation Skills
226
+
227
+ Skills are internal, allowlisted generation capabilities. They map product intents to supported
228
+ Fastango templates and integrations.
229
+
230
+ | Skill | What It Builds |
231
+ | --- | --- |
232
+ | `saas-mvp` | Auth, teams, subscriptions, billing provider, email, analytics, monitoring. |
233
+ | `secure-api` | CORS, security headers, rate limiting, signed webhooks, API keys, secure settings. |
234
+ | `ai-api` | LLM provider, vector store, RAG-ready services, cache, background jobs. |
235
+ | `marketplace` | Users, teams, payments, uploads, webhooks, audit logs. |
236
+ | `crud-api` | Database, CRUD routes, pagination, filters, tests. |
237
+ | `production-api` | Docker, GitHub Actions, health checks, observability, dependency hygiene. |
238
+
239
+ ## Safety Model
240
+
241
+ | Rule | Why It Matters |
242
+ | --- | --- |
243
+ | No arbitrary raw code from providers | LLMs can suggest supported IDs, but Fastango writes files only through templates and integration hooks. |
244
+ | Secrets stay in settings and `.env.example` | Generated code avoids hardcoded tokens, API keys, and webhook secrets. |
245
+ | Registry validation before writes | Presets, aliases, integration requirements, and conflicts are resolved before the filesystem is touched. |
246
+ | Unsupported tech becomes a note | Requests for unsupported frameworks are shown in previews instead of silently generated. |
247
+
248
+ ## Development
249
+
250
+ ```bash
251
+ uv sync --all-groups
252
+ uv run pytest
253
+ uv run ruff check .
254
+ uv run mypy fastango
255
+ ```
256
+
257
+ ## Status
258
+
259
+ Fastango is early and evolving quickly. The current focus is a great terminal experience,
260
+ a reliable integration catalog, and safe prompt-to-FastAPI scaffolding.