skeleton-framework 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.
- skeleton_framework-0.1.0/LICENSE +146 -0
- skeleton_framework-0.1.0/PKG-INFO +440 -0
- skeleton_framework-0.1.0/README.md +426 -0
- skeleton_framework-0.1.0/pyproject.toml +34 -0
- skeleton_framework-0.1.0/setup.cfg +4 -0
- skeleton_framework-0.1.0/skeleton/__init__.py +0 -0
- skeleton_framework-0.1.0/skeleton/cli.py +151 -0
- skeleton_framework-0.1.0/skeleton/client.py +269 -0
- skeleton_framework-0.1.0/skeleton/infrastructure/__init__.py +1 -0
- skeleton_framework-0.1.0/skeleton/infrastructure/bootstrap/__init__.py +0 -0
- skeleton_framework-0.1.0/skeleton/infrastructure/bootstrap/src/__init__.py +0 -0
- skeleton_framework-0.1.0/skeleton/infrastructure/bootstrap/src/commands/__init__.py +0 -0
- skeleton_framework-0.1.0/skeleton/infrastructure/bootstrap/src/commands/client/__init__.py +0 -0
- skeleton_framework-0.1.0/skeleton/infrastructure/bootstrap/src/commands/client/init.py +486 -0
- skeleton_framework-0.1.0/skeleton/infrastructure/bootstrap/src/commands/client/install.py +113 -0
- skeleton_framework-0.1.0/skeleton/infrastructure/bootstrap/src/commands/dev/__init__.py +0 -0
- skeleton_framework-0.1.0/skeleton/infrastructure/bootstrap/src/commands/dev/build.py +80 -0
- skeleton_framework-0.1.0/skeleton/infrastructure/bootstrap/src/commands/dev/init.py +80 -0
- skeleton_framework-0.1.0/skeleton/infrastructure/bootstrap/src/commands/dev/install.py +168 -0
- skeleton_framework-0.1.0/skeleton/infrastructure/bootstrap/src/commands/dev/pack.py +55 -0
- skeleton_framework-0.1.0/skeleton/infrastructure/bootstrap/src/config.py +54 -0
- skeleton_framework-0.1.0/skeleton/infrastructure/bootstrap/src/copy.py +56 -0
- skeleton_framework-0.1.0/skeleton/infrastructure/bootstrap/src/load.py +221 -0
- skeleton_framework-0.1.0/skeleton/infrastructure/bootstrap/src/templates/app/backend/requirements.txt +1 -0
- skeleton_framework-0.1.0/skeleton/infrastructure/bootstrap/src/templates/app/backend/routes.json +10 -0
- skeleton_framework-0.1.0/skeleton/infrastructure/bootstrap/src/templates/app/backend/src/__init__.py +0 -0
- skeleton_framework-0.1.0/skeleton/infrastructure/bootstrap/src/templates/app/backend/src/main.py +35 -0
- skeleton_framework-0.1.0/skeleton/infrastructure/bootstrap/src/templates/app/frontend/package.json +21 -0
- skeleton_framework-0.1.0/skeleton/infrastructure/bootstrap/src/templates/app/frontend/skeleton-config.json +29 -0
- skeleton_framework-0.1.0/skeleton/infrastructure/bootstrap/src/templates/app/frontend/src/index.html +16 -0
- skeleton_framework-0.1.0/skeleton/infrastructure/bootstrap/src/templates/app/frontend/src/main.tsx +15 -0
- skeleton_framework-0.1.0/skeleton/infrastructure/bootstrap/src/templates/app/frontend/src/static/css/styles.css +28 -0
- skeleton_framework-0.1.0/skeleton/infrastructure/bootstrap/src/templates/app/frontend/src/static/img/skeleton.png +0 -0
- skeleton_framework-0.1.0/skeleton/infrastructure/bootstrap/src/templates/app/frontend/src/static/js/script.js +1 -0
- skeleton_framework-0.1.0/skeleton/infrastructure/bootstrap/src/templates/app/frontend/tsconfig.json +90 -0
- skeleton_framework-0.1.0/skeleton/infrastructure/bootstrap/src/templates/config/.gitignore +21 -0
- skeleton_framework-0.1.0/skeleton/infrastructure/bootstrap/src/templates/config/skeleton-dependencies.json +21 -0
- skeleton_framework-0.1.0/skeleton/infrastructure/bootstrap/src/templates/config/skeleton-layout.json +11 -0
- skeleton_framework-0.1.0/skeleton/infrastructure/bootstrap/src/templates/config/skeleton-schemas.json +20 -0
- skeleton_framework-0.1.0/skeleton/infrastructure/bootstrap/src/templates/config/skeleton-servers.json +16 -0
- skeleton_framework-0.1.0/skeleton/infrastructure/common/__init__.py +1 -0
- skeleton_framework-0.1.0/skeleton/infrastructure/common/config.json +8 -0
- skeleton_framework-0.1.0/skeleton/infrastructure/common/src/__init__.py +0 -0
- skeleton_framework-0.1.0/skeleton/infrastructure/common/src/config.py +37 -0
- skeleton_framework-0.1.0/skeleton/infrastructure/common/src/constants.py +4 -0
- skeleton_framework-0.1.0/skeleton/infrastructure/common/src/context.py +15 -0
- skeleton_framework-0.1.0/skeleton/infrastructure/common/src/env.py +12 -0
- skeleton_framework-0.1.0/skeleton/infrastructure/common/src/layout.py +68 -0
- skeleton_framework-0.1.0/skeleton/infrastructure/common/src/loader.py +8 -0
- skeleton_framework-0.1.0/skeleton/infrastructure/common/src/repository.py +12 -0
- skeleton_framework-0.1.0/skeleton/infrastructure/common/src/utils.py +26 -0
- skeleton_framework-0.1.0/skeleton/infrastructure/gateway/__init__.py +0 -0
- skeleton_framework-0.1.0/skeleton/infrastructure/gateway/settings/proxy.json +24 -0
- skeleton_framework-0.1.0/skeleton/infrastructure/gateway/settings/services.json +10 -0
- skeleton_framework-0.1.0/skeleton/infrastructure/gateway/src/__init__.py +0 -0
- skeleton_framework-0.1.0/skeleton/infrastructure/gateway/src/app.py +98 -0
- skeleton_framework-0.1.0/skeleton/infrastructure/gateway/src/client.py +68 -0
- skeleton_framework-0.1.0/skeleton/infrastructure/gateway/src/config.py +29 -0
- skeleton_framework-0.1.0/skeleton/infrastructure/gateway/src/context.py +31 -0
- skeleton_framework-0.1.0/skeleton/infrastructure/gateway/src/headers.py +17 -0
- skeleton_framework-0.1.0/skeleton/infrastructure/gateway/src/lifespan.py +17 -0
- skeleton_framework-0.1.0/skeleton/infrastructure/gateway/src/loader.py +113 -0
- skeleton_framework-0.1.0/skeleton/infrastructure/gateway/src/logging.py +37 -0
- skeleton_framework-0.1.0/skeleton/infrastructure/gateway/src/main.py +139 -0
- skeleton_framework-0.1.0/skeleton/infrastructure/gateway/src/parser.py +59 -0
- skeleton_framework-0.1.0/skeleton/infrastructure/gateway/src/registry.py +30 -0
- skeleton_framework-0.1.0/skeleton/infrastructure/gateway/src/reverseproxy.py +54 -0
- skeleton_framework-0.1.0/skeleton/infrastructure/gateway/src/router.py +74 -0
- skeleton_framework-0.1.0/skeleton/infrastructure/gateway/src/schemas.py +21 -0
- skeleton_framework-0.1.0/skeleton/infrastructure/gateway/src/service.py +123 -0
- skeleton_framework-0.1.0/skeleton/infrastructure/gateway/src/utils.py +48 -0
- skeleton_framework-0.1.0/skeleton/infrastructure/gateway/src/validation.py +89 -0
- skeleton_framework-0.1.0/skeleton/infrastructure/layout.json +12 -0
- skeleton_framework-0.1.0/skeleton/infrastructure/runners/__init__.py +0 -0
- skeleton_framework-0.1.0/skeleton/infrastructure/runners/src/__init__.py +0 -0
- skeleton_framework-0.1.0/skeleton/infrastructure/runners/src/actions.py +4 -0
- skeleton_framework-0.1.0/skeleton/infrastructure/runners/src/browser.py +18 -0
- skeleton_framework-0.1.0/skeleton/infrastructure/runners/src/cmd.py +7 -0
- skeleton_framework-0.1.0/skeleton/infrastructure/runners/src/command.py +7 -0
- skeleton_framework-0.1.0/skeleton/infrastructure/runners/src/frontend.py +35 -0
- skeleton_framework-0.1.0/skeleton/infrastructure/runners/src/gateway.py +104 -0
- skeleton_framework-0.1.0/skeleton/infrastructure/runners/src/hook.py +53 -0
- skeleton_framework-0.1.0/skeleton/infrastructure/runners/src/main.py +78 -0
- skeleton_framework-0.1.0/skeleton/infrastructure/runners/src/packages.py +35 -0
- skeleton_framework-0.1.0/skeleton/infrastructure/runners/src/parser.py +84 -0
- skeleton_framework-0.1.0/skeleton/infrastructure/runners/src/process.py +99 -0
- skeleton_framework-0.1.0/skeleton/infrastructure/runners/src/services.py +16 -0
- skeleton_framework-0.1.0/skeleton/infrastructure/runners/src/utils.py +6 -0
- skeleton_framework-0.1.0/skeleton/infrastructure/runners/src/validation.py +28 -0
- skeleton_framework-0.1.0/skeleton/packages/.skeleton/skeleton-cli-1.0.0.tgz +0 -0
- skeleton_framework-0.1.0/skeleton/packages/.skeleton/skeleton-webpack-1.0.0.tgz +0 -0
- skeleton_framework-0.1.0/skeleton/root.py +234 -0
- skeleton_framework-0.1.0/skeleton_framework.egg-info/PKG-INFO +440 -0
- skeleton_framework-0.1.0/skeleton_framework.egg-info/SOURCES.txt +96 -0
- skeleton_framework-0.1.0/skeleton_framework.egg-info/dependency_links.txt +1 -0
- skeleton_framework-0.1.0/skeleton_framework.egg-info/entry_points.txt +2 -0
- skeleton_framework-0.1.0/skeleton_framework.egg-info/requires.txt +4 -0
- skeleton_framework-0.1.0/skeleton_framework.egg-info/top_level.txt +1 -0
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
# Skeleton Framework Proprietary Licence
|
|
2
|
+
|
|
3
|
+
**Copyright © 2026 lambdadotjoburg. All rights reserved.**
|
|
4
|
+
|
|
5
|
+
This licence applies to Skeleton Framework, including its original source code,
|
|
6
|
+
framework components, documentation, templates, configuration files,
|
|
7
|
+
and associated materials owned by the copyright holder (collectively, the "Software").
|
|
8
|
+
|
|
9
|
+
By accessing, downloading, installing, or using the Software, you acknowledge the terms of this licence.
|
|
10
|
+
|
|
11
|
+
## 1. Ownership and Copyright
|
|
12
|
+
|
|
13
|
+
The Software is proprietary software. All copyright and other intellectual property rights
|
|
14
|
+
in the Software remain with the copyright holder, except for third-party materials governed
|
|
15
|
+
by their respective licences.
|
|
16
|
+
|
|
17
|
+
No ownership rights are transferred to any user by this licence.
|
|
18
|
+
All rights not expressly granted are reserved by the copyright holder.
|
|
19
|
+
|
|
20
|
+
## 2. Permitted Personal and Educational Use
|
|
21
|
+
|
|
22
|
+
Subject to the terms of this licence, the copyright holder grants individuals a limited,
|
|
23
|
+
non-exclusive, non-transferable, revocable licence to access and use the Software solely
|
|
24
|
+
for personal learning, educational activities, experimentation, and non-commercial evaluation.
|
|
25
|
+
|
|
26
|
+
This permission includes running the Software and making modifications reasonably necessary
|
|
27
|
+
for the permitted non-commercial purposes, provided that the Software or modifications are
|
|
28
|
+
not used for commercial purposes or redistributed without written permission.
|
|
29
|
+
|
|
30
|
+
This permission does not grant any right to commercially deploy, sell, sublicense,
|
|
31
|
+
distribute, or provide the Software as part of a commercial product or service.
|
|
32
|
+
|
|
33
|
+
## 3. Commercial Use Requires a Paid Licence
|
|
34
|
+
|
|
35
|
+
Commercial use is not permitted under the free personal and educational licence.
|
|
36
|
+
|
|
37
|
+
Any commercial use requires a separate written commercial licence issued by
|
|
38
|
+
the copyright holder and payment of the applicable licence fees, as specified in that agreement.
|
|
39
|
+
|
|
40
|
+
Commercial use includes, without limitation:
|
|
41
|
+
|
|
42
|
+
- Using the Software in a business, commercial product, or revenue-generating service.
|
|
43
|
+
- Deploying the Software for a commercial organisation or its customers.
|
|
44
|
+
- Incorporating the Software into a product or service offered for sale or commercial advantage.
|
|
45
|
+
- Providing access to the Software or a framework-based service as part of a paid offering.
|
|
46
|
+
|
|
47
|
+
The copyright holder may offer different commercial licence terms, fees,
|
|
48
|
+
usage limits, and support arrangements under separate written agreements.
|
|
49
|
+
|
|
50
|
+
## 4. Modification
|
|
51
|
+
|
|
52
|
+
Modification is permitted only within the scope of an applicable licence.
|
|
53
|
+
|
|
54
|
+
Users operating under the free personal and educational licence may modify
|
|
55
|
+
the Software solely for the permitted non-commercial purposes described in Section 2.
|
|
56
|
+
|
|
57
|
+
Commercial modifications, modifications outside the permitted scope,
|
|
58
|
+
and any other use not expressly authorised by this licence require
|
|
59
|
+
separate written permission or an applicable commercial licence.
|
|
60
|
+
|
|
61
|
+
Modifications do not transfer ownership of the original Software to
|
|
62
|
+
the person making them. Ownership and licensing of independently created
|
|
63
|
+
modifications will be determined by applicable law and any separate written agreement.
|
|
64
|
+
|
|
65
|
+
## 5. Redistribution and Sublicensing
|
|
66
|
+
|
|
67
|
+
Redistribution of the Software, in source-code or compiled form, requires the copyright holder's prior written permission.
|
|
68
|
+
|
|
69
|
+
Without that permission, you may not:
|
|
70
|
+
|
|
71
|
+
- Republish or distribute copies of the Software.
|
|
72
|
+
- Bundle or redistribute the Software with another product or package.
|
|
73
|
+
- Mirror or host copies of the Software for third-party distribution.
|
|
74
|
+
- Sublicense, sell, rent, lease, or otherwise transfer rights to the Software.
|
|
75
|
+
- Distribute modified versions of the Software.
|
|
76
|
+
|
|
77
|
+
Access to a public repository or package registry does not, by itself, grant permission to redistribute the Software.
|
|
78
|
+
|
|
79
|
+
## 6. Contributions
|
|
80
|
+
|
|
81
|
+
No contribution transfers copyright ownership to the copyright holder merely because it is submitted.
|
|
82
|
+
|
|
83
|
+
Contributions intended for inclusion in the Software must be accompanied by a separate written agreement,
|
|
84
|
+
or other expressly accepted contribution terms, establishing the rights necessary for the copyright holder
|
|
85
|
+
to use, modify, distribute, and license the contribution as intended.
|
|
86
|
+
|
|
87
|
+
Contributors remain responsible for ensuring they have the rights necessary to submit their contributions.
|
|
88
|
+
|
|
89
|
+
## 7. Third-Party Components
|
|
90
|
+
|
|
91
|
+
The Software may include or depend on third-party software, packages, libraries, or other materials.
|
|
92
|
+
|
|
93
|
+
Such components remain subject to their own applicable licences.
|
|
94
|
+
This licence does not override third-party licence obligations
|
|
95
|
+
or grant rights that the copyright holder does not possess.
|
|
96
|
+
|
|
97
|
+
Users are responsible for complying with applicable third-party licence terms.
|
|
98
|
+
|
|
99
|
+
## 8. Restrictions
|
|
100
|
+
|
|
101
|
+
Except as expressly authorised by this licence or applicable law,
|
|
102
|
+
you may not use the Software outside the scope of the permissions granted,
|
|
103
|
+
remove or misrepresent copyright notices, or claim ownership of the original Software.
|
|
104
|
+
|
|
105
|
+
Nothing in this licence excludes rights that cannot lawfully be excluded or restricted under applicable law.
|
|
106
|
+
|
|
107
|
+
## 9. Termination
|
|
108
|
+
|
|
109
|
+
Permission under this licence terminates automatically if you materially breach its terms.
|
|
110
|
+
Upon termination, you must cease the use that is no longer authorised and comply with applicable legal obligations.
|
|
111
|
+
|
|
112
|
+
Termination does not extinguish rights or obligations that have accrued before termination or provisions that by their nature continue to apply.
|
|
113
|
+
|
|
114
|
+
## 10. Disclaimer of Warranty
|
|
115
|
+
|
|
116
|
+
To the maximum extent permitted by applicable law, the Software is provided "AS IS"
|
|
117
|
+
and without warranties of any kind, whether express or implied, including warranties
|
|
118
|
+
of merchantability, fitness for a particular purpose, and non-infringement.
|
|
119
|
+
|
|
120
|
+
The copyright holder does not guarantee that the Software will be error-free, secure, uninterrupted, or suitable for any particular purpose.
|
|
121
|
+
|
|
122
|
+
## 11. Limitation of Liability
|
|
123
|
+
|
|
124
|
+
To the maximum extent permitted by applicable law, the copyright holder
|
|
125
|
+
will not be liable for indirect, incidental, special, consequential,
|
|
126
|
+
or exemplary damages arising from the use of, or inability to use, the Software.
|
|
127
|
+
|
|
128
|
+
Nothing in this section excludes or limits liability that cannot lawfully be excluded or limited.
|
|
129
|
+
|
|
130
|
+
## 12. Commercial Licensing and Contact
|
|
131
|
+
|
|
132
|
+
For commercial licensing, written permissions, redistribution requests, or contribution agreements, contact:
|
|
133
|
+
|
|
134
|
+
**Copyright holder:** lambdadotjoburg
|
|
135
|
+
**Email:** lambdadotjoburg@gmail.com
|
|
136
|
+
|
|
137
|
+
No commercial licence or redistribution permission is granted unless expressly agreed in writing by the copyright holder.
|
|
138
|
+
|
|
139
|
+
## 13. Governing Law
|
|
140
|
+
|
|
141
|
+
The governing law and jurisdiction for this licence should be specified
|
|
142
|
+
in a separate written agreement or, where applicable, determined under applicable law.
|
|
143
|
+
|
|
144
|
+
---
|
|
145
|
+
|
|
146
|
+
**All rights reserved.**
|
|
@@ -0,0 +1,440 @@
|
|
|
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
|
+
# Skeleton Framework
|
|
16
|
+
|
|
17
|
+
<img width="200px" src ="./skeleton.png"/>
|
|
18
|
+
|
|
19
|
+
Skeleton is a full-stack application framework that combines Python orchestration, a FastAPI reverse-proxy gateway, a Python backend, and a TypeScript frontend.
|
|
20
|
+
|
|
21
|
+
It provides a structured development workflow for configuring, initializing, installing, running, and building full-stack applications.
|
|
22
|
+
|
|
23
|
+
## Features
|
|
24
|
+
|
|
25
|
+
- **Python orchestration** for application setup and service execution.
|
|
26
|
+
- **FastAPI gateway** for centralized request routing and communication with backend services.
|
|
27
|
+
- **Python backend** for application APIs.
|
|
28
|
+
- **TypeScript frontend** with React and Webpack tooling.
|
|
29
|
+
- **Configurable project structure** through JSON configuration files.
|
|
30
|
+
- **Separate environments** for framework development and client application dependencies.
|
|
31
|
+
- **Command-line tooling** for initialization, development, building, and cleanup.
|
|
32
|
+
|
|
33
|
+
## Architecture
|
|
34
|
+
|
|
35
|
+
Skeleton separates the application into cooperating layers:
|
|
36
|
+
|
|
37
|
+
| Layer | Technology |
|
|
38
|
+
|---|---|
|
|
39
|
+
| Orchestration and CLI | Python |
|
|
40
|
+
| Gateway and backend APIs | FastAPI |
|
|
41
|
+
| HTTP server | Uvicorn |
|
|
42
|
+
| HTTP communication | HTTPX |
|
|
43
|
+
| Frontend | TypeScript and React |
|
|
44
|
+
| Frontend bundling | Webpack |
|
|
45
|
+
| Development file watching | watchfiles |
|
|
46
|
+
| Dependency management | pip and npm |
|
|
47
|
+
|
|
48
|
+
The gateway provides a central entry point for browser requests and coordinates communication between the frontend and backend.
|
|
49
|
+
|
|
50
|
+
## Requirements
|
|
51
|
+
|
|
52
|
+
Before getting started, install:
|
|
53
|
+
|
|
54
|
+
- Python 3.11 or later.
|
|
55
|
+
- Node.js and npm.
|
|
56
|
+
- pip, included with standard Python installations.
|
|
57
|
+
|
|
58
|
+
## Installation
|
|
59
|
+
|
|
60
|
+
Install Skeleton from PyPI:
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
python -m pip install skeleton-framework
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
The installed Python distribution provides the `skeleton` command.
|
|
67
|
+
|
|
68
|
+
## Quickstart
|
|
69
|
+
|
|
70
|
+
Create or enter an empty directory for your application:
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
mkdir my-app
|
|
74
|
+
cd my-app
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
Configure the project, initialize its files, and install its dependencies:
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
skeleton --quickstart
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
This combines the configuration, initialization, and installation stages.
|
|
84
|
+
|
|
85
|
+
To run the application:
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
skeleton --start
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
Follow the terminal output for service startup information and open the application at the configured local address.
|
|
92
|
+
|
|
93
|
+
## Client project workflow
|
|
94
|
+
|
|
95
|
+
Skeleton also exposes the individual stages when you want to configure the application before installing dependencies.
|
|
96
|
+
|
|
97
|
+
### 1. Generate configuration
|
|
98
|
+
|
|
99
|
+
```bash
|
|
100
|
+
skeleton --config
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
This generates the project's configuration files:
|
|
104
|
+
|
|
105
|
+
- `skeleton-layout.json` — defines the application layout.
|
|
106
|
+
- `skeleton-dependencies.json` — declares frontend and backend dependencies.
|
|
107
|
+
- `skeleton-schemas.json` — provides schema configuration.
|
|
108
|
+
- `skeleton-servers.json` — defines server configuration.
|
|
109
|
+
- `.gitignore` — establishes ignore rules for generated files.
|
|
110
|
+
|
|
111
|
+
Review and customize these files before initialization if necessary.
|
|
112
|
+
|
|
113
|
+
### 2. Initialize the project
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
skeleton --init
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
Initialization creates the configured frontend and backend structure from the framework's templates, prepares dependency manifests, and configures the local frontend tooling packages.
|
|
120
|
+
|
|
121
|
+
### 3. Install dependencies
|
|
122
|
+
|
|
123
|
+
```bash
|
|
124
|
+
skeleton --install
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
This installs frontend dependencies using npm and backend Python dependencies into the backend's `.venv` environment.
|
|
128
|
+
|
|
129
|
+
### 4. Start services
|
|
130
|
+
|
|
131
|
+
```bash
|
|
132
|
+
skeleton --start
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
You can also explicitly select services:
|
|
136
|
+
|
|
137
|
+
```bash
|
|
138
|
+
skeleton --start frontend gateway packages --open
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
The selected services and runtime options determine which processes are started.
|
|
142
|
+
|
|
143
|
+
## Frontend commands
|
|
144
|
+
|
|
145
|
+
Run these commands from the client project root:
|
|
146
|
+
|
|
147
|
+
| Command | Purpose |
|
|
148
|
+
|---|---|
|
|
149
|
+
| `skeleton --serve` | Start the frontend development server. |
|
|
150
|
+
| `skeleton --build` | Build the frontend for distribution. |
|
|
151
|
+
| `skeleton --preview` | Run the configured frontend preview script. |
|
|
152
|
+
| `skeleton --clean` | Remove generated frontend build artifacts. |
|
|
153
|
+
| `skeleton --purge` | Remove frontend build artifacts and disposable development dependencies. |
|
|
154
|
+
|
|
155
|
+
These commands invoke the corresponding scripts defined in the configured frontend directory's `package.json`.
|
|
156
|
+
|
|
157
|
+
## Default development ports
|
|
158
|
+
|
|
159
|
+
The default development configuration uses the following ports:
|
|
160
|
+
|
|
161
|
+
| Service | Address |
|
|
162
|
+
|---|---|
|
|
163
|
+
| Gateway / reverse proxy | `http://127.0.0.1:8000` |
|
|
164
|
+
| Backend API | `http://127.0.0.1:8080` |
|
|
165
|
+
| Frontend development server | `http://127.0.0.1:3000` |
|
|
166
|
+
|
|
167
|
+
The gateway is the normal entry point for browser access.
|
|
168
|
+
|
|
169
|
+
For example, the test API endpoint can be accessed through:
|
|
170
|
+
|
|
171
|
+
```text
|
|
172
|
+
http://127.0.0.1:8000/api/test
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
The corresponding backend endpoint may be available directly at:
|
|
176
|
+
|
|
177
|
+
```text
|
|
178
|
+
http://127.0.0.1:8080/test
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
Actual routes depend on the application's server and gateway configuration.
|
|
182
|
+
|
|
183
|
+
## Project structure
|
|
184
|
+
|
|
185
|
+
A generated client project follows the configured layout. A typical structure is:
|
|
186
|
+
|
|
187
|
+
```text
|
|
188
|
+
my-app/
|
|
189
|
+
├── skeleton-layout.json
|
|
190
|
+
├── skeleton-dependencies.json
|
|
191
|
+
├── skeleton-schemas.json
|
|
192
|
+
├── skeleton-servers.json
|
|
193
|
+
├── frontend/
|
|
194
|
+
├── backend/
|
|
195
|
+
└── .skeleton/
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
The frontend contains the TypeScript application and its npm tooling. The backend contains the Python application and its own virtual environment. The `.skeleton/` directory holds local framework tooling and generated assets.
|
|
199
|
+
|
|
200
|
+
The exact structure depends on the project's configuration.
|
|
201
|
+
|
|
202
|
+
## Cleanup
|
|
203
|
+
|
|
204
|
+
Run `skeleton --clean` to remove generated frontend build outputs.
|
|
205
|
+
|
|
206
|
+
Run `skeleton --purge` when you want to remove the generated build outputs and disposable frontend development dependencies.
|
|
207
|
+
|
|
208
|
+
**Warning:** Purging is destructive. It may remove `node_modules`, lockfiles, and generated local tooling artifacts. Dependencies may need to be installed again.
|
|
209
|
+
|
|
210
|
+
## Troubleshooting
|
|
211
|
+
|
|
212
|
+
### The command is not found
|
|
213
|
+
|
|
214
|
+
Confirm that Skeleton is installed in the Python environment whose scripts directory is available on your terminal's `PATH`.
|
|
215
|
+
|
|
216
|
+
```bash
|
|
217
|
+
python -m pip show skeleton-framework
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
### Frontend or backend dependencies are missing
|
|
221
|
+
|
|
222
|
+
From the client project root, run:
|
|
223
|
+
|
|
224
|
+
```bash
|
|
225
|
+
skeleton --install
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
If the project has not yet been initialized, run `skeleton --init` first.
|
|
229
|
+
|
|
230
|
+
### Application startup fails
|
|
231
|
+
|
|
232
|
+
Check that:
|
|
233
|
+
|
|
234
|
+
- The project has been configured and initialized.
|
|
235
|
+
- Dependencies have been installed.
|
|
236
|
+
- The selected services are included in the startup command.
|
|
237
|
+
- The required ports are available.
|
|
238
|
+
- The server configuration matches the configured project layout.
|
|
239
|
+
|
|
240
|
+
### Framework tooling packages are missing
|
|
241
|
+
|
|
242
|
+
If working directly from the framework source repository, run the framework's packaging command before initializing a client project:
|
|
243
|
+
|
|
244
|
+
```bash
|
|
245
|
+
python run.py --pack
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
## Framework development
|
|
249
|
+
|
|
250
|
+
These commands are intended for contributors working in the Skeleton framework source repository, not ordinary client projects.
|
|
251
|
+
|
|
252
|
+
Initialize the framework development environment:
|
|
253
|
+
|
|
254
|
+
```bash
|
|
255
|
+
python run.py --bootstrap
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
Prepare the framework's distributable tooling packages:
|
|
259
|
+
|
|
260
|
+
```bash
|
|
261
|
+
python run.py --pack
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
Build the Python distribution:
|
|
265
|
+
|
|
266
|
+
```bash
|
|
267
|
+
python run.py --build
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
Additional development and cleanup commands are available:
|
|
271
|
+
|
|
272
|
+
```bash
|
|
273
|
+
python run.py --init
|
|
274
|
+
python run.py --install
|
|
275
|
+
python run.py --clean
|
|
276
|
+
python run.py --purge
|
|
277
|
+
```
|
|
278
|
+
|
|
279
|
+
The framework's Python development environment and root `requirements.txt` are separate from the environments created for client applications.
|
|
280
|
+
|
|
281
|
+
## Project status
|
|
282
|
+
|
|
283
|
+
Skeleton is an experimental framework under active development. Its goal is to provide a clear, reproducible foundation for full-stack application development while keeping configuration, orchestration, frontend tooling, and backend services independently manageable.
|
|
284
|
+
|
|
285
|
+
## Framework development
|
|
286
|
+
|
|
287
|
+
These commands are intended for contributors working in the Skeleton framework source repository, not ordinary client projects.
|
|
288
|
+
|
|
289
|
+
### Initialize the framework development environment
|
|
290
|
+
|
|
291
|
+
```bash
|
|
292
|
+
python run.py --bootstrap
|
|
293
|
+
```
|
|
294
|
+
|
|
295
|
+
This combines `--init` and `--install` to initialize and install the framework's development environment.
|
|
296
|
+
|
|
297
|
+
### Build the framework distribution
|
|
298
|
+
|
|
299
|
+
```bash
|
|
300
|
+
python run.py --dist
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
This combines `--pack` and `--build`. It prepares the distributable tooling packages and builds the Python distribution in `dist/`.
|
|
304
|
+
|
|
305
|
+
### Cleanup
|
|
306
|
+
|
|
307
|
+
```bash
|
|
308
|
+
python run.py --clean
|
|
309
|
+
python run.py --purge
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
The framework's Python development environment and root `requirements.txt` are preserved by framework cleanup.
|
|
313
|
+
|
|
314
|
+
## Framework Developer: Testing a Local Installation
|
|
315
|
+
|
|
316
|
+
Use this workflow to test the locally built `skeleton-framework` distribution in a separate client project. This verifies that the installed package works independently of the framework source repository.
|
|
317
|
+
|
|
318
|
+
### 1. Build the distribution
|
|
319
|
+
|
|
320
|
+
From the framework repository root:
|
|
321
|
+
|
|
322
|
+
```bash
|
|
323
|
+
python run.py --dist
|
|
324
|
+
```
|
|
325
|
+
|
|
326
|
+
The generated wheel will be located in the framework's `dist/` directory.
|
|
327
|
+
|
|
328
|
+
### 2. Create a separate test project
|
|
329
|
+
|
|
330
|
+
From the framework repository root, create a sibling directory outside the framework source tree:
|
|
331
|
+
|
|
332
|
+
```bash
|
|
333
|
+
mkdir -p ../skeleton-test-project
|
|
334
|
+
cd ../skeleton-test-project
|
|
335
|
+
```
|
|
336
|
+
|
|
337
|
+
### 3. Create and activate the test environment
|
|
338
|
+
|
|
339
|
+
```bash
|
|
340
|
+
python -m venv .venv
|
|
341
|
+
source .venv/Scripts/activate
|
|
342
|
+
```
|
|
343
|
+
|
|
344
|
+
On macOS or Linux, use:
|
|
345
|
+
|
|
346
|
+
```bash
|
|
347
|
+
source .venv/bin/activate
|
|
348
|
+
```
|
|
349
|
+
|
|
350
|
+
### 4. Install the locally built wheel
|
|
351
|
+
|
|
352
|
+
From the test project directory:
|
|
353
|
+
|
|
354
|
+
```bash
|
|
355
|
+
python -m pip install --force-reinstall ../framework/dist/skeleton_framework-0.1.0-py3-none-any.whl
|
|
356
|
+
```
|
|
357
|
+
|
|
358
|
+
Adjust the relative path, wheel filename, and version to match your framework checkout and build output.
|
|
359
|
+
|
|
360
|
+
The `--force-reinstall` option reinstalls the wheel even if that version is already present. `--no-deps` prevents pip from reinstalling the package's dependencies; use this option when those dependencies are already available in the environment. Otherwise, omit `--no-deps`.
|
|
361
|
+
|
|
362
|
+
### 5. Verify the installation
|
|
363
|
+
|
|
364
|
+
```bash
|
|
365
|
+
python -m pip show skeleton-framework
|
|
366
|
+
python -m pip show -f skeleton-framework
|
|
367
|
+
```
|
|
368
|
+
|
|
369
|
+
The first command displays the installed distribution's metadata. The second lists its installed files.
|
|
370
|
+
|
|
371
|
+
### 6. Test the installed CLI
|
|
372
|
+
|
|
373
|
+
From the test project root, run the complete client setup:
|
|
374
|
+
|
|
375
|
+
```bash
|
|
376
|
+
skeleton --quickstart
|
|
377
|
+
```
|
|
378
|
+
|
|
379
|
+
Then start the application:
|
|
380
|
+
|
|
381
|
+
```bash
|
|
382
|
+
skeleton --start
|
|
383
|
+
```
|
|
384
|
+
|
|
385
|
+
Alternatively, test the individual setup stages:
|
|
386
|
+
|
|
387
|
+
```bash
|
|
388
|
+
skeleton --config
|
|
389
|
+
skeleton --init
|
|
390
|
+
skeleton --install
|
|
391
|
+
skeleton --start
|
|
392
|
+
```
|
|
393
|
+
|
|
394
|
+
You can also test the remaining client commands:
|
|
395
|
+
|
|
396
|
+
```bash
|
|
397
|
+
skeleton --serve
|
|
398
|
+
skeleton --build
|
|
399
|
+
skeleton --preview
|
|
400
|
+
skeleton --clean
|
|
401
|
+
skeleton --purge
|
|
402
|
+
```
|
|
403
|
+
|
|
404
|
+
### 7. Test framework changes
|
|
405
|
+
|
|
406
|
+
Whenever you modify the framework, rebuild the distribution from the framework repository:
|
|
407
|
+
|
|
408
|
+
```bash
|
|
409
|
+
python run.py --dist
|
|
410
|
+
```
|
|
411
|
+
|
|
412
|
+
Then reinstall the newly built wheel in the test project's virtual environment using the installation command above.
|
|
413
|
+
|
|
414
|
+
This workflow lets you test packaging, bundled tooling, configuration files, templates,
|
|
415
|
+
and CLI behavior without running the client project directly from the framework source tree.
|
|
416
|
+
|
|
417
|
+
**Important:**
|
|
418
|
+
The framework development environment and the test project's `.venv` are independent.
|
|
419
|
+
Install the locally built wheel into the test environment, and run the client commands
|
|
420
|
+
from the test project directory.
|
|
421
|
+
|
|
422
|
+
## Licence
|
|
423
|
+
|
|
424
|
+
Skeleton Framework is proprietary software. Copyright © 2026 lambdadotjoburg. All rights reserved.
|
|
425
|
+
|
|
426
|
+
The source code is publicly available for inspection, but public availability
|
|
427
|
+
does not grant unrestricted rights to use, modify, or redistribute the framework.
|
|
428
|
+
|
|
429
|
+
Personal learning, educational activities, and non-commercial experimentation are permitted
|
|
430
|
+
under the terms of the root [LICENSE](./LICENSE) file.
|
|
431
|
+
|
|
432
|
+
Commercial use requires a separate paid licence from the copyright holder.
|
|
433
|
+
Redistribution requires prior written permission.
|
|
434
|
+
|
|
435
|
+
Third-party dependencies remain subject to their respective licences.
|
|
436
|
+
|
|
437
|
+
For commercial licensing, redistribution requests, or other permissions,
|
|
438
|
+
contact [lambdadotjoburg@gmail.com](mailto:lambdadotjoburg@gmail.com).
|
|
439
|
+
|
|
440
|
+
See the [LICENSE](./LICENSE) file for the complete terms.
|