Initial Commit

This commit is contained in:
2026-07-25 08:30:58 +02:00
parent b8a98485ba
commit 8faeeb2418
15 changed files with 1914 additions and 0 deletions
+9
View File
@@ -235,3 +235,12 @@ cython_debug/
# PyPI configuration file # PyPI configuration file
.pypirc .pypirc
# ============================
# NUMBRELLA BUILD DIRECTORIES
# ============================
# Root umbrella build
.build/
# Per-project standalone builds
build/
+18
View File
@@ -0,0 +1,18 @@
[submodule "Foreign/SDL"]
path = Foreign/SDL
url = https://github.com/libsdl-org/SDL.git
[submodule "Foreign/SDL_mixer"]
path = Foreign/SDL_mixer
url = https://github.com/libsdl-org/SDL_mixer.git
[submodule "Foreign/SDL_image"]
path = Foreign/SDL_image
url = https://github.com/libsdl-org/SDL_image.git
[submodule "Foreign/SDL_ttf"]
path = Foreign/SDL_ttf
url = https://github.com/libsdl-org/SDL_ttf.git
[submodule "Foreign/SDL_net"]
path = Foreign/SDL_net
url = https://github.com/libsdl-org/SDL_net.git
[submodule "Foreign/fonts"]
path = Foreign/fonts
url = https://github.com/google/fonts.git
File diff suppressed because it is too large Load Diff
+11
View File
@@ -0,0 +1,11 @@
Copyright (C) 2026 Sixten Björling
"The Numbrella Project"
Welcome! This is where "The Numbrella Project" is developed and maintained.
The project aims to please the resulting developer and user with a comfortable,
and simple approach with high performance rates and broad cross-platform functionality.
It was founded by @sibjor in the summer of 2026.
+376
View File
@@ -0,0 +1,376 @@
===============================================================================
THE NUMBRELLA PROJECT — Developer Walkthrough
===============================================================================
Copyright (C) 2026 Sixten Björling
All rights reserved.
This document explains how to set up, build, and contribute to the Numbrella
ecosystem using Python, C/C++ (Clang, Clang++), and Go.
===============================================================================
TABLE OF CONTENTS
===============================================================================
1. Prerequisites
2. Cloning & First-Time Setup
3. Project Layout
4. Building (C / C++)
5. Working with Go
6. Working with Python
7. Adding a New Library
8. Adding a New Application
9. Adding a New Tool
10. Coding Conventions
11. Troubleshooting
12. Quick Reference
===============================================================================
1. PREREQUISITES
===============================================================================
Required:
• CMake ≥ 3.20
• Clang / Clang++ (any version supporting C17 / C++20)
• Ninja (or Make, but Ninja is recommended)
• Go ≥ 1.21
• Python ≥ 3.10
• Git (with submodule support)
Optional but recommended:
• ccache (speeds up recompilation)
• clang-format (consistent code style)
• clang-tidy (static analysis)
Platform support:
• Windows (MSVC or Clang-cl; Ninja is strongly preferred)
• macOS (Clang via Xcode CLT)
• Linux (Clang via system package manager)
===============================================================================
2. CLONING & FIRST-TIME SETUP
===============================================================================
# Clone with submodules
git clone --recurse-submodules <repo-url> Numbrella
cd Numbrella
# If you already cloned without --recurse-submodules:
git submodule update --init --recursive
# Verify everything is in place:
ls Libraries/ # Should show FilesLib, PathsLib, MathsLib, etc.
ls Foreign/ # Should show SDL, SDL_image, SDL_ttf, SDL_mixer, fonts
ls Software/ # Should show AuthSide, DevIO, NetBud, etc.
===============================================================================
3. PROJECT LAYOUT
===============================================================================
Numbrella/
├── CMakeLists.txt ← Root build definition
├── cmake/ ← CMake modules
│ ├── Foreign.cmake ← SDL3 submodule inclusion
│ ├── Libraries.cmake ← Auto-discovers Libraries/
│ └── Project.cmake ← Auto-discovers Software/ & Tools/
├── Libraries/ ← Static libraries (C / C++)
│ ├── FilesLib/
│ ├── PathsLib/
│ ├── MathsLib/
│ ├── MidsLib/
│ ├── NetsLib/
│ └── LangsLib/ ← Language bindings (C/, Go/, Python/)
├── Software/ ← Application executables
│ ├── AuthSide/
│ ├── DevIO/
│ ├── FileSync/
│ ├── InterLingo/
│ ├── Kompis/
│ ├── NetBud/
│ ├── NuCLI/
│ └── Nudel/
├── Tools/ ← Utility executables
├── Foreign/ ← Git submodules (SDL3, fonts)
├── Assets/ ← Audio, Graphic, Shaders
├── Development/ ← Out-of-source build tree (gitignored)
├── Documentation/ ← You are here
├── Rules/ ← Project rules & allowed tech
└── Project/ ← Planning & tracking documents
===============================================================================
4. BUILDING (C / C++)
===============================================================================
The project uses out-of-source builds inside the Development/ directory.
All build artifacts stay there; compiled binaries are exported back to
their respective source directories.
---- Configure (do this once) ----
cd Development
cmake .. -G Ninja -DCMAKE_BUILD_TYPE=Debug
# Release build:
cmake .. -G Ninja -DCMAKE_BUILD_TYPE=Release
# Use ccache (faster rebuilds):
cmake .. -G Ninja -DCMAKE_BUILD_TYPE=Debug \
-DCMAKE_C_COMPILER_LAUNCHER=ccache \
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache
---- Build everything ----
cmake --build .
# Or build a single target:
cmake --build . --target FilesLib
cmake --build . --target AuthSide
cmake --build . --target NetBud
---- Output locations ----
Static libraries: Libraries/<name>/lib<name>.a
Applications: Software/<name>/<name>[.exe]
Tools: Tools/<name>/<name>[.exe]
---- Clean ----
cmake --build . --target clean
# Or nuke everything:
rm -rf Development/*
===============================================================================
5. WORKING WITH GO
===============================================================================
Go modules inside the project are self-contained. They import Numbrella
C libraries via cgo when needed.
---- Initialize a new Go module inside a Software/ or Tools/ directory ----
cd Software/MyService
go mod init numbrella/myservice
---- Build ----
go build -o MyService .
# Or for a binary placed in the project root toolchain:
go build -o ../../Software/MyService/MyService .
---- Using cgo to call Numbrella C libraries ----
/*
#cgo CFLAGS: -I${SRCDIR}/../../Libraries
#cgo LDFLAGS: -L${SRCDIR}/../../Libraries/FilesLib -lFilesLib
#include "FilesLib/some_header.h"
*/
import "C"
---- Recommended Go layout inside a Software/ directory ----
Software/MyService/
├── main.go
├── go.mod
├── go.sum
├── internal/ ← Private packages
└── cmd/ ← Sub-commands (if CLI)
---- Testing ----
go test ./...
===============================================================================
6. WORKING WITH PYTHON
===============================================================================
Python scripts live alongside other source or inside Tools/.
No virtual environment is enforced, but using one is recommended
for isolation.
---- Quick script layout ----
Tools/MyTool/
├── __init__.py
├── __main__.py ← Entry point (python -m MyTool)
├── mytool.py
└── requirements.txt ← Dependencies (if any)
---- Running a Python tool ----
cd Tools/MyTool
python -m MyTool
# Or directly:
python mytool.py
---- Calling Numbrella binaries from Python ----
Use subprocess to invoke compiled C/Go executables:
import subprocess
result = subprocess.run(
["../../Software/SomeService/SomeService", "--flag"],
capture_output=True, text=True
)
---- LangsLib Python bindings ----
Libraries/LangsLib/Python/ contains shared Python utilities.
Add the Libraries path to PYTHONPATH when using them:
export PYTHONPATH="${PYTHONPATH}:$(pwd)/Libraries"
python -m LangsLib.Python.some_module
===============================================================================
7. ADDING A NEW LIBRARY
===============================================================================
C/C++ static libraries are auto-discovered. Just create the directory.
mkdir Libraries/MyNewLib
# Add your .cpp, .c, and .h files inside.
# The build system picks them up automatically on next configure.
Libraries/MyNewLib/
├── MyNewLib.h
├── MyNewLib.cpp
└── internal/
└── helpers.h
# Re-configure to register the new target:
cd Development
cmake ..
# Build just your library:
cmake --build . --target MyNewLib
The library target name = directory name (MyNewLib).
Other targets can use #include "MyNewLib/MyNewLib.h" via the
global Libraries/ include path.
===============================================================================
8. ADDING A NEW APPLICATION
===============================================================================
Applications live under Software/. Same auto-discovery principle.
mkdir Software/MyApp
# Add sources (.cpp, .c, .h).
Software/MyApp/
├── main.cpp
├── App.h
└── App.cpp
# Re-configure and build:
cd Development
cmake ..
cmake --build . --target MyApp
# Run:
../Software/MyApp/MyApp
Every Software/ application automatically links against:
• All Numbrella libraries
• SDL3, SDL3_image, SDL3_ttf, SDL3_mixer
===============================================================================
9. ADDING A NEW TOOL
===============================================================================
Tools follow the same pattern as Software/. The only difference is
the output directory (Tools/ instead of Software/).
mkdir Tools/MyTool
# Add sources.
cd Development
cmake ..
cmake --build . --target MyTool
# Run:
../Tools/MyTool/MyTool
===============================================================================
10. CODING CONVENTIONS
===============================================================================
---- C / C++ ----
• Standard: C17 & C++20
• Compiler: Clang / Clang++
• Style: Keep it clean; prefer readability over cleverness.
• Headers: Use #pragma once.
• Warnings: -Wall -Wextra -Wpedantic (treat warnings as errors in CI).
• Naming: PascalCase for types, camelCase for functions/variables.
• Includes: Use quotes for project headers, angle brackets for system.
---- Go ----
• Standard: Latest stable Go.
• Style: gofmt (mandatory).
• Linting: golangci-lint.
• Modules: One go.mod per Software/ subdirectory.
• Naming: Standard Go conventions (MixedCaps, not underscores).
---- Python ----
• Standard: Python ≥ 3.10.
• Style: PEP 8.
• Formatting: black or ruff.
• Typing: Use type hints everywhere.
• Docstrings: Google or NumPy style.
---- General ----
• Cross-platform code only (no platform-specific #ifdefs unless necessary).
• Prefer standard libraries over third-party dependencies.
• Document public APIs.
• Write tests.
===============================================================================
11. TROUBLESHOOTING
===============================================================================
Q: "CMake can't find SDL3"
A: Did you clone with --recurse-submodules? Run:
git submodule update --init --recursive
Q: "No targets found in Libraries/"
A: The directories exist but are empty. Add source files.
Q: "My new directory is not picked up"
A: After creating the directory, re-run cmake .. inside Development/.
Q: "compile_commands.json is missing"
A: Set CMAKE_EXPORT_COMPILE_COMMANDS=ON (it is on by default).
Check Development/compile_commands.json. Symlink it to root:
ln -s Development/compile_commands.json .
Q: "clangd doesn't recognize my headers"
A: Ensure compile_commands.json is symlinked to the project root.
Q: "Build is slow"
A: Install ccache and pass the launcher flags shown in Section 4.
Also, build only the target you need: cmake --build . --target MyApp
===============================================================================
12. QUICK REFERENCE
===============================================================================
Clone:
git clone --recurse-submodules <url> && cd Numbrella
Configure:
cd Development
cmake .. -G Ninja -DCMAKE_BUILD_TYPE=Debug
Build all:
cmake --build .
Build one target:
cmake --build . --target <Name>
Re-configure (pick up new directories):
cmake ..
Clean:
rm -rf Development/*
Add a library:
mkdir Libraries/<Name> # Add .cpp/.c/.h
cd Development && cmake .. && cmake --build . --target <Name>
Add an app:
mkdir Software/<Name> # Add .cpp/.c/.h
cd Development && cmake .. && cmake --build . --target <Name>
Add a tool:
mkdir Tools/<Name> # Add .cpp/.c/.h
cd Development && cmake .. && cmake --build . --target <Name>
===============================================================================
END OF WALKTHROUGH
===============================================================================
Submodule
+1
Submodule Foreign/SDL added at 855cbec702
+1
Submodule Foreign/SDL_image added at 0ee698ef02
+1
Submodule Foreign/SDL_mixer added at 4cc1fb51ae
+1
Submodule Foreign/SDL_net added at 4dd9d8418e
+1
Submodule Foreign/SDL_ttf added at a42434b8c9
Submodule
+1
Submodule Foreign/fonts added at 7ff85c87f9
+101
View File
@@ -0,0 +1,101 @@
@sibjor
{
[x] Project Directories
- Core directory structure established: Project/, Libraries/, Foreign/, Rules/, Documentation/, Software/
- Modular CMake layout active via cmake/*.cmake
- SDL3 submodules integrated
[ ] FilesLib Prototype
- Unified file abstraction layer
- Memory-mapped IO support
- File hashing (SHA-256)
- Metadata handling (timestamps, permissions)
- Integration point for FileWorks
[ ] PathsLib Prototype
- Virtual path system
- Path normalization and canonicalization
- Sandboxed directory handling
- Namespace-based path resolution
- Integration with FilesLib
[ ] MidsLib Prototype
- Middleware for data transformation
- Serialization formats (binary, JSON, NUML)
- Data schema validation
- Message passing between modules
[ ] NetsLib Prototype
- Unified networking abstraction
- TCP/UDP sockets
- HTTP/HTTPS client and server
- SSH/SFTP support
- WebSocket handling
- Integration with NetBud
[ ] MathsLib Prototype
- Vector and matrix math
- DSP utilities (psytrance experiments)
- Randomness, noise, distributions
- Geometry and collision primitives
[ ] FileWorks Prototype (Sync, Versioning)
- Local file synchronization engine
- Remote sync via NetBud
- Versioning system (snapshots, diffs)
- Conflict resolution
- Integration with FilesLib and PathsLib
[ ] AuthSide Prototype (Auth & Registration Service, invite-only)
- Invite-token registration flow
- Passwordless login (email, SSH keys)
- Session management
- Integration with Kompis and NetBud
[ ] Kompis Prototype (E-Mail, Chat, VideoChat, VoiceChat, ScreenShare)
- Email client/server (SMTP/IMAP)
- Real-time chat (WebSocket)
- Voice/video communication (WebRTC or custom stack)
- Screen sharing (SDL3 capture)
- Integration with AuthSide
[ ] NetBud Prototype (WebServer, HTTP, HTTPS, SSH, TCP, UDP, FTP, SFTP)
- Unified server framework
- Routing system
- TLS termination
- SSH subsystem
- FTP/SFTP module
- Integration with NetsLib
[ ] InterLingo Prototype (LLVM-like IR, Spoken Languages & Syntax)
- Custom IR for language translation
- Grammar and syntax specification
- Tokenizer and parser
- Semantic analysis
- Integration with NuCLI and DevIO
[ ] NuCLI Prototype (Desktop CLI, Packages, Runs the Projects Stated Above)
- Unified CLI for all Numbrella tools
- Package management
- Plugin loader
- System-level commands
- Integration with InterLingo
[ ] Nudel (App Store with GUI)
- GUI frontend for NuCLI
- Application browsing, installation, updates
- User authentication (AuthSide)
- Integration with NetBud
[ ] DevIO Prototype (IDE with GUI & Extension Support)
- Editor core (SDL3)
- Syntax highlighting via InterLingo
- Extension system
- Build system integration (CMake)
- Integration with NuCLI and Nudel
[ ] OMDaw Prototype (Digital AUdio Workstation)
- Engine Core (SDL3)
- Flowchart GUI Nodes (similar to Blueprint)
- Music Composition with Text
}
+6
View File
@@ -0,0 +1,6 @@
@sibjor
{
PROJECT_TYPE: Umbrella Project
PROJECT_NAME: The Numbrella Project
PROJECT_DIRECTORY: ../../Numbrella
}
+18
View File
@@ -0,0 +1,18 @@
@sibjor
{
[x] Project Directories
[ ] FilesLib Prototype
[ ] PathsLib Prototype
[ ] MidsLib Prototype
[ ] NetsLib Prototype
[ ] MathsLib Prototype
[ ] FileWorks Prototype (Sync, Versioning)
[ ] AuthSide Prototype (Auth & Registration Service, invite-only)
[ ] Kompis Prototype (E-Mail, Chat, VideoChat, VoiceChat, ScreenShare)
[ ] NetBud Prototype (WebServer, HTTP, HTTPS, SSH, TCP, UDP, FTP, SFTP)
[ ] InterLingo Prototype (LLVM Similar IR, Spoken Languages & Syntax)
[ ] NuCLI Prototype (Desktop CLI, Packages, Runs the Projects Stated Above)
[ ] Nudel (App Store with GUI)
[ ] DevIO Prototype (IDE with GUI & Extension Support)
[ ] OMDaw Prototype (DAW)
}
+25
View File
@@ -0,0 +1,25 @@
@sibjor
{
Allowed:
Languages:
1. English
2. Swedish
3. Norwiegan
4. Icelandic
5. Danish
6. Finnish
Foreign Material:
1. C (Clang)
2. C++ (Clang++)
3. LLVM
4. Python
5. Go
6. SDL3
7. SDL3_image
8. SDL3_mixer
9. SDL3_ttf
10. Google Fonts
}