skeleton-framework 0.1.0__tar.gz → 0.1.1__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.
- {skeleton_framework-0.1.0/skeleton_framework.egg-info → skeleton_framework-0.1.1}/PKG-INFO +101 -47
- skeleton_framework-0.1.0/PKG-INFO → skeleton_framework-0.1.1/README.md +96 -60
- {skeleton_framework-0.1.0 → skeleton_framework-0.1.1}/pyproject.toml +12 -2
- skeleton_framework-0.1.0/README.md → skeleton_framework-0.1.1/skeleton_framework.egg-info/PKG-INFO +114 -46
- {skeleton_framework-0.1.0 → skeleton_framework-0.1.1}/LICENSE +0 -0
- {skeleton_framework-0.1.0 → skeleton_framework-0.1.1}/setup.cfg +0 -0
- {skeleton_framework-0.1.0 → skeleton_framework-0.1.1}/skeleton/__init__.py +0 -0
- {skeleton_framework-0.1.0 → skeleton_framework-0.1.1}/skeleton/cli.py +0 -0
- {skeleton_framework-0.1.0 → skeleton_framework-0.1.1}/skeleton/client.py +0 -0
- {skeleton_framework-0.1.0 → skeleton_framework-0.1.1}/skeleton/infrastructure/__init__.py +0 -0
- {skeleton_framework-0.1.0 → skeleton_framework-0.1.1}/skeleton/infrastructure/bootstrap/__init__.py +0 -0
- {skeleton_framework-0.1.0 → skeleton_framework-0.1.1}/skeleton/infrastructure/bootstrap/src/__init__.py +0 -0
- {skeleton_framework-0.1.0 → skeleton_framework-0.1.1}/skeleton/infrastructure/bootstrap/src/commands/__init__.py +0 -0
- {skeleton_framework-0.1.0 → skeleton_framework-0.1.1}/skeleton/infrastructure/bootstrap/src/commands/client/__init__.py +0 -0
- {skeleton_framework-0.1.0 → skeleton_framework-0.1.1}/skeleton/infrastructure/bootstrap/src/commands/client/init.py +0 -0
- {skeleton_framework-0.1.0 → skeleton_framework-0.1.1}/skeleton/infrastructure/bootstrap/src/commands/client/install.py +0 -0
- {skeleton_framework-0.1.0 → skeleton_framework-0.1.1}/skeleton/infrastructure/bootstrap/src/commands/dev/__init__.py +0 -0
- {skeleton_framework-0.1.0 → skeleton_framework-0.1.1}/skeleton/infrastructure/bootstrap/src/commands/dev/build.py +0 -0
- {skeleton_framework-0.1.0 → skeleton_framework-0.1.1}/skeleton/infrastructure/bootstrap/src/commands/dev/init.py +0 -0
- {skeleton_framework-0.1.0 → skeleton_framework-0.1.1}/skeleton/infrastructure/bootstrap/src/commands/dev/install.py +0 -0
- {skeleton_framework-0.1.0 → skeleton_framework-0.1.1}/skeleton/infrastructure/bootstrap/src/commands/dev/pack.py +0 -0
- {skeleton_framework-0.1.0 → skeleton_framework-0.1.1}/skeleton/infrastructure/bootstrap/src/config.py +0 -0
- {skeleton_framework-0.1.0 → skeleton_framework-0.1.1}/skeleton/infrastructure/bootstrap/src/copy.py +0 -0
- {skeleton_framework-0.1.0 → skeleton_framework-0.1.1}/skeleton/infrastructure/bootstrap/src/load.py +0 -0
- {skeleton_framework-0.1.0 → skeleton_framework-0.1.1}/skeleton/infrastructure/bootstrap/src/templates/app/backend/requirements.txt +0 -0
- {skeleton_framework-0.1.0 → skeleton_framework-0.1.1}/skeleton/infrastructure/bootstrap/src/templates/app/backend/routes.json +0 -0
- {skeleton_framework-0.1.0 → skeleton_framework-0.1.1}/skeleton/infrastructure/bootstrap/src/templates/app/backend/src/__init__.py +0 -0
- {skeleton_framework-0.1.0 → skeleton_framework-0.1.1}/skeleton/infrastructure/bootstrap/src/templates/app/backend/src/main.py +0 -0
- {skeleton_framework-0.1.0 → skeleton_framework-0.1.1}/skeleton/infrastructure/bootstrap/src/templates/app/frontend/package.json +0 -0
- {skeleton_framework-0.1.0 → skeleton_framework-0.1.1}/skeleton/infrastructure/bootstrap/src/templates/app/frontend/skeleton-config.json +0 -0
- {skeleton_framework-0.1.0 → skeleton_framework-0.1.1}/skeleton/infrastructure/bootstrap/src/templates/app/frontend/src/index.html +0 -0
- {skeleton_framework-0.1.0 → skeleton_framework-0.1.1}/skeleton/infrastructure/bootstrap/src/templates/app/frontend/src/main.tsx +0 -0
- {skeleton_framework-0.1.0 → skeleton_framework-0.1.1}/skeleton/infrastructure/bootstrap/src/templates/app/frontend/src/static/css/styles.css +0 -0
- {skeleton_framework-0.1.0 → skeleton_framework-0.1.1}/skeleton/infrastructure/bootstrap/src/templates/app/frontend/src/static/img/skeleton.png +0 -0
- {skeleton_framework-0.1.0 → skeleton_framework-0.1.1}/skeleton/infrastructure/bootstrap/src/templates/app/frontend/src/static/js/script.js +0 -0
- {skeleton_framework-0.1.0 → skeleton_framework-0.1.1}/skeleton/infrastructure/bootstrap/src/templates/app/frontend/tsconfig.json +0 -0
- {skeleton_framework-0.1.0 → skeleton_framework-0.1.1}/skeleton/infrastructure/bootstrap/src/templates/config/.gitignore +0 -0
- {skeleton_framework-0.1.0 → skeleton_framework-0.1.1}/skeleton/infrastructure/bootstrap/src/templates/config/skeleton-dependencies.json +0 -0
- {skeleton_framework-0.1.0 → skeleton_framework-0.1.1}/skeleton/infrastructure/bootstrap/src/templates/config/skeleton-layout.json +0 -0
- {skeleton_framework-0.1.0 → skeleton_framework-0.1.1}/skeleton/infrastructure/bootstrap/src/templates/config/skeleton-schemas.json +0 -0
- {skeleton_framework-0.1.0 → skeleton_framework-0.1.1}/skeleton/infrastructure/bootstrap/src/templates/config/skeleton-servers.json +0 -0
- {skeleton_framework-0.1.0 → skeleton_framework-0.1.1}/skeleton/infrastructure/common/__init__.py +0 -0
- {skeleton_framework-0.1.0 → skeleton_framework-0.1.1}/skeleton/infrastructure/common/config.json +0 -0
- {skeleton_framework-0.1.0 → skeleton_framework-0.1.1}/skeleton/infrastructure/common/src/__init__.py +0 -0
- {skeleton_framework-0.1.0 → skeleton_framework-0.1.1}/skeleton/infrastructure/common/src/config.py +0 -0
- {skeleton_framework-0.1.0 → skeleton_framework-0.1.1}/skeleton/infrastructure/common/src/constants.py +0 -0
- {skeleton_framework-0.1.0 → skeleton_framework-0.1.1}/skeleton/infrastructure/common/src/context.py +0 -0
- {skeleton_framework-0.1.0 → skeleton_framework-0.1.1}/skeleton/infrastructure/common/src/env.py +0 -0
- {skeleton_framework-0.1.0 → skeleton_framework-0.1.1}/skeleton/infrastructure/common/src/layout.py +0 -0
- {skeleton_framework-0.1.0 → skeleton_framework-0.1.1}/skeleton/infrastructure/common/src/loader.py +0 -0
- {skeleton_framework-0.1.0 → skeleton_framework-0.1.1}/skeleton/infrastructure/common/src/repository.py +0 -0
- {skeleton_framework-0.1.0 → skeleton_framework-0.1.1}/skeleton/infrastructure/common/src/utils.py +0 -0
- {skeleton_framework-0.1.0 → skeleton_framework-0.1.1}/skeleton/infrastructure/gateway/__init__.py +0 -0
- {skeleton_framework-0.1.0 → skeleton_framework-0.1.1}/skeleton/infrastructure/gateway/settings/proxy.json +0 -0
- {skeleton_framework-0.1.0 → skeleton_framework-0.1.1}/skeleton/infrastructure/gateway/settings/services.json +0 -0
- {skeleton_framework-0.1.0 → skeleton_framework-0.1.1}/skeleton/infrastructure/gateway/src/__init__.py +0 -0
- {skeleton_framework-0.1.0 → skeleton_framework-0.1.1}/skeleton/infrastructure/gateway/src/app.py +0 -0
- {skeleton_framework-0.1.0 → skeleton_framework-0.1.1}/skeleton/infrastructure/gateway/src/client.py +0 -0
- {skeleton_framework-0.1.0 → skeleton_framework-0.1.1}/skeleton/infrastructure/gateway/src/config.py +0 -0
- {skeleton_framework-0.1.0 → skeleton_framework-0.1.1}/skeleton/infrastructure/gateway/src/context.py +0 -0
- {skeleton_framework-0.1.0 → skeleton_framework-0.1.1}/skeleton/infrastructure/gateway/src/headers.py +0 -0
- {skeleton_framework-0.1.0 → skeleton_framework-0.1.1}/skeleton/infrastructure/gateway/src/lifespan.py +0 -0
- {skeleton_framework-0.1.0 → skeleton_framework-0.1.1}/skeleton/infrastructure/gateway/src/loader.py +0 -0
- {skeleton_framework-0.1.0 → skeleton_framework-0.1.1}/skeleton/infrastructure/gateway/src/logging.py +0 -0
- {skeleton_framework-0.1.0 → skeleton_framework-0.1.1}/skeleton/infrastructure/gateway/src/main.py +0 -0
- {skeleton_framework-0.1.0 → skeleton_framework-0.1.1}/skeleton/infrastructure/gateway/src/parser.py +0 -0
- {skeleton_framework-0.1.0 → skeleton_framework-0.1.1}/skeleton/infrastructure/gateway/src/registry.py +0 -0
- {skeleton_framework-0.1.0 → skeleton_framework-0.1.1}/skeleton/infrastructure/gateway/src/reverseproxy.py +0 -0
- {skeleton_framework-0.1.0 → skeleton_framework-0.1.1}/skeleton/infrastructure/gateway/src/router.py +0 -0
- {skeleton_framework-0.1.0 → skeleton_framework-0.1.1}/skeleton/infrastructure/gateway/src/schemas.py +0 -0
- {skeleton_framework-0.1.0 → skeleton_framework-0.1.1}/skeleton/infrastructure/gateway/src/service.py +0 -0
- {skeleton_framework-0.1.0 → skeleton_framework-0.1.1}/skeleton/infrastructure/gateway/src/utils.py +0 -0
- {skeleton_framework-0.1.0 → skeleton_framework-0.1.1}/skeleton/infrastructure/gateway/src/validation.py +0 -0
- {skeleton_framework-0.1.0 → skeleton_framework-0.1.1}/skeleton/infrastructure/layout.json +0 -0
- {skeleton_framework-0.1.0 → skeleton_framework-0.1.1}/skeleton/infrastructure/runners/__init__.py +0 -0
- {skeleton_framework-0.1.0 → skeleton_framework-0.1.1}/skeleton/infrastructure/runners/src/__init__.py +0 -0
- {skeleton_framework-0.1.0 → skeleton_framework-0.1.1}/skeleton/infrastructure/runners/src/actions.py +0 -0
- {skeleton_framework-0.1.0 → skeleton_framework-0.1.1}/skeleton/infrastructure/runners/src/browser.py +0 -0
- {skeleton_framework-0.1.0 → skeleton_framework-0.1.1}/skeleton/infrastructure/runners/src/cmd.py +0 -0
- {skeleton_framework-0.1.0 → skeleton_framework-0.1.1}/skeleton/infrastructure/runners/src/command.py +0 -0
- {skeleton_framework-0.1.0 → skeleton_framework-0.1.1}/skeleton/infrastructure/runners/src/frontend.py +0 -0
- {skeleton_framework-0.1.0 → skeleton_framework-0.1.1}/skeleton/infrastructure/runners/src/gateway.py +0 -0
- {skeleton_framework-0.1.0 → skeleton_framework-0.1.1}/skeleton/infrastructure/runners/src/hook.py +0 -0
- {skeleton_framework-0.1.0 → skeleton_framework-0.1.1}/skeleton/infrastructure/runners/src/main.py +0 -0
- {skeleton_framework-0.1.0 → skeleton_framework-0.1.1}/skeleton/infrastructure/runners/src/packages.py +0 -0
- {skeleton_framework-0.1.0 → skeleton_framework-0.1.1}/skeleton/infrastructure/runners/src/parser.py +0 -0
- {skeleton_framework-0.1.0 → skeleton_framework-0.1.1}/skeleton/infrastructure/runners/src/process.py +0 -0
- {skeleton_framework-0.1.0 → skeleton_framework-0.1.1}/skeleton/infrastructure/runners/src/services.py +0 -0
- {skeleton_framework-0.1.0 → skeleton_framework-0.1.1}/skeleton/infrastructure/runners/src/utils.py +0 -0
- {skeleton_framework-0.1.0 → skeleton_framework-0.1.1}/skeleton/infrastructure/runners/src/validation.py +0 -0
- {skeleton_framework-0.1.0 → skeleton_framework-0.1.1}/skeleton/packages/.skeleton/skeleton-cli-1.0.0.tgz +0 -0
- {skeleton_framework-0.1.0 → skeleton_framework-0.1.1}/skeleton/packages/.skeleton/skeleton-webpack-1.0.0.tgz +0 -0
- {skeleton_framework-0.1.0 → skeleton_framework-0.1.1}/skeleton/root.py +0 -0
- {skeleton_framework-0.1.0 → skeleton_framework-0.1.1}/skeleton_framework.egg-info/SOURCES.txt +0 -0
- {skeleton_framework-0.1.0 → skeleton_framework-0.1.1}/skeleton_framework.egg-info/dependency_links.txt +0 -0
- {skeleton_framework-0.1.0 → skeleton_framework-0.1.1}/skeleton_framework.egg-info/entry_points.txt +0 -0
- {skeleton_framework-0.1.0 → skeleton_framework-0.1.1}/skeleton_framework.egg-info/requires.txt +0 -0
- {skeleton_framework-0.1.0 → skeleton_framework-0.1.1}/skeleton_framework.egg-info/top_level.txt +0 -0
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: skeleton-framework
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.1
|
|
4
4
|
Summary: A full-stack app framework: Python orchestration + FastAPI + WebPack frontend.
|
|
5
|
+
Author-email: lambdadotjoburg <lambdadotjoburg@gmail.com>
|
|
5
6
|
License-Expression: LicenseRef-Proprietary
|
|
7
|
+
Project-URL: Homepage, https://github.com/lambdadotjoburg/skeleton
|
|
8
|
+
Project-URL: Repository, https://github.com/lambdadotjoburg/skeleton
|
|
9
|
+
Project-URL: Issues, https://github.com/lambdadotjoburg/skeleton/issues
|
|
6
10
|
Requires-Python: >=3.11
|
|
7
11
|
Description-Content-Type: text/markdown
|
|
8
12
|
License-File: LICENSE
|
|
@@ -14,18 +18,20 @@ Dynamic: license-file
|
|
|
14
18
|
|
|
15
19
|
# Skeleton Framework
|
|
16
20
|
|
|
17
|
-
|
|
21
|
+

|
|
18
22
|
|
|
19
|
-
Skeleton is a full-stack application framework that combines
|
|
23
|
+
Skeleton is a full-stack application orchestration framework that combines
|
|
24
|
+
Python orchestration, a FastAPI reverse-proxy gateway, a Python backend & TypeScript frontend.
|
|
20
25
|
|
|
21
|
-
It provides a structured development workflow for configuring,
|
|
26
|
+
It provides a structured development workflow for configuring,
|
|
27
|
+
initializing, installing, running & building full-stack applications.
|
|
22
28
|
|
|
23
29
|
## Features
|
|
24
30
|
|
|
25
31
|
- **Python orchestration** for application setup and service execution.
|
|
26
32
|
- **FastAPI gateway** for centralized request routing and communication with backend services.
|
|
27
33
|
- **Python backend** for application APIs.
|
|
28
|
-
- **TypeScript frontend** with
|
|
34
|
+
- **TypeScript frontend** with Webpack tooling.
|
|
29
35
|
- **Configurable project structure** through JSON configuration files.
|
|
30
36
|
- **Separate environments** for framework development and client application dependencies.
|
|
31
37
|
- **Command-line tooling** for initialization, development, building, and cleanup.
|
|
@@ -34,16 +40,16 @@ It provides a structured development workflow for configuring, initializing, ins
|
|
|
34
40
|
|
|
35
41
|
Skeleton separates the application into cooperating layers:
|
|
36
42
|
|
|
37
|
-
| Layer
|
|
38
|
-
|
|
39
|
-
| Orchestration and CLI
|
|
40
|
-
| Gateway and backend APIs
|
|
41
|
-
| HTTP server
|
|
42
|
-
| HTTP communication
|
|
43
|
-
| Frontend
|
|
44
|
-
| Frontend bundling
|
|
45
|
-
| Development file watching | watchfiles
|
|
46
|
-
| Dependency management
|
|
43
|
+
| Layer | Technology |
|
|
44
|
+
|---------------------------|-------------|
|
|
45
|
+
| Orchestration and CLI | Python |
|
|
46
|
+
| Gateway and backend APIs | FastAPI |
|
|
47
|
+
| HTTP server | Uvicorn |
|
|
48
|
+
| HTTP communication | HTTPX |
|
|
49
|
+
| Frontend | TypeScript |
|
|
50
|
+
| Frontend bundling | Webpack |
|
|
51
|
+
| Development file watching | watchfiles |
|
|
52
|
+
| Dependency management | pip and npm |
|
|
47
53
|
|
|
48
54
|
The gateway provides a central entry point for browser requests and coordinates communication between the frontend and backend.
|
|
49
55
|
|
|
@@ -51,9 +57,8 @@ The gateway provides a central entry point for browser requests and coordinates
|
|
|
51
57
|
|
|
52
58
|
Before getting started, install:
|
|
53
59
|
|
|
54
|
-
- Python 3.11 or later.
|
|
60
|
+
- Python 3.11 or later & pip.
|
|
55
61
|
- Node.js and npm.
|
|
56
|
-
- pip, included with standard Python installations.
|
|
57
62
|
|
|
58
63
|
## Installation
|
|
59
64
|
|
|
@@ -63,6 +68,10 @@ Install Skeleton from PyPI:
|
|
|
63
68
|
python -m pip install skeleton-framework
|
|
64
69
|
```
|
|
65
70
|
|
|
71
|
+

|
|
72
|
+
|
|
73
|
+

|
|
74
|
+
|
|
66
75
|
The installed Python distribution provides the `skeleton` command.
|
|
67
76
|
|
|
68
77
|
## Quickstart
|
|
@@ -80,6 +89,8 @@ Configure the project, initialize its files, and install its dependencies:
|
|
|
80
89
|
skeleton --quickstart
|
|
81
90
|
```
|
|
82
91
|
|
|
92
|
+

|
|
93
|
+
|
|
83
94
|
This combines the configuration, initialization, and installation stages.
|
|
84
95
|
|
|
85
96
|
To run the application:
|
|
@@ -100,6 +111,8 @@ Skeleton also exposes the individual stages when you want to configure the appli
|
|
|
100
111
|
skeleton --config
|
|
101
112
|
```
|
|
102
113
|
|
|
114
|
+

|
|
115
|
+
|
|
103
116
|
This generates the project's configuration files:
|
|
104
117
|
|
|
105
118
|
- `skeleton-layout.json` — defines the application layout.
|
|
@@ -116,6 +129,8 @@ Review and customize these files before initialization if necessary.
|
|
|
116
129
|
skeleton --init
|
|
117
130
|
```
|
|
118
131
|
|
|
132
|
+

|
|
133
|
+
|
|
119
134
|
Initialization creates the configured frontend and backend structure from the framework's templates, prepares dependency manifests, and configures the local frontend tooling packages.
|
|
120
135
|
|
|
121
136
|
### 3. Install dependencies
|
|
@@ -124,6 +139,8 @@ Initialization creates the configured frontend and backend structure from the fr
|
|
|
124
139
|
skeleton --install
|
|
125
140
|
```
|
|
126
141
|
|
|
142
|
+

|
|
143
|
+
|
|
127
144
|
This installs frontend dependencies using npm and backend Python dependencies into the backend's `.venv` environment.
|
|
128
145
|
|
|
129
146
|
### 4. Start services
|
|
@@ -135,22 +152,24 @@ skeleton --start
|
|
|
135
152
|
You can also explicitly select services:
|
|
136
153
|
|
|
137
154
|
```bash
|
|
138
|
-
skeleton --start frontend gateway
|
|
155
|
+
skeleton --start frontend gateway --open
|
|
139
156
|
```
|
|
140
157
|
|
|
158
|
+

|
|
159
|
+
|
|
141
160
|
The selected services and runtime options determine which processes are started.
|
|
142
161
|
|
|
143
162
|
## Frontend commands
|
|
144
163
|
|
|
145
164
|
Run these commands from the client project root:
|
|
146
165
|
|
|
147
|
-
| Command
|
|
148
|
-
|
|
149
|
-
| `skeleton --serve`
|
|
150
|
-
| `skeleton --build`
|
|
151
|
-
| `skeleton --preview` | Run the configured frontend preview script.
|
|
152
|
-
| `skeleton --clean`
|
|
153
|
-
| `skeleton --purge`
|
|
166
|
+
| Command | Purpose |
|
|
167
|
+
|----------------------|--------------------------------------------------------------------------|
|
|
168
|
+
| `skeleton --serve` | Start the frontend development server. |
|
|
169
|
+
| `skeleton --build` | Build the frontend for distribution. |
|
|
170
|
+
| `skeleton --preview` | Run the configured frontend preview script. |
|
|
171
|
+
| `skeleton --clean` | Remove generated frontend build artifacts. |
|
|
172
|
+
| `skeleton --purge` | Remove frontend build artifacts and disposable development dependencies. |
|
|
154
173
|
|
|
155
174
|
These commands invoke the corresponding scripts defined in the configured frontend directory's `package.json`.
|
|
156
175
|
|
|
@@ -158,10 +177,10 @@ These commands invoke the corresponding scripts defined in the configured fronte
|
|
|
158
177
|
|
|
159
178
|
The default development configuration uses the following ports:
|
|
160
179
|
|
|
161
|
-
| Service
|
|
162
|
-
|
|
163
|
-
| Gateway / reverse proxy
|
|
164
|
-
| Backend API
|
|
180
|
+
| Service | Address |
|
|
181
|
+
|-----------------------------|-------------------------|
|
|
182
|
+
| Gateway / reverse proxy | `http://127.0.0.1:8000` |
|
|
183
|
+
| Backend API | `http://127.0.0.1:8080` |
|
|
165
184
|
| Frontend development server | `http://127.0.0.1:3000` |
|
|
166
185
|
|
|
167
186
|
The gateway is the normal entry point for browser access.
|
|
@@ -182,7 +201,9 @@ Actual routes depend on the application's server and gateway configuration.
|
|
|
182
201
|
|
|
183
202
|
## Project structure
|
|
184
203
|
|
|
185
|
-
A generated client project follows the configured layout.
|
|
204
|
+
A generated client project follows the configured layout.
|
|
205
|
+
|
|
206
|
+
A typical structure is:
|
|
186
207
|
|
|
187
208
|
```text
|
|
188
209
|
my-app/
|
|
@@ -195,7 +216,11 @@ my-app/
|
|
|
195
216
|
└── .skeleton/
|
|
196
217
|
```
|
|
197
218
|
|
|
198
|
-
The frontend contains the TypeScript application and its npm tooling.
|
|
219
|
+
The frontend contains the TypeScript application and its npm tooling.
|
|
220
|
+
|
|
221
|
+
The backend contains the Python application and its own virtual environment.
|
|
222
|
+
|
|
223
|
+
The `.skeleton/` directory holds local framework tooling and generated assets.
|
|
199
224
|
|
|
200
225
|
The exact structure depends on the project's configuration.
|
|
201
226
|
|
|
@@ -203,9 +228,15 @@ The exact structure depends on the project's configuration.
|
|
|
203
228
|
|
|
204
229
|
Run `skeleton --clean` to remove generated frontend build outputs.
|
|
205
230
|
|
|
206
|
-
Run `skeleton --purge`
|
|
231
|
+
Run `skeleton --purge` if you want to remove the generated build outputs & disposable frontend development dependencies.
|
|
232
|
+
|
|
233
|
+
**Warning:**
|
|
234
|
+
|
|
235
|
+
Purging is destructive
|
|
207
236
|
|
|
208
|
-
|
|
237
|
+
It may remove `node_modules`, lockfiles, and generated local tooling artifacts.
|
|
238
|
+
|
|
239
|
+
Dependencies may need to be installed again.
|
|
209
240
|
|
|
210
241
|
## Troubleshooting
|
|
211
242
|
|
|
@@ -225,21 +256,23 @@ From the client project root, run:
|
|
|
225
256
|
skeleton --install
|
|
226
257
|
```
|
|
227
258
|
|
|
228
|
-
If the project has not yet been initialized, run `skeleton --init` first.
|
|
259
|
+
If the project has not yet been initialized, run `skeleton --config` followed by `skeleton --init` first.
|
|
229
260
|
|
|
230
261
|
### Application startup fails
|
|
231
262
|
|
|
232
263
|
Check that:
|
|
233
264
|
|
|
234
|
-
- The project has been configured and initialized.
|
|
235
|
-
- Dependencies have been installed.
|
|
265
|
+
- The project has been configured and initialized `skeleton-layout.json`
|
|
266
|
+
- Dependencies have been installed `skeleton-dependencies.json`
|
|
236
267
|
- The selected services are included in the startup command.
|
|
237
|
-
- The required ports are available.
|
|
268
|
+
- The required ports are available `skeleton-servers.json`.
|
|
238
269
|
- The server configuration matches the configured project layout.
|
|
239
270
|
|
|
240
271
|
### Framework tooling packages are missing
|
|
241
272
|
|
|
242
|
-
If working directly from the framework source repository,
|
|
273
|
+
If working directly from the framework source repository,
|
|
274
|
+
run the framework's packaging command before initializing
|
|
275
|
+
a client project:
|
|
243
276
|
|
|
244
277
|
```bash
|
|
245
278
|
python run.py --pack
|
|
@@ -286,12 +319,20 @@ Skeleton is an experimental framework under active development. Its goal is to p
|
|
|
286
319
|
|
|
287
320
|
These commands are intended for contributors working in the Skeleton framework source repository, not ordinary client projects.
|
|
288
321
|
|
|
322
|
+
To get the skeleton framework onto your local machine for development, clone:
|
|
323
|
+
|
|
324
|
+
[https://github.com/lambdadotjoburg/skeleton.git](https://github.com/lambdadotjoburg/skeleton.git)
|
|
325
|
+
|
|
326
|
+

|
|
327
|
+
|
|
289
328
|
### Initialize the framework development environment
|
|
290
329
|
|
|
291
330
|
```bash
|
|
292
331
|
python run.py --bootstrap
|
|
293
332
|
```
|
|
294
333
|
|
|
334
|
+

|
|
335
|
+
|
|
295
336
|
This combines `--init` and `--install` to initialize and install the framework's development environment.
|
|
296
337
|
|
|
297
338
|
### Build the framework distribution
|
|
@@ -300,7 +341,12 @@ This combines `--init` and `--install` to initialize and install the framework's
|
|
|
300
341
|
python run.py --dist
|
|
301
342
|
```
|
|
302
343
|
|
|
303
|
-
|
|
344
|
+

|
|
345
|
+
|
|
346
|
+
This combines `--pack` and `--build`.
|
|
347
|
+
|
|
348
|
+
It prepares the distributable tooling packages
|
|
349
|
+
& builds the Python distribution in `dist/`.
|
|
304
350
|
|
|
305
351
|
### Cleanup
|
|
306
352
|
|
|
@@ -313,7 +359,9 @@ The framework's Python development environment and root `requirements.txt` are p
|
|
|
313
359
|
|
|
314
360
|
## Framework Developer: Testing a Local Installation
|
|
315
361
|
|
|
316
|
-
Use this workflow to test the locally built `skeleton-framework` distribution in a separate client project.
|
|
362
|
+
Use this workflow to test the locally built `skeleton-framework` distribution in a separate client project.
|
|
363
|
+
|
|
364
|
+
This verifies that the installed package works independently of the framework source repository.
|
|
317
365
|
|
|
318
366
|
### 1. Build the distribution
|
|
319
367
|
|
|
@@ -355,9 +403,13 @@ From the test project directory:
|
|
|
355
403
|
python -m pip install --force-reinstall ../framework/dist/skeleton_framework-0.1.0-py3-none-any.whl
|
|
356
404
|
```
|
|
357
405
|
|
|
358
|
-
Adjust the relative path, wheel filename
|
|
406
|
+
Adjust the relative path, wheel filename & version to match your framework checkout and build output.
|
|
407
|
+
|
|
408
|
+
The `--force-reinstall` option reinstalls the wheel even if that version is already present.
|
|
359
409
|
|
|
360
|
-
|
|
410
|
+
`--no-deps` prevents pip from reinstalling the package's dependencies.
|
|
411
|
+
|
|
412
|
+
Use this option only when those dependencies are already available in the environment, otherwise, omit `--no-deps`.
|
|
361
413
|
|
|
362
414
|
### 5. Verify the installation
|
|
363
415
|
|
|
@@ -412,12 +464,14 @@ python run.py --dist
|
|
|
412
464
|
Then reinstall the newly built wheel in the test project's virtual environment using the installation command above.
|
|
413
465
|
|
|
414
466
|
This workflow lets you test packaging, bundled tooling, configuration files, templates,
|
|
415
|
-
|
|
467
|
+
& CLI behavior without running the client project directly from the framework source tree.
|
|
416
468
|
|
|
417
469
|
**Important:**
|
|
470
|
+
|
|
418
471
|
The framework development environment and the test project's `.venv` are independent.
|
|
419
|
-
|
|
420
|
-
|
|
472
|
+
|
|
473
|
+
Install the locally built wheel into the test environment
|
|
474
|
+
& run the client commands from the test project directory.
|
|
421
475
|
|
|
422
476
|
## Licence
|
|
423
477
|
|
|
@@ -426,8 +480,8 @@ Skeleton Framework is proprietary software. Copyright © 2026 lambdadotjoburg. A
|
|
|
426
480
|
The source code is publicly available for inspection, but public availability
|
|
427
481
|
does not grant unrestricted rights to use, modify, or redistribute the framework.
|
|
428
482
|
|
|
429
|
-
Personal learning, educational activities, and non-commercial experimentation
|
|
430
|
-
under the terms of the root [LICENSE](./LICENSE) file.
|
|
483
|
+
Personal learning, educational activities, and non-commercial experimentation
|
|
484
|
+
are permitted under the terms of the root [LICENSE](./LICENSE) file.
|
|
431
485
|
|
|
432
486
|
Commercial use requires a separate paid licence from the copyright holder.
|
|
433
487
|
Redistribution requires prior written permission.
|
|
@@ -1,31 +1,19 @@
|
|
|
1
|
-
Metadata-Version: 2.4
|
|
2
|
-
Name: skeleton-framework
|
|
3
|
-
Version: 0.1.0
|
|
4
|
-
Summary: A full-stack app framework: Python orchestration + FastAPI + WebPack frontend.
|
|
5
|
-
License-Expression: LicenseRef-Proprietary
|
|
6
|
-
Requires-Python: >=3.11
|
|
7
|
-
Description-Content-Type: text/markdown
|
|
8
|
-
License-File: LICENSE
|
|
9
|
-
Requires-Dist: uvicorn
|
|
10
|
-
Requires-Dist: fastapi
|
|
11
|
-
Requires-Dist: httpx
|
|
12
|
-
Requires-Dist: watchfiles
|
|
13
|
-
Dynamic: license-file
|
|
14
|
-
|
|
15
1
|
# Skeleton Framework
|
|
16
2
|
|
|
17
|
-
|
|
3
|
+

|
|
18
4
|
|
|
19
|
-
Skeleton is a full-stack application framework that combines
|
|
5
|
+
Skeleton is a full-stack application orchestration framework that combines
|
|
6
|
+
Python orchestration, a FastAPI reverse-proxy gateway, a Python backend & TypeScript frontend.
|
|
20
7
|
|
|
21
|
-
It provides a structured development workflow for configuring,
|
|
8
|
+
It provides a structured development workflow for configuring,
|
|
9
|
+
initializing, installing, running & building full-stack applications.
|
|
22
10
|
|
|
23
11
|
## Features
|
|
24
12
|
|
|
25
13
|
- **Python orchestration** for application setup and service execution.
|
|
26
14
|
- **FastAPI gateway** for centralized request routing and communication with backend services.
|
|
27
15
|
- **Python backend** for application APIs.
|
|
28
|
-
- **TypeScript frontend** with
|
|
16
|
+
- **TypeScript frontend** with Webpack tooling.
|
|
29
17
|
- **Configurable project structure** through JSON configuration files.
|
|
30
18
|
- **Separate environments** for framework development and client application dependencies.
|
|
31
19
|
- **Command-line tooling** for initialization, development, building, and cleanup.
|
|
@@ -34,16 +22,16 @@ It provides a structured development workflow for configuring, initializing, ins
|
|
|
34
22
|
|
|
35
23
|
Skeleton separates the application into cooperating layers:
|
|
36
24
|
|
|
37
|
-
| Layer
|
|
38
|
-
|
|
39
|
-
| Orchestration and CLI
|
|
40
|
-
| Gateway and backend APIs
|
|
41
|
-
| HTTP server
|
|
42
|
-
| HTTP communication
|
|
43
|
-
| Frontend
|
|
44
|
-
| Frontend bundling
|
|
45
|
-
| Development file watching | watchfiles
|
|
46
|
-
| Dependency management
|
|
25
|
+
| Layer | Technology |
|
|
26
|
+
|---------------------------|-------------|
|
|
27
|
+
| Orchestration and CLI | Python |
|
|
28
|
+
| Gateway and backend APIs | FastAPI |
|
|
29
|
+
| HTTP server | Uvicorn |
|
|
30
|
+
| HTTP communication | HTTPX |
|
|
31
|
+
| Frontend | TypeScript |
|
|
32
|
+
| Frontend bundling | Webpack |
|
|
33
|
+
| Development file watching | watchfiles |
|
|
34
|
+
| Dependency management | pip and npm |
|
|
47
35
|
|
|
48
36
|
The gateway provides a central entry point for browser requests and coordinates communication between the frontend and backend.
|
|
49
37
|
|
|
@@ -51,9 +39,8 @@ The gateway provides a central entry point for browser requests and coordinates
|
|
|
51
39
|
|
|
52
40
|
Before getting started, install:
|
|
53
41
|
|
|
54
|
-
- Python 3.11 or later.
|
|
42
|
+
- Python 3.11 or later & pip.
|
|
55
43
|
- Node.js and npm.
|
|
56
|
-
- pip, included with standard Python installations.
|
|
57
44
|
|
|
58
45
|
## Installation
|
|
59
46
|
|
|
@@ -63,6 +50,10 @@ Install Skeleton from PyPI:
|
|
|
63
50
|
python -m pip install skeleton-framework
|
|
64
51
|
```
|
|
65
52
|
|
|
53
|
+

|
|
54
|
+
|
|
55
|
+

|
|
56
|
+
|
|
66
57
|
The installed Python distribution provides the `skeleton` command.
|
|
67
58
|
|
|
68
59
|
## Quickstart
|
|
@@ -80,6 +71,8 @@ Configure the project, initialize its files, and install its dependencies:
|
|
|
80
71
|
skeleton --quickstart
|
|
81
72
|
```
|
|
82
73
|
|
|
74
|
+

|
|
75
|
+
|
|
83
76
|
This combines the configuration, initialization, and installation stages.
|
|
84
77
|
|
|
85
78
|
To run the application:
|
|
@@ -100,6 +93,8 @@ Skeleton also exposes the individual stages when you want to configure the appli
|
|
|
100
93
|
skeleton --config
|
|
101
94
|
```
|
|
102
95
|
|
|
96
|
+

|
|
97
|
+
|
|
103
98
|
This generates the project's configuration files:
|
|
104
99
|
|
|
105
100
|
- `skeleton-layout.json` — defines the application layout.
|
|
@@ -116,6 +111,8 @@ Review and customize these files before initialization if necessary.
|
|
|
116
111
|
skeleton --init
|
|
117
112
|
```
|
|
118
113
|
|
|
114
|
+

|
|
115
|
+
|
|
119
116
|
Initialization creates the configured frontend and backend structure from the framework's templates, prepares dependency manifests, and configures the local frontend tooling packages.
|
|
120
117
|
|
|
121
118
|
### 3. Install dependencies
|
|
@@ -124,6 +121,8 @@ Initialization creates the configured frontend and backend structure from the fr
|
|
|
124
121
|
skeleton --install
|
|
125
122
|
```
|
|
126
123
|
|
|
124
|
+

|
|
125
|
+
|
|
127
126
|
This installs frontend dependencies using npm and backend Python dependencies into the backend's `.venv` environment.
|
|
128
127
|
|
|
129
128
|
### 4. Start services
|
|
@@ -135,22 +134,24 @@ skeleton --start
|
|
|
135
134
|
You can also explicitly select services:
|
|
136
135
|
|
|
137
136
|
```bash
|
|
138
|
-
skeleton --start frontend gateway
|
|
137
|
+
skeleton --start frontend gateway --open
|
|
139
138
|
```
|
|
140
139
|
|
|
140
|
+

|
|
141
|
+
|
|
141
142
|
The selected services and runtime options determine which processes are started.
|
|
142
143
|
|
|
143
144
|
## Frontend commands
|
|
144
145
|
|
|
145
146
|
Run these commands from the client project root:
|
|
146
147
|
|
|
147
|
-
| Command
|
|
148
|
-
|
|
149
|
-
| `skeleton --serve`
|
|
150
|
-
| `skeleton --build`
|
|
151
|
-
| `skeleton --preview` | Run the configured frontend preview script.
|
|
152
|
-
| `skeleton --clean`
|
|
153
|
-
| `skeleton --purge`
|
|
148
|
+
| Command | Purpose |
|
|
149
|
+
|----------------------|--------------------------------------------------------------------------|
|
|
150
|
+
| `skeleton --serve` | Start the frontend development server. |
|
|
151
|
+
| `skeleton --build` | Build the frontend for distribution. |
|
|
152
|
+
| `skeleton --preview` | Run the configured frontend preview script. |
|
|
153
|
+
| `skeleton --clean` | Remove generated frontend build artifacts. |
|
|
154
|
+
| `skeleton --purge` | Remove frontend build artifacts and disposable development dependencies. |
|
|
154
155
|
|
|
155
156
|
These commands invoke the corresponding scripts defined in the configured frontend directory's `package.json`.
|
|
156
157
|
|
|
@@ -158,10 +159,10 @@ These commands invoke the corresponding scripts defined in the configured fronte
|
|
|
158
159
|
|
|
159
160
|
The default development configuration uses the following ports:
|
|
160
161
|
|
|
161
|
-
| Service
|
|
162
|
-
|
|
163
|
-
| Gateway / reverse proxy
|
|
164
|
-
| Backend API
|
|
162
|
+
| Service | Address |
|
|
163
|
+
|-----------------------------|-------------------------|
|
|
164
|
+
| Gateway / reverse proxy | `http://127.0.0.1:8000` |
|
|
165
|
+
| Backend API | `http://127.0.0.1:8080` |
|
|
165
166
|
| Frontend development server | `http://127.0.0.1:3000` |
|
|
166
167
|
|
|
167
168
|
The gateway is the normal entry point for browser access.
|
|
@@ -182,7 +183,9 @@ Actual routes depend on the application's server and gateway configuration.
|
|
|
182
183
|
|
|
183
184
|
## Project structure
|
|
184
185
|
|
|
185
|
-
A generated client project follows the configured layout.
|
|
186
|
+
A generated client project follows the configured layout.
|
|
187
|
+
|
|
188
|
+
A typical structure is:
|
|
186
189
|
|
|
187
190
|
```text
|
|
188
191
|
my-app/
|
|
@@ -195,7 +198,11 @@ my-app/
|
|
|
195
198
|
└── .skeleton/
|
|
196
199
|
```
|
|
197
200
|
|
|
198
|
-
The frontend contains the TypeScript application and its npm tooling.
|
|
201
|
+
The frontend contains the TypeScript application and its npm tooling.
|
|
202
|
+
|
|
203
|
+
The backend contains the Python application and its own virtual environment.
|
|
204
|
+
|
|
205
|
+
The `.skeleton/` directory holds local framework tooling and generated assets.
|
|
199
206
|
|
|
200
207
|
The exact structure depends on the project's configuration.
|
|
201
208
|
|
|
@@ -203,9 +210,15 @@ The exact structure depends on the project's configuration.
|
|
|
203
210
|
|
|
204
211
|
Run `skeleton --clean` to remove generated frontend build outputs.
|
|
205
212
|
|
|
206
|
-
Run `skeleton --purge`
|
|
213
|
+
Run `skeleton --purge` if you want to remove the generated build outputs & disposable frontend development dependencies.
|
|
214
|
+
|
|
215
|
+
**Warning:**
|
|
216
|
+
|
|
217
|
+
Purging is destructive
|
|
207
218
|
|
|
208
|
-
|
|
219
|
+
It may remove `node_modules`, lockfiles, and generated local tooling artifacts.
|
|
220
|
+
|
|
221
|
+
Dependencies may need to be installed again.
|
|
209
222
|
|
|
210
223
|
## Troubleshooting
|
|
211
224
|
|
|
@@ -225,21 +238,23 @@ From the client project root, run:
|
|
|
225
238
|
skeleton --install
|
|
226
239
|
```
|
|
227
240
|
|
|
228
|
-
If the project has not yet been initialized, run `skeleton --init` first.
|
|
241
|
+
If the project has not yet been initialized, run `skeleton --config` followed by `skeleton --init` first.
|
|
229
242
|
|
|
230
243
|
### Application startup fails
|
|
231
244
|
|
|
232
245
|
Check that:
|
|
233
246
|
|
|
234
|
-
- The project has been configured and initialized.
|
|
235
|
-
- Dependencies have been installed.
|
|
247
|
+
- The project has been configured and initialized `skeleton-layout.json`
|
|
248
|
+
- Dependencies have been installed `skeleton-dependencies.json`
|
|
236
249
|
- The selected services are included in the startup command.
|
|
237
|
-
- The required ports are available.
|
|
250
|
+
- The required ports are available `skeleton-servers.json`.
|
|
238
251
|
- The server configuration matches the configured project layout.
|
|
239
252
|
|
|
240
253
|
### Framework tooling packages are missing
|
|
241
254
|
|
|
242
|
-
If working directly from the framework source repository,
|
|
255
|
+
If working directly from the framework source repository,
|
|
256
|
+
run the framework's packaging command before initializing
|
|
257
|
+
a client project:
|
|
243
258
|
|
|
244
259
|
```bash
|
|
245
260
|
python run.py --pack
|
|
@@ -286,12 +301,20 @@ Skeleton is an experimental framework under active development. Its goal is to p
|
|
|
286
301
|
|
|
287
302
|
These commands are intended for contributors working in the Skeleton framework source repository, not ordinary client projects.
|
|
288
303
|
|
|
304
|
+
To get the skeleton framework onto your local machine for development, clone:
|
|
305
|
+
|
|
306
|
+
[https://github.com/lambdadotjoburg/skeleton.git](https://github.com/lambdadotjoburg/skeleton.git)
|
|
307
|
+
|
|
308
|
+

|
|
309
|
+
|
|
289
310
|
### Initialize the framework development environment
|
|
290
311
|
|
|
291
312
|
```bash
|
|
292
313
|
python run.py --bootstrap
|
|
293
314
|
```
|
|
294
315
|
|
|
316
|
+

|
|
317
|
+
|
|
295
318
|
This combines `--init` and `--install` to initialize and install the framework's development environment.
|
|
296
319
|
|
|
297
320
|
### Build the framework distribution
|
|
@@ -300,7 +323,12 @@ This combines `--init` and `--install` to initialize and install the framework's
|
|
|
300
323
|
python run.py --dist
|
|
301
324
|
```
|
|
302
325
|
|
|
303
|
-
|
|
326
|
+

|
|
327
|
+
|
|
328
|
+
This combines `--pack` and `--build`.
|
|
329
|
+
|
|
330
|
+
It prepares the distributable tooling packages
|
|
331
|
+
& builds the Python distribution in `dist/`.
|
|
304
332
|
|
|
305
333
|
### Cleanup
|
|
306
334
|
|
|
@@ -313,7 +341,9 @@ The framework's Python development environment and root `requirements.txt` are p
|
|
|
313
341
|
|
|
314
342
|
## Framework Developer: Testing a Local Installation
|
|
315
343
|
|
|
316
|
-
Use this workflow to test the locally built `skeleton-framework` distribution in a separate client project.
|
|
344
|
+
Use this workflow to test the locally built `skeleton-framework` distribution in a separate client project.
|
|
345
|
+
|
|
346
|
+
This verifies that the installed package works independently of the framework source repository.
|
|
317
347
|
|
|
318
348
|
### 1. Build the distribution
|
|
319
349
|
|
|
@@ -355,9 +385,13 @@ From the test project directory:
|
|
|
355
385
|
python -m pip install --force-reinstall ../framework/dist/skeleton_framework-0.1.0-py3-none-any.whl
|
|
356
386
|
```
|
|
357
387
|
|
|
358
|
-
Adjust the relative path, wheel filename
|
|
388
|
+
Adjust the relative path, wheel filename & version to match your framework checkout and build output.
|
|
389
|
+
|
|
390
|
+
The `--force-reinstall` option reinstalls the wheel even if that version is already present.
|
|
359
391
|
|
|
360
|
-
|
|
392
|
+
`--no-deps` prevents pip from reinstalling the package's dependencies.
|
|
393
|
+
|
|
394
|
+
Use this option only when those dependencies are already available in the environment, otherwise, omit `--no-deps`.
|
|
361
395
|
|
|
362
396
|
### 5. Verify the installation
|
|
363
397
|
|
|
@@ -412,12 +446,14 @@ python run.py --dist
|
|
|
412
446
|
Then reinstall the newly built wheel in the test project's virtual environment using the installation command above.
|
|
413
447
|
|
|
414
448
|
This workflow lets you test packaging, bundled tooling, configuration files, templates,
|
|
415
|
-
|
|
449
|
+
& CLI behavior without running the client project directly from the framework source tree.
|
|
416
450
|
|
|
417
451
|
**Important:**
|
|
452
|
+
|
|
418
453
|
The framework development environment and the test project's `.venv` are independent.
|
|
419
|
-
|
|
420
|
-
|
|
454
|
+
|
|
455
|
+
Install the locally built wheel into the test environment
|
|
456
|
+
& run the client commands from the test project directory.
|
|
421
457
|
|
|
422
458
|
## Licence
|
|
423
459
|
|
|
@@ -426,8 +462,8 @@ Skeleton Framework is proprietary software. Copyright © 2026 lambdadotjoburg. A
|
|
|
426
462
|
The source code is publicly available for inspection, but public availability
|
|
427
463
|
does not grant unrestricted rights to use, modify, or redistribute the framework.
|
|
428
464
|
|
|
429
|
-
Personal learning, educational activities, and non-commercial experimentation
|
|
430
|
-
under the terms of the root [LICENSE](./LICENSE) file.
|
|
465
|
+
Personal learning, educational activities, and non-commercial experimentation
|
|
466
|
+
are permitted under the terms of the root [LICENSE](./LICENSE) file.
|
|
431
467
|
|
|
432
468
|
Commercial use requires a separate paid licence from the copyright holder.
|
|
433
469
|
Redistribution requires prior written permission.
|