Appcraft
1. Getting Started
1.1. Installation
1.2. Starting a New Project
1.3. Adding Templates to an Existing Project
2. Templates
2.1. Template Types
2.1.1. Default Templates
2.1.2. Shared-Base Templates
2.1.3. Exclusive Templates
2.1.4. Interchangeable Templates
2.1.5. Composable Extensions
2.1.6. Dependencies
2.1.7. Inactive Templates
2.2. Base Template
2.2.1. A working project out of the box
2.2.2. Resilience and developer experience
2.2.3. Learning the architecture by example
2.3. Poetry Template
2.3.1. Switching to Poetry
2.4. Pipenv Template
2.4.1. Switching to Pipenv
2.5. uv Template
2.5.1. Switching to uv
2.6. Docker Template
2.6.1. Dynamic, one service per entry point
2.6.2. Building and running
2.6.3. No hardcoded package manager
2.6.4. Development vs. production
2.6.5. One thing to set up yourself
2.7. Prompt Toolkit Template
2.8. SQLAlchemy Template
2.8.1. What it adds
2.8.2. Combining with Flask
2.9. MongoDB Template
2.9.1. What it adds
2.10. Flask Template
2.10.1. Automatic routing
2.10.2. Database integration
2.10.3. Development vs. production
2.11. Flask UI Template
2.12. Flask API Template
2.13. Web Scraping Template
2.13.1. What this template provides
2.13.2. Choosing an engine
2.13.3. Handing off between engines
2.13.4. Available runners
2.13.5. Benchmarking installed engines
2.14. Selenium Template
2.14.1. Browser detection
2.14.2. Cookies and headers
2.14.3. Using Selenium specifically
2.15. Playwright Template
2.15.1. Async by nature
2.15.2. Cookies and headers
2.15.3. Using Playwright specifically
2.16. HTTPX Template
2.16.1. Choosing a parser
2.16.2. Cookies and headers
2.16.3. Using HTTPX specifically
2.17. curl_cffi Template
2.17.1. Why this exists alongside HTTPX
2.17.2. Cookies and headers
2.17.3. Using curl_cffi specifically
2.18. Git Template
2.18.1. Key features:
2.18.2. Benefits:
2.19. GitHub Template
2.19.1. Key Features:
2.19.2. Benefits:
3. Layered Architecture
3.1. Runner Layer
3.1.1. What to Do in Runners
3.1.2. What to Avoid in Runners
3.1.3. Types of runners
3.1.4. Example of a Runner
3.1.5. Running Applications
3.1.6. Running Tool Runners
3.1.7. Executing a Specific Runner
3.2. Presentation Layer
3.2.1. What belongs here
3.2.2. What to avoid here
3.2.3. Naming convention:
<Domain>CLIPresentation
3.2.4. Example: a CLI Presentation
3.3. Application Layer
3.3.1. What belongs here
3.3.2. What to avoid here
3.3.3. Naming conventions
3.3.4. Example: a Port
3.3.5. Example: a Repository
3.3.6. Example: a Mapper and Schema
3.3.7. Example: a Use Case
3.3.8. Introspection use cases
3.4. Domain Layer
3.4.1. What belongs here
3.4.2. What to avoid here
3.4.3. Naming convention:
Interface
, not
I
+ name
3.4.4. Example: a domain model
3.4.5. Example: a filter
3.5. Infrastructure Layer
3.5.1. What belongs here
3.5.2. What to avoid here
3.5.3. Naming convention:
Adapter
3.5.4. Example: the default database Adapter
3.5.5. Providers
3.6. Application Flow
3.6.1. Request Flow
3.6.2. Response Flow
4. Contributing
4.1. Creating New Templates
4.2. Updating Existing Templates
4.3. Translating the Framework
4.4. Working in a Temporary Project
4.5. Ready to Contribute?
5. Changelog
5.1. 0.6.0b0
5.1.1. Added
5.1.2. Changed
5.1.3. Fixed
5.1.4. Removed
6. Contact
7. Versions
Appcraft
Index
Index